A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Linux

Filtragem de pacotes no Linux 2.4

Qui

26

Abr

2007


17:47

(3 votos, média 3.67 de 5) 


Usando iptables

O manual do iptables (man iptables) é bem completo e deve ser consultado caso você precise de maiores detalhes.

Existem várias coisas diferentes que podem ser feitas com o iptables. Sempre começamos com as três cadeias embutidas que não podem ser eliminadas: INPUT, OUTPUT e FORWARD. Vamos dar uma olhada nas operações que gerenciam cadeias inteiras:

  1. Criar uma nova cadeia (-N de Nova)
  2. Eliminar uma cadeia (-X de eXcluir)
  3. Alterar a política de uma cadeia embutida (-P de Política)
  4. Listar as regras de uma cadeia (-L de Listar)
  5. Depurar ou limpar as regras de uma cadeia (-F de Faxina)
  6. Zerar os contadores de pacotes e de bytes em todas as regras de uma cadeia (-Z de Zerar)

Existem várias maneiras de manipular regras pertencentes a uma cadeia:

  1. Anexar uma nova regra a uma cadeia (-A de Anexar)
  2. Inserir uma nova regra numa determinada posição dentro de uma cadeia (-I de Inserir)
  3. Substituir uma regra numa determinada posição (-R de tRocar)
  4. Eliminar uma regra numa determinada posição ou a primeira que coincidir (-D de Deletar)

O que se vê quando o computador inicia

O iptables pode ser um módulo, chamado 'iptable_filter.o', que deve ser carregado automaticamente quando o iptables for rodado a primeira vez. Também pode ser embutido no kernel permanentemente.

Se nenhum comando iptables tiver sido rodado, as cadeias embutidas INPUT, FORWARD e OUTPUT não possuem nenhuma regra e todas têm a política ACCEPT. Você pode alterar a política default da cadeia FORWARD fornecendo a opção 'forward=0' ao módulo iptable_filter.

atencao Cuidado: algumas distribuições rodam o iptables nos seus scripts de inicialização!

Operações numa só regra

O feijão com arroz da filtragem de pacotes é a manipulação de regras. Os comandos que serão mais usados são, provavelmente, 'append' (-A de Anexar) e 'delete' (-D de Deletar). Os outros, -I para Inserir e -R para tRocar, são simples extensões destes conceitos.

Cada regra especifica um conjunto de condições que o pacote precisa preencher e o que fazer quanto isto acontece (um 'alvo'). Por exemplo, você pode querer eliminar todos os pacotes ICMP que venham do endereço IP 127.0.0.1. Neste caso, as condições são que o protocolo precisa ser ICMP e que o endereço de origem seja 127.0.0.1. O alvo é 'DROP' (eliminar).

127.0.0.1 é a interface 'loopback', a qual existe mesmo quando nenhuma conexão de rede estiver ativa. Podemos usar o programa 'ping' para gerar pacotes deste tipo: o ping envia um ICMP tipo 8 (requisição de eco) ao qual todos os hosts cooperativos precisam obrigatoriamente responder com um pacote ICMP tipo 0 (resposta de eco). Isto torna o programa muito útil para fazer testes.

    # ping -c 1 127.0.0.1
    PING 127.0.0.1 (127.0.0.1): 56 data bytes
    64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms

    --- 127.0.0.1 ping statistics ---
    1 packets transmitted, 1 packets received, 0% packet loss
    round-trip min/avg/max = 0.2/0.2/0.2 ms
    # iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
    # ping -c 1 127.0.0.1
    PING 127.0.0.1 (127.0.0.1): 56 data bytes

    --- 127.0.0.1 ping statistics ---
    1 packets transmitted, 0 packets received, 100% packet loss
    #

Aqui é possível ver que o primeiro ping funcionou - o '-c 1' diz para o ping enviar apenas um pacote. Depois foi anexada uma regra (-A) à cadeia INPUT especificando que, se o pacote vier de 127.0.0.1 (fonte = source, '-s 127.0.0.1') com o protocolo ICMP ('-p icmp'), deve ocorrer um salto (jump) para DROP ('-j DROP').

A seguir a regra foi testada usando um segundo ping. O programa demora um pouco até desistir de esperar por uma resposta (que, na verdade não vai vir) e indica que seu pacote foi perdido porque não recebeu o pacote com a resposta.

Esta regra pode ser eliminada de duas maneiras. Primeiro, como sabemos que é a única regra existente na cadeia INPUT, podemos usar uma eliminação numerada para deletar a regra número 1:

            # iptables -D INPUT 1
            #

A segunda maneira é espelhar o comando -A, substituindo -A por -D. Este modo é útil quando a cadeia possui muitas regras e você não tem paciência para ficar contando todas elas para finalmente descobrir que se trata da regra número 45 ou coisa que o valha. Neste caso você pode usar:

            # iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
            #
A sintaxe de -D precisa ter exatamente as mesmas opções que tinha o comando -A (ou -I, ou -R). Se houver várias regras idênticas na mesma cadeia, apenas a primeira será deletada.

Informações adicionais