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 [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