[FUG-BR] RDR no PF

Joao Victor da Costa victor em openit.com.br
Quarta Junho 27 14:17:17 BRT 2007


Amigos,
 o ftp como todos sabem (ou deveriam) não funciona bem atrás de nat.
Será necessario configurar o ftp-proxy na porta 21 da maquina de
firewall e mais os anchors on-the-fly.

####################################################################################
Neste caso, o firewall deve redirecionar tráfego para o servidor FTP
além de não bloquear as portas necessárias. Para conseguir isto,
voltamos para o ftp-proxy(8).

O ftp-proxy(8) pode rodar em um modo que faz com que ele redirecione
todas as conexões FTP para um servidor FTP específico. Basicamente
configuramos o proxy para escutar na porta 21 no firewall e
redirecionamos todas as conexões de volta para o servidor.
Edite o /etc/rc.conf e adicione o seguinte:
inetd_enable="YES"
inetd_flags="-wW -C 60"
Aqui ativamos o servidor inetd. Agora precisamos
incializa-lo :                                                                /etc/rc.d/inetd start                                                                                                                                                                                                                             Edite o arquivo /etc/inetd.conf e adicione ao final do arquivo a seguinte linha :
    ftp     stream  tcp     nowait  root    /usr/libexec/ftp-proxy
ftp-proxy -R 10.10.10.1:21 -a 192.168.0.1
Aqui 10.10.10.1 é o endereço IP do atual servidor FTP, 21 é a porta para
onde queremos que o ftp-proxy(8) redirecione as conexões e 192.168.0.1 é
o endereço no firewall para o proxy (endereço externo).

Agora para as regras pf.conf:

    ext_ip = "192.168.0.1"
    ftp_ip = "10.10.10.1"

    nat-anchor "ftp-proxy/*"
    nat on $ext_if inet from $int_if -> ($ext_if)
    rdr-anchor "ftp-proxy/*"

    pass in on $ext_if inet proto tcp to $ext_ip port 21 \
        flags S/SA keep state
    pass out on $int_if inet proto tcp to $ftp_ip port 21 \
        user proxy flags S/SA keep state
    anchor "ftp-proxy/*"

Aqui nós permitimos a conexão para a porta 21 na interface externa bem
como a conexão de saída correspondente para o servidor FTP. O üser
proxy" na regra de saída garante que apenas as conexões iniciadas pelo
ftp-proxy(8) sejam permitidas.

Note que se você quer rodar o ftp-proxy(8) para proteger um servidor FTP
bem como permitir clientes fazer FTP para fora do firewall, duas
instâncias do ftp-proxy serão necessarias.



Referencia: http://www.openbsd.org/faq/pf/pt/ftp.html

[]'s.

On Wed, 2007-06-27 at 10:51 +0000, Alessandro de Souza Rocha wrote:
> Em 26/06/07, Lutieri G.<lutierigbtrabalho em gmail.com> escreveu:
> > Eu já encontrei o problema era a máquina com o serviço de ftp que
> > estava com o default gateway errado. Mas já testei e não funciona rdr
> > PASS. até há algum tempo havíamos discutido isso na lista.
> >
> >
> > obrigado a todos!
> >
> > Em 26/06/07, Thiago J. Ruiz<thiagojruiz em gmail.com> escreveu:
> > > experimenta
> > >
> > > rdr pass on .....
> > >
> > > gera mantem o estado automaticamente liberando a inda e a vinda da conexao
> > >
> > >
> > > (Se eu estiver falando groselha me corrijam), mas pra mim funciona em
> > > vários servidores.
> > >
> > > abraço
> > >
> > > Em 26/06/07, Lutieri G.<lutierigbtrabalho em gmail.com> escreveu:
> > > > To montando um firewall e está assim:
> > > >
> > > > srv# pfctl -sn
> > > > No ALTQ support in kernel
> > > > ALTQ related functions disabled
> > > > nat pass on em1 inet all -> 201.xx.xx.161
> > > > rdr on em1 inet proto tcp from any to 201.xx.xx.161 port = ftp ->
> > > > 172.16.4.2 port 21
> > > > srv#
> > > >
> > > >
> > > > srv# pfctl -sr
> > > > No ALTQ support in kernel
> > > > ALTQ related functions disabled
> > > > pass in all keep state
> > > > pass out all keep state
> > > > pass in on em0 inet proto tcp from <acessolocal> to 172.16.4.240 port
> > > > = ssh keep state
> > > > srv#
> > > >
> > > > Empaquei aqui. Olha a situação:
> > > >
> > > >
> > > > eu estou na máquina 201.xx.x.5(uma máquina na internet) tentando
> > > > acessar o firewall(201.xx.xx.161) que deveria redirecionar a conexao
> > > > ftp para 172.16.4.2.
> > > >
> > > > Não vai de jeito nenhum ... cheguei a liberar tudo pra ver se funciona e nada.
> > > > Li nos histórico da lista mas não encontrei a solução, não pro meu caso.
> > > >
> > > > O mais interessantes é que as regras estão passado pelos filtros. Pois
> > > > quando eu vou na estação quem tá rodando o ftp(172.16.4.2) e rodo o
> > > > tcpdump eu vejo pacotes vindos do IP remoto de onde eu tento acessar.
> > > >
> > > > local# tcpdump -n host 201.xx.x.5
> > > >
> > > > 13:52:13.368172 IP 172.16.4.2.21 > 201.xx.x.5.51007: S
> > > > 1550150509:1550150509(0) ack 2596759555 win 5792 <mss
> > > > 1460,sackOK,timestamp 10779497[|tcp]>
> > > >
> > > > 13:52:16.348249 IP 172.16.4.2.21 > 201.xx.x.5.51007: S
> > > > 1550150509:1550150509(0) ack 2596759555 win 5792 <mss
> > > > 1460,sackOK,timestamp 10779795[|tcp]>
> > > >
> > > > 13:52:17.361694 IP 172.16.4.2.21 > 201.xx.x.5.51007: S
> > > > 1550150509:1550150509(0) ack 2596759555 win 5792 <mss
> > > > 1460,sackOK,timestamp 10779897[|tcp]>
> > > >
> > > > 13:52:23.361246 IP 172.16.4.2.21 > 201.xx.x.5.51007: S
> > > > 1550150509:1550150509(0) ack 2596759555 win 5792 <mss
> > > > 1460,sackOK,timestamp 10780497[|tcp]>
> > > >
> > > > 13:52:35.560319 IP 172.16.4.2.21 > 201.xx.x.5.51007: S
> > > > 1550150509:1550150509(0) ack 2596759555 win 5792 <mss
> > > > 1460,sackOK,timestamp 10781717[|tcp]>
> > > >
> > > > 13:52:59.558496 IP 172.16.4.2.21 > 201.xx.x.5.51007: S
> > > > 1550150509:1550150509(0) ack 2596759555 win 5792 <mss
> > > > 1460,sackOK,timestamp 10784117[|tcp]>
> > > >
> > > >
> > > > Porém me parece, talvez eu esteja errado(tomara que sim), que a
> > > > estação 172.16.4.2 está enviando pacotes SYN para a máquina remota
> > > > 201.xx.x.5. e mais estranho que eu num vejo os pacotes vindo da
> > > > máquina externa só indo para ela.
> > > >
> > > > Alguma sugestão?
> > > >
> > > > É incrível mas tem meia dúzia de linhas e não funciona... por favor se
> > > > alguém puder ajudar fico grato.
> > > >
> > > > --
> > > > Att.
> > > > Lutieri G. B.
> > > > -------------------------
> > > > Histórico: http://www.fug.com.br/historico/html/freebsd/
> > > > Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
> > > >
> > >
> > >
> > > --
> > > Thiago J. Ruiz
> > > http://thiagoruiz.blogspot.com
> > > -------------------------
> > > Histórico: http://www.fug.com.br/historico/html/freebsd/
> > > Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
> > >
> >
> >
> > --
> > Att.
> > Lutieri G. B.
> > -------------------------
> > Histórico: http://www.fug.com.br/historico/html/freebsd/
> > Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
> >
> 
> da uma olhda aki ver se servi
> 
> rdr on $ext_if proto tcp from  200.221.2.0/24 to any port 80 ->  192.168.0.0/24
> rdr on $ext_if proto tcp from  200.221.5.0/24 to any port 80 ->  192.168.0.0/24
> rdr on $ext_if proto tcp from 200.221.8.0/24 to any port 80 ->  192.168.0.0/24
> rdr on $ext_if proto tcp from  200.221.5.0/24 to any port 80 ->  192.168.0.0/24
> rdr on $ext_if proto tcp from 200.221.8.0/24 to any port 80 ->  192.168.0.0/2
> rdr on $int_if proto tcp from any to any port 80 -> 192.168.0.252 port 3128
> rdr on $ext_if proto tcp from any to any port 6300 -> 192.168.0.250
> rdr on $ext_if proto tcp from any to any port 3389 -> 192.168.0.250
> nat on $ext_if from $int_if:network to any -> ($ext_if)
> rdr on $ext_if proto tcp from any to any port 6300 -> 192.168.0.250 \
>     round-robin sticky-address
-- 
Joao Victor da Costa.
Depto. de Suporte Unix
http://www.techmaster.com.br http://www.openit.com.br
http://www.myfreebsd.com.br 

Tel.: 2517-6001 e 2517-6002
E-mail: victor em openit.com.br, suporteunix em techmaster.com.br



Mais detalhes sobre a lista de discussão freebsd