为 Haproxy 配置 iptables

为 Haproxy 配置 iptables

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

这是为了让响应流量通过所必需的。对INPUTOUTPUT链执行类似操作。

这实际上取决于您的需求以及您想要允许和拒绝的内容。

至于这句话:

“INPUT、FORWARD 和 OUTPUT 是分开的。一个数据包只会击中三个链中的一个。”

是的,确实如此。数据包将命中:

  1. INPUT当其目的地是本地机器时,链。
  2. OUTPUT当其源自本地机器时,该链。
  3. FORWARD否则链(从另一台机器接收并需要转发到其他机器)。

相关内容