Máquina Ubuntu rodando haproxy com 2 placas de rede, 1 conectada à WAN (chamada wan0) e outra conectada à LAN (chamada lan0). Todas as cadeias definidas para tráfego 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
Quero permitir o tráfego HTTP (porta 80) da WAN para a LAN, onde o haproxy o encaminhará para servidores back-end. A documentação que li afirma:
"INPUT, FORWARD e OUTPUT são separados. Um pacote atingirá apenas uma das três cadeias."
Estou faltando alguma regra de iptable que roteia o tráfego HTTP (porta 80) entre interfaces?
Responder1
Como você disse, você tem a política de cadeia padrão definida como DROP
. Portanto, você precisa ter ACCEPT
regras explícitas para cada tipo de tráfego que deseja permitir.
A regra a seguir permitirá que o tráfego passe pela sua caixa vindo de lan0
interface e saindo de interface wan0
.
iptables -I FORWARD -i lan0 -o wan0 -j ACCEPT
Além disso, é uma boa ideia permitir outros tipos de tráfego como RELATED e ESTABLISHED usando uma regra como:
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
Isso é necessário para permitir a passagem do tráfego de resposta. Você faz o mesmo para INPUT
e OUTPUT
cadeias.
Realmente depende de suas necessidades e do que você deseja permitir e negar.
Quanto à frase:
"INPUT, FORWARD e OUTPUT são separados. Um pacote atingirá apenas uma das três cadeias."
Sim isso é verdade. Um pacote atingirá:
INPUT
cadeia quando é destinado à máquina local.OUTPUT
cadeia quando é originada da máquina local.FORWARD
caso contrário, cadeia (recebida de outra máquina e precisa ser encaminhada para alguma outra máquina).