如何允许 PHP 传出连接仅到特定服务器?

如何允许 PHP 传出连接仅到特定服务器?

在基于 Red Hat 的主机上,运行较新的 Apache 和 PHP 5.2,我们使用solr-php-客户端要连接的库外部 Solr 服务器. 此库需要 PHP 指令允许 url_fopen启用。因此,我想通过 iptables 禁用传出的 PHP 连接,除了与必要服务器的连接。

在 Google 上搜索合适的 iptables 规则会导致很多错误。什么规则允许 PHP 通过 CURL 或 fopen() 连接到特定服务器,但不允许其他服务器?

谢谢。

答案1

如何使用 iptables 规则不仅根据目标地址/端口进行过滤,还根据源用户进行过滤?

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner uidForYourApacheUser -p tcp --dport 80 -d yourServerIp -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner uidForYourApacheUser -p tcp --dport 80 -j REJECT

如果需要你可以使用su-php在与 apache 不同的 uid 下运行 sorl 脚本。

答案2

这行不通。您无法通过 iptable 禁用 PHP 连接。iptables 不知道哪个进程打开了连接。

您可能想要做的是禁用除一个目标 IP 之外的所有传出连接。但这样会破坏任何合法的传出流量。

提示:一种安全的设置可能是安装过滤代理并禁用除代理之外的所有流量,但这需要大量工作。

相关内容