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

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

我将 Debian Squeeze VPS 配置为 nginx Web 服务器。出于安全原因,我阻止了除 Debian 更新服务器之外的所有传出连接(这可阻止恶意脚本调用)。PHP 也在单独的用户下运行。我的问题如下:

各种 CMS 和 PHP/Perl/Python 应用程序需要访问其他服务器上的 Web 服务(即建立传出 HTTP 连接)。我已在该服务器上安装了 squid相同的VPS 并希望通过将允许的域列入白名单将其用作透明过滤器/代理。

我知道如何强制所有传出的 80 端口连接都通过代理,但这会导致代理自身的请求重定向到自身(即无限循环)。我也无法使用 iptables 的 ipt_owner 模块,因为 VPS 公司明确告诉我他们不会安装它。

是否有另一种巧妙的方法可以强制所有其他 HTTP 传出请求通过同一台机器上的 squid 代理,同时允许代理自己的请求传出?

如果有帮助的话,我也安装了 csf。

谢谢!

答案1

好的,回答我自己的问题:

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。

# 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

相关内容