很多文章讲到共享上网就会讲有关透明代理(iptables + squid或ipchains + squid)的内容,我个人认为对于规模不大的网络,又没有内容过滤等功能的要求,使用squid是没有必要的,单纯的使用NAT方式就足够了,并且这样对运行NAT的服务器的要求就更加低,比如使用一台486 + 4M内存的机器,如果使用那些经过特殊定制的Linux系统,甚至连硬盘都不需要,只要一张软盘就可以了。
如果是源代码方式编译安装的squid,请在编译选项里指明--enable-linux-netfilter选项。Red Hat Linux自带的squid支持透明代理,我们可以直接修改/etc/squid/squid.conf文件,设置必要的参数:
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
运行/etc/rc.d/init.d/squid reload使设置生效,然后修改fw.sh脚本,在最后添加这样一行:
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
这将把所有局域网用户通过Linux接入服务器访问www服务的访问请求重定向到工作在3128端口的squid处理。运行fw.sh脚本,使设置生效。就这么简单!
你可能还记得fw.sh里面的关于NAT的规则:
iptables -A POSTROUTING -t nat -s 192.168.100.0/24 -o eth0 -j SNAT --to-source 61.156.35.114
由于PREROUTING规则总在POSTROUTING规则之前应用,所以不用担心squid被NAT规则屏蔽掉。
注意:使用透明代理时,无法同时使用squid基于用户帐号的验证功能!
想了解更多关于透明代理的资料,请访问TLDP(The Linux Documentation Project)上关于透明代理的HOWTO文档:
http://www.tldp.org/HOWTO/mini/TransparentProxy.html
§§ 一个squid.conf的配置实例
现在给出一个支持透明代理并使用MAC地址控制用户上网权限的squid配置文件,该配置还支持特定网站(如色情网站)的过滤功能:
#定义服务器地址和端口
http_port 192.168.100.254:3128
#定义服务器名字
visible_hostname 192.168.100.254
#定义管理员邮件地址
cache_mgr [email]pangty@usa.net[/email]
#定义缓存内存空间和缓存目录
cache_mem 16 MB
cache_dir ufs /var/spool/squid 100 16 256
#支持透明代理
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
#定义acl
#sexurl.txt列出要过滤色情网站地址的关键字,每个关键字占一行,如xchina
#maclist.txt列出允许上网的主机的MAC地址,每个地址占一行,如00:50:56:C0:00:08
acl all src 0.0.0.0/0.0.0.0
acl sexurl url_regex "/etc/squid/sexurl.txt"
acl allowedmac arp "/etc/squid/maclist.txt"
#定义访问策略
http_access deny sexurl
http_access allow allowedmac
http_access deny all








