2007年7月1日 星期日

建置一部transparent proxy

transparent proxy,也就是透通性 的WEB Proxy,
讓一般的PC在存取web port時(通常是80),
gateway 能夠把這個 request 導向給 web proxy server,
由 web proxy server 代為抓資料,然後回應給PC。
transparent proxy 好處就是,PC不用再特定設定 proxy,
就可以自行由 gateway 達成這個目的。
而整體的對外網路頻寬可以因為 proxy 的機制,達到節省頻寬的目的,
讓web browser避免重複抓取相同的資料。
不過我認為未必啦!因為現在互動的網頁比比皆是,
若是讀靜態網頁,效果才會好。
但若是我把proxy設得够好的話,也是有達到網路安全防護的功能,
比如說,限制下載,限制讀一些哩哩叩叩的網站,這倒也不失為一個好方案!

transparent proxy,需要一台 proxy 身兼router(gateway)的服務。

以下範例:
一台 Linux 主機,提供 NAT功能,上面同時跑 squid proxy 服務於 3128 port 。
但我只用一張網卡eth0!因為我本身就能上網,只是要讓我的PC來當SERVER用罷了。
首先把squid.conf 設定好,以便於可能使用 transparent proxy 機制。
我改了預設的規則如下
acl localhost src 127.0.0.1/255.255.255.255
->acl localhost src 10.1.1.0/255.255.255.0
這樣一來可以讓10.1.1.1到10.1.1.254近兩百多部的電腦,
透過我設定的transparent proxy上internet!
以一台P3等級的普通PC建置成的SERVER,够本了!

接著還有增加squid.conf 的一些內容,
httpd_accel_host proxy.xxx.com.tw
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

改好記得重啓squid服務!
(see: http://www.squid-cache.org/Doc/FAQ/FAQ-15.html#ss15.4 )

上面的 proxy.xxx.com.tw 請改成該 proxy 主機名稱。(記得hosts或dns)
接著是 NAT機制設定。

以 kernel 2.2 來說,是這般設定:
#echo "1" > /proc/sys/net/ipv4/ip_forward
#ipchains -P forward DENY
#ipchains -A forward -i eth0 -j MASQ -s 192.168.1.0/24
#ipchains -M -S 86400 86400 360 <-- 這是讓 timeout 拉長一點 #modprobe ip_masq_ftp <-- 掛入 ftp 等 module 處理 ftp 相關連結問題 #ipchains -A input -i eth1 -p tcp -s xxx.xxx.xxx.xxx/netmask -d 0/0 \ #--dport 80 -j REDIRECT 3128 #ipchains -A forward -i eth0 -s xxx.xxx.xxx.xxx/netmask -d 0/0 -j MASQ 設定好後,只要是 xxx.xxx.xxx.xxx 這些 private ip 對外發出 port 80 的 request 後, 就會導向給我建的 NAT主機上的 port 3128, 然後由 squid cache server 代為 proxy 資料。 使用 kernel 2.4 的話: #echo "1" > /proc/sys/net/ipv4/ip_forward
#modprobe ip_tables <-- 這是編譯核心是選擇 module 才需要 #modprobe ip_nat_ftp <-- 同上,處理 ftp 等連結問題 #modprobe ip_conntrack #modprobe ip_conntrack_ftp #modprobn ip_conntrack_irc #iptables -t nat -A PREROUTING -p tcp -s xxx.xxx.xxx.xxx/netmask \ #--dport 80 -j REDIRECT --to-ports 3128 #iptables -t nat -A POSTROUTING -s xxx.xxx.xxx.xxx/netmask -j MASQUERADE 由於現在用的linux版本,太多是kernel 2.4以上,所以kernel 2.2的範例看看就好了。 而上面一太串的指令,最好是寫成shell script來使用,免得每次都要打一堆文字,煩! 還有echo那行,可以找/etc/sysctl.conf搞定。
我上網找到的參考資料,大部份是squid2.5版本的設定方式,
也就是上頭曾提到的squid寫法。
以下節錄自鳥站...
[root@test root]# vi /usr/local/squid/etc/squid.conf
# 這裡請填入你的 Proxy 主機名稱 與 port !
httpd_accel_host vbird.adsldns.org
# 因為我們是要進行 WWW 的資料快取,所以 port 當然就是 80 囉!
httpd_accel_port 80
# 這個很重要!因為設定 httpd_accel_host 之後, cache 的設定會自動被終止,
# 必須要加上這個設定為 on 之後,才能提供 cache 的功能!
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

[root@test root]# /usr/local/squid/sbin/squid -k reconfigure

但由於我安裝的ubuntu7.4內建的squid版本是2.6,
哇哩咧!怎麼試都不行,原來是它修正了設定方式,改簡單了哦!
我們只要編輯squid.conf這個檔,把http_port 3128,改成http_port 3128 transparent。
就可以了,加一個字就成,神吧!別忘了重啓squid。

參考文件...

沒有留言:

搜尋此網誌

本站大事記

這個部落格(網站)內容以分享LINUX和延伸出的技術文章為主!
特別是為了工作和進修需要,搜集了不少網站連結。
希望對來這裡觀文的朋友們,有提供一些有用的資訊或文章。
但這裡的文章中,也包含個人的心情扎記和隨興言談……
若是當中沒有對上你的口味,請多包涵!

原「琳娜絲與希斯寇的邂逅」,改名為「愛上琳娜絲」!

原「琳娜絲與希斯寇的邂逅」,改名為「愛上琳娜絲」!
--原序文--
就是當LINUX遇上CISCO啦!他們的結合還能作什麼事…不就是讓這個世界的網路,串…串起來啊…不然你們那能上這網站看部落格!