Squid+iptables的透明代理配置
Firer2000
2003-06-27
硬件環境:兼容機 雙網卡
軟件環境:Linux7.1+squid-2.3.STABLE4-src.tar
一.squid的安裝配置
1.下載squid
可以從squid主站下載:http://www.squid-cache.org
2.編譯安裝squid
第一步:[root@www root]#tar xzvf squid-2.3.STABLE4-src.tar.gz
第二步:[root@www root]#cd squid-2.3.STABLE4
第三步:[root@www squid-2.3.STABLE4]#./configure --prefix=/usr/localsquid enable-ipf-transparent
/*指定squid的安裝目錄和啟用透明代理*/
第四步:[root@www squid-2.3.STABLE4]#make all
第五步:[root@www squid-2.3.STABLE4]#make install
以上五步執行完畢,squid整個程序就會被安裝在/usr/local/squid目錄下.接下來再執行以下幾步:
第六步:進入目錄/usr/local,以root身份執行下面的命令,創建cache目錄和改變整個squid目錄的所有者為
nobody.nobody:
[root@www squid-2.3.STABLE4]#cd /usr/local/squid
[root@www squid]# mkdir cache
[root@www squid]# cd ..
[root@www local]# chown nobody.nobody -R squid
第七步:改變用戶為nobody,進入/usr/local/squid/bin目錄,執行./squid -z創建cache交換目錄
[root@www local]# su nobody
[root@www local]$cd /usr/local/squid/bin
[root@www local]$./squid -z
第八步:修改squid.conf文件,確保以下配置:
httpd_accel_host virtual(記得把一句加上,我用的這個squid版本沒有這一句)
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
cache_effective_user nobody
cache_effective_group nobody
http_Access allow all
cache_dir ufs /usr/local/squid/cache 100 16 256
...
最後啟動squid:
[root@www local]#/usr/local/squid/bin/squid
查看進程列表:
[root@www local]#px ax
應該出現如下幾個進程:
......... usr/local/squid
......... squid
......... unlink
並且系統中應該有如端口被監聽:
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:3130 0.0.0.0:*
這些說明squid正常啟動了.
###如果squid不能正常工作,可能是域名的設置問題,需要設置域名。
讓系統啟動時自動運行squid
編輯/ect/rc.d/local文件,在末尾加上:
su nobody -c "/usr/local/squid/bin/squid"
------------------------------------------------------------------------------------------------
OK,通過以上設置我們就以就squid代理上網了.
可以在ie浏覽器中設置使用代理服務器,添入192.168.0.101:3128就可以上網了.
但這一步還沒有實現透明代理,接下來我們開始設置iptables
二.設置iptables
1、 首先使用linuxconf工具將enable routing 項打開。在configure linuxconf modules 裡選擇firewall的項。
2、 #setup
進入services 去掉ipchains。
3、在/etc/rc.d/目錄下用toUCh命令建立firewall文件,執行chmod u+x firewall以改變文件屬性,編輯
/etc/rc.d/rc.local文件,在末尾加上/etc/rc.d/firewall以確保開機時能自動運行該腳本.
firewall內容為:
modprobe ip_tables
modprobe ip_nat_FTP
modprobe ip_conntrack
modprobe ip_conntrack_ftp
echo 1>/proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -i eht1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 172.16.0.0/23 -o eth0 -j SNAT --to 211.141.67.10
##############################################################################
下面是原文給出的firewall腳本,共參考
#!/bin/sh
echo "Enable IP Forwarding..."
echo "1">/proc/sys/net/ipv4/ip_forward
echo "Starting iptables rules..."
/sbin/modprobe iptable_filter
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
#Refresh all chains
/sbin/iptables -F -t nat
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to a.b.c.d
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#######################################################################################
其中,eth1是內部網卡,eth0是外部網卡。
內網ip地址為172.16.0.0/23
eth0對應的ip地址為:211.141.67.10
結束.
然後設置網關和dns後就可上網了.
如需要還可以添加一些防火牆以增強安全性,具體參考本站:
http://www.linuxaid.com.cn/engineer/bye2000/doc/iptables1.htm
http://www.linuxaid.com.cn/engineer/bye2000/doc/iptables2.htm
三:設置squid支持用戶認證:
說明:透明代理和用戶認證功能不能同時應用。否則用戶認證功能不起作用。
假定squid source目錄在/tmp/ squid-2.3.STABLE4
2. # cd /tmp/ squid-2.3.STABLE4/auth_modules/NCSA
# make ncsa_auth
3. 拷貝生成的執行文件ncsa_auth到squid執行文件目錄
# cp ncsa_auth /usr/local/squid/bin
4. 從Apache軟件包中得到程序htpasswd
假設apache軟件安裝在/var/www目錄下
#cd /usr/www/bin
5.用htpasswd生成供Squid利用的用戶名和密碼認證數據庫文件
生成的密碼文件放在/usr/local/squid/etc 下。
[root@mail bin]# ./htpasswd -c /usr/local/squid/etc/passwd test
New passWord:
Re-type new password:
Adding password for user test
這時在/usr/local/squid下就生成了passwd文件,並且加入了用戶test。
6. 加其它更多的用戶
#htpasswd /usr/loal/squid/etc/passwd newuser
7. 修改squid.conf,enable ncsa_auth用戶認證功能
[root@linux etc]# more squid.conf grep ncsa_auth
authenticate_program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd
8.修改ACL部分,象下面這樣:
定義相關的用戶類
acl auth_user proxy_auth REQUIRED
注意,REQUIRED關鍵字指明了接收所有合法用戶的訪問。
7.設置http_access
http_access allow auth_user
注意,如果你在改行中指定了多個允許訪問的用戶類的話,應該把要認證的用戶類放在第一個。如下所示:
錯誤的配置:http_access allow auth_user all manager
正確的配置:http_access allow auth_user manager all
Re-type new password:
Adding password for user test
這時在/usr/local/squid下就生成了passwd文件,並且加入了用戶test。
6. 加其它更多的用戶
#htpasswd /usr/loal/squid/etc/passwd newuser
7. 修改squid.conf,enable ncsa_auth用戶認證功能
[root@linux etc]# more squid.conf grep ncsa_auth
authenticate_program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd
8.修改ACL部分,象下面這樣:
定義相關的用戶類
acl auth_user proxy_auth REQUIRED
注意,REQUIRED關鍵字指明了接收所有合法用戶的訪問。
7.設置http_access
http_access allow auth_user
注意,如果你在改行中指定了多個允許訪問的用戶類的話,應該把要認證的用戶類放在第一個。如下所示:
錯誤的配置:http_access allow auth_user all manager
正確的配置:http_access allow auth_user manager all