Машина Ubuntu с запущенным haproxy с 2 сетевыми картами, одна подключена к 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 будет направлять его на внутренние серверы. В документации, которую я прочитал, говорится:
«ВХОД, ПЕРЕДАЧА и ВЫХОД — это отдельные процессы. Пакет попадет только в одну из трех цепей».
Может быть, я упускаю какие-либо правила iptable, которые маршрутизировали бы трафик HTTP (порт 80) между интерфейсами?
решение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
в противном случае цепочка (получена с другой машины и должна быть переслана на какую-то другую машину).