+ Responder ao Tópico



  1. #1

    Padrão Redirecionamento

    Pessoal

    tenho a seguinte regra em meu firewall (192.168.1.1) e funciona perfeitamente, porém, das conexões que chegam da wan:

    ETH0="200.xxx.xxx.xxx" (dominio.com.br)

    $IPTABLES -t nat -A PREROUTING -p tcp -m tcp -d $ETH0/32 --dport 8000 -j DNAT --to 192.168.1.2:80
    $IPTABLES -A FORWARD -p tcp -m tcp -d 192.168.1.2/32 --dport 80 -j ACCEPT

    Digitando - http://dominio.com.br:8000 - funciona tudo bem fora de rede interna.

    Eu preciso é que qdo o usuário, dentro da rede interna (lan), coloque no browser http://dominio.com.br:8000, os pacotes sejam redirecionados para 192.168.1.2:80 (servidor www), mas não estou conseguindo.

    Alguem poderia ajudar?

  2. #2

    Padrão

    Citação Postado originalmente por cldn Ver Post
    Pessoal

    tenho a seguinte regra em meu firewall (192.168.1.1) e funciona perfeitamente, porém, das conexões que chegam da wan:

    ETH0="200.xxx.xxx.xxx" (dominio.com.br)

    $IPTABLES -t nat -A PREROUTING -p tcp -m tcp -d $ETH0/32 --dport 8000 -j DNAT --to 192.168.1.2:80
    $IPTABLES -A FORWARD -p tcp -m tcp -d 192.168.1.2/32 --dport 80 -j ACCEPT

    Digitando - http://dominio.com.br:8000 - funciona tudo bem fora de rede interna.

    Eu preciso é que qdo o usuário, dentro da rede interna (lan), coloque no browser http://dominio.com.br:8000, os pacotes sejam redirecionados para 192.168.1.2:80 (servidor www), mas não estou conseguindo.

    Alguem poderia ajudar?

    Só confirma uma coisa.
    Dá um ping pro seu domínio a partir de um host da rede interna. Qual o IP que aparece?



  3. #3

    Padrão

    iptables -t nat -I PREROUTING -i "rede_interna" -p tcp -d "ip_dominio" --dport 8000 -j DNAT --to 192.168.1.2:80

    Tenta isso..

  4. #4

    Padrão

    Citação Postado originalmente por info24hs Ver Post
    iptables -t nat -I PREROUTING -i "rede_interna" -p tcp -d "ip_dominio" --dport 8000 -j DNAT --to 192.168.1.2:80

    Tenta isso..
    Muito provavelmente essa implementação não irá funcionar.

    O que acontece é o seguinte. Por exemplo vc acessa apartir do 192.168.1.10 o servidor. Seu gateway é o 192.168.1.1. Quando sua requisição for pro IP válido 200.x.x.x ele vai fazer o redirect pra 192.168.1.3. O 192.168.1.3 via receber a requisição e tentar devolver. Quando ele for devolver ele vai verificar que a origem é o 192.168.1.10 e que ele está diretamente conectado. Dessa forma ele vai tentar devolver sem passar pelo firewall. Quando o 192.168.10 receber ele vai ver que quem respondeu a requisição foi o 192.168.1.3 e não o 200.x.x.x que ele tava esperando. Com isso ele descarta o pacote.

    Com as regras que já existem isso já deve estar acontecendo. Pra resolver isso vc vai precisar usar SNAT. Aqui tem um link sobre isso: Guia Foca GNU/Linux - Firewall iptables

    Se não tiver entendido porque não está funcionando e nem vai funcionar sem o SNAT fala ai que eu tento explicar melhor...
    Qualquer dúvida posta ai...



  5. #5

    Padrão

    Primeiramente obrigado pelas respostas.
    Segui as dicas e elaborei várias regras.. uma delas foi esta:

    $IPTABLES -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp -m tcp -d 200.xxx --dport 8000 -j DNAT --to 192.168.1.2:80
    $IPTABLES -t nat -A POSTROUTING -s 192.168.1.2 -p tcp -m tcp -d 192.168.1.0/24 --sport 80 -j SNAT --to 200.xxx:8000

    Mas não deu certo.
    Fazendo buscas aqui no fórum encontrei um post (https://under-linux.org/forums/proxy...o-interno.html) com o mesmo problema pelo qual estou passando, com várias regras mencionadas pelos colegas, mas tbm não deu certo! Inclusive quem postou chegou a desistir deste tipo de solução e partiu para uma outra...

    Será que tem como fazer isso via iptables?

  6. #6

    Padrão

    Remove as regras que você colocou e testa com essas:

    $ IPTABLES -t nat -A PREROUTING -p tcp -m tcp -d 200.x.x.x/32 --dport 8000 -j DNAT --to 192.168.1.2:80
    $ IPTABLES -t nat -A POSTROUTING -s 192.168.1.0/24 -p tcp --dport 8000 -j SNAT --to 200.xxx:8000

    Explicando as regras:
    Todo o tráfego que destinado a 200.x.x.x/32 com destino a porta 8000 serão nateadas pro destino 192.168.1.2.
    Todo o tráfego vindo da rede 192.168.1.0/24 com destino a porta 8000 serpá nateada como origem o 200.x.x.x.

    Eu só estou com uma dúvida. Se o tráfego quando vem da rede interna e esá destinado ao 200.x.x.x bate realmente na primeira regra. Pra confirmar isso faz o seguinte. Põe só a primeira regra, limpa os contadores do iptables, e de um host da rede interna da um telnet dominioi.com.br 8000 e ve se os contadores dessa regra incrementam. Pra isso funcionar é bom não ter nenhum outro tráfego na rede na hora do teste.

    Pra ter certeza mesmo de que ta funcionando, faz uma captura de tráfego no servidor web. E ve se os pacotes estão chegando no servidor web.

    Qualquer cosia posta ai...



  7. #7

    Padrão

    Oi Magnum.
    Removi as regras e fiz como mencionou, mas nao deu...

    Limpei os contadores do iptables antes do testes e os mesmos nao foram incrementados:
    num pkts bytes target prot opt in out source destination
    9 0 0 DNAT tcp -- any any anywhere 200.xxx.xxx.xxx tcp dpt:8000 to:192.168.1.2:80

    Tentei desta forma tbm:
    $ IPTABLES -t nat -A PREROUTING -p tcp -m tcp -d 192.168.1.1/32 --dport 8000 -j DNAT --to 192.168.1.2:80
    $ IPTABLES -t nat -A POSTROUTING -s 192.168.1.0/24 -p tcp --dport 8000 -j SNAT --to 192.168.1.1:8000

    Onde 192.168.1.1 é o IP da eth1 (interface interna).

    Esta dificil deste redirecionamento funcionar e agradeço as respostas.
    A luta continua!

  8. #8

    Padrão

    Cara, pra confirmar, posta todas as regras do seu iptables ai...

    Usa o iptables-save pra fazer um dump das regras em utilização...

    Até mais...



  9. #9

    Padrão

    iptables -t nat -A PREROUTING -d 200.xxx.xxx.xxx -p tcp --dport 8000 -j DNAT --to 192.168.1.2
    iptables -t nat -A POSTROUTING -s 192.168.1.2 -p tcp --sport 8000 -j SNAT --to 200.xxx.xxx.xxx



    Vamos ver se agora vai...

  10. #10

    Padrão

    Citação Postado originalmente por info24hs Ver Post
    iptables -t nat -A PREROUTING -d 200.xxx.xxx.xxx -p tcp --dport 8000 -j DNAT --to 192.168.1.2
    iptables -t nat -A POSTROUTING -s 192.168.1.2 -p tcp --sport 8000 -j SNAT --to 200.xxx.xxx.xxx



    Vamos ver se agora vai...
    Também não vai adiantar porque o pacote de retorno nem passa pelo firewall. Dessa forma a segunda regra nem será utilizada...



  11. #11

    Thumbs up

    Verifiquei a regra cfe pediu com iptables-save:
    Aparentemente a regra foi carregada sem problemas.

    :PREROUTING ACCEPT [449455:40656649]
    :POSTROUTING ACCEPT [626638:40122780]
    :OUTPUT ACCEPT [617898:39603173]
    -A PREROUTING -d 200.X.X.X -p tcp -m tcp --dport 8000 -j DNAT --to-destination 192.168.1.2:80
    -A POSTROUTING -d 192.168.1.2 -p tcp -m tcp --sport 80 -j SNAT --to-source 10.1.1.2:8000
    COMMIT
    # Completed on Tue Nov 11 13:01:07 2008


    - Abaixo segue parte de meu script de firewall 'rc.firewall' com as demais regras...

    ------------------
    #!/bin/bash

    #============================
    # [ - INPUT ]
    #============================

    # - PERMITE RETORNO DE CONEXOES JA ESTABELECIDAS
    $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    # - PROTECAO CONTRA ATAQUES/PACOTES INVALIDOS
    $IPTABLES -A INPUT -p tcp -m state --state NEW ! --syn -j DROP
    $IPTABLES -A INPUT -m state --state INVALID -j DROP

    # - BLOCK TCP SYNFLOODS
    $IPTABLES -A INPUT -p tcp -m tcp --tcp-flags ALL FIN,URG,PSH -j DROP
    $IPTABLES -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
    $IPTABLES -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
    $IPTABLES -A INPUT -p tcp -m tcp --tcp-flags ALL NONE -j DROP
    $IPTABLES -A INPUT -p tcp -m tcp --sport 0 --tcp-flags FIN,SYN,RST,ACK SYN -j DROP

    # - BLOCK BROADCAST AND MULTICAST PACKETS
    $IPTABLES -A INPUT -m pkttype --pkt-type broadcast -j DROP
    $IPTABLES -A INPUT -m pkttype --pkt-type multicast -j DROP

    # - DEFINE ACESSO A INTERFACE LO
    $IPTABLES -A INPUT -i lo -j ACCEPT

    # - BLOQUEIO BRUTE FORCE [SSH]
    $IPTABLES -A INPUT -i eth0 -p tcp --dport 22000 --tcp-flags SYN,RST,ACK SYN -m recent --set --name SSH
    $IPTABLES -A INPUT -i eth0 -p tcp --dport 22000 --tcp-flags SYN,RST,ACK SYN -m recent --update --seconds 120 --hitcount 3 --name SSH -j REJECT

    # - PERMITE ACESSO EXT AOS SERVICOS [FTP-DATA-SMTP-DNS-WWW-POP3-IDENT-IMAP-SSL-MYSQL-SSH ]
    $IPTABLES -A INPUT -p tcp -m multiport --dports 20,21,25,53,80,110,113,143,443,3306,22000 -j ACCEPT

    # - DNS [ BIND ]
    $IPTABLES -A INPUT -p tcp -m tcp --sport 53 -j ACCEPT
    $IPTABLES -A INPUT -p udp -m udp --dport 53 -j ACCEPT
    $IPTABLES -A INPUT -p udp -m udp --sport 53 -j ACCEPT

    # - LIBERA ACESSO LOCALNET AO PROXY [ SQUID ]
    $IPTABLES -A INPUT -s $LOCALNET -p tcp -m tcp --dport 3128 -j ACCEPT

    # - SAMBA
    $IPTABLES -A INPUT -s $LOCALNET -p tcp -m tcp --dport 445 -j ACCEPT

    # - NTOP
    $IPTABLES -A INPUT -s $LOCALNET -p udp -m udp --dport 445 -j ACCEPT
    #$IPTABLES -A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT

    # - OPENFIRE INSTANT MESSENGER
    #$IPTABLES -A INPUT -p tcp -m tcp --dport 5222 -j ACCEPT #client
    #$IPTABLES -A INPUT -p tcp -m tcp --dport 5223 -j ACCEPT #ssl
    #$IPTABLES -A INPUT -p tcp -m tcp --dport 5269 -j ACCEPT #servidor a servidor
    #$IPTABLES -A INPUT -p tcp -m tcp --dport 5275 -j ACCEPT #componente
    #$IPTABLES -A INPUT -p tcp -m tcp --dport 7777 -j ACCEPT #trans. arq.
    #$IPTABLES -A INPUT -p tcp -m tcp --sport 7777 -j ACCEPT #trans. arq.
    #$IPTABLES -A INPUT -p tcp -m tcp --dport 9090 -j ACCEPT #admin
    #$IPTABLES -A INPUT -p tcp -m tcp --dport 9091 -j ACCEPT #admin segura

    # - OPENVPN [ CADA PORTA CORRESPONDE A UM TÚNEL ]
    $IPTABLES -A INPUT -p udp -m udp --dport 5000 -j ACCEPT
    $IPTABLES -A INPUT -p udp -m udp --sport 5000 -j ACCEPT

    $IPTABLES -A INPUT -p udp -m udp --dport 5001 -j ACCEPT
    $IPTABLES -A INPUT -p udp -m udp --sport 5001 -j ACCEPT

    # - PERMITE QUE PACOTES VINDO DE UMA INTERFACE
    # TUN/TAP ENTREM NA REDE - [ OPENVPN ]
    $IPTABLES -A INPUT -i tun+ -j ACCEPT
    $IPTABLES -A FORWARD -i tun+ -j ACCEPT
    $IPTABLES -A INPUT -i tap+ -j ACCEPT
    $IPTABLES -A FORWARD -i tap+ -j ACCEPT

    # - LIBERA PACOTES ICMP PARA MTR [ TRACEROUTE ]
    $IPTABLES -A INPUT -p icmp --icmp-type 0 -j ACCEPT
    $IPTABLES -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT
    $IPTABLES -A INPUT -p icmp --icmp-type 11 -j ACCEPT
    $IPTABLES -A INPUT -p icmp --icmp-type 12 -j ACCEPT


    #============================
    # [ - FORWARD ]
    #============================

    # - PERMITE RETORNO DE CONEXOES ESTABELECIDAS [ NAT-DNAT-SNAT ]
    $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

    # - BLOQUEIO DE PACOTES INVALIDOS
    $IPTABLES -A FORWARD -m state --state INVALID -j DROP

    # - IMPEDE QUE PACOTES OBTENHAM INFORMACOES DA REDE INTERNA
    $IPTABLES -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP

    # - CRAFTED PACKETS
    $IPTABLES -A FORWARD -p tcp -m tcp --tcp-flags ALL FIN,URG,PSH -j DROP
    $IPTABLES -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
    $IPTABLES -A FORWARD -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
    $IPTABLES -A FORWARD -p tcp -m tcp --tcp-flags ALL NONE -j DROP
    $IPTABLES -A FORWARD -p tcp -m tcp --sport 0 --tcp-flags FIN,SYN,RST,ACK SYN -j DROP

    # - BLOCK BROADCAST AND MULTICAST PACKETS
    $IPTABLES -A FORWARD -m pkttype --pkt-type broadcast -j DROP
    $IPTABLES -A FORWARD -m pkttype --pkt-type multicast -j DROP

    # - ACESSO A SERVIDORES DE NOMES EXTERNOS
    $IPTABLES -A FORWARD -s $LOCALNET -p udp -m udp --dport 53 -j ACCEPT
    $IPTABLES -A FORWARD -s $LOCALNET -p tcp -m tcp --dport 53 -j ACCEPT

    # - SSL [PORTA 443]
    $IPTABLES -A FORWARD -p tcp -m tcp --dport 443 -j ACCEPT
    $IPTABLES -A FORWARD -p tcp -m tcp --sport 443 -j ACCEPT

    # - PERMITE ACESSO DA LAN A SERVIDORES WWW
    $IPTABLES -A FORWARD -s $LOCALNET -p tcp -m tcp --dport 80 -j ACCEPT
    $IPTABLES -A FORWARD -p tcp -m tcp -d $LOCALNET --sport 80 -j ACCEPT

    # - PERMITE ACESSO A SERVICOS DE MAIL EXTERNOS
    $IPTABLES -A FORWARD -s $LOCALNET -p tcp -m multiport --dports 25,110 -j ACCEPT

    # - DEFINE ACESSO EXTERNO A TS - TERMINAL SERVICES
    $IPTABLES -A FORWARD -s $LOCALNET -p tcp -m tcp --dport 3389 -j ACCEPT


    $IPTABLES -A FORWARD -s $LOCALNET -d $CONECTSOCIAL -j ACCEPT

    # - RECEITANET
    $IPTABLES -A FORWARD -s $LOCALNET -p tcp -m tcp --dport 3456 -j ACCEPT

    # - RAISNET
    $IPTABLES -A FORWARD -s $LOCALNET -p tcp -m tcp --dport 3007 -j ACCEPT

    # - CAT
    $IPTABLES -A FORWARD -s $LOCALNET -p tcp -m tcp --dport 5017 -j ACCEPT

    # - MARINHA MERCANTE
    $IPTABLES -A FORWARD -s $LOCALNET -p tcp -m tcp -d $MERCANTE --dport 1443 -j ACCEPT

    # - LIBERA ICMP LOCALNET
    $IPTABLES -A FORWARD -p icmp -m icmp --icmp-type 0 -j ACCEPT
    $IPTABLES -A FORWARD -p icmp -m icmp --icmp-type 8 -j ACCEPT

    # - ACESSO A REDIRECIONAMENTOS DE SITES + VPN-PPTP / FTP+ABIGS-FRTSOLO
    $IPTABLES -A FORWARD -s $LOCALNET -p tcp -m multiport --dports 800,1723,8010,8080,21000,23000 -j ACCEPT


    #============================
    # [ - OUTPUT ]
    #============================

    # - PERMITE RETORNO DE CONEXOES ESTABELECIDAS [ STATEFUL INSPECTION ]
    $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    # - DEF. ACESSO A LOOPBACK
    $IPTABLES -A OUTPUT -o lo -j ACCEPT

    # - PREC. CONTRA BUGS NA TRAD. END. REDE [ NAT ]
    $IPTABLES -A OUTPUT -m state -p icmp --state INVALID -j DROP



    #==============================
    # [ - NAT / REDIRECIONAMENTOS ]
    #==============================


    # - PROXY TRANSPARENTE [!CONECTIVIDADE SOCIAL ]
    $IPTABLES -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -d ! 200.201.0.0/16 -j REDIRECT --to-port 3128

    # - NAT
    $IPTABLES -t nat -A POSTROUTING -s $LOCALNET -o eth0 -j SNAT --to-source $ETH0

    # - REDIRECIONAMENTO DE PORTA - TS
    $IPTABLES -t nat -A PREROUTING -p tcp -m tcp -d $ETH0/32 --dport 3389 -j DNAT --to $S2000:3389
    $IPTABLES -A FORWARD -p tcp -m tcp -d $S2000/32 --dport 3389 -j ACCEPT

    # - REDIRECIONAMENTO SSH - DEBIAN
    $IPTABLES -t nat -A PREROUTING -p tcp -m tcp -d $ETH0/32 --dport 2200 -j DNAT --to $EXPRESSO:2200
    $IPTABLES -A FORWARD -p tcp -m tcp -d $EXPRESSO/32 --dport 2200 -j ACCEPT

    # - EXPRESSO LIVRE
    $IPTABLES -t nat -A PREROUTING -p tcp -m tcp -d $ETH0/32 --dport 8000 -j DNAT --to $EXPRESSO:80
    $IPTABLES -A FORWARD -p tcp -m tcp -d $EXPRESSO/32 --dport 80 -j ACCEPT

    # - JABBER EXPRESSO
    $IPTABLES -t nat -A PREROUTING -p tcp -m tcp -d $ETH0/32 --dport 5222 -j DNAT --to $EXPRESSO:5222
    $IPTABLES -A FORWARD -p tcp -m tcp -d $EXPRESSO/32 --dport 5222 -j ACCEPT
    # - JABBER EXPRESSO SSL
    $IPTABLES -t nat -A PREROUTING -p tcp -m tcp -d $ETH0/32 --dport 5223 -j DNAT --to $EXPRESSO:5223
    $IPTABLES -A FORWARD -p tcp -m tcp -d $EXPRESSO/32 --dport 5223 -j ACCEPT

    # - ORACLE DATABASE
    $IPTABLES -t nat -A PREROUTING -p tcp -m tcp -d $ETH0/32 --dport 1211 -j DNAT --to $S2000:1211
    $IPTABLES -A FORWARD -p tcp -m tcp -d $S2000/32 --dport 1211 -j ACCEPT

    # - REGRA QUE ESTAMOS TESTANDO
    $IPTABLES -t nat -A PREROUTING -p tcp -m tcp -d 200.x.x.x --dport 8000 -j DNAT --to 192.168.1.2:80
    $IPTABLES -t nat -A POSTROUTING -p tcp -m tcp -d 192.168.1.2/32 --sport 80 -j SNAT --to 200.x.x.x:8000

  12. #12

    Padrão

    Adiciona a linha que permite o forward da porta 8000

    $IPTABLES -A FORWARD -p tcp --dport 8000 -j ACCEPT

    Vamos deixar ela um pouco aberta só pra testes, depois fechamos mais as regras.

    A máquina de destino, que ta escutando na porta 8000, é windows ou linux? Você sabe fazer captura de pacotes??



  13. #13

    Padrão

    Já havia feito este teste e refiz novamente..
    Nao funcionou.... tá dificil viu =(

  14. #14

    Padrão

    Se usa proxy, tente desmarcar a opção "Não usar proxy para endereços locais" no navegador



  15. #15

    Padrão

    O proxy é transparente (via iptables)... no browser é setado nada...
    Tentei varias regras e nada funcionou...

    Alguém possui este tipo de redirecionamento funcionamento???

  16. #16

    Padrão

    Citação Postado originalmente por cldn Ver Post
    O proxy é transparente (via iptables)... no browser é setado nada...
    Tentei varias regras e nada funcionou...

    Alguém possui este tipo de redirecionamento funcionamento???
    Sete o navegador com ip e porta do proxy, em seguida marque a opção citada, na caixa não usar proxy para os endereços iniciados por coloque o endereço e porta que quer acessar..



  17. #17

    Padrão

    segui sua dica e nada !!
    já estou quase desistindo... não se há outro tipo de regra a ser feita...

    lan = 192.168.1.0/24
    linux = eth0 200.x.x.x / eth1 192.168.1.1
    aplicação = 192.168.1.2

  18. #18

    Padrão

    Citação Postado originalmente por cldn Ver Post
    segui sua dica e nada !!
    já estou quase desistindo... não se há outro tipo de regra a ser feita...

    lan = 192.168.1.0/24
    linux = eth0 200.x.x.x / eth1 192.168.1.1
    aplicação = 192.168.1.2
    Sete o navegador com ip e porta do proxy, em seguida marque a opção citada, na caixa não usar proxy para os endereços iniciados por coloque o endereço e porta que quer acessar..

    e coloque a regra abaixo

    iptables -I FORWARD -p tcp --dport 8000 -j ACCEPT
    iptables -t nat -I PREROUTING -i "Interface_ext" -p tcp --dport 8000 -j DNAT --to-dest "ip_aplicação"



  19. #19

    Padrão

    Oi...
    Fiz o teste e tbm nada !
    Impossível não haver uma solução...
    Já tentei vários tipos de regras e segui todas as dicas aqui do fórum.



  20. #20

    Padrão

    Olá !

    Obrigado a todos pela atenção e as respostas a este tópico.

    Todas as dicas aqui expostas pelos colegas tentei e sem sucesso, como as que fiz e testei tbm.
    Pesquisei muito pelo google afora sem uma solução para este problema. O que encontrei foram muitas pessoas com o mesmo problema e com a mesma explicação feita pelo nosso colega Magnum sobre o não funcionamento desta implementação.

    Será que não é possível fazer redirecionamento na rede interna com iptables?

    Não pretendo desistir... talvez tenha uma maneira.

    Obrigado
    Claudinei