Security
Apache ProxyRemote 什麼都不做
在執行 Apache 2.4 的 Ubuntu 伺服器 18.04 上,我想將所有 Apache 的傳出請求傳遞給轉發代理,以便出於安全原因(使用Tinyproxy)過濾掉一些 URL。
似乎我的 Vhost 配置中的 Apache 的ProxyRemote指令應該這樣做,所以我使用了以下內容:
ProxyRequests Off ProxyRemote * http://localhost:8888
我還嘗試將環境變數添加到 /etc/environment,如下所示:
http_proxy="http://localhost:8888/" https_proxy="http://localhost:8888/"
然後我可以看到現在使用代理的其他應用程序,例如(來自 Tinyproxy 的日誌):
CONNECT Jul 28 17:26:58 [2318]: Request (file descriptor 7): CONNECT api.snapcraft.io:443 HTTP/1.1 CONNECT Jul 28 17:26:58 [2315]: Request (file descriptor 7): CONNECT api.snapcraft.io:443 HTTP/1.1
但不是阿帕奇。它仍然將所有出站請求直接傳遞到埠 80 和 443。如何讓 Apache 使用代理?
編輯:我剛剛在 Stack Overflow 上看到了這個重複的問題,所以我認為我正在嘗試做正確的事情。但是怎麼做?
因此,我再次閱讀了 Apache 文件,並考慮了它說
ProxyRemote
“定義此代理的遠端代理”這一事實。這意味著 Apache 必須已經在代理請求並且您想要使用上游代理。所以這可能不是我想要的。因此,相反,我研究了使用環境變數,它似乎以我想要的方式工作:
將其放入
/etc/apache2/envvars
Apache 託管的大多數(但不是全部?)應用程序都使用代理:export http_proxy='http://localhost:8888' export https_proxy='http://localhost:8888'
把它
/etc/environment
放進去,意味著如果其他應用程序被配置為使用這些環境變數,它們也將通過代理:http_proxy="http://localhost:8888/" https_proxy="http://localhost:8888/"
我看到現在傳出埠 80 和 443 都通過代理。萬歲。
我目前使用 iptables 強制所有埠 80 通過 Tinyproxy 傳出:
iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner ! --uid-owner tinyproxy -j REDIRECT --to-ports 8888
但考慮到上述情況,我什至可以阻止埠 443,因為任何不使用 envvars 的東西都可能是狡猾的。