![为 Haproxy 配置 iptables](https://linux22.com/image/658708/%E4%B8%BA%20Haproxy%20%E9%85%8D%E7%BD%AE%20iptables.png)
Ubuntu 机器运行 haproxy,有 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
我想允许 HTTP(端口 80)流量从 WAN 进入 LAN,然后 haproxy 会将其路由到后端服务器。我读过的文档指出:
“INPUT、FORWARD 和 OUTPUT 是分开的。一个数据包只会击中三个链中的一个。”
我是否缺少任何可以在接口之间路由 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、FORWARD 和 OUTPUT 是分开的。一个数据包只会击中三个链中的一个。”
是的,确实如此。数据包将命中:
INPUT
当其目的地是本地机器时,链。OUTPUT
当其源自本地机器时,该链。FORWARD
否则链(从另一台机器接收并需要转发到其他机器)。