2011年2月20日 星期日

[Unix] 使用 Tarball 簡易安裝 Squid Proxy Server @ FreeBSD

兩年前曾寫過一篇是安裝在 Windows XP 的,當時只是無聊試完 SSH Tunnel 後找的樂趣。直到出國後,才又回想起 Proxy 的重要性,在台灣太習慣順順的網路以及沒有限制的瀏覽。


去年底在 FreeBSD 8 的環境下,使用 tarball 方式架了 squid ,也不用 root 權限就可以跑在指定的 port 囉,唯一的限制應該是此台機器要有 public ip 以及沒有防火牆的問題,在此筆記一下,此例僅使用 IP 作為使用服務的管控:



  1. 在官網 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



  2. 解壓縮在 ~/tmp 

    • # tar -xvf squid-3.1.11.tar.gz



  3. 編譯並指定安裝在 ~/tarball (此以 /home/user/tarball 為例)

    • # cd ~/tmp/squid-3.1.11 --prefix=/home/user/tarball 

    • # make && make install



  4. 運行

    • # 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



  1. 確認系統可以是用 ncsa_auth 方式

    • # ls -l ~/tarball/libexec/ncsa_auth
       /home/user/tarball/libexec/ncsa_auth

    • # which htpasswd 
      /usr/local/sbin/htpasswd



  2. 建立 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



  3. 更新 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




沒有留言:

張貼留言