Vamos iniciar nosso estudo de construção de regras pensando na tabela filter, onde temos três chains que são: INPUT, OUTPUT e FORWARD, as quais não podem ser apagadas.
Quando o
Iptables é instalado, inicialmente não haverá regras em quaisquer chains (INPUT, FORWARD e OUTPUT) e todas as chains terão a política ACCEPT. As operações para manipular as chains são:
- -N: Criar nova chain;
- -X: Apagar uma chain vazia;
- -P: Mudar a política de uma chain built-in(INPUT, FORWARD, OUTPUT);
- -L: Listar as regras de uma chain;
- -F: Apagar todas as regras de uma chain (-F);
- -Z: Zerar os contadores de pacotes e bytes de todas as regras de uma chain.
Grande parte das nossas atividades vai estar envolvida com a manipulação das regras dentro das chains:
- -A: Adicionar uma nova regra na chain;
- -I: Inserir uma nova regra em alguma posição da chain;
- -R: Substituir uma regra em alguma posição da chain;
- -D: Apagar uma regra em alguma posição da chain (-D).
- -D: Apagar a primeira regra que associa (com alguma condição) numa chain.
Na prática sempre estaremos usando os comandos para adicionar (-A) e apagar (-D) com muito mais freqüência que os outros. A estrutura das regras geralmente fica assim:
# iptables [-t tabela] [opção] [chain] [dados] -j [ação]
Para melhorar nosso entendimento vamos usar nossa interface loopback (127.0.0.1), para responder ao ping que vai enviar um ICMP. Façamos o seguinte:
# ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.080 ms
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.080/0.080/0.080/0.000 ms
Verificamos que o ping que envia um único pacote é resolvido com sucesso. Agora vamos adicionar a seguinte regra:
# iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
Através desta regra vamos fazer com que os pacotes enviados pelo ping sejam descartados. Veja que adicionamos (-A) à chain INPUT uma regra especificando que pacotes vindos de 127.0.0.1 (-s 127.0.0.1) com o protocolo ICMP (-p icmp) devem ser mandados para DROP (-j DROP).
Vamos apagar a regra de duas formas diferentes:
# iptables -D INPUT 1
Para apagar a regra número 1 na chain INPUT, nossa única regra.
Ou fazendo desta forma:
# iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
Verifique que a única mudança em relação a nossa primeira regra foi à mudança para "-D". Esta exclusão só vai funcionar se a regra estiver exatamente igual às passadas por -A (ou -I ou -R). Caso ocorra de haver mais de uma regra igual, a primeira da lista será apagada.
Outra opção interessante é incluir novamente a regra acima e entrar com o seguinte comando:
# iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
DROP icmp -- localhost anywhere
...
#~: iptables -F
Veja que a regra entrada 2 foge à sintaxe citada acima. Ela mostra as regras em rigor. Já a regra três apaga todas as regras. No nosso caso temos apenas uma.