Você está na página 1de 7

Estrutura do Iptables [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codig...

Estrutura do Iptables
Autor: Elgio Schlemer <elgio.schlemer at gmail.com> Data: 13/07/2007 Introduo: o que esperar deste artigo Ao contrrio de outros artigos e tutoriais sobre iptables, este no se dispe a ensinar sua sintaxe, como construir regras e como bloquear este ou aquele tipo de pacote. Artigos meus futuros podero passear por este caminho, muito embora j se tenha muito material na Internet sobre isto. Ele se destina a explicar a origem dos termos "tabelas" do iptables, o que e para que servem as tabelas nat, filter e mangle. Onde, ou seja, em qual tabela se deve colocar as regras para este ou aquele objetivo. Este artigo aproveita tambm para esclarecer algumas diferenas interessantes, como para que serve o REJECT e qual a diferena dele para o DROP? Algumas definies sero relevantes e merecem serem citadas antes da leitura: Quando falo de "nvel" no artigo (ex: nvel de Enlace) estou me referindo ao modelo de camadas TCP/IP, composto por apenas QUATRO camadas e no SETE como no modelo OSI. No modelo TCP as camadas so o ENLACE, onde se tem na sua imensa maioria o padro de rede Ethernet como referncia: O nvel de REDE, responsvel pelo roteamento, onde se tem o IP na sua verso 4 como mais significativo; O nvel de TRANSPORTE, com seus pacotes UDP e TCP, dentre outros; O o nvel de aplicao, com os protocolos FTP, HTTP, etc; O nvel FSICO no faz parte do modelo de camadas TCP/IP, pois restrito ao fabricante da placa. Em termos de nomenclatura geralmente se generaliza chamando tudo de pacote. Porm, quando se quer deixar mais especfico em qual nvel estamos lidando, pode-se se usar a nomenclatura "quadro" para o nvel de Enlace, "datagrama" ip para o nvel de rede e "pacote" para o de transporte (sendo que o TCP muitas vezes usam a palavra "segmento"). Na aplicao o que tem so dados. Mas como o iptables atua em princpio nas camadas de rede, ip de origem ou de destino, e na de transporte (porta origem e destino), o pacote pode ser considerado, neste artigo, como um
1 de 7 26-07-2012 16:25

Estrutura do Iptables [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codig...

termo genrico (OBS: certo que o iptables tambm permite atuar no enlace e at mesmo na aplicao, com os devidos mdulos adicionados).

Por onde passa um datagrama O iptables, presente no Linux a partir do kernel 2.4, usa o conceito de "ganchos" do netfilter, permitindo avaliar um datagrama em alguns pontos dentro do kernel.

Conforme pode ser observado na Figura 1, um datagrama IP dentro do kernel do Linux passa por vrias etapas. Basicamente um datagrama IP de um dentre trs tipos: 1. O datagrama chegou por uma de suas interfaces, o nvel de enlace viu o seu mac address no quadro ethernet. Contudo o datagrama no destinado ao nmero IP desta mquina. Se a mquina no for configurada para atuar como roteador, o datagrama descartado. Se a mquina estiver atuando como roteador, o datagrama deve ser roteado por ela. 2. O datagrama chegou por uma de suas interfaces, o nvel de enlace viu o seu mac address no quadro ethernet e ele destinado ao IP desta mquina, logo deve ser entregue a um de seus processos locais (se for HTTP, por exemplo, deve ser entregue ao apache). 3. O datagrama IP foi gerado por um de seus processos locais, por um cliente de email por exemplo, e deve ser repassado a outra mquina. Cada datagrama passa por uma etapa de roteamento, onde o kernel decide para onde ele vai. Nesta etapa que so consultadas, se for o caso, as tabelas de roteamento. Os do tipo 1 devem serem roteados para fora da mquina, que no caso deve estar atuando como roteador, sendo que na etapa de roteamento o kernel decide qual o prximo ponto de rota que deve ser usada. Se for para o IP desta mquina, o roteamento que verifica isto (isto , recebe o datagrama, v que local e entrega ao nvel de transporte, que ir repass-lo ao processo correspondente). Da mesma forma, pacotes os gerados por processos locais tambm passam pelo

2 de 7

26-07-2012 16:25

Estrutura do Iptables [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codig...

roteamento para serem encaminhados. Logo, todos os datagramas passam, de uma forma ou de outra, pela etapa de roteamento. Caso ele precise ser repassado a outra mquina (somente se ela estiver atuando como roteador IP), a etapa de "repasse de pacotes" realiza as alteraes necessrias, como a reescrita total do cabealho de enlace (trocando o MAC origem para o seu), atualizao do TTL, etc. Evidente que isto aps a deciso de roteamento, pois a escrita do cabealho de enlace leva em conta o destino.

Ganchos do netfilter 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 avaliao ao entrar na Interface, pelo gancho 1, chamado pelo kernel de PREROUTING. Pode ser capturado para avaliao pelo gancho 4, chamado pelo kernel de INPUT. Um datagrama gerado por um processo local: Pode ser capturado para avaliao pelo gancho 5, chamado pelo kernel de OUTPUT. Pode ser capturado para avaliao pelo gancho 3, chamado de POSTROUTING. Um datagrama que esteja apenas passando por esta mquina, no gerada e no destinada ao ip ela: Pode ser capturado para avaliao ao entrar na Interface, pelo gancho 1, chamado pelo kernel de PREROUTING. Pode ser capturado para avaliao pelo gancho 2, chamado pelo kernel de

3 de 7

26-07-2012 16:25

Estrutura do Iptables [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codig...

FORWARD. Pode ser capturado para avaliao pelo gancho 3, chamado de POSTROUTING.

Por existirem estes ganchos e a possibilidade de avaliar um datagrama e tomar decises 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.

Enfim, as tabelas Ao todo so trs as tabelas mais importantes do iptables: filter nat mangle A tabela filter deve conter apenas regras que determinam se um pacote deve ser aceito ou no. Nesta tabela no possvel colocar regras para alterar algum parmetro, como ip ou porta. A tabela nat serve para realizar operaes de traduo sobre IP e/ou porta, tanto de origem como de destino, muito embora tambm permita recus-lo (no ser abordada neste artigo). Por fim a tabela mangle serve para realizar alteraes mais profundas e bizarras nos pacotes, como alterar o TTL, TOS, etc (no ser abordada neste artigo). As aes operadas sobre um pacote basicamente podem ser recus-lo ou deix-lo passar, mas o iptables possui vrias maneiras de "recusar" e ainda permite realizar logs. Como dito, operaes de alterao de pacotes, seja IP ou porta, no pode ser realizada na tabela filter, mas sim na nat ou mangle. Em termos de filtragem, para impedir que pacotes que no queremos entrem na mquina, a tabela filter que nos interessa.

A tabela filter Entram nesta tabela o conjunto de regras com finalidades gerais, como bloquear, negar, realizar logs. As regras existentes nesta tabela no tem poder de alterar as configuraes dos pacotes. Basicamente todas as regras de filtragem esto nesta tabela, pois ela de uso geral. Para inserir uma regra em uma lista, pode-se usar -A para APPEND, inserindo-a no final, ou -I para INSERT, inserindo-a NO INCIO (a sintaxe profunda das regras no o foco deste
4 de 7 26-07-2012 16:25

Estrutura do Iptables [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codig...

artigo). A tabela filter possui trs conjuntos de regras, ou seja, trs listas sendo que cada uma delas est associada a um gancho: INPUT: esta fila de regras recebe este nome justamente por ser aplicada aos pacotes na posio do gancho 4. Logo apenas os pacotes destinados ao ip da mquina atual sero avaliados por eventuais regras existentes nesta tabela. Sintaticamente para inserir regras nesta lista usa-se os parmetros de iptables (o comando est incompleto): iptables -t filter -A INPUT [regra] OUTPUT: esta fila de regras recebe este nome justamente por atuar no gancho 5 (tambm chamado pelo kernel de OUTPUT). Logo sero avaliados pelas regras presentes nesta lista apenas os pacotes originados por processos locais da mquina. Sintaticamente para inserir uma regra nesta lista usa-se o comando: iptables -t filter -A OUTPUT [regra] FORWARD: esta fila de regras recebe este nome justamente por atuar no gancho 2 (tambm chamado pelo kernel de FORWARD). Logo sero avaliados por estas regras os pacotes que esto sendo repassados por esta mquina, no so para ela e nem originados por ela. Sintaticamente para inserir uma regra nesta lista usa-se o comando: iptables -t filter -A FORWARD [regra] A tabela filter a tabela bsica do iptables e so em suas listas que devem ser inseridas regras de filtragens gerais, que no so complexas, como proibir ou permitir ips, portas, etc. Na Figura 3 pode ser observado a atuao do conjunto de regras desta tabela sobre os ganchos.

5 de 7

26-07-2012 16:25

Estrutura do Iptables [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codig...

Cada regra pode realizar uma determinada ao ao pacote (representado graficamente por -j), sendo que na filter as seguintes aes so possveis: REJECT: o pacote, uma vez que casou com a regra, rejeitado. Demais regras existentes so ignoradas e o pacote definitivamente j teve seu destino selado: ser descartado. Se for usado REJECT o remetente do pacote ser avisado com uma mensagem de erro, normalmente um ICMP de "porta inatingvel" (mas o iptables permite ao usurio mudar o tipo de retorno se ele quiser). Em termos de segurana pode no ser interessante devolver uma resposta ao remetente, pois isto iria inevitavelmente dar a conhecer a ele o nmero IP do firewall. DROP: o DROP tem o mesmo efeito do REJECT e a mesma aplicao, com a diferena de que no retornado nenhuma mensagem de erro ao remetente (ele no saber o que aconteceu com o pacote). Em se tratando de FORWARD (repasse) pode ser conveniente usar DROP ao invs de REJECT para que um possvel atacante no saiba o IP do firewall que rejeitou o seu pacote. Mas isto deve ser bem analisado, pois se o remetente no souber o que ocorreu, ele poder ficar ainda tentando vrias vezes at desistir por time out. Se o teu firewall o roteador principal, no tem porque escond-lo, pois ele um ponto de rota mesmo. Mas se ele for transparente (atuando em modo bridge), a pode ser uma boa estratgia no dar nada ao remetente. ACCEPT: Aceita um pacote, deixando que ele siga o seu percurso. O ACCEPT, como os anteriores, causa o trmino de teste nesta tabela, ou seja, o pacote j foi aceito e no ser mais testado por nenhuma outra regra posterior nesta tabela (mas ainda poder ser testado por outra tabela, como pela mangle ou nat, por exemplo. Acredito que o nico exemplo onde isto possa acontecer ele ser ACEITO no filter FORWARD, mas ser DROPADO no nat POSTROUTING, j que o nat tem tambm o poder de realizar DROP). LOG: realiza um log deste pacote no sistema (geralmente no /var/log/syslog ou messages). Ao contrrio das demais aes (DROP, ACCEPT e REJECT), ao aplicar um log

6 de 7

26-07-2012 16:25

Estrutura do Iptables [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codig...

no pacote o mesmo ainda continua sendo testado pelas regras seguintes da fila atual. Uma ao do tipo LOG no causa o trmino do teste. Caso seja do interesse do usurio ele pode configurar uma mensagem de log que aparecer nos logs facilitando a anlise.

Concluso Este artigo teve como motivao apenas mostrar a estrutura interna do iptables e no ensinar a escrever regras sintaticamente corretas e poderosas. Atravs do entendimento correto de como o iptables atua, pode-se determinar onde e de que forma pacotes devem ser filtrados: Se estou configurando um firewall pessoal, na minha mquina desktop ou no meu servidor, sendo que ela no roteador: as regras para filtrar o contedo devero ir na tabela filter, na lista INPUT para filtrar o que est entrando na minha mquina, destinada ao IP dela e na tabela filter, lista OUTPUT para os pacotes gerados pela minha mquina. Se estou configurando um firewall de rede, que filtra todo o contedo que entra e sai da minha rede para o mundo: as regras iro todas na tabela filter, lista FORWARD. Para representar o destino (est entrando ou est saindo) posso usar o parmetro -i interface ou -o interface (o FORWARD o nico que permite -i e -o na mesma regra, querendo dizer, se estiver entrando por aqui e saindo por ali...). Se meu firewall um firewall de rede, mas tambm possui alguns servios nele, como proxy ou de email, devo inserir regras tando no filter INPUT/OUTPUT para definir a poltica dele enquanto servidor, como no filter FORWARD para proteger minha rede. Regras adicionadas no filter FORWARD no atuam sobre pacotes destinados ao nmero IP de uma mquina. Se desejo alterar caractersticas de ip ou porta, trocando-as, devo usar a tabela nat e para isto preciso aguardar o prximo artigo. :-D

http://www.vivaolinux.com.br/artigo/Estrutura-do-Iptables Voltar para o site

7 de 7

26-07-2012 16:25