Re: [FUG-BR] Dúvida Natd (fluxo de pacotes pelo ip fw)
Luiz Otavio Souza escreveu: Rodolfo Zappa escreveu: (...) Ok, mas o pacote é reavaliado desde o início das regras, ou a partir do ponto do divert? O problema que eu tenho é o seguinte: eu quero bloquear ou liberar pacotes da minha lan para a internet, baseados no ip de origem. Mas, após passar pelo natd, o pacote perde a referência do ip de origem, e a terceira regra abaixo, nunca é acionada. ${ipfw} 100 divert natd ip from any to any via ${ext_if} ${ipfw} 101 chek-state ${ipfw} 102 allow tcp from 192.168.0.25 to any 80 out via ${ext_if} Estou estudando o IPFW, acho a sintaxe maravilhosa e simples, os controles de banda facílimos de aprender, mas o fluxo do pacote pelo firewall, quando tem um divert para o natd, são muito mal documentados e completamente diferentes do PF, IPF e até do IPTABLES do netfilter. Por exemplo, no netfilter o fluxo é assim (simplificando): nat prerouting -- forward -- nat postrouting e quando eu quero liberar ou bloquear um pacote, baseado na origem, uso a chain forward, que memso depois de pasara pelo nat, não perde a referência do ip de origem. Alguém tem um bom doc sobre ipfw + natd, mostrando o fluxo dos pacotes pelo firewall? Patrick, pode dar uma mãozinha de novo? Rodolfo, Os são pacotes enviados para o natd através do divert no ipfw e voltam (do natd para o ipfw) na mesma regra, o processamento continua a partir da linha do natd. Mas seu problema é que você esta procurando pelo pacote depois que ele já foi nateado e ai realmente você perde a referencia ao IP interno. É só fazer a regra utilizando a interface interna e não a externa. O fluxo do ipfw (com duas placas e pacotes passando da rede interna para a rede externa) é o seguinte: in via intif - out via intif - in via outif - out via outif. Já o fluxo do natd é o seguinte: - O IP de origem é substituido apenas em pacotes que estão saindo pela interface (out via outif) e é criado um estado para essa tradução. - Já os pacotes chegando na interface (in via outif) são verificados contra a tabela de estados do natd e caso seja identificado como um pacote traduzido ele é nateado de volta (o IP de destino dessa vez é alterado para o IP interno utilizando as informações salvas na tabela de estado). Ou seja, para o natd funcionar são necessárias duas linhas: # ipfw add divert natd ip from 192.168.0.0/24 to any out via bge0 # = faz o nat de saída # ipfw add divert natd ip from any to 200.200.200.200 in via bge0 # = faz o nat do retorno Considerando que sua rede interna seja 192.168.0.0/24 e o IP do seu servidor seja 200.200.200.200. Como nem sempre o servidor tem IP fixo, a maioria dos exemplo simplifica essas duas regras em uma única (como nos exemplos em /etc/rc.firewall), mas isso normalmente acaba passando mais trafego do que o preciso pelo natd (o trafego que não precisa ser nateado é ignorado, mas consome alguns recursos extras, já que o natd roda no espaço usuário e os pacotes precisam ser copiados do kernel para o natd e depois reinjetados pelo natd através de outra copia no sentido inverso). []s Luiz PS: Regras check-state e stablished após o natd são potencialmente perigosas, elas passam os pacotes baseados no estado de cada conexão e podem confundir bastante. Faça todo trabalho sujo (fwd por exemplo) logo depois do natd para evitar problemas. - Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd !DSPAM:8,46d19726816441013332718! Luiz, Muito grato pela informação!!! Mas gostaria também de ler mais sobre o assunto. Neste aspecto em particular, o handbook é bem fraco. Já vi o ipfw-howto e o ipfw-advanced howto, e eles se atém muito a sintaxe, em vez da lógica do firewall (como o fluxo). Além disso, muito pouca documentação sobre ipfw + natd, ambas documentações tratam deles em separado, ou em ambientes pobres, para exemplos. Até hoje não consegui formar uma opinião, sobre a viabilidade do uso do natd para ambientes grandes (mais de 300 usuários simultâneos), se ele comporta (obviamente, num mesmo hardware que hoje tem o pf). Apesar do pf estar atendendo, tenho cogitado mudar para o ipfw, por conta do maior controle de pacotes e traffic shapping do ipfw, mas o natd é de tirar o sono. Pelo menos pra mim, as regras com natd não são tão claras quanto as regras do nat com o pf. A propósito, alguém na lista comentou que o ipfw no freebsd 7 vem com nat builtin no kernel. É verdade? Faz sentido? -- Cordialmente, Rodolfo Zappa Archive TSP - Total Solution Provider Nosso negócio é garantir que a sua rede de informações não pare! (21) 2567-1842 [EMAIL PROTECTED] http://www.archive.com.br Se a gente se lança sem vigor, sete de dez ações tomadas não dão certo. É extremamente difícil tomar decisões num estado de agitação. Por outro lado, se sem se preocupar com as
Re: [FUG-BR] Dúvida Natd (fluxo de pacotes pelo ip fw)
Rodolfo Zappa escreveu: (...) Ok, mas o pacote é reavaliado desde o início das regras, ou a partir do ponto do divert? O problema que eu tenho é o seguinte: eu quero bloquear ou liberar pacotes da minha lan para a internet, baseados no ip de origem. Mas, após passar pelo natd, o pacote perde a referência do ip de origem, e a terceira regra abaixo, nunca é acionada. ${ipfw} 100 divert natd ip from any to any via ${ext_if} ${ipfw} 101 chek-state ${ipfw} 102 allow tcp from 192.168.0.25 to any 80 out via ${ext_if} Estou estudando o IPFW, acho a sintaxe maravilhosa e simples, os controles de banda facílimos de aprender, mas o fluxo do pacote pelo firewall, quando tem um divert para o natd, são muito mal documentados e completamente diferentes do PF, IPF e até do IPTABLES do netfilter. Por exemplo, no netfilter o fluxo é assim (simplificando): nat prerouting -- forward -- nat postrouting e quando eu quero liberar ou bloquear um pacote, baseado na origem, uso a chain forward, que memso depois de pasara pelo nat, não perde a referência do ip de origem. Alguém tem um bom doc sobre ipfw + natd, mostrando o fluxo dos pacotes pelo firewall? Patrick, pode dar uma mãozinha de novo? Rodolfo, Os são pacotes enviados para o natd através do divert no ipfw e voltam (do natd para o ipfw) na mesma regra, o processamento continua a partir da linha do natd. Mas seu problema é que você esta procurando pelo pacote depois que ele já foi nateado e ai realmente você perde a referencia ao IP interno. É só fazer a regra utilizando a interface interna e não a externa. O fluxo do ipfw (com duas placas e pacotes passando da rede interna para a rede externa) é o seguinte: in via intif - out via intif - in via outif - out via outif. Já o fluxo do natd é o seguinte: - O IP de origem é substituido apenas em pacotes que estão saindo pela interface (out via outif) e é criado um estado para essa tradução. - Já os pacotes chegando na interface (in via outif) são verificados contra a tabela de estados do natd e caso seja identificado como um pacote traduzido ele é nateado de volta (o IP de destino dessa vez é alterado para o IP interno utilizando as informações salvas na tabela de estado). Ou seja, para o natd funcionar são necessárias duas linhas: # ipfw add divert natd ip from 192.168.0.0/24 to any out via bge0 # = faz o nat de saída # ipfw add divert natd ip from any to 200.200.200.200 in via bge0 # = faz o nat do retorno Considerando que sua rede interna seja 192.168.0.0/24 e o IP do seu servidor seja 200.200.200.200. Como nem sempre o servidor tem IP fixo, a maioria dos exemplo simplifica essas duas regras em uma única (como nos exemplos em /etc/rc.firewall), mas isso normalmente acaba passando mais trafego do que o preciso pelo natd (o trafego que não precisa ser nateado é ignorado, mas consome alguns recursos extras, já que o natd roda no espaço usuário e os pacotes precisam ser copiados do kernel para o natd e depois reinjetados pelo natd através de outra copia no sentido inverso). []s Luiz PS: Regras check-state e stablished após o natd são potencialmente perigosas, elas passam os pacotes baseados no estado de cada conexão e podem confundir bastante. Faça todo trabalho sujo (fwd por exemplo) logo depois do natd para evitar problemas. - Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
Re: [FUG-BR] Dúvida Natd (fluxo de pacotes pelo ip fw)
João Paulo Just escreveu: -BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Rodolfo Zappa escreveu: Alguém pode me passar o fluxo de um pacote pelo firewall? Minha dúvida é a seguinte: Depois de fazer o divert para o natd, o pacote é traduzido (nateado). Após isso ele é re-injetado no fluxo do firewall, podendo ser reavalidao pelo filtro de pacotes? Exemplo: ${ipfw} 00400 divert natd ip from any to any via ${ext_if} ${ipfw} 00401 check-state ${ipfw} 00402 deny log tcp from any to any 80 out via ${ext_if} setup keep-state Esta terceira regra nunca é acionada. Sim. Eu faço o divert pro natd no meu servidor e em seguida, limito a banda com o próprio IPFW. - -- João Paulo Just Diretor Executivo - Justsoft Informática Ltda. http://www.justsoft.com.br/ - -- Ilhéus, BA, Brasil. +55 75 8104 8473 Ok, mas o pacote é reavaliado desde o início das regras, ou a partir do ponto do divert? O problema que eu tenho é o seguinte: eu quero bloquear ou liberar pacotes da minha lan para a internet, baseados no ip de origem. Mas, após passar pelo natd, o pacote perde a referência do ip de origem, e a terceira regra abaixo, nunca é acionada. ${ipfw} 100 divert natd ip from any to any via ${ext_if} ${ipfw} 101 chek-state ${ipfw} 102 allow tcp from 192.168.0.25 to any 80 out via ${ext_if} Estou estudando o IPFW, acho a sintaxe maravilhosa e simples, os controles de banda facílimos de aprender, mas o fluxo do pacote pelo firewall, quando tem um divert para o natd, são muito mal documentados e completamente diferentes do PF, IPF e até do IPTABLES do netfilter. Por exemplo, no netfilter o fluxo é assim (simplificando): nat prerouting -- forward -- nat postrouting e quando eu quero liberar ou bloquear um pacote, baseado na origem, uso a chain forward, que memso depois de pasara pelo nat, não perde a referência do ip de origem. Alguém tem um bom doc sobre ipfw + natd, mostrando o fluxo dos pacotes pelo firewall? Patrick, pode dar uma mãozinha de novo? -- Cordialmente, Rodolfo Zappa Archive TSP - Total Solution Provider Nosso negócio é garantir que a sua rede de informações não pare! (21) 2567-1842 [EMAIL PROTECTED] http://www.archive.com.br Se a gente se lança sem vigor, sete de dez ações tomadas não dão certo. É extremamente difícil tomar decisões num estado de agitação. Por outro lado, se sem se preocupar com as conseqüências menores, abordamos os problemas com o espírito afiado como uma lâmina, sempre encontramos a solução em menos tempo do que é necessáio para respirar sete vezes. Nabeshima Naoshige (1538-1618) - Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
Re: [FUG-BR] Dúvida Natd (fluxo de pacotes pelo ip fw)
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Rodolfo Zappa escreveu: Ok, mas o pacote é reavaliado desde o início das regras, ou a partir do ponto do divert? O problema que eu tenho é o seguinte: eu quero bloquear ou liberar pacotes da minha lan para a internet, baseados no ip de origem. Mas, após passar pelo natd, o pacote perde a referência do ip de origem, e a terceira regra abaixo, nunca é acionada. ${ipfw} 100 divert natd ip from any to any via ${ext_if} ${ipfw} 101 chek-state ${ipfw} 102 allow tcp from 192.168.0.25 to any 80 out via ${ext_if} Faça: ${ipfw} 102 allow tcp from 192.168.0.25 to any 80 in via ${in_if} Na interface de saída, o IP de origem já foi traduzido. Essa regra deve ser feita na interface de entrada. (Pelo menos é assim que eu faço) Estou estudando o IPFW, acho a sintaxe maravilhosa e simples, os controles de banda facílimos de aprender, mas o fluxo do pacote pelo firewall, quando tem um divert para o natd, são muito mal documentados e completamente diferentes do PF, IPF e até do IPTABLES do netfilter. Por exemplo, no netfilter o fluxo é assim (simplificando): nat prerouting -- forward -- nat postrouting e quando eu quero liberar ou bloquear um pacote, baseado na origem, uso a chain forward, que memso depois de pasara pelo nat, não perde a referência do ip de origem. Alguém tem um bom doc sobre ipfw + natd, mostrando o fluxo dos pacotes pelo firewall? Patrick, pode dar uma mãozinha de novo? - -- João Paulo Just Diretor Executivo - Justsoft Informática Ltda. http://www.justsoft.com.br/ - -- Ilhéus, BA, Brasil. +55 75 8104 8473 -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGztU8XL+vuN2d7ZwRAnE5AKCUSJHmv1qBVoT8ajgtCPEDmX+zmACgluzC 0yClkkwmeqSnAV+dvH0ffBE= =Jwcq -END PGP SIGNATURE- - Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
Re: [FUG-BR] Dúvida Natd (fluxo de pacotes pelo ip fw)
Rodolfo, Vee se esse script te ajuda... fiz ele ja faz um tempo, seria apenas um exemplo que separa o fluxo, se alguma coisa der errado ou nao funcionar verifique os logs []´s JP #!/bin/sh # Regras de Firewall (ipfw - IP firewall and traffic shaper control program) # Escrito por Joao Paulo Marques Mattos ([EMAIL PROTECTED]) # Data: 27/12/2002 # # # para que este script funcione eh necessario que seja indicado a localizacao # dele no arquivo /etc/rc.conf, procure por: firewall_enable=YES # e insira na proxima linha: firewall_script=/etc/firewall/fwrules # define o comando do firewall (igual ao /etc/rc.firewall) para simplificar # a referencia. facilita a leitura. fwcmd=/sbin/ipfw # define a interface externa e o seu IP exteth=rl1 extIP=200.0.0.139/32 # define a interface interna inteth=rl0 # forca a remocao das regras atuais antes de carregar $fwcmd -f flush # dummynet setando o pipe e a sua velocidade #$fwcmd pipe 10 config mask src-ip 0x00ff bw 64kbit/s queue 6Kbytes #$fwcmd pipe 11 config mask dst-ip 0x00ff bw 64kbit/s queue 6Kbytes # Verifica todo o trafego entrante... interface externa # em caso positivo pula para a regra 5 ## $fwcmd add skipto 5 all from any to me in recv $exteth ## # Filtra e verifica todo trafego sainte e (com regras dinamicas) # todo trafego entrante ## # libera pelo NAT $fwcmd add skipto 4 tcp from 192.168.1.10 to any keep-state out xmit $exteth # ICMP GERAL $fwcmd add skipto 4 icmp from any to any icmptypes 0,3,8,11 ## # permite todas as conexoes confiaveis - interface interna ## # localhost $fwcmd add allow ip from any to any via lo0 # dummynet para squid #$fwcmd add pipe 10 log all from 192.168.1.10 to me 3128 out via $exteth #$fwcmd add pipe 11 log all from me 3128 to 192.168.1.10 in via $exteth # liberado somente para interface interna $fwcmd add allow tcp from any to any out xmit $exteth setup $fwcmd add allow udp from any to any out xmit $exteth # uma vez que uma conexao foi estabelecida, permite que fique aberta $fwcmd add allow tcp from any to any via $exteth established # Libera e loga o resto do trafego da interface interna $fwcmd add allow log ip from any to any via $inteth $fwcmd add allow udp from any 53 to any in via $exteth # Pra ter certeza de que nao passara nada que nao for permitido $fwcmd add deny log ip from any to any ## # Somente passarao por estas regras em duas circunstancias: # 1) Qualquer pacote sainte que recebeu a flag keep-state # 2) Qualquer pacote entrante que encontrar uma regra dinamica ## # NAT $fwcmd add 4 divert natd all from any to any out xmit $exteth # dummynet $fwcmd add pipe 11 log all from any 80 to 192.168.1.10 in via $exteth # Interface interna $fwcmd add allow ip from any to any via $inteth # conexoes iniciadas pelo servidor $fwcmd add allow tcp from any to any out xmit $exteth setup $fwcmd add allow udp from any to any out xmit $exteth # uma vez que uma conexao foi estabelecida, permite que fique aberta $fwcmd add allow tcp from any to any via $exteth established # ICMP (para ping e traceroute funcionarem) $fwcmd add allow icmp from any to any # DNS $fwcmd add allow udp from any 53 to any 1024-65535 in via $exteth # Liberacao de todo resto com log para debug $fwcmd add allow log all from any to any # Pra ter certeza de que nao passara nada que nao for permitido $fwcmd add deny log all from any to any ## # Somente passarao por estas regras trafego entrante. Precisamos # definir o que queremos aceitar ou nao. A flag ckeck-state # ira disparar a regra dinamica e pular para a 4 ## $fwcmd add 5 divert natd all from any to any in recv $exteth $fwcmd add check-state # conexoes iniciadas pelo servidor $fwcmd add allow tcp from any to any out xmit $exteth setup $fwcmd add allow udp from any to any out xmit $exteth # uma vez que uma conexao foi estabelecida, permite que fique aberta $fwcmd add allow tcp from any to any via $exteth established # UDP - DNS $fwcmd add allow udp from any 53 to any in $fwcmd add allow udp from any to any 53 in # ICMP (para ping e traceroute funcionarem) $fwcmd add allow icmp from any to any # rejeita o resto $fwcmd add deny log all from any to any - Histórico: http://www.fug.com.br/historico/html/freebsd/
Re: [FUG-BR] Dúvida Natd (fluxo de pacotes pelo ipfw)
Em Sex, Agosto 24, 2007 10:28 am, Joao Paulo Marques Mattos escreveu: Rodolfo, Vee se esse script te ajuda... fiz ele ja faz um tempo, seria apenas um exemplo que separa o fluxo, se alguma coisa der errado ou nao funcionar verifique os logs []´s JP Scriptzão danado de grande, xará :P Vou aproveitar pra aprender mais com ele. -- João Paulo Just Diretor Executivo - Justsoft Informática Ltda. http://www.justsoft.com.br/ -- Ilhéus, BA, Brasil. +55 75 8104 8473 - Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
[FUG-BR] Dúvida Natd
Alguém pode me passar o fluxo de um pacote pelo firewall? Minha dúvida é a seguinte: Depois de fazer o divert para o natd, o pacote é traduzido (nateado). Após isso ele é re-injetado no fluxo do firewall, podendo ser reavalidao pelo filtro de pacotes? Exemplo: ${ipfw} 00400 divert natd ip from any to any via ${ext_if} ${ipfw} 00401 check-state ${ipfw} 00402 deny log tcp from any to any 80 out via ${ext_if} setup keep-state Esta terceira regra nunca é acionada. -- Cordialmente, Rodolfo Zappa Archive TSP - Total Solution Provider Nosso negócio é garantir que a sua rede de informações não pare! (21) 2567-1842 [EMAIL PROTECTED] http://www.archive.com.br E não sabendo que era impossível, ele foi lá e fez. (Autor desconhecido) Se a gente se lança sem vigor, sete de dez ações tomadas não dão certo. É extremamente difícil tomar decisões num estado de agitação. Por outro lado, se sem se preocupar com as conseqüências menores, abordamos os problemas com o espírito afiado como uma lâmina, sempre encontramos a solução em menos tempo do que é necessário para respirar sete vezes. (Nabeshima Naoshige, 1538-1618) - Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd