Re: [FUG-BR] IPFW + NATD + FTP ATIVO

2007-07-30 Por tôpico Gule #
yeap :D


On 7/28/07, Rodolfo Zappa [EMAIL PROTECTED] wrote:
 Gule # escreveu:
  proxy-ftp !?
  -
  Histórico: http://www.fug.com.br/historico/html/freebsd/
  Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
 
  !DSPAM:8,46ab4b346403216610029!

 Pelo ue eu li na documentação, o punch_fw faz esse papel de proxy-ftp
 para o ipfw.

 é isso mesmo?

 --
 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íito 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

-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] IPFW + NATD + FTP ATIVO

2007-07-28 Por tôpico Gule #
On 7/27/07, Rodolfo Zappa [EMAIL PROTECTED] 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} 1 allow all from any to any via lo
 ${ipfwcmd} 2 allow all from me to any out via ${ext_if} setup
 keep-state uid root

 # Libera tráfego na interface da LAN
 ${ipfwcmd} 3 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 

Re: [FUG-BR] IPFW + NATD + FTP ATIVO

2007-07-28 Por tôpico Rodolfo Zappa
Gule # escreveu:
 proxy-ftp !?
 -
 Histórico: http://www.fug.com.br/historico/html/freebsd/
 Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd

 !DSPAM:8,46ab4b346403216610029!

Pelo ue eu li na documentação, o punch_fw faz esse papel de proxy-ftp 
para o ipfw.

é isso mesmo?

-- 
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íito 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


[FUG-BR] IPFW + NATD + FTP ATIVO

2007-07-27 Por tôpico Rodolfo Zappa
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} 1 allow all from any to any via lo
${ipfwcmd} 2 allow all from me to any out via ${ext_if} setup 
keep-state uid root

# Libera tráfego na interface da LAN
${ipfwcmd} 3 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