Eu tenho o seguinte esquema de rede:
- Computador A: três nics:
- NIC 1 (eth0): dhcp, internet pública
- NIC 2 (eth1): estática 192.168.1.1, gateway para o computador B
- NIC 3 (eth2): estática 192.168.2.1, gateway para o computador C
- Computador B: estático 192.168.1.2, usando o gateway 192.168.1.1 (NIC 2).
- Computador C: estático 192.168.2.2, usando o gateway 192.168.2.1 (NIC 3).
Então, apliquei isso para que o NAT funcionasse:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Todos os computadores podem se conectar à internet agora. Eu tenho aplicado regras ao computador principal (Computador A), como descartar conexões com algumas portas, por exemplo, ssh:
iptables -A INPUT -p tcp --dport 22 -j DROP
Mas, por exemplo, agora gostaria que apenas permitisse conexões para as portas 20,21,22,53 e 80 no Computador C e ignorasse o tráfego externo se não estivesse relacionado a essas portas. As conexões permitidas devem ser do computador C para o exterior, mas não do exterior para o computador C (quero dizer - o computador C não está hospedando nenhum HTTP ou SSH, mas ele vai usá-los como um cliente).
Acho que isso deve ser feito assim:
iptables -A OUTPUT -i eth2 -o eth0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth2 -o eth0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
A última regra (descartar qualquer outro tráfego diferente deles) está no final da configuração, portanto -A deve estar funcionando corretamente.
A coisa é ... não está funcionando. Se eu colocar a última regra assim:
iptables -A FORWARD -i eth2 -o eth0 -j DROP
Ele simplesmente descarta tudo e, por exemplo, a porta 21 (aberta anteriormente, como você pode ver acima) não está funcionando.
Você pode me dizer o que eu poderia ter feito de errado? Eu tenho lutado com esse problema há algum tempo e não consigo resolvê-lo. Obrigado!