INPUT, OUTPUT, PREROUTING, POSTROUTING... Afinal, o que são estes nomes e em quais circunstâncias uma regra deve ir em um ou outro? E as tabelas filter, nat e mangle? Como o iptables é estruturado?
O netfilter introduziu "ganchos", pontos ao longo do ciclo de vida de um datagrama onde o mesmo pode ser avaliado por regras de firewall. A Figura 2 destaca estes pontos.
Pode-se observar pela Figura 2, que:
Um datagrama destinado ao processo local:
Pode ser capturado para avaliação ao entrar na Interface, pelo gancho 1, chamado pelo kernel de PREROUTING.
Pode ser capturado para avaliação pelo gancho 4, chamado pelo kernel de INPUT.
Um datagrama gerado por um processo local:
Pode ser capturado para avaliação pelo gancho 5, chamado pelo kernel de OUTPUT.
Pode ser capturado para avaliação pelo gancho 3, chamado de POSTROUTING.
Um datagrama que esteja apenas passando por esta máquina, não gerada e não destinada ao ip ela:
Pode ser capturado para avaliação ao entrar na Interface, pelo gancho 1, chamado pelo kernel de PREROUTING.
Pode ser capturado para avaliação pelo gancho 2, chamado pelo kernel de FORWARD.
Pode ser capturado para avaliação pelo gancho 3, chamado de POSTROUTING.
Por existirem estes ganchos e a possibilidade de avaliar um datagrama e tomar decisões de firewall sobre ele nestes pontos, o iptables introduz filas de regras (listas) nestes pontos. Cada gancho pode possuir um ou mais conjuntos de regras.
[2] Comentário enviado por loammy em 13/07/2007 - 08:53h
Otimo artigo. Elgio, pode ter certeza que o seu artigo vai ajudar muitos usuarios iniciantes a entender como funciona o Netfilter/Iptables, fazendo com que eles mesmos criem regras personalizadas para cada caso. E muitos deles não precisaram ficar copiando scripts sobre Netfilter/Iptables de terceiros.
E finalmente alguem escreveu um artigo com muita clareza sobre a essencia do Netfilter/Iptables. Parabens...
[10] Comentário enviado por an_drade em 13/07/2007 - 17:07h
Muito bom artigo!!! Muito explicativo, simples, conciso e curto. Excelente material p/ quem está começando a aprender iptables, e até mesmo noções de roteamente.
[18] Comentário enviado por forkd em 17/07/2007 - 11:50h
Cara,
muito bom o tutorial de IPTables, heim? Tô lendo ele aqui!
Agora sim! Excelente referência pra um ótimo artigo!
Era isso que eu estava querendo há algum tempo!
Aguardo os próximos artigos da série!
[22] Comentário enviado por elgio em 17/01/2008 - 11:23h
Julio.
Tá bom, tá bom.
Tu realmente não gostou de minha manifestação no seu artigo (http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=7393)
Faz um favor para o Vol: manda ai o link de onde "eu copiei" este meu artigo que escrevi. Sim, porque linha por linha do que está aqui eu escrevi de meu próprio punho.
Agora tu vai começar a me perseguir no Vol?
Vai ser divertido... :-D
[29] Comentário enviado por jonathan bispo em 02/01/2009 - 14:44h
Excelente artigo.
Era justamente essa explicação que eu estava buscando na internet.
Agora ficou muito mais simples entender as regras do iptables e configurá-las da forma que eu precisar.
Parabéns!!!
[32] Comentário enviado por jose.freitas.rj em 24/04/2009 - 12:16h
olá elgio! pelo que tenho visto, você saca muito de iptables e eu estou começando agora e estou com dúvidas. tenho 1 ADSL velox com ip dinâmico. tenho um servidor de internet com duas placas de rede. meu servidor está normalíssimo, mas meu único problemas é fazer meu ssh ser acessado pelo pessoal de fora da empresa, ou seja, pela internet, coisa que não estou conseguindo! neste servidor tenho uma placa de rede interna ligada na rede com o ip 192.168.3.252. já na placa que está ligada direto no modem ADSL o ip é 192.168.254.1 e o modem tem o ip 192.168.254.254.
minha dúvida é:
qual seria a regra de iptables pra liberar o pessoal de fora da empresa pela internet pra acessar meu servidor de vendas na porta 22 ssh que está atrás de servidor firewall? pelo fato de eu ter 2 placas rede, sendo uma ligada direto na rede e outra direto na porta WAN do modem não estou conseguindo cara! meu ajuda pelo amor de DEUS... ah! não tenho nem noção de como seria essa regra de direcionamento já que tenho 2 placas de rede!
[33] Comentário enviado por jose.freitas.rj em 29/04/2009 - 13:45h
elgio, não precisa! já fiz e funcionou! :D
o comando "echo 1 > /proc/sys/net/ipv4/ip_forward" já faz o que eu quero!
ele é quem manda no DNAT e SNAT, sendo assim coloquei essas regras com a ajuda de um parceiro de linux chamado sylvio que me passou esses regras:
#DIRECIONANDO SSH DA INTERNET
iptables -A INPUT -i eth0 -s 0/0 -d 0/0 -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth0 -s 0/0 -d 0/0 -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -s 0/0 -p tcp --dport 22 -j DNAT --to 192.168.3.1:22
[38] Comentário enviado por removido em 20/01/2014 - 21:10h
So para complementar,
O iptables possui uma caracteristica interessante que o seu antecessor ipchains não possuia, que a capacidade de STATE-FULL dos pocotes que correm nas chains que torna o firewall mais seguro entre outros beneficios.
Recentemente tive a oportunidade de estudar algumas ferramentas desenvolvidas pelo pessoal da netfilter.org e gostei muito das ferramentas de extenção do iptables para sincronismo de estados de conexões, muito util em ambiente de firewalls balanceados.