我有一个configuration为nginxnetworking服务器的Debian Squeeze VPS。 出于安全原因,我阻止了除Debian更新服务器以外的所有传出连接(这阻止了不好的脚本从家里调用)。 PHP也在单独的用户下运行。 我的问题是以下几点:
各种CMS-S和PHP / Perl / Python应用程序需要访问其他服务器上的Web服务(即,使传出的HTTP连接)。 我已经在同一个 VPS上安装了鱿鱼,并希望将它用作透明的filter/代理,将允许的域列入白名单。
我知道如何通过代理强制所有传出的端口80连接,但这会导致代理自己的请求被redirect到自己(即无限循环)。 我也不能使用iptables的ipt_owner模块,因为VPS公司毫不含糊地告诉我他们不会安装它。
有没有另一个聪明的办法来强制所有其他的HTTP传出请求通过在同一台机器上的鱿鱼代理,同时允许代理自己的请求?
如果有帮助,我也安装了csf。
谢谢!
好的,回答我自己的问题:
Squid允许你在传出的数据包上设置TOS。 该设置是tcp_outgoing_tos。 因此,使用允许的IP或域名进行ACL并设置,例如, tcp_outgoing_tos 0x10 whitelist
来自其他应用程序的数据包通常具有TOS 0x0。
# handle connections on the same box (SQUIDIP is a loopback instance) iptables -t nat -A OUTPUT -p tcp --dport 80 -m tos --tos 0x10 -j ACCEPT iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination SQUIDIP:3127
当使用csf时,我们可能还需要在过滤表的OUTPUT链上接受这些数据包。 把规则放在链条的开始处。
iptables -I OUTPUT -p tcp --dport 80 -m tos --tos 0x10 -j ACCEPT