Agora que vimos os chains e tabelas e ainda temos a sintaxe do iptables, nos resta entender como as regras funcionam para podemos implementar as nossas próprias regras.
Todas regras possuem um "alvo", existem alguns tipos de alvos que podem ser listados dessa maneira:
- ACCEPT - Aceita o pacote;
- DROP - "Dropa", ou simplesmente não aceita o pacote;
- REJECT - Rejeita o pacote, enviando uma mensagem;
- LOG - Envia uma mensagem ao syslog caso a regra confira;
- RETURN - Para o processamento do chain atual, e retorna;
- QUEUE - Passa para o processamento de programas externos.
Os alvos, ficam na última parte do "comando", ou da linha do iptables, veja:
# iptables -t filter -A INPUT -d 192.168.1.6 -j DROP
Então podemos ver que o DROP é o alvo, que tem a ação de "dropa", ou simplesmente não aceitar o pacote.
Agora, para finalizar a formação de uma regra, precisamos entender os seus parâmetros e opções.
O que são regras
Uma regra pode ser definida como o espaço para o usuário implementar o que deseja que o firewall faça, ou ainda, uma regra pode ser um comando passado ao iptables para que ele interprete e realize uma determinada ação.
Obs.: As regras são armazenadas dentro dos chains e processadas na ordem que são inseridas.
Agora vamos entender os parâmetros e opções que usamos nas regras, como por exemplo:
# iptables -A INPUT -s 200.222.256.63 -j DROP
Por que esse "-s"? Por que "-A"? Vamos ver isso agora!
Adicionando regras
Opção -A:
As regras são executadas em ordem "crescente", ou seja, na ordem que são inseridas. Com a opção -A a regra é inserida no final da lista de regras. Se eu tenho 4 regras e adiciono mais uma com a opção -A, a minha nova regra, será inserida na quinta posição.
Sintaxe:
iptables [-t tabela] -A [chain] [dados] -j [ação]
Opção -I:
Com opção -I inserimos a regra no topo, assim, se temos 4 regras e vamos adicionar uma nova regra utilizando a opção -I, essa minha nova regra será a primeira a ser executada.
Sintaxe:
iptables [-t tabela] -I [chain] [dados] -j [ação]
Listando regras
Opção -L:
Com essa opção podemos listar todas as regras inseridas até o momento e podemos fazer isso de várias maneiras, exibindo o número de cada regra, exibindo o endereço das máquinas e muito mais.
Opções:
- -v - Exibe mais detalhes sobre as regras criadas nos chains;
- -n - Exibe endereços de máquinas/portas como números;
- -x - Exibe números exatos. Mostra a faixa de portas de uma regra;
- --line-numbers - Exibe o número da posição da regra.
Sintaxe:
iptables [-t tabela] -L [chain] [opções]
Exemplo:
# iptables -t filter -L INPUT --line-numbers
Apagando uma regra
Pode apagar todas as regras usando iptables -F, porém, se queremos apagar apenas uma regra e não todas, podemos utilizar a opção -D.
Opção -D:
Sintaxe:
iptables [-t tabela] -D [chain] [posição]
iptables [-t tabela] -D [chain] [dados] -j [ação]
Exemplos:
# iptables -t filter -D INPUT 1
# iptables -t filter -D INPUT -d 127.0.0.1 -j DROP
Substituindo uma regra
Podemos substituir uma regra já existente, ou seja, podemos "editar".
Opção -R:
Sintaxe:
iptables [-t tabela] -R [chain] [posição] [regra] -j [ação]
Exemplo:
# iptables -R INPUT 1 -d 127.0.0.1 -p icmp -j DROP
Limpando uma regra
Aprendemos a deletar uma única regra, mas podemos limpar todas as regras de um chain utilizando a opção -F.
Opção -F:
Sintaxe:
iptables [-t tabela] -F [chain]
Exemplo:
# iptables -F (como não foi especificado a tabela, ele irá limpar as regras da tabela filter)
# iptables -t filter -F INPUT
Parâmetros
Parâmetro -s:
Usado para especificar endereços de origem. Também é usado como --src ou --source.
Parâmetro -d:
Usado para especificar endereços de destino. Também usado como --dst e --destination
Exemplo:
# iptables -t filter -A INPUT -s 192.168.0.104 -d 192.168.0.102 -p icmp -j DROP
Parâmetro -i:
Usado para especificar a interface de entrada.
Parâmetro -o:
Usado para especificar a interface de saída
Exemplo:
# iptables -t filter -A INPUT -s 192.168.0.104 -i ppp+ -j DROP
Exemplo2:
# iptables -A FORWARD -i ppp0 -o eth1 -j DROP
Obs.: O sinal de "+" funciona como um coringa, assim a regra terá efeito em qualquer interface de ppp0 a ppp9.
Parâmetro -p:
Usado para especificar um protocolo. Podem ser especificados os procolos TCP, UDP e ICMP.
Exemplo:
# iptables -A INPUT -s 192.168.0.104 -p icmp -j DROP
Parâmetro --dport:
Especifica uma porta ou faixa de portas de destino.
Exemplo:
# iptables -A OUTPUT -d 200.200.200.200 -p tcp --dport :1023 -j DROP