+ Responder ao Tópico



  1. #1

    Padrão NAT DNS para Proxy Transparente.

    Boa Tarde Pessoal

    Criei a seguinte regra no iptables para o proxy funcionar de forma transparente, e as estações de trabalho configurei o DNS com o endereço IP do servidor firewall (192.168.0.1).

    ### Regra SQUID
    iptables -t nat -A PREROUTING -s $LAN -p tcp --dport 80 -j REDIRECT --to-port 3128

    Só que minha NAT de DNS não funciona!!!! estou faznedo essa NAT da seguinte forma:
    ## Regra Forward para DNS
    iptables -A FORWARD -p udp -s $LAN -d $FW1 -o eth0 --dport 53 -j ACCEPT
    iptables -A FORWARD -p udp -d $LAN -s $FW1 -i eth0 --sport 53 -j ACCEPT

    #Regra NAT p DNS
    iptables -t nat -A PREROUTING -s $LAN -p udp --dport 53 -j DNAT --to $DNS:53

    $LAN é minha rede local 192.168.0.0
    $DNS é o endereço de DNS da velox 200.165.132.147

    O detlahe é que se configuro na estações de trabalho o DNS com o endereço IP 200.165.132.147 e faço a regra de NAT p DNS dessa forma abaixo funciona
    #Regra NAT p DNS
    iptables -t nat -A POSTROUTING -s $LAN -p udp --dport 53 -o eth0 -j MASQUERADE

    Se alguem poder me ajudar agradeço muito.

    Obrigado
    Última edição por wasley; 13-04-2010 às 07:38.

  2. #2

    Padrão

    bem.. se eu entendi bem, seu DNS está nessa máquina; SE for esse o caso, então a regra não pode ser FORWARD, mas apenas INPUT:

    então, refaça a regra, observando o seguinte: INPUT (ao invés de FWD) e TAMBÉM não pode ser -o eth0, pq não vai sair daí, vai ficar aí mesmo.

    iptables -A INPUT -p udp -s $LAN --dport 53 -j ACCEPT
    iptables -A INPUT -p tcp -s $LAN --dport 53 -j ACCEPT



  3. #3

    Padrão

    Não amigo! o DNS é do Terra não esta nesta maquina.

  4. #4

    Padrão

    2 perguntinhas:

    considerando sua afirmativa, 1o post:

    "Criei a seguinte regra no iptables para o proxy funcionar de forma transparente, e as estações de trabalho configurei o DNS com o endereço IP do servidor firewall (192.168.0.1)."

    a) COMO então não tem o DNS no servidor? ou tem, ou não tem..


    b) então quem é $FW1??

    flames > /dev/null
    Última edição por irado; 13-04-2010 às 11:49.



  5. #5

    Padrão

    Deixa eu tentar te explicar melhor Irado

    Segue baixo as configurações de rede de uma estação de trabalho:
    ip:192.168.0.3
    gateway: 192.168.0.1
    dns:192.168.0.1

    Respondendo suas perguntas

    a) COMO então não tem o DNS no servidor? ou tem, ou não tem..

    Não existe DNS no servidor, o que preciso é criar uma NAT quando chegar um requisição de DNS vindo a rede 192.168.0.0, ele redirecionar essa requisão para o endereço ip 200.165.132.147.

    é isso q estou tentando fazer nessa regra.

    iptables -t nat -A PREROUTING -s 192.168.0.0 -p udp --dport 53 -j DNAT --to 200.165.132.147:53

    b) então quem é $FW1??

    o FW1 é esta recebendo o endereço ip da placa local do firewall, ele recebe o ip 192.168.1.1

    Obrigado por tentar me ajudar

  6. #6

    Padrão

    neste caso em particular eu acredito que o melhor seria ter um DNS-cache nessa máquina com o forwarder do terra (embora eu prefira o dns-google). Isso simplifica, vc não precisaria mais de redirecionamento.

    iptables -t nat -A PREROUTING -s 192.168.0.0 -p udp --dport 53 -j DNAT --to 200.165.132.147:53

    acho que falta um /24 (ou outra netmask) no ip-addr; da maneira como está, é assumido 0/32, que é o de broadcast da rede, então, como não pertence a qualquer máquina, não será roteado.

    estas regras me parecem inadequadas:
    iptables -A FORWARD -p udp -s $LAN -d $FW1 -o eth0 --dport 53 -j ACCEPT
    iptables -A FORWARD -p udp -d $LAN -s $FW1 -i eth0 --sport 53 -j ACCEPT


    se está usando o iptables como "statefull", a 2a regra é desnecessária. Quanto a 1a regra, volto a dizer: SE houvesse um DNS aí, deveria ser INPUT. Não havendo, então só a PREROUTING deve dar conta, pq vc não precisa ACEITAR a entrada (-s $LAN) para $FW1, de vez que $FW1 não mantém tal serviço, só o roteia..

    para ser mais conveniente (mas menos que o DNS-cache) seria deixar que as máquinas "ganhassem" diretamente o DNS-server definitivo pelo dhcp, então vc liberaria o pre-routing/masquerade com mais facilidade:

    $IPT -t nat -A PREROUTING -i $NIC_INTERNA -s $REDE -d 0/0 -j ACCEPT
    $IPT -t nat -A POSTROUTING -s $REDE -p ALL -o $NIC_EXTERNA -j MASQUERADE

    é uma regra meio (muito) permissiva, mas deve funcionar bem até que vc pegue o jeitão da coisa.



  7. #7

    Padrão

    Citação Postado originalmente por wasley Ver Post
    Deixa eu tentar te explicar melhor Irado

    Segue baixo as configurações de rede de uma estação de trabalho:
    ip:192.168.0.3
    gateway: 192.168.0.1
    dns:192.168.0.1

    Respondendo suas perguntas

    a) COMO então não tem o DNS no servidor? ou tem, ou não tem..

    Não existe DNS no servidor, o que preciso é criar uma NAT quando chegar um requisição de DNS vindo a rede 192.168.0.0, ele redirecionar essa requisão para o endereço ip 200.165.132.147.

    é isso q estou tentando fazer nessa regra.

    iptables -t nat -A PREROUTING -s 192.168.0.0 -p udp --dport 53 -j DNAT --to 200.165.132.147:53

    b) então quem é $FW1??

    o FW1 é esta recebendo o endereço ip da placa local do firewall, ele recebe o ip 192.168.1.1

    Obrigado por tentar me ajudar
    Boa tarde a todos,

    Depois de alguns anos sem participar do fórum ao que tenho muita afinidade que é a parte de firewall e segurança, hoje sobrou um tempo e venho através deste tentar ajudar com minha humilde experiência.




    Qual distribuição você ta usando? ( só por curiosidade )


    Vamos lá:




    Concordo com nosso colega “irado”, séria bem mais interessante você possui um DNS-CACHE internamente.

    Baseando no Guia Foca-Linux onde a regra a abaixo não é valida:

    iptables -t nat -A PREROUTING -s 192.168.0.0 -p udp --dport 53 -j DNAT --to 200.165.132.147:53
    Pois DNAT só é realizado pelo netfilter de Lan para Lan ou de WAN para LAN, nunca de WAN para WAN ou LAN para WAN que é o caso da regra acima.

    $IPT -t nat -A PREROUTING -i $NIC_INTERNA -s $REDE -d 0/0 -j ACCEPT
    $IPT -t nat -A POSTROUTING -s $REDE -p ALL -o $NIC_EXTERNA -j MASQUERADE
    Agora não concordo com você caro colega "Irado", pois a primeira regra não irá adiantar nada se a política da chain FORWARD da tabela filter estiver DROP` e a regra abaixo dessa está liberando tudo da rede dele criando sérios riscos no firewall do Wesley.

    Com base na resposta acima você deve está se perguntando, " e agora? " ehehhehehe
    Bom, como sempre utilizo um serviço de DNS-Cache interno eu nunca precisei passar por isso mas um certo dia um aluno me perguntou algo muito parecido, então realizei os testes em sala de aula e deu certo.

    SOLUÇÃO:

    Supondo que seu GW esteja seu servidor proxy, ele terá que está com DNS funcionando perfeitamente, para isso você deverá verificar o arquivo /etc/resolv.conf e realizar testes básicos como "ping www.google.com.br" através desse servidor.

    Uma vez funcionando tudo perfeitamente, você irá em máquina da sua rede interna, windows ou linux e apontar o servidor DNS para o ip do seu GW. Logo em seguida basta liberar a posta 53 na chain input no servidor Proxy.

    iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 53 -j ACCEPT
    iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT

    Pronto, com isso suas máquinas da sua rede interna irão conseguir resolver os nomes.

    Espero ter ajudado, caso tenha dúvidas, favor coloca poste ou me manda um e-mail, [email protected].

    OBS: A chain output da tabela filter deixe ACCEPT.

    Att,

  8. #8

    Padrão

    Obrigado a todos os amigos...

    Farei os testes e depois retorno!

    Abraços
    wasley