[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