+ Responder ao Tópico



  1. #1
    Visitante

    Padrão iptables ? Está certo dessa maneira ?

    Bom Tarde !
    Tenho um servidor de internet, fiz um firewall aqui em um arquivo texto.
    Na verdade é uma dúvida que não encontrei em apostilas.
    Quando libero uma porta FORWARD, para rede interna,a mesmo deve ser liberada como INPUT no servidor certo ?

    No caso abaixo, está certo ?
    liberei o servidor a 80, que o servidor internet usa para conectar... e as máquinas da rede interna vao usar a porta 3128 no caso o proxy, e a porta 443 que é https, no qual o squid não suporta.

    Também liberei a porta 25 e 110 (pop, e smtp).

    Está certo a maneira que eu estou fazendo ?
    Só montei para ter uma nossao de como estou fazendo, e se estou fazendo da maneira correta...




    (Desculpe mas no tópico abaixo, esqueci de colocar o FORWARD...)




    Segue abaixo as regras




    #Interfaces
    IF_INTERNA="eth0"
    IF_EXTERNA="eth1"
    #Rede Interna
    REDE_INTERNA="10.0.0.0/24"


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

    #Limpando iptables
    iptables -F
    iptables -Z
    iptables -X
    iptables -F -t nat
    iptables -X -t nat
    iptables -F -t mangle
    iptables -X -t mangle

    # Conexão estabelida não é verificada novamente
    iptables -A OUTPUT -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
    iptables -A FORWARD -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT

    #Regras IF_EXTERNA
    iptables -A INPUT -i $IF_EXTERNA -p tcp --syn --dport 22 -j ACCEPT
    iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 3128 -j ACCEPT
    iptables -A INPUT -i $IF_EXTERNA -p udp --dport 43 -j ACCEPT
    iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 110 -j ACCEPT
    iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 25 -j ACCEPT
    iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 443 -j ACCEPT

    #Rede Interna
    iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 3128 -j ACCEPT
    iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 110 -j ACCEPT
    iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 25 -j ACCEPT
    iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 443 -j ACCEPT




    #Fecha o resto
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

  2. #2
    maverick_cba
    Visitante

    Padrão iptables ? Está certo dessa maneira ?

    Na verdade o que ocorre nesse caso: proxy --> firewall.

    Você deve liberar acesso pela porta 80 somente para input da internet p/ firewall e output do firewall para internet.
    Código :
    iptables -A INPUT -p tcp -i $IF_EXTERNA --dport 80 -j ACCEPT
    iptables -A OUTPUT -p tcp -i $IF_EXTERNA --dport 80 -j ACCEPT
    pois o browser dos clientes ira fazer uma requisição http na porta 80 até o servidor. antes que a CHAIN INPUT processe as regras, a CHAIN PREROUTING da tabela NAT processa a requisição e faz um NAT de porta redirecionando a requisição antes que a CHAIN INPUT barre o acesso.
    Código :
    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
    Requisições na porta 443 (https) não passarão pelo proxy e seguirão direto.
    Código :
    iptables -A FORWARD -p tcp -dport 443 -j ACCEPT

    E assim sucessivamente. Quando tiver que liberar acesso as máquinas internas utilize a CHAIN FORWARD e se possível analize os dois pontos da rede (interna e externa) e veja se é realmente necessário que o acesso parta dos dois lados.

    Quando for fazer acesso ao servidor (conexões que são destinadas ao servidor) utilize a CHAIN INPUT. Ex:
    Código :
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    Nesse caso liberamos acesso via SSH ao servidor. Seria bom especificar que somente queremos conexões SSH vinda da rede interna. ex:
    Código :
    iptables -A INPUT -i $IF_INTERNA -s $REDE_INTERNA --dport 22 -j ACCEPT

    Não se esqueça de fazer o bloqueio dos serviços indesejados, pois nesse caso estamos apenas fazendo a liberação daquilo que queremos.

    Espero ter ajudado.

    Abraços,

    Alain Dellon Brito

  3. #3
    robsonzornitta
    Visitante

    Padrão concordo plenamente!!

    eh issu ai mesmo amigo o que o nosso amigo postou ai em cima eh a mais pura verdade!!! concordo cum ele!!!! :good:

  4. #4
    Visitante

    Padrão iptables ? Está certo dessa maneira ?

    Muito Obrigado pelas respostas !!!


    maverick_cba, realmente eu esqueci do OUTPUT...


    Vou colar abaixo como eu refiz as regras novamente...

    Por favor não deixe de comentar se estiver algo errado...

    Criticas e sugestoes sempre é bem vinda!



    #Interfaces
    IF_INTERNA="eth0"
    IF_EXTERNA="eth1"
    #Rede Interna
    REDE_INTERNA="10.0.0.0/24"


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

    #Limpando iptables
    iptables -F
    iptables -Z
    iptables -X
    iptables -F -t nat
    iptables -X -t nat
    iptables -F -t mangle
    iptables -X -t mangle

    # Conexão estabelida não é verificada novamente
    iptables -A OUTPUT -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
    iptables -A FORWARD -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT

    #Regras IF_EXTERNA
    iptables -A INPUT -i $IF_EXTERNA -p tcp --syn --dport 22 -j ACCEPT

    iptables -A INPUT -p tcp -i $IF_EXTERNA --dport 80 -j ACCEPT
    iptables -A OUTPUT -p tcp -i $IF_EXTERNA --dport 80 -j ACCEPT

    iptables -A OUTPUT -i $IF_EXTERNA -p tcp --dport 3128 -j ACCEPT

    iptables -A INPUT -i $IF_EXTERNA -p udp --dport 43 -j ACCEPT
    iptables -A OUTPUT -i $IF_EXTERNA -p udp --dport 43 -j ACCEPT

    iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 110 -j ACCEPT
    iptables -A OUTPUT -i $IF_EXTERNA -p tcp --dport 110 -j ACCEPT


    iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 25 -j ACCEPT
    iptables -A OUTPUT -i $IF_EXTERNA -p tcp --dport 25 -j ACCEPT

    iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 443 -j ACCEPT
    iptables -A OUTPUT -i $IF_EXTERNA -p tcp --dport 443 -j ACCEPT

    #Squid
    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128

    #Rede Interna
    iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 3128 -j ACCEPT
    iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 110 -j ACCEPT
    iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 25 -j ACCEPT
    iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 443 -j ACCEPT


    $IPT -t nat -A POSTROUTING -s $REDE_INTERNA -j MASQUERADE





    #Fecha o resto
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP







    Mais uma vez Obrigado :clap: :clap: :clap:

  5. #5
    Visitante

    Padrão iptables ? Está certo dessa maneira ?

    está correto este script acima ?

  6. #6

    Padrão iptables ? Está certo dessa maneira ?

    que uma dica boa?

    arquitetura do script vc ja montada, agora da um estudada boa no iptables, tem aqui na under e tem o guia foca linux materia sobre o mesmo, ai vc n vai depender de ninguem, caso vc tem duvida na hora dos estudos, ai vc posta aqui q eu mesmo respondo.

    abraço

  7. #7
    maverick_cba
    Visitante

    Padrão iptables ? Está certo dessa maneira ?

    Seguinte amigo, se você tem um servidor de email instalado no firewall, a regra descrita abaixo está parcialmente correta, pois você somente liberou acesso do servidor de email --> para internet na interface externa e se esqueceu da interface interna. Uma opção seria omitir a declaração da interface proveniente da conexão e expecificando somente a porta e se possível o endereço de destino.
    iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 25 -j ACCEPT
    iptables -A OUTPUT -i $IF_EXTERNA -p tcp --dport 25 -j ACCEPT

    iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 443 -j ACCEPT
    iptables -A OUTPUT -i $IF_EXTERNA -p tcp --dport 443 -j ACCEPT
    Agora caso seu servidor de email seja proveniente de outro lugar que seja por exemplo da internet mundial (fora da rede interna), daí a regra não vale pois a chain que processa requisições que passam pelo firewall, é a chain FORWARD, ou seja:
    Código :
    iptables -A FORWARD -p tcp -i $IF_EXTERNA -d $REDE_INTERNA --dport 25 -j ACCEPT
    iptables -A FORWARD -p tcp -i $IF_INTERNA -d 0.0.0.0 --dport 25 -j ACCEPT
    repare que nesse caso estamos liberando acesso a todas as requisições internas ou externas que passem(FORWARD) pelo firewall utilizando a porta 25(smtp). Outro fator novo aqui é o fato de usar a opção -d que especifica o destino dos pacotes, que no caso de um acesso de dentro para fora especificamos que o destino dos pacotes é a rede interna, e n caso de um acesso de dentro para fora, qualquer rede(0.0.0.0). Isso é uma boa prática de segurnaça, aliás quanto mais específica for sua regra, mais clara e mais segura ela será.

    Abaixo segue alguns sites muito bons onde você poderá extrair ao máximo os conceitos e práticas do poderoso firewall IPTABLES.

    http://www.pop-pr.rnp.br/tiki-index....ores+Firewalls
    http://www.conectiva.com/doc/livros/...R/ch14s03.html
    Recomendo também a leitura do guia Foca Linux.
    http://focalinux.cipsga.org.br/guia/...w-iptables.htm

    Abraços,

  8. #8
    whinston
    Visitante

    Padrão confusão

    acho que o amigo visitante tá confundindo as regras de input com forward.. forward é qdo algo vai atravessar seu FW, ou de fora pra dentro (estações usando um email do uol por exemplo), ou de dentro pra fora (máquina externas acessando máquinas 'pra dentro' do seu fw).

  9. #9

    Padrão Re: confusão

    Citação Postado originalmente por whinston
    acho que o amigo visitante tá confundindo as regras de input com forward.. forward é qdo algo vai atravessar seu FW, ou de fora pra dentro (estações usando um email do uol por exemplo), ou de dentro pra fora (máquina externas acessando máquinas 'pra dentro' do seu fw).

    boa :good: :good: :good: