如何通过在同一台机器上的squid代理强制从Web服务器/ PHP传出的请求?

我有一个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。

现在按照鱿鱼自己的教程http://wiki.squid-cache.org/ConfigExamples/Intercept/LinuxLocalhost#iptables_configuration中的步骤,而不是匹配数据包的所有者,我们匹配TOS。

 # 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