6
3/6/2014 Estrutura do Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6834 1/6 Estrutura do Iptables Autor: Elgio Schlemer <elgio.schlemer at gmail.com> Data: 13/07/2007 Introdução: o que esperar deste artigo Ao contrário de outros artigos e tutoriais sobre iptables, este não se dispõe a ensinar sua sintaxe, como construir regras e como bloquear este ou aquele tipo de pacote. Artigos meus futuros poderão 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 também para esclarecer algumas diferenças interessantes, como para que serve o REJECT e qual a diferença dele para o DROP? Algumas definições serão relevantes e merecem serem citadas antes da leitura: Quando falo de "nível" no artigo (ex: nível de Enlace) estou me referindo ao modelo de camadas TCP/IP, composto por apenas QUATRO camadas e não SETE como no modelo OSI. No modelo TCP as camadas são o ENLACE, onde se tem na sua imensa maioria o padrão de rede Ethernet como referência: O nível de REDE, responsável pelo roteamento, onde se tem o IP na sua versão 4 como mais significativo; O nível de TRANSPORTE, com seus pacotes UDP e TCP, dentre outros; O o nível de aplicação, com os protocolos FTP, HTTP, etc; O nível FÍSICO não 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. Porém, quando se quer deixar mais específico em qual nível estamos lidando, pode-se se usar a nomenclatura "quadro" para o nível de Enlace, "datagrama" ip para o nível de rede e "pacote" para o de transporte (sendo que o TCP muitas vezes usam a palavra "segmento"). Na aplicação o que tem são dados. Mas como o iptables atua em princípio 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 termo genérico (OBS: é certo que o iptables também permite atuar no enlace e até mesmo na aplicação, com os devidos módulos adicionados). Por onde passa um datagrama

Estrutura do Iptables [Artigo].pdf

Embed Size (px)

Citation preview

  • 3/6/2014 Estrutura do Iptables [Artigo]

    http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6834 1/6

    Estrutura do Iptables

    Autor: Elgio Schlemer

    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 oREJECT 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 maissignificativo;

    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 termo genrico (OBS:

    certo que o iptables tambm permite atuar no enlace e at mesmo na aplicao, com os devidos mdulosadicionados).

    Por onde passa um datagrama

  • 3/6/2014 Estrutura do Iptables [Artigo]

    http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6834 2/6

    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 vriasetapas. 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 forconfigurada para atuar como roteador, o datagrama descartado. Se a mquina estiver atuando comoroteador, 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 quadroethernet 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 seremroteados para fora da mquina, que no caso deve estar atuando como roteador, sendo que na etapade 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 aonvel de transporte, que ir repass-lo ao processo correspondente).

    Da mesma forma, pacotes os gerados por processos locais tambm passam pelo roteamento para

    serem encaminhados. Logo, todos os datagramas passam, de uma forma ou de outra, pela etapa deroteamento.

    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 deenlace (trocando o MAC origem para o seu), atualizao do TTL, etc. Evidente que isto aps adeciso de roteamento, pois a escrita do cabealho de enlace leva em conta o destino.

  • 3/6/2014 Estrutura do Iptables [Artigo]

    http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6834 3/6

    Ganchos do netfilter

    O netfilter introduziu "ganchos", pontos ao longo do ciclo de vida de um datagrama onde o mesmo pode seravaliado 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 kernelde PREROUTING.

    Pode ser capturado para avaliao pelo gancho 2, chamado pelo kernel de 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 elenestes 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:

  • 3/6/2014 Estrutura do Iptables [Artigo]

    http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6834 4/6

    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 asregras 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 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 deiptables (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]

  • 3/6/2014 Estrutura do Iptables [Artigo]

    http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6834 5/6

    FORWARD: esta fila de regras recebe este nome justamente por atuar no gancho 2 (tambm chamadopelo 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 filtragensgerais, 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.

    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 vezesat 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.

  • 3/6/2014 Estrutura do Iptables [Artigo]

    http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6834 6/6

    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 pelamangle 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). Aocontrrio das demais aes (DROP, ACCEPT e REJECT), ao aplicar um log 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 nicoque 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