Nginx

如何通過同一台機器上的 squid 代理強制來自 webserver/PHP 的傳出請求?

  • May 6, 2013

我有一個配置為 nginx Web 伺服器的 Debian Squeeze VPS。出於安全原因,我已經阻止了所有傳出連接,除了那些到 Debian 更新伺服器的連接(這可以阻止壞腳本呼叫 home)。PHP 也可以在單獨的使用者下執行。我的問題如下:

各種 CMS-s 和 PHP/Perl/Python 應用程序需要訪問其他伺服器上的 Web 服務(即進行傳出 HTTP 連接)。我已經在同一個VPS上安裝了 squid,並希望通過將允許的域列入白名單,將其用作透明過濾器/代理。

我知道如何通過代理強制所有傳出埠 80 連接,但這會導致代理自己的請求被重定向到自身(即無限循環)。我也不能將 ipt_owner 模組用於 iptables,因為 VPS 公司明確告訴我他們不會安裝它。

是否有另一種巧妙的方法來強制所有其他 HTTP 傳出請求通過同一台機器上的 squid 代理,同時允許代理自己的請求傳出?

如果有幫助,我還安裝了 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。

# 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

引用自:https://serverfault.com/questions/501825