Security

Apache ProxyRemote 什麼都不做

  • July 30, 2019

在執行 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/envvarsApache 託管的大多數(但不是全部?)應用程序都使用代理:

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 的東西都可能是狡猾的。

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