Linux

IPTables 埠重定向應該破壞 Apache 但沒有

  • January 27, 2019

我在 Apache 中設置了負載平衡httpd

<VirtualHost *:80>
       DocumentRoot /var/www/html
       ServerName xxx.xxx.xxx.com
       ProxyRequests           Off
       ProxyPreserveHost       On
       ProxyPass / http://xxx.xxx.xxx.xxx:8080/
       ProxyPassReverse / http://xxx.xxx.xxx.xxx:8080/
</VirtualHost>

:8080``tomcat是在同一主機上執行的 Apache應用程序伺服器。我們在我工作的地方有日誌保留要求,所以我認為讓所有 apachehttpd都可以使事情成為分析的理想選擇。

我試圖讓所有公共請求通過埠 80,而不會破壞最終使用者可能擁有的任何連結或書籤。我打算通過做一些埠轉換來做到這一點,這樣一切看起來就像是通過埠 80 進入應用程序一樣。在沒有考慮我上面的負載平衡的情況下,我在nat表中添加了以下規則:

-A PREROUTING -i eth0 -p tcp -m tcp --dport 8080 -j REDIRECT --to-ports 80
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8081 -j REDIRECT --to-ports 80

問題是,我可以通過訪問httpd或直接訪問應用程序:8080。每個規則的數據包計數也在增加,因此顯然它們正在被匹配。

我的問題是:為什麼這不只是創建一個無限循環?

看起來:8080請求會被轉發到httpd它自己會嘗試通過遍歷來檢索它們,:8080因此循環將繼續向前,直到我重新格式化我的新簡歷。

答案在於-i eth0

即使您已將 httpd 設置為 connect to 17.98.65.28(我假設它是一個 IP on eth0),流量實際上也不會流過eth0,而是會使用它lo

這樣做的原因是,當路由到盒子本身擁有的任何 IP 時,流量會流過lo。您可以通過以下方式驗證這一點:

ip route get 17.98.65.28

您將收到一條包含 的迴線dev lo,它告訴您將使用哪個介面將流量發送到該地址。

例如,在我的筆記型電腦上,我wlan010.252.28.62

$ ip route get 10.252.28.62
local 10.252.28.62 dev lo  src 10.252.28.62 
   cache <local> 

引用自:https://unix.stackexchange.com/questions/130665