[FUG-BR] IPFW + NATD + FTP ATIVO

Gule # gule.cps em gmail.com
Sábado Julho 28 10:47:41 BRT 2007


On 7/27/07, Rodolfo Zappa <listas-rod em zappa.eti.br> wrote:
> Galera,
>
> Antes de alguém vir com sermão, já pesquisei muito no histórico da lista
> de no google, ok?
>
> Estou montando um gateway de internet para uma lan pequena, cujas regras
> de firewall estou fazendo em IPFW.
>
> Esta é a primeira vez que utilizo o IPFW, pois antes utilizava o PF.
> Diga-se de passagem, que achei o IPFW muito mais flexível, enxuto e de
> sintaxe mais fácil de aprender que o PF.
>
> O problema que eu tive, foi para colocar o maldito ftp ativo (clientes
> na minha lan acessando servidores na internet) funcionando através do nat.
>
> O ftp passivo funciona, com a seguinte regra:
>
> #---- Regra pra liberar FTP passivo (eh phoda!)
> ${ipfwcmd} 03999 ${skipto} tcp from any 1024-65535 to any 10240-65535
> out via ${ext_if} setup keep-state
>
> Mas ficam muitas portas liberadas, e preferiria ter somente o ftp ativo.
>
> Para isto, estou iniciando o natd com a seguinte linha no rc.conf:
>
> firewall_enable="YES"
> firewall_script="/usr/local/etc/ipfw.sh"
> natd_enable="YES"
> natd_interface="fxp0"
> natd_flags="-dynamic -m -use_sockets -u -punch_fw 100:200"
>
> Para as regras do punch_fw ficarem logo após destas:
>
> #---- Divert para nat e checkagem de regras dinâmicas
> ${ipfwcmd} 00010 divert natd ip from any to any in via ${ext_if}
> ${ipfwcmd} 00011 check-state
>
> O problema é que o punch coloca regras liberando o tráfego da máquina
> cliente em direção ao servidor na porta 20, e vice-versa, mas a conexão
> de retorno do servidor não funciona (o cliente não consegue listar os
> diretórios depois de conectado).
>
> Perguntas:
> 1) A regra que o punch coloca não tem a opção setup keep-state. É assim
> mesmo?
> 2) A regra do punch tem que ficar onde exatamente? Ela está depois do
> divert in e check-state e antes das regras de skipto.
>
> Abaixo, segue meu script de firewall completo.
>
> Por favor, me enviem uma luz.
>
> -------------------------------------------------
> #!/bin/sh
>
> #------- Variáveis de ambiente
> ipfw='ipfw'
> ipfwcmd='ipfw -q add'
> skipto='skipto 65500'
>
> ext_if='fxp0'
> lan_if='rl0'
>
> src_num='300'
> src_free='192.168.0.34'
>
> dst_num='500'
> dst_free='200.177.225.0/24'
>
> tcp_num='2000'
> tcp_out='21 22 25 53 110 123 143 80 443 567 993 995'
>
> udp_num='3000'
> udp_out='53'
>
> icmptypes='0,3,8,11,12,13,14'
>
> #---- Limpa geral (exceto set 31)
> ${ipfw} -q -f flush
>
> #---- Libera tráfego oriundo próprio do firewall
> ${ipfwcmd} 00001 allow all from any to any via lo
> ${ipfwcmd} 00002 allow all from me to any out via ${ext_if} setup
> keep-state uid root
>
> #---- Libera tráfego na interface da LAN
> ${ipfwcmd} 00003 allow all from any to any via ${lan_if}
>
> #---- Divert para nat e checkagem de regras dinâmicas
> ${ipfwcmd} 00010 divert natd ip from any to any in via ${ext_if}
> ${ipfwcmd} 00011 check-state
>
> #---- Tráfego de saída
> for src in ${src_free} ; do
>     ${ipfwcmd} ${src_num} ${skipto} all from ${src} to any out via
> ${ext_if} keep-state
>     src_num=$(echo "${src_num} + 1" | bc)
> done
>
> for dst in ${dst_free} ; do
>     ${ipfwcmd} ${dst_num} ${skipto} all from any to ${dst} out via
> ${ext_if} keep-state
>     dst_num=$(echo "${dst_num} + 1" | bc)
> done
>
> for tcp in ${tcp_out} ; do
>     ${ipfwcmd} ${tcp_num} ${skipto} tcp from any to any ${tcp} out via
> ${ext_if} setup keep-state
>     tcp_num=$(echo "${tcp_num} + 1" | bc)
> done
>
> for udp in ${udp_out} ; do
>     ${ipfwcmd} ${udp_num} ${skipto} udp from any to any ${udp} out via
> ${ext_if} keep-state
>     udp_num=$(echo "${udp_num} + 1" | bc)
> done
>
> ${ipfwcmd} 03998 ${skipto} icmp from any to any icmptypes ${icmptypes}
> out via ${ext_if} keep-state
>
> #---- Regra pra liberar FTP passivo (eh phoda!)
> ${ipfwcmd} 03999 ${skipto} tcp from any 1024-65535 to any 10240-65535
> out via ${ext_if} setup keep-state
>
> #---- Tráfego de entrada
> ${ipfwcmd} 05000 deny all from any to any frag in via ${ext_if}
> ${ipfwcmd} 05001 deny tcp from any to any established in via ${ext_if}
>
> ${ipfwcmd} 05010 deny all from 0.0.0.0/8 to any in via ${ext_if}
> # loopbak
> ${ipfwcmd} 05011 deny all from 127.0.0.0/8 to any in via ${ext_if}
> # loopbak
> ${ipfwcmd} 05012 deny all from 10.0.0.0/8 to any in via ${ext_if}
> # RFC 1928
> ${ipfwcmd} 05013 deny all from 172.16.0.0/12 to any in via ${ext_if}
> # RFC 1918
> ${ipfwcmd} 05014 deny all from 192.168.0.0/16 to any in via ${ext_if}
> # RFC 1918
> ${ipfwcmd} 05015 deny all from 169.254.0.0/16 to any in via ${ext_if}
> # DHCP auto-config
> ${ipfwcmd} 05016 deny all from 192.0.2.0/24 to any in via ${ext_if}
> # Reservado
> ${ipfwcmd} 05017 deny all from 204.152.64.0/23 to any in via ${ext_if}
> # Sun Cluster
> ${ipfwcmd} 05018 deny all from 224.0.0.0/3 to any in via ${ext_if}
> # Class D e E
>
> ${ipfwcmd} 05100 allow icmp from any to me icmptypes ${icmptypes} via
> ${ext_if} limit src-addr 2
> ${ipfwcmd} 05101 allow tcp from any to me 22 in via ${ext_if} limit
> src-addr 2
>
> ${ipfwcmd} 05200 deny log all from any to any in via ${ext_if}
> ${ipfwcmd} 05201 deny log all from any to any out via ${ext_if}
>
> #---- Regra skip to para nat do tráfego de saída
> ${ipfwcmd} 65500 divert natd ip from any to any out via ${ext_if}
> ${ipfwcmd} 65501 allow ip from any to any
>
> #---- Bloqueia tudo por default
> ${ipfwcmd} 65534 deny log all from any to any
>
> --
> 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
> rodolfo em archive.com.br
> 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
>

proxy-ftp !?


Mais detalhes sobre a lista de discussão freebsd