運行 haproxy 的 Ubuntu 機器有 2 個網路卡,1 個連接到 WAN(稱為 wan0),另一個連接到 LAN(稱為 lan0)。所有鏈均設定為 DROP 流量。
# Masquerade traffic from LAN to WAN
-A POSTROUTING -o wan0 -s 192.168.x.x/24 -j MASQUERADE
# Allow traffic from LAN to WAN
iptables -I FORWARD -i lan0 -o wan0 -j ACCEPT
# Allow HTTP traffic in/out both interfaces
-A INPUT -p tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp --sport 80 -j ACCEPT
*** Is below rule needed? ***
# -A FORWARD -i wan0 -o lan0 -p tcp –dport 80 -j ACCEPT
我想允許來自 WAN 的 HTTP(連接埠 80)流量進入 LAN,haproxy 會將其路由到後端伺服器。我讀過的文檔指出:
“輸入、轉送和輸出是分開的。資料包只會到達三個鏈之一。”
我是否缺少任何可在介面之間路由 HTTP(連接埠 80)流量的 iptable 規則?
答案1
正如您所說,您將預設鏈策略設為DROP
。因此,您需要ACCEPT
為您想要允許的每種類型的流量製定明確的規則。
以下規則將允許來自lan0
介面 和流出 介面 的流量通過您的盒子wan0
。
iptables -I FORWARD -i lan0 -o wan0 -j ACCEPT
此外,最好使用以下規則允許其他類型的流量,例如 RELATED 和 ESTABLISHED:
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
這是允許響應流量通過所必需的。您可以對INPUT
和OUTPUT
鏈執行類似的操作。
這實際上取決於您的需求以及您想要允許和拒絕的內容。
至於這句話:
“輸入、轉送和輸出是分開的。資料包只會到達三個鏈之一。”
是的,這是真的。數據包將命中:
INPUT
當它的目的地是本地機器時,鏈。OUTPUT
當它源自於本機電腦時鏈。FORWARD
否則鏈(從另一台機器接收並需要轉發到其他機器)。