兩年前曾寫過一篇是安裝在 Windows XP 的,當時只是無聊試完 SSH Tunnel 後找的樂趣。直到出國後,才又回想起 Proxy 的重要性,在台灣太習慣順順的網路以及沒有限制的瀏覽。
去年底在 FreeBSD 8 的環境下,使用 tarball 方式架了 squid ,也不用 root 權限就可以跑在指定的 port 囉,唯一的限制應該是此台機器要有 public ip 以及沒有防火牆的問題,在此筆記一下,此例僅使用 IP 作為使用服務的管控:
- 在官網 http://www.squid-cache.org/ 下載 Squid ,在此使用 squid-3.1.11.tar.gz 檔
- # cd ~/ && mkdir tmp && cd ~/ && wget http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.11.tar.gz
- 解壓縮在 ~/tmp
- # tar -xvf squid-3.1.11.tar.gz
- 編譯並指定安裝在 ~/tarball (此以 /home/user/tarball 為例)
- # cd ~/tmp/squid-3.1.11 --prefix=/home/user/tarball
- # make && make install
- 運行
- # cd ~/tarball
- # ./sbin/squid -z (Create swap directories)
- # ./sbin/squid
接著可以用 ps -aux | grep squid 來查看有沒跑起來:
user 6329 ... 12:49上午 0:00.00 ./sbin/squid
user 6331 ... 12:49上午 0:00.04 (squid) (squid)
user 6354 ... 12:50上午 0:00.00 grep squid
預設使用 3128 port 並且僅允許 localhost 使用,透過 telnet 連一下:
# telnet localhost 3128
Trying 127.0.0.1...
Connected to localhost.domain.
Escape character is '^]'.
透過 sockstat 查看,會有類似訊息:
# sockstat | grep squid
user squid 6331 6 udp4 6 *:49340 *:*
user squid 6331 7 udp4 *:49936 *:*
user squid 6331 13 tcp4 6 *:3128 *:*
user squid 6329 5 dgram -> /var/run/log
上述算是簡單跑了起來,但是根本還不太能用,因為此服務僅限 localhost ,假設以 123.124.125.126 此 IP 以及 123.125.0.0 此網域為例:
# vim ~/tarball/etc/squid.conf
acl MyIP 123.124.125.126
acl MyNet 123.125.0.0/16
# ...
http_access allow MyIP
http_access allow MyNet
# And finally deny all other access to this proxy
http_access deny all
設定重新讀取設定檔即可:
# ~/tarball/sbin/squid -k reconfigure
別忘了可透過 ~/tarball/sbin/squid -h 查看有什麼功能可用
其他部分,大概就是改變運行的 port 等用法,在去 squid.conf 裡找 http_port 資訊吧
最後,在 squid 進行服務時,也有一些 logs 檔案可用來監控或查看服務狀態:
# cd ~/tarball/var/logs
# ls -l
-rw-r----- 1 user group 92 2 21 00:54 access.log
-rw-r----- 1 user group 2133 2 21 00:54 cache.log
# tail -f access.log
可以看到一些存取記錄
剩下的有空再來摸摸,例如透過帳密來限制存取 proxy 服務或是寫支 script 分析 access.log 等。另外,由於這次我是架在某長輩管的機器,因為人從國外連回來,讓他看到奇怪的 IP 緊張了一下,特別又是跑了一些網路服務。透過他的分享,原來是平時就保持好習慣,常常透過 last 和 sockstat 來查看系統狀況,真的還不錯喔!偉哉長輩啊。至於我使用 Squid 部分,由於是架給國外親友使用,目前還透過 crontab 定期跑 /home/user/tarball/sbin/squid 哩,因為 squid 預設是 daemon 狀態,所以還滿 ok 啦
補充 - 使用帳密管控 @ 2011/02/21
在此使用 ncsa_auth 方式,好處是帳密跟原先 proxy server 分開,以免 proxy 帳密遺失導致系統被入侵,其他方式可以查詢 Features/Authentication - Squid Web Proxy Wiki
- 確認系統可以是用 ncsa_auth 方式
- # ls -l ~/tarball/libexec/ncsa_auth
/home/user/tarball/libexec/ncsa_auth
- # which htpasswd
/usr/local/sbin/htpasswd
- 建立 ncsa_auth 帳密檔
- 暫時擺在 ~/tarball/etc/passwd.ncsa,可以用 touch ~/tarball/etc/passwd.ncsa 或 htpasswd -c 的方式建立
- # htpasswd /home/user/tarball/etc/passwd.ncsa proxy_user
New password:
Re-type new password:
Adding password for user proxy_user
- 更新 squid.conf 檔案
- 透過 IP 和帳密管控可以同時進行,唯一要得留意的是設定檔的順序,要記得把 IP 管控寫在帳密管控的前面,這樣使用 IP 的就不需要輸入帳密
- # vim ~/tarball/etc/squid.conf
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
auth_param basic program /home/user/tarball/libexec/ncsa_auth /home/user/tarball/etc/passwd.ncsa
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl my_ip src 123.234.123.123
acl pass_by_auth proxy_auth REQUIRED
# 留意順序
http_access allow my_ip
http_access allow pass_by_auth
- 重新讀取設定檔就行了! ~/tarball/sbin/squid -k recofigure