我有一个配置为 nginx 网络服务器的 Debian Squeeze VPS。出于安全原因,我已经阻止了除 Debian 更新服务器以外的所有传出连接(这会阻止错误的脚本呼叫 home)。PHP 也在单独的用户下运行。我的问题如下:
各种 CMS-s 和 PHP/Perl/Python 应用程序需要访问其他服务器上的 Web 服务(即建立传出 HTTP 连接)。我已经在同一个VPS上安装了 squid,并希望通过将允许的域列入白名单来将其用作透明过滤器/代理。
我知道如何通过代理强制所有传出端口 80 连接,但这会导致代理自己的请求被重定向到自身(即无限循环)。我也不能为 iptables 使用 ipt_owner 模块,因为 VPS 公司明确地告诉我他们不会安装它。
是否有另一种聪明的方法可以通过同一台机器上的 squid 代理强制所有其他 HTTP 传出请求,同时允许代理自己的请求发出?
如果有帮助,我还安装了 csf。
谢谢!
好的,回答我自己的问题:
Squid 允许您在其传出数据包上设置 TOS。设置为 tcp_outgoing_tos 。因此,使用允许的 IP 或域创建 acl 并设置,例如,
tcp_outgoing_tos 0x10 whitelist
来自其他应用程序的数据包通常具有 TOS 0x0。
现在按照 squid 自己的教程http://wiki.squid-cache.org/ConfigExamples/Intercept/LinuxLocalhost#iptables_configuration中的步骤进行操作,但我们不匹配数据包的所有者,而是匹配 TOS。
使用 csf 时,我们可能还需要在过滤表的 OUTPUT 链上接受这些数据包。将规则放在链的开头。