Informática Numaboa - Linux
Filtragem de pacotes no Linux 2.4
Qui 26 Abr 2007 17:47 |
- Detalhes
- Categoria: Como fazer configurações
- Atualização: Quinta, 01 Janeiro 2009 03:06
- Autor: vovó Vicki
- Acessos: 10244
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:
- Criar uma nova cadeia (-N de Nova)
- Eliminar uma cadeia (-X de eXcluir)
- Alterar a política de uma cadeia embutida (-P de Política)
- Listar as regras de uma cadeia (-L de Listar)
- Depurar ou limpar as regras de uma cadeia (-F de Faxina)
- 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:
- Anexar uma nova regra a uma cadeia (-A de Anexar)
- Inserir uma nova regra numa determinada posição dentro de uma cadeia (-I de Inserir)
- Substituir uma regra numa determinada posição (-R de tRocar)
- 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.
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.