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.修改 NAT 的 RDR 設定
4、參考
5、Me FAQ
Q1.無法使用 Transparent Proxy 功能?
2、實作環境
- FreeBSD 6.x-RELEASE
- Squid-2.x
3、安裝及設定
為何要使用 Transparent Proxy? 當您設定好 Squid 但內部 User 端有一、二百台電腦難道需要一台一台去設定 User 端瀏覽器使用 Web Proxy? 此時,便可透過 Transparent Proxy 機制來達成不須設定 User 端也能讓 User 端使用 Web Proxy。步驟 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 3128 transparent //修改後,加上 transparent option
舊版本的 Squid (ex. squid-2.5.14_2) 其 Transparent Proxy 設定則為修改 Squid 設定檔並加上如下四行內容
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
步驟 3. 修改 NAT 的 RDR 設定
再來就是修改 NAT 中 RDR (Redirect) 設定了,簡單說 LAN User 要對外存取 HTTP (80) 時就導 (Redirect) 到 Squid 主機的 Port 3128 出去。以下列出在 FreeBSD 中常用的三種 NAT 其 RDR Rule (請自行依網路環境作調整),而此次實作的網路環境如下:- Squid IP Address: 192.168.1.10
- Squid 網卡代號: em0
- Lan User 網段: 192.168.1.0/24
IPFIREWALL (IPFW)
/sbin/ipfw add 50000 fwd 192.168.1.10,3128 tcp from 192.168.1.0/24 to any 80
IPFILTER (IPF)
rdr em0 0.0.0.0/0 port 80 -> 192.168.1.10/32 port 3128 tcp/udp
Packet Filter (PF)
int_if="em0"
internal_net="192.168.1.0/24"
rdr on $int_if proto tcp from $internal_net to any port 80 -> $int_if port 3128
4、參考
5、Me FAQ
Q1. 無法使用 Transparent Proxy 功能?
Error Meaage:修改好 Squid 設定檔後執行檢查設定檔的指令後顯示說找不到定義的 Transparent Proxy 名稱。
# /usr/local/sbin/squid -k parse
2007/12/18 14:43:06| parseConfigFile: line 3170 unrecognized: 'httpd_accel_host virtual'
2007/12/18 14:43:06| parseConfigFile: line 3171 unrecognized: 'httpd_accel_port 80'
2007/12/18 14:43:06| parseConfigFile: line 3172 unrecognized: 'httpd_accel_with_proxy on'
2007/12/18 14:43:06| parseConfigFile: line 3173 unrecognized: 'httpd_accel_uses_host_header on '
Answer:
新版本的 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 3128 transparent //修改後,加上 transparent option