︿
Top

1、前言

Squid Web Proxy Cache 為目前最多人使用的 Proxy Server,本篇實作為利用 Squid 來架設 Web Proxy Server,關於 Web Proxy 如何運作可參考站內文章 WebProxy 伺服器的原理與運作流程




Squid 支援功能如下:
  • Proxying and caching of HTTP, FTP, and other URLs
  • Proxying for SSL
  • Cache hierarchies
  • ICP, HTCP, CARP, Cache Digests
  • Transparent caching
  • WCCP (Squid v2.3 and above)
  • Extensive access controls
  • HTTP server acceleration
  • SNMP
  • Caching of DNS lookups



文章目錄

1、前言
2、實作環境
3、安裝及設定
          步驟1.安裝及設定 squid 套件
          步驟2.修改 squid 設定檔
          步驟3.允許 IP 轉送封包
          步驟4.設定網卡為橋接模式 (Bridge Mode)
          步驟5.修改 PF Rules 設定
4、補充:如何快速分析 access.log



2、實作環境

  • FreeBSD 6.x-RELEASE
  • Squid-2.x 



3、安裝及設定

為何要使用 Transparent Proxy? 當您設定好 Squid 但內部 User 端有一、二百台電腦難道需要一台一台去設定 User 端瀏覽器使用 Web Proxy? 此時,便可透過 Transparent Proxy 機制來達成不須設定 User 端也能讓 User 端使用 Web Proxy。

因為此次的 Proxy 角色僅為監控使用者上網行為其擺放位置介於防火牆 (Firewall) 與使用者之間,因此將 Proxy 設定為 Transparent Proxy with Bridge Mode,其網路環境如下:




步驟 1. 安裝及設定 squid 套件

關於 Squid 安裝及設定部份,請參考本站文章 Squid - Web Proxy Server



步驟 2. 修改 squid 設定檔

新版本的 Squid (ex. squid-2.6.17) 將 Transparent Proxy 設定簡化了,簡單說就是把一些功能都整合到 http_port 的 option 內了,至於詳細內容您可參考官網 Squid 2.6.STABLE8 release notes
vi /usr/local/etc/squid/squid.conf  //修改 squid 設定檔
 http_port 3128                           //預設值
 http_port 192.168.1.20:3128 transparent  //修改後




步驟 3. 允許 IP 轉送封包

修改 sysctl.conf 設定檔加入允許 IP 轉送封包功能選項。
vi /etc/sysctl.conf
 net.inet.ip.forwarding=1      //加入此行




步驟 4. 設定網卡為橋接模式 (Bridge Mode)

設定網路卡為橋接模式 (Bridge Mode),因為二張網卡位於同一個 IP 網段內因此與 End User 相連接的網卡其遮罩值必須為 255.255.255.255。
vi /etc/rc.conf
 defaultrouter="192.168.1.1"                //設定 Gateway IP
 cloned_interfaces="bridge0"                //設定網卡啟用橋接模式
 ifconfig_bridge0="addm bce0 addm bce1 up"  //設定橋接網卡代號
 ifconfig_bce0="inet 192.168.1.10  netmask 255.255.255.0"   #Juniper SSG20
 ifconfig_bce1="inet 192.168.1.20  netmask 255.255.255.255" #End User




步驟 5. 修改 PF Rules 設定

修改 PF Rules 中 RDR (Redirect) 設定,簡單說 End User PCs 要對外存取 HTTP (80) 時就導引 (Redirect) 到 Squid 主機的 Port 3128 出去,由於此台 Proxy 僅為監控用途因此對於其它流量一律 Pass All。
vi /etc/pf.conf
 ext_if="bce0"
 int_if="bce1"
 rdr on $int_if inet proto tcp from any to any port www -> $int_if port 3128
 pass in all
 pass out all






4、補充:如何快速分析 access.log

如果您不想安裝分析 Squid Log (access.log) 套件而想快速分析使用者行為的話您可利用下列簡單的指令來達成,預設的 access.log 內容如下。
cat access.log
1248857041.100 286 192.168.1.88 TCP_MISS/200 872 GET http://tw.msn.com - DIRECT/207.46.59.170 text/html
1248857041.416 313 192.168.1.88 TCP_MISS/200 792 GET http://0932.jp/ - DIRECT/65.55.15.241 text/html
1248857151.228 337 192.168.1.88 TCP_MISS/200 2265 GET http://1-2-c.com/ - DIRECT/67.220.25.40 text/html

利用 cat 指令將 access.log 內容全部輸出後配合 awk 指令取出要的欄位值 (Time、Client IP、URL) 後將結果存入到家目錄下名為 111 的檔案內。
cat access.log | awk '{print$1 " " $3 " " $7}' > ~/111
 1248857041.100 286 192.168.1.88 http://tw.msn.com
 1248857041.416 313 192.168.1.88 http://0932.jp
 1248857151.228 337 192.168.1.88 http://1-2-c.com

最後透過下列 Perl 指令將 TimeStamp 時間轉換成 Localtime 後存入到名為 222 的檔案內。
perl -p -e 's/^\d+\.\d+/localtime $&/e' < 111 > 222
 Wed Jul 29 16:44:01 2009 192.168.1.88 http://tw.msn.com
 Wed Jul 29 16:44:01 2009 192.168.1.88 http://0932.jp
 Wed Jul 29 16:45:51 2009 192.168.1.88 http://1-2-c.com

經過上述二道步驟後可簡單把 access.log 內容轉換成具有時間及 Client IP 及所連結的網址。
文章標籤: