Firewall no Linux? O IPtables é a solução! (Parte II)

20 Comentários

Todos nós temos a noção que é importante dispormos de mecanismos de segurança nos nossos PC’s. Para quem é utilizador do Linux certamente que já ouviu falar do iptables (firewall)…..mas provavelmente nunca o usou devido à sua complexidade. O iptables é uma ferramenta bastante poderosa por si só, que vem por omissão nas distribuições Linux.

No sentido de desmistificar o iptables, vamos produzir alguns artigos, com alguns exemplos práticos. Depois de no ultimo tutorial (ver aqui) termos apresentado as três tabelas predefinidas do IPtables, hoje vamos saber o que são chains (cadeias) e targets (acções).

tuxfw

Como referido no ultimo tutorial, no iptables as tabelas disponibilizam contextos de utilização das regras de filtragem. Cada tabela disponibiliza várias chains (cadeias), que por sua vez contêm regras. .

Chain (cadeias)

Cada chain consiste numa lista ordenada de regras, sendo que a ordem das mesmas é muito importante. Quando um pacote é submetido a uma cadeia, as suas características são comparadas uma a uma, pela ordem que foram sendo definidas. Quando as características de um pacote não encaixam em qualquer uma das regras, é aplicada então a política predefinida dessa cadeira.

Uma vez que a tabela filter é a mais utilizada, vamos analisar as chains da mesma:

Cadeias da tabela filter
  • INPUT
    • Filtragem de pacotes IP à entrada do sistema
  • OUTPUT
    • Filtragem de pacotes IP à saída do sistema
  • FORWARD
    • Filtragem de pacotes IP à passagem do sistema

 

iptables_01

Targets (Acções)

Um target indica a acção a aplicar ao pacote, caso a regra se verifique. Alguns exemplos de targets para a chains INPUT/OUTPUT/FORWARD

  • DROP
    • Descarta um pacote sem notificar o emissor
  • ACCEPT
    • Aceita o pacote
  • REJECT
    • Rejeita o pacote sem notificar o emissor

No próximo tutorial vamos apresentar alguns exemplos de aplicação. Esperamos que tenham gostado deste segundo artigo e não se esqueçam do seguinte: o iptables tem tabelas que por sua vez têm chains que por sua vez têm regras e as regras definem targets.  Aguardamos o vosso feedback.

Partilhar:
Tags:

Comentários

20

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de antonio
    antonio

    Não percebi nada, mas vou acompanhar para tentar perceber . Obrigado pela vossa existência.

    1. Avatar de Pedro Pinto

      Tens de começar a aprendizagem pela parte I. O iptables, no inicio, é algo complexo.

  2. Avatar de Vanessa Madeira
    Vanessa Madeira

    Gostei deste artigo sobre o Iptables, foi algo como uma introdução.

    Mas seria bom demonstrar alguns exemplos e mais comandos. Demonstrar casos específicos.

    Relativamente ao tema abordado, sei apenas o básico, aquilo que me foi dado a conhecer nas aulas.

  3. Avatar de Ricardo Silva

    Bom artigo para se começar a perceber como o trafego é tratado numa firewall Iptables.
    Gostava de vissem com mais atenção o DROP/Reject visto que existem diferenças entre ambos.

    Cumprimentos e Larguras

  4. Avatar de Rui
    Rui

    Interessante!

    Fico aguardar o 3 artigo com alguns exemplos, por exemplo bloquear todas as portas expecto a porta 80 e a 22.

  5. Avatar de ZéCarlos
    ZéCarlos

    Tenho a dizer que estes vossos tutoriais de Iptables são muito bons para se começar a perceber esta solução de segurança que ao início parece complicada. Embora ande a ter uma cadeira na faculdade que abrange este assunto, é sempre bom rever alguns aspectos.
    Continuem com o bom trabalho.

  6. Avatar de Blizard

    É uma ‘ferramenta’ poderosa!

  7. Avatar de José Maria Oliveira Simões
    José Maria Oliveira Simões

    Aconselho vivamente a que tenham no IPTABLES as seguintes intruções:

    /sbin/iptables -A INPUT -i lo -j ACCEPT
    /sbin/iptables -A OUTPUT -j ACCEPT -o lo

    Estas instruções fazem com que o computador não fique bloqueado. Depois de terem isto, já se pode começar a “brincar” sem ter um amargo de boca. Mesmo que se cometa algum erro, a maquina continua a funcionar correctamente.

    1. Avatar de Pedro Pinto

      Viva José,

      Na prática só estas a dar instruções para a interface loopback que aceita pacotes à entrada e à saida.

      1. Avatar de José Maria Oliveira Simões
        José Maria Oliveira Simões

        Viva Pedro,
        É isso mesmo. 127.0.0.1, lo, loopback . A maioria dos processos (programas), tem que comunicar com outros processos (programas) no IP 127.0.0.1 (dentro da propria maquina) . Se estiver vedado/fechado, o computador vai parar. Inclusivamente, fica-se sem consola de sistema. Nada funciona, tudo pára. Imagine-se uma auto estrada em que fluem automoveis (vamos batizar de IP 127.0.0.1). Se não deixar-mos entrar nem sair os automoveis que circulam no IP 127.0.0.1, vai haver um engarrafamento homerico. Pára tudo. Aqueles que iam para o trabalho, páram. Aqueles que iam paca casa, páram também. Aqueles processos (programas) que esperavam receber os automoveis (pacotes com dados) do IP 127.0.0.1, bem podem ficar à espera sentados. Vão chegar no dia do São Nunca. Bem, pelo menos neste contexto é o que acontece. Tudo parado, paradinho.

  8. Avatar de Miguel
    Miguel

    Este tema é muito interessante, parabens pela iniciativa.

    Só uma nota: a diferença entre o REJECT e o DROP é que o REJECT permite notificar o emissor, por exemplo:

    iptables -A INPUT -p tcp –dport 23 -j REJECT –reject-with tcp-reset

  9. Avatar de Alo
    Alo

    E que tal usarem shorewall? Iptables tem algumas limitações em máquinas com pouca memória.

    1. Avatar de Pedro Pinto

      Esse não conheço. Queres fazer uma análise?

      Abraço
      PP

    2. Avatar de Ricardo Silva

      Shorewall é IPTables mas simplificado nada mais.
      Por baixo está IPTables.
      Quem tem limitações é a Shorewall sim nao o inverso.

  10. Avatar de Serva
    Serva

    Bom dia ,

    Até o Pedro Pinto começar com o primeiro tutorial eu não estava a usar o iptables , e porquê , porque no meu inicio da aventura com o Linux dei-me mal , acabei por configurar tudo mal e bloqueie a maquina , desde aí que tinha quase um pavor de me meter a configurar esta potentissima ferramenta .

    Com o primeiro tutorial decidi que era tempo de voltar a experimentar em uma das minhas maquinas de testes (agora já tenho duas) e voltei a encontrar a complexidade e dúvidas que sempre me assombraram , só que desta vez vou fazendo aos poucos e depois tentando verificar se cometi algum erro ou não , com este tutorial já fica explicado uma parte muito importante da configuração tinha sempre dúvidas de qual a opção a tomar .

    Pedro excelente artigo e conseguiste que eu perdesse o medo de me aventurar .

    Cumprimentos

    Serva

  11. Avatar de Apaxe
    Apaxe

    Pedro,

    REJECT: Rejeita o pacote sem notificar o emissor

    Não será antes:

    REJECT: Rejeita o pacote com notificação do emissor

    Cumprimentos

  12. Avatar de manuel
    manuel

    Muito bom mesmo!

    Vou esperar pelo próximo.

  13. Avatar de BalmerGenio
    BalmerGenio

    Ainda bem utilizo o windows, ainda dizem que linux é fácil.

  14. Avatar de Paulo
    Paulo

    Boas,

    Novamente queiram desculpar se digo alguma alarvidade, mas no meu sistema uso a Firestarter…Estava com a ideia que não sendo uma firewall por si, funcionava configurando as ip tables que confesso são qs caracteres chineses par mim.
    Será que estou minimamente seguro?

    Hasta siempre.

  15. Avatar de Alexandre
    Alexandre

    Espero não estar a adiantar o final do artigo. Mas deixo aqui um script funcional bem simples para que quiser começar a brincar com o IPTABLES (não está bem comentado):

    #!/bin/bash

    IPT=”/usr/sbin/iptables”
    #IPTS=”/usr/sbin/iptables-save”
    #IPTR=”/usr/sbin/iptables-restore”

    echo “Starting IPv4 firewall…”

    $IPT -F
    $IPT -X
    $IPT -Z

    $IPT -N TCP
    $IPT -N UDP

    $IPT -P INPUT DROP
    $IPT -P OUTPUT ACCEPT
    $IPT -P FORWARD DROP

    $IPT -A INPUT -i lo -j ACCEPT
    $IPT -A INPUT -m state –state INVALID -j DROP
    $IPT -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A INPUT -p icmp -m icmp –icmp-type 8 -m state –state NEW -j ACCEPT
    $IPT -A INPUT -p udp -m state –state NEW -j UDP
    $IPT -A INPUT -p tcp –tcp-flags FIN,SYN,RST,ACK SYN -m state –state NEW -j TCP
    $IPT -A INPUT -p udp -j REJECT –reject-with icmp-port-unreach
    $IPT -A INPUT -p tcp -j REJECT –reject-with tcp-rst
    $IPT -A INPUT -j REJECT –reject-with icmp-proto-unreach

    $IPT -A OUTPUT -p icmp -m state –state INVALID -j DROP

    # Portas TCP a abrir.
    $IPT -A TCP -p tcp –dport PORTA -j ACCEPT

    # Portas UDP a abrir.
    $IPT -A UDP -p udp –dport PORTA -j ACCEPT

    ATENÇÃO!!!
    As variáveis são relativas as utiliadas no Arch Linux, em outras distros podem estar em:

    /sbin ao invés de /usr/sbin