На машине Ubuntu работает haproxy с двумя сетевыми картами, одна из которых подключена к WAN (называется wan0), а другая подключена к локальной сети (называется 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 в локальную сеть, где haproxy будет направлять его на серверные серверы. В документации, которую я прочитал, говорится:
«INPUT, FORWARD и OUTPUT являются отдельными. Пакет попадет только в одну из трех цепочек».
Мне не хватает каких-либо правил iptable, которые перенаправляли бы трафик HTTP (порт 80) между интерфейсами?
Как вы сказали, у вас есть политика цепочки по умолчанию, установленная на 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
в противном случае цепочка (получена с другой машины и должна быть перенаправлена на другую машину).