Como vimos anteriormente, usamos dois parâmetros para a filtragem dos pacotes, foram eles: "-p" para especificar o protocolo utilizado e "-s" para especificar o endereço de origem. No manual do
Iptables temos uma longa versão desta parte, que vou reduzir para facilitar a leitura, dividindo em tópicos, fazendo uma pequena descrição e incluindo uma regra exemplo para melhorar o entendimento:
Endereços
Usamos dois parâmetros diferentes para especificar o endereço origem e o endereço destino. São eles:
- -s, --source, --src: Origem;
- -d, --destination, --dst: Destino.
É muito importante conhecer as características de manipulação de valores aceitos pra estes parâmetros. Veja abaixo:
# iptables -A FORWARD -s 10.38.11.10 -d 10.38.5.100 -j DROP
Os pacotes de origem em 10.38.11.10 destinados a 10.38.5.100 serão descartados.
# iptables -A FORWARD -s 10.38.11.0/24 -d 10.38.5.100 -j DROP
Os pacotes de origem em 10.38.11.0 ate 10.38.11.255 destinados a 10.38.5.100 serão descartados. Podemos usar valores também como www.microsoft.com, localhost e etc nas nossas regras, veja abaixo.
# iptables -A FORWARD -d ! www.microsoft.com.br -j ACCEPT
Nesta regra usamos o "!" para realizar uma inversão desta forma todos os endereços estão liberados apenas o site da Microsoft estará proibido.
Protocolos
Usamos o parâmetro '-p' (ou `--protocol') para especificar o protocolo envolvido. Como exemplo temos: `TCP', `UDP' ou `ICMP', neste caso não faz diferença digitar 'UDP' ou 'udp'. Os protocolos podem ser especificados também pelo seu número, que você encontra em /etc/protocols. Vejamos:
# iptables -A FORWARD -p tcp --dport 80 -j DROP
Nesta regra temos que os pacotes relacionados com o protocolo 'tcp' e destinados à porta 80 devem ser descartados. Não se preocupe com o parâmetro '--dport'. No futuro iremos tratar dele com mais detalhes. Esta regra é muito útil quando usamos um Squid, por exemplo, para impedir que usuário acesse websites sem a configuração de proxy, obrigando ele ir pela porta 3128 (padrão) do Squid para ter acesso a websites. Veja minha dica em relação a isso com mais detalhes neste link:
Interfaces
Usamos dois parâmetros para manipular o fluxo dos dados pelas interfaces (eth0, eth1, etc) são eles:
- -i, --in-interface: interface por onde os pacotes vieram;
- -o, --out-interface: interface por onde os pacotes estão saindo.
O -i não pode ser utilizado com a chain OUTPUT, assim como -o não pode ser utilizado com a chain INPUT. Apenas pacotes passando pela chain FORWARD têm interfaces de entrada e saída. Vejamos:
# iptables -A FORWARD -i ! eth0 -j DROP
Nesta regra temos que os pacotes que entram pela interface eth0 serão aceitos, o mesmo não vai acontecer com todas as outras interfaces. Fiquem atentos à inversão "!". Quando queremos criar regras do Iptables para interfaces que ainda não existem, como a ppp0, fazemos da mesma forma como para as existentes, sendo que as regras só começarão a funcionar quando a interface existir. Podemos também usar a opção eth+ para aplicar as regras em todas as interfaces com uma única linha de código:
# iptables -A FORWARD -i eth+ -j DROP
Nesta regra todos os pacotes que entram pelas interfaces, eth0, eth1, eth2 e etc serão negados.
Inversão
Muitas flags podem ter seus argumentos precedidos de "!" para associar-se com partes diferentes aos passados na opção. É interessante compreender bem o uso do "!" pois, na prática, ele é bastante usado. Para evitar dúvidas na compreensão de scripts firewall grandes, sempre comente seu código, pois detalhes assim podem confundir outro administrador de redes mais desatento.