+ Responder ao Tópico



  1. #1

    Padrão NAT não funciona.

    Olá pessoal,
    Estou tentando montar um firewall hibrido, que faça tanto o bloqueio de portas quanto o NAT para minhar rede interna.
    Até então, consegui o bloqueio de portas e liberar o SSH, HTTP, HTTPS e PING no servidor.
    O NAT não funciona, não aparece nenhum LOG indicando tentativa de conexão a internet partindo da rede interna, todos os LOGs que apareceram eu liberei, mas mesmo assim, as máquinas na rede interna não navegam, nem pingam qualquer host na internet.

    Estou usando o DEBIAN Testing versão Lenny
    Kernel 2.6.18-4-486, kernel da propria versão do Lenny, não foi alterado.

    Segue abaixo o script que fiz, baseado no GuicaFoca e liberações manuais através de analise do LOG.

    PS.: O script ficou bastante longo, por isso já agradeço a paciência de quem o ler até o final.
    ===

    #!/bin/bash

    #### Criando variáveis.

    iptables="/sbin/iptables"
    ip=$(ifconfig ppp0 |grep "inet addr" | awk -F: {'print $2'} | awk {'print $1'})
    rlocal=192.168.0.0/24
    DNS1=200.149.55.140
    DNS2=200.165.132.147


    #### Carregando Módulos.


    modprobe iptable_filter
    modprobe iptable_nat
    modprobe ip_tables
    modprobe ip_conntrack
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    modprobe ipt_MASQUERADE
    modprobe ipt_LOG



    #### Limpando tabelas e chains

    $iptables -X
    $iptables -t nat -X
    $iptables -t mangle -X

    $iptables -F
    $iptables -t nat -F
    $iptables -t mangle -F

    $iptables -Z
    $iptables -t nat -Z
    $iptables -t mangle -Z


    #### Policiamento padrão.

    $iptables -P INPUT DROP
    $iptables -P OUTPUT DROP
    $iptables -P FORWARD DROP

    $iptables -t nat -P OUTPUT DROP
    $iptables -t nat -P PREROUTING DROP
    $iptables -t nat -P POSTROUTING DROP

    #### Ativando o roteamento de pacotes.

    echo "1" > /proc/sys/net/ipv4/ip_forward


    ##
    #### REGRAS
    ######

    #================== Tabela FILTER

    #================== Chain INPUT ========================

    $iptables -A INPUT -p icmp -m limit --limit 1/s -j ACCEPT
    $iptables -A INPUT -p udp -i ppp0 -s $DNS1 --sport 53 --dport 1024: -j ACCEPT
    $iptables -A INPUT -p udp -i ppp0 -s $DNS2 --sport 53 --dport 1024: -j ACCEPT
    $iptables -A INPUT -p tcp -i ppp0 --dport 1024: --sport 80 -j ACCEPT
    $iptables -A INPUT -p tcp -i ppp0 --dport 1024: --sport 443 -j ACCEPT
    $iptables -A INPUT -p tcp -i ppp0 --sport 1024: --dport 22 -j ACCEPT
    $iptables -A INPUT -p tcp -i eth1 --sport 1024: --dport 22 -j ACCEPT
    $iptables -A INPUT -j LOG --log-prefix "DROP-INPUT "
    $iptables -A INPUT -j DROP

    #===================================================

    #================== Chain OUTPUT =======================

    $iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
    $iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
    $iptables -A OUTPUT -p udp -o ppp0 -d $DNS1 --dport 53 --sport 1024: -j ACCEPT
    $iptables -A OUTPUT -p udp -o ppp0 -d $DNS2 --dport 53 --sport 1024: -j ACCEPT
    $iptables -A OUTPUT -p tcp -o ppp0 --sport 1024: --dport 80 -j ACCEPT
    $iptables -A OUTPUT -p tcp -o ppp0 --sport 1024: --dport 443 -j ACCEPT
    $iptables -A OUTPUT -p tcp -o ppp0 --sport 22 --dport 1024: -j ACCEPT
    $iptables -A OUTPUT -p tcp -o eth1 --sport 22 --dport 1024: -j ACCEPT
    $iptables -A OUTPUT -j LOG --log-prefix "DROP-OUTPUT "
    $iptables -A OUTPUT -j DROP

    #===================================================

    #================== Chain FORWARD ======================

    $iptables -A FORWARD -p udp -i eth1 -s $rlocal --sport 1024: -o ppp0 -d $DNS1 --dport 53 -j ACCEPT
    $iptables -A FORWARD -p udp -i eth1 -s $rlocal --sport 1024: -o ppp0 -d $DNS2 --dport 53 -j ACCEPT
    $iptables -A FORWARD -j LOG --log-prefix "DROP-FORWARD "
    $iptables -A FORWARD -j DROP

    #===================================================

    ##
    #### Tabela NAT
    ######

    #================== Chain OUTPUT ====================================================

    $iptables -t nat -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
    $iptables -t nat -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
    $iptables -t nat -A OUTPUT -p udp -o ppp0 -d $DNS1 --dport 53 --sport 1024: -j ACCEPT
    $iptables -t nat -A OUTPUT -p udp -o ppp0 -d $DNS2 --dport 53 --sport 1024: -j ACCEPT
    $iptables -t nat -A OUTPUT -p tcp -o ppp0 --sport 1024: --dport 80 -j ACCEPT
    $iptables -t nat -A OUTPUT -p tcp -o ppp0 --sport 1024: --dport 443 -j ACCEPT
    $iptables -t nat -A OUTPUT -j LOG --log-prefix "DROP_NAT-OUTPUT "
    $iptables -t nat -A OUTPUT -j DROP

    #===================================================
    #================== Chain PREROUTING ====================================================

    $iptables -t nat -A PREROUTING -p icmp -m limit --limit 1/s -j ACCEPT
    $iptables -t nat -A PREROUTING -p tcp -i ppp0 --sport 1024: --dport 22 -j ACCEPT
    $iptables -t nat -A PREROUTING -p tcp -i eth1 --sport 1024: --dport 22 -j ACCEPT
    $iptables -t nat -A PREROUTING -p udp -i eth1 -d $DNS1 --dport 53 --sport 1024: -j ACCEPT
    $iptables -t nat -A PREROUTING -p udp -i eth1 -d $DNS2 --dport 53 --sport 1024: -j ACCEPT
    $iptables -t nat -A PREROUTING -p tcp -s $rlocal -i eth1 --sport 1024: --dport 80 -j ACCEPT
    $iptables -t nat -A PREROUTING -j LOG --log-prefix "DROP_NAT-PREROUTING "
    $iptables -t nat -A PREROUTING -j DROP

    #===================================================

    #================== Chain POSTROUTING ===================

    $iptables -t nat -A POSTROUTING -p icmp --icmp-type echo-request -j ACCEPT
    $iptables -t nat -A POSTROUTING -p icmp --icmp-type echo-reply -j ACCEPT
    $iptables -t nat -A POSTROUTING -p udp -o ppp0 -d $DNS1 --dport 53 --sport 1024: -j ACCEPT
    $iptables -t nat -A POSTROUTING -p udp -o ppp0 -d $DNS2 --dport 53 --sport 1024: -j ACCEPT
    $iptables -t nat -A POSTROUTING -p tcp -o ppp0 --sport 1024: --dport 80 -j ACCEPT
    $iptables -t nat -A POSTROUTING -p tcp -o ppp0 --sport 1024: --dport 443 -j ACCEPT
    $iptables -t nat -A POSTROUTING -p tcp -o ppp0 -j MASQUERADE
    $iptables -t nat -A POSTROUTING -j LOG --log-prefix "DROP_NAT-POSTROUTING "
    $iptables -t nat -A POSTROUTING -j DROP


    #===================================================
    Só lembrando, nada aparece no LOG quando de uma qualquer máquina da rede local tenta acessar algum site ou pingar algum host na internet.
    O servidor, pinga as estações e vice-versa.
    O servidor consegue navegar, pingar, aceita conexs pela porta 22, perfeitamente.
    O único problema é o NAT que não é feito.


    Quem puder dar uma ajuda, eu agradeço!

  2. #2

    Padrão

    fala cyberwalk!

    O MASQUERADE você fez, mas está faltando o FORWARD que partilha a internet.. que tipo de conexão é essa, adsl, virtua? se for adsl o FORWARD precisa ser incrementado..

    -A FORWARD -d rede_interna -i ppp+ -o eth0 -j ACCEPT
    -A FORWARD -s rede_interna -i eth0 -o ppp+ -j ACCEPT


    não precisa colocar o "-j DROP", pois você já configurou a politica por padrão para DROP! e lembre-se que quando você seta a politica para DROP, ele só libera as regras que você colocar.. o resto é bloqueado

    tenta fazer ping externo e navegar com essas regras.. se continuar o erro posta denovo!

    abraços

  3. #3

    Padrão funcionou ....

    opa _N3o_ !!
    Funcionou aqui. Não fiz exatamente o que vc disse, mas a sua idéia foi de boa ajuda, pq através dela fui lapidando meus erros.
    O que realmente foi o X da questão foi eu ter alterado a posição da regra MASQUERADE no chain POSTROUTING da tabela NAT. Coloquei-a no primeira linha e tudo passou a funcionar pefeitamente.
    Depois disso, fui liberando na tabela FORWARD as portas e protocolos que eu realmente quero que a rede local acesse e tudo está funcionando.

    Vou por abaixo as alterações feitas:
    =========
    POLICIAMENTO PADRÃO:
    #### Policiamento padrão.

    $iptables -P INPUT DROP
    $iptables -P OUTPUT DROP
    $iptables -P FORWARD DROP

    #===============================
    Chain FORWARD:
    #================== Chain FORWARD =====================

    #$iptables -A FORWARD -i ppp0 -d $rlocal -o eth1 -j ACCEPT
    #$iptables -A FORWARD -i eth1 -s $rlocal -o ppp0 -j ACCEPT
    $iptables -A FORWARD -i ppp0 -s $DNS1 -d $rlocal -o eth1 -j ACCEPT
    $iptables -A FORWARD -i ppp0 -s $DNS2 -d $rlocal -o eth1 -j ACCEPT
    $iptables -A FORWARD -i eth1 -s $rlocal -d $DNS1 -o ppp0 -j ACCEPT
    $iptables -A FORWARD -i eth1 -s $rlocal -d $DNS2 -o ppp0 -j ACCEPT
    $iptables -A FORWARD -p icmp --icmp-type 8 -m limit --limit 1/s -j ACCEPT
    $iptables -A FORWARD -p tcp -i eth1 -s $rlocal --sport 1024: --dport 80 -j ACCEPT
    $iptables -A FORWARD -p tcp -i ppp0 --sport 80 -d $rlocal --dport 1024: -j ACCEPT
    $iptables -A FORWARD -p tcp -i ppp0 --sport 443 -d $rlocal --dport 1024: -j ACCEPT
    $iptables -A FORWARD -p tcp -i eth1 -s $rlocal --sport 1024: --dport 443 -j ACCEPT
    #### Liberando MSN para rede local.
    $iptables -A FORWARD -p tcp -i eth1 -s $rlocal --sport 1024: -d 207.46.0.0/16 --dport 1863 -j ACCEPT
    $iptables -A FORWARD -p tcp -i ppp0 -s 207.46.0.0/16 --sport 1863 -d $rlocal --dport 1024: -j ACCEPT
    $iptables -A FORWARD -p tcp -i ppp0 -s 207.46.0.0/16 --sport 7001 -d $rlocal --dport 1024: -j ACCEPT
    $iptables -A FORWARD -p udp -i ppp0 -s 207.46.0.0/16 --sport 7001 -d $rlocal --dport 1024: -j ACCEPT
    $iptables -A FORWARD -p tcp -i eth1 -s $rlocal --sport 1024: -o ppp0 -d 207.46.0.0/16 --dport 7001 -j ACCEPT
    $iptables -A FORWARD -p udp -i eth1 -s $rlocal --sport 1024: -o ppp0 -d 207.46.0.0/16 --dport 7001 -j ACCEPT
    $iptables -A FORWARD -j LOG --log-prefix "DROP-FORWARD "
    $iptables -A FORWARD -j DROP

    #==================================================
    Chain PREROUTING:
    #================== Chain PREROUTING ===================

    $iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m limit --limit 1/s -j ACCEPT
    $iptables -t nat -A PREROUTING -i eth1 -s $rlocal -d $DNS1 -j ACCEPT
    $iptables -t nat -A PREROUTING -i eth1 -s $rlocal -d $DNS2 -j ACCEPT
    $iptables -t nat -A PREROUTING -p tcp -i eth1 -s $rlocal --sport 1024: --dport 80 -j ACCEPT
    $iptables -t nat -A PREROUTING -p tcp -i eth1 -s $rlocal --sport 1024: --dport 443 -j ACCEPT
    #### Liberando MSN para rede local.
    $iptables -t nat -A PREROUTING -p tcp -i eth1 -s $rlocal --sport 1024: -d 207.46.0.0/16 --dport 1863 -j ACCEPT
    $iptables -t nat -A PREROUTING -p tcp -i eth1 -s $rlocal --sport 1024: -d 65.52.0.0/14 --dport 1863 -j ACCEPT
    $iptables -t nat -A PREROUTING -p tcp -i eth1 -s $rlocal --sport 1024: -d 207.46.0.0/16 --dport 7001 -j ACCEPT
    $iptables -t nat -A PREROUTING -p udp -i eth1 -s $rlocal --sport 1024: -d 207.46.0.0/16 --dport 7001 -j ACCEPT
    $iptables -t nat -A PREROUTING -j LOG --log-prefix "DROP_NAT-PREROUTING "
    $iptables -t nat -A PREROUTING -j DROP

    #==================================================
    Chain POSTROUTING:
    #================== Chain POSTROUTING ==================

    $iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
    $iptables -t nat -A POSTROUTING -p icmp --icmp-type 8 -m limit --limit 1/s -j ACCEPT
    $iptables -t nat -A POSTROUTING -o ppp0 -d $DNS1 -j ACCEPT
    $iptables -t nat -A POSTROUTING -o ppp0 -d $DNS2 -j ACCEPT
    $iptables -t nat -A POSTROUTING -p tcp -o ppp0 --sport 1024: --dport 80 -j ACCEPT
    $iptables -t nat -A POSTROUTING -p tcp -o ppp0 --sport 1024: --dport 443 -j ACCEPT
    $iptables -t nat -A POSTROUTING -j LOG --log-prefix "DROP_NAT-POSTROUTING "
    $iptables -t nat -A POSTROUTING -j DROP


    #==================================================

    Obrigado pela ajuda _n3o_
    Valew.

  4. #4

    Padrão

    Não entendo o porquê de utilizar a versão em teste de uma distribuição onde o release estável saiu à menos de dois meses. Tem certeza que está utilizando o Lenny ou o Etch?