Ver Feed RSS

The JEdi lair's

Netfilter/Iptables - Parte 4

Avaliação: 2 votos, 5,00 média.
Continuando mais uma vez...
Novamente, foram atingidos(sic) os 10000 caracteres. Vamos continuar com os targets...

8 - Target extensions
Continuando com os target extensions...

MARK
Define o campo netfilter mark (nfmark), existente somente dentro do kernel, podendo ser usado em conjunto com outros mecanismos, tal qual o iproute2. Essa target somente existe na tabela mangle.
--set-mark marca
Põe marca no nfmark do pacote

--and-mark valor
Faz uma operação AND binária de valor e o nfmark do pacote

--or-mark valor
Faz uma operação OR binária de valor e o nfmark do pacote
Exemplos consistentes do uso do MARK podem ser encontrados no Linux advanced Routing & Traffic Control HOWTO ou em Balanceamento de carga entre links com iproute2 - mini-howto - Under-Linux.org.

SNAT
Esse target possui a mesma função do DNAT, porém no sentido inverso, ou seja, altera a origem do pacote. O SNAT somente é válido na chain POSTROUTING da tabela nat. Seu principal parâmetro é:
--to-source ip[-ip][:port[-port]]
Modifica a origem do pacote para ip ou para o range ip-ip e modifica a porta para port ou para o range port-port.

ex: iptables -t nat -A POSTROUTING -p tcp --dport 80 -o eth0 -j SNAT --to-source 192.168.128-254:80-90
|
\-> A regra irá alterar o ip e porta de destino dos pacotes TCP destinados a porta 80 para o range 192.168.0.128 à 192.168.0.254 e portas 80 à 90.
ps: nunca vi um caso onde modificar a porta de origem fosse interessante... porém, se existe é por que alguém usa!

MASQUERADE
Essa target é útil onde existe a necessidade de um SNAT, porém a atribuição do endereço é feita de forma de dinâmica, inviabilizando a utilização de um endereço estático. Por exemplo:
iptables -t nat -A POSTROUTING -s 10.2.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.1
|
\-> Essa regra irá realizar o SNAT em todos os pacotes que tenham com origem a rede 10.2.0.0/24 e que, depois de tomada as decisões de roteamento, a interface de saída seja a eth0.
A regra acima é um modelo da maioria das regras usadas para compartilhar conexões com a Internet. Ela é bastante adequada para conexões onde o endereço de saída dos pacotes é estático, por exemplo um link dedicado. Porém, caso esteja usando um link ADSL, essa tarefa se torna um pouco complicada pois a cada reboot, por exemplo, existe a possibilidade de ser atribuído um endereço IP diferente. Para esses casos existe o target MASQUERADE:
iptables -t nat -A POSTROUTING -s 10.2.0.0/24 -o ppp0 -j MASQUERADE
|
\-> Essa regra irá modificar o endereço de origem do pacote de acordo com o endereço atribuído a interface ppp0. Ou seja, se depois de verificada as possíveis rotas para o pacote, a interface de saída seja a ppp0, atribua o endereço IP dessa interface.
A equipe do Netfilter/iptables recomenda o uso do SNAT em detrimento ao MASQUERADE, sendo o ultimo um remendo para casos realmente necessários.

NETMAP
Essa targe mapeia todo uma rede em outra baseando-se numa máscara de endereços. Visivelmente, essa target só esta presente na tabela nat.
--to ip/mascara
Endereço de rede a ser mapeado.
Explicando em miudos, essa target funciona da seguinte maneira: os bits definidos como 1 na mascara são copiados de ip para o endereço a ser alterado. Os outros bits são copiados do endereço IP do pacote. Exemplo:
iptables -t nat -A PREROUTING -p tcp -i eth0 -d 192.168.0.0/16 -j NETMAP --to 10.2.0.0/16
Seja ipaddr o endereço de destino original, netmap o endereço do argumento de NETMAP e snmask a máscara de sub-rede do argumento de NETMAP, o endereço de destino final, dnat, pode ser obtido pela seguinte fórmula:
dnat = (netmap & snmask) | (ipaddr & ~snmask)
onde & representa a operação binária AND, | representa o operação binária OR e ~ representa a operação binária NOT. Consideremos o pacote com destino a máquina 192.168.20.16.
dnat = (10.2.0.0 & 255.255.0.0) | (192.168.0.16 & 0.0.255.255)
dnat = 10.2.20.16
Portanto, o IP de destino final seria 10.2.20.16!

NOTRACK
Esse target serve para desativar o connection tracking das regras que casam com suas matchs. Por exemplo, caso não seja importante alocar recursos para pacotes UDP destinados a porta 123 (Network Time Protocol):
iptables -t raw -A PREROUTING -p udp --dport 123 -j NOTRACK
Esse targer existe somente na tabela raw.

TCPMSS
Permite alterar o Maximum Segment Size dos pacotes TCP. O MSS é um campo opcional dos pacotes TCP que geralmente é negociado entre o emitente e o destinatário dos pacotes. Em alguns provedores, os pacotes ICMP Fragmentation Needed são bloqueados, o que causa alguns incovenientes no roteamento de pacotes entre um rede local e a Internet. Esse targer só é válido na tabela mangle. As principais opções são:
--set-mss
Define explicitamente o MSS.

--clamp-mss-to-pmtu
Define automaticamente o MSS para o MTU da interface de saída - 40.
Alguns exemplos:
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
|
\-> Essa regra irá modificar o MSS automaticamente para os pacotes que contiverem a flag SYN ligada e a RST desligada.

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400
|
\-> O mesmo que a regra acima, porém o MSS será definido como 1400
É conveniente aplicar regras de MSS somente a pacotes SYN pois, na maioria dos casos, é quando o MSS é negociado.

8.1 Outras Target Extensions
Outras target extensions que se mostram interessantes são: TOS, SAME, REJECT, TTL e REDIRECT. Recomendo uma lida rápida no manual on-line do iptables ($ man 8 iptables) sobre o funcionamento delas. Importante também citar que existem mais targets, porém como possuem uma finalidade bastante expecífica e nem sempre proveitosa para todos, deixei-as de fora. Particulamente, quem se utiliza do SELinux poderá ver que existem inúmeras delas para tratar do contexto do pacote.

9- Conclusão
O Netfilter/iptables é uma das mais versáteis ferramentas de filtro de pacotes, permitindo a verificação de praticamente todos os campos dos cabeçalhos TCP/IP. Esse guia teve como objetivo elucidar os tópicos relativos as tabelas, match e targets, tentando, por meio de exemplos, mostrar como essas podem interagir e aumentar o controle da rede.

10 - Referências
Nada seriámos se não subissemos nos ombros dos gigantes, portanto esses são os que mais contribuiram para esse guia:

Hervy Eychenne: Netfilter/iptables man page.
Gleydson Mazioli da Silva: Guia Foca GNU/Linux Avançado.
Steve Suehring & Robert Ziegler: Linux Firewall, 3 ed. Novell Press

Fica implicito o agradecimento as milhões de dúvidas postadas todos os dias nos fóruns do Under-Linux.org, nas dicas do VivaOLinux.com.br e no dia a dia da administraçãod de sistemas de firewalls.

Atualizado 11-01-2009 em 16:08 por PEdroArthurJEdi

Categorias
Não Categorizado