[FUGSPBR] divert (meio longo)

Carlos Alberto carlinho em xprt.eti.br
Qua Nov 12 23:02:28 BRST 2003


pessoal, 
 
estou tendo uma duvida em relacao ao divert e preciso de uma ajuda. 
 
estou com a seguinte plataforma de software: 
5.1-RELEASE-p10 FreeBSD 5.1-RELEASE-p10 #2 
 
estou revendo algumas regras referentes a nat e verifiquei o seguinte no 
manual do ipfw: 
 
divert port 
             Divert packets that match this rule to the divert(4) socket bound 
             to port port.  _The search terminates._ 
 
teoricamente, quando um pacote passa pelo divert e corresponde a uma 
solicitacao feita via nat, ele seria aceito e o processo se encerraria. 
pois bem, nao e bem isso que esta acontecendo. o pacote, mesmo 
correspondendo a uma solicitacao feita via nat continua a ser analisado 
nas demais regras do firewall. 
 
um exemplo pratico, desconsiderando as configuracoes de loopback: 
 
interface externa: xl0 
interface interna: xl1 
 
ipfw -a add 50 divert natd ip from any to any via xl0 
ipfw -a add 100 deny ip from any to any via xl0 
ipfw -a add 200 allow ip from any to any via xl1 
 
seguindo-se o descrito no manual do ipfw: 
um pacote da rede interna para a externa seria desviado para o socket 
correspondente ao natd em xl0, encerrando-se o processo. ate aqui, esta 
funcionando bem. 
um pacote que chegasse na interface externa e correspondesse a um 
pacote NATeado, seria desviado para rede interna, encerrando-se o 
processo. aqui reside o problema: o ipfw segue olhando as regras 
posteriores, e quanto chega na regra 100 o pacote e bloqueado. 
 
um exemplo pratico de como acontece o problema: 
 
natd -v -n xl0 
natd[956]: Aliasing to yy.yy.yy.yy, mtu 1500 bytes 
Out [ICMP] [ICMP] xx.xx.xx.xx -> 200.160.2.3 8(0) aliased to 
           [ICMP] yy.yy.yy.yy -> 200.160.2.3 8(0) 
natd: failed to write packet back: Permission denied 
Out [ICMP] [ICMP] xx.xx.xx.xx -> 200.160.2.3 8(0) aliased to 
           [ICMP] yy.yy.yy.yy -> 200.160.2.3 8(0) 
natd: failed to write packet back: Permission denied 
Out [ICMP] [ICMP] xx.xx.xx.xx -> 200.160.2.3 8(0) aliased to 
           [ICMP] yy.yy.yy.yy -> 200.160.2.3 8(0) 
natd: failed to write packet back: Permission denied 
 
um exemplo do que acontece sem a regra 100: 
natd -v -n xl0 
natd[995]: Aliasing to yy.yy.yy.yy, mtu 1500 bytes 
Out [ICMP] [ICMP] xx.xx.xx.xx -> 200.160.2.3 8(0) aliased to 
           [ICMP] yy.yy.yy.yy -> 200.160.2.3 8(0) 
In  [ICMP] [ICMP] 200.160.2.3 -> yy.yy.yy.yy 0(0) aliased to 
           [ICMP] 200.160.2.3 -> xx.xx.xx.xx 0(0) 
Out [ICMP] [ICMP] xx.xx.xx.xx -> 200.160.2.3 8(0) aliased to 
           [ICMP] yy.yy.yy.yy -> 200.160.2.3 8(0) 
In  [ICMP] [ICMP] 200.160.2.3 -> yy.yy.yy.yy 0(0) aliased to 
           [ICMP] 200.160.2.3 -> xx.xx.xx.xx 0(0) 
Out [ICMP] [ICMP] xx.xx.xx.xx -> 200.160.2.3 8(0) aliased to 
           [ICMP] yy.yy.yy.yy -> 200.160.2.3 8(0) 
In  [ICMP] [ICMP] 200.160.2.3 -> yy.yy.yy.yy.yy 0(0) aliased to 
           [ICMP] 200.160.2.3 -> xx.xx.xx.xx 0(0) 
 
alguma dica ? algo a alterar via sysctl ? 
 
valeu !! 
 
carlinho  



Mais detalhes sobre a lista de discussão freebsd