[GTER] RES: Cuidados com o Alvo(Target) Mark no iptables
Patrick Barreto Petronetto
patrick at vol.net.br
Tue Jun 30 10:18:21 -03 2009
Rapaz, eu também quebrei a cabeça um tempo por causa disso. Justamente pq pensava que uma vez marcado o pacote não percorria mais as regras de Mark também.
Só fui descobrir isso depois que rodei um sniffer depois do firewall e vi que a marcação estava diferente da que "deveria ser". hehehhee
É legal alertar o pessoal, acho que nem todo mundo sabe desse "detalhe" do iptables.
Att,
Patrick Barreto Petronetto
patrick at vol.net.br
http://www.vol.net.br
Antes de imprimir, pense em sua responsabilidade e compromisso com o MEIO AMBIENTE.
-----Mensagem original-----
De: gter-bounces at eng.registro.br [mailto:gter-bounces at eng.registro.br] Em nome de Carlos Eduardo Langoni
Enviada em: terça-feira, 30 de junho de 2009 09:58
Para: Grupo de Trabalho de Engenharia e Operacao de Redes
Assunto: [GTER] Cuidados com o Alvo(Target) Mark no iptables
Demorei 3 dias para entender este problema e encontrar a solução para
ele, e acho que pode ser útil para outras pessoas, a medida que
aumenta-se a oferta e disponibilidade de serviços de acesso a
internet.
Como todos sabem é simples e eficiente fazer balanceamento de carga
entre dois links de internet com Linux.
Isso é feito utilizando o Alvo(Target) MARK do iptables em conjunto
com algumas regras do iproute2[1].
O problema aparece quando começamos a trabalhar com vários alvos MARK.
No meu caso específico encontrei este problema quando comecei a
utilizar o NoCat como autenticador da rede, ele identifica o pacote já
autenticado através de marcas relacionadas a pacotes, 0x4 para não
autenticados e 0x3,0x2 e 0x1 para os autenticados, dependendo do grupo
ele escolhe entre as marcas 3,2 e 1.
Quando eu precisei fazer com que determinados pacotes saissem por uma
segunda conexão com a internet os problemas começaram. De forma alguma
eu consegui fazer funcionar. Eu removia todas as regras subia apenas
as regras necessárias ao roteamento e funcionava, quando misturava com
as regras nada de funcionar.
Após ler muitos logs e fazer muitos testes comecei a entender o funcionamento.
No geral quando um pacote casa com uma regra o iptables para o
processamento na chain e passa para a próxima chain (ou para o envio
do pacote quando chega na última chain). Mas no caso do alvo MARK,
como o pacote não foi aceitado nem rejeitado, o processamento não
para, ele simplesmente associa o pacote à marca e segue para próxima
regra. Se houver alguma outra regra de MARK conflitante, que também
case com o pacote, a marca do pacote será alterada.
Exemplo:
iptables -t mangle -A PREROUTING -s 192.168.0.0/24 -d 200.xxx.xxx.0/24
-j MARK --set-mark 1
iptables -t mangle -A PREROUTING -s 192.168.0.0/24 -d 0/0 -j MARK --set-mark 2
Neste caso todos os pacotes com origem em 192.168.0.0/24 serão
marcados com 2 no final do processamento
Se a última regra desta chain fosse:
iptables -t mangle -A PREROUTING -s 0/0 -d 0/0 -j MARK --set-mark 5
Todos os pacotes seriam marcados com 5.
Desta forma é preciso muita atenção para criar regras de marcação de
pacotes, a fim de evitar que a marca não seja aplicada corretamente.
No caso do exemplo a melhor ordem para as regras seria:
iptables -t mangle -A PREROUTING -s 0/0 -d 0/0 -j MARK --set-mark 5
iptables -t mangle -A PREROUTING -s 192.168.0.0/24 -d 0/0 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -s 192.168.0.0/24 -d 200.xxx.xxx.0/24
-j MARK --set-mark 1
Desta forma todos os pacotes com origem em 192.168.0.0/24 com destino
a 200.xxx.xxx.0/24 recebem marca 1, com origem 192.168.0.0/24 e
qualquer destino recebem marca 2 e os demais pacotes marca 5
Espero que seja útil para mais alguém esta informação
Abraços a todos!
[1] http://lartc.org/
--
gter list https://eng.registro.br/mailman/listinfo/gter
More information about the gter
mailing list