+ Responder ao Tópico



  1. #1

    Padrão Não consigo redirecionamento de porta no iptables

    Pessoal estou aqui depois de 3 dias de muita leitura e muita paciência compartilhando a minha luta aqui na empresa para colocar para funcionar um firewall simples, bloqueia tudo e redireciona a porta 80 para um servidor web.

    Bom deixa eu começar pela estrutura da rede, eu tenho um servidor firewall com 2 placas de rede:
    eth0 : internet
    eth1: rede inter (192.168.123.0/24)

    Neste firewall tenho tb o dhcp da rede e um svn com o modulo do apache rodando na porta 8080.

    O que eu quero fazer é simples, bloquear tudo, compartilhar a internet e redirecionar a porta 80 que chega no firewall para porta 80 do servidor web (192.168.123.1).

    O firewall está ligado em um access point, que funciona como hub tb.

    O que conseguir fazer:

    Liberar o acesso a internet,bloquear tudo.

    O que não consegui fazer:
    Redirecionar a porta 80 do firewall para o servidor web.

    O que apurei depois de muito tempo:
    Quando tento acessar o servidor web, com a regra de redirecionamento ativada, percebo no status do iptables que os pacotes estão caindo certinho na chain input da porta 80 como segue abaixo:

    administrador@fwserver:~/Desktop$ sudo sh rc4.firewall status
    Chain INPUT (policy DROP 7 packets, 2296 bytes)
    pkts bytes target prot opt in out source destination
    6 360 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
    ***
    Ou seja, o firewall tá recendo e aceitando requisições na porta 80, mas não está redirecionando para porta 8080 do servidor web.

    Não sei mais o que fazer se alguem tem experiência e quiser me ajudar estou no msn em [email protected]

    Estou postando o script de firewall abaixo para vocês analizaram, não tem muitoo mistério.

    Obrigado de ante-mão ....

    ME AJUDEM COMUNIDADE LINUX

    #!/bin/sh
    #
    # Script iptables para firewall.
    # Feito para empresa Intertech - Soluções em Informática
    # Autor: Bruno Seabra Nogueira Mendonça Lima - 16-04-2008
    #
    #
    # Libera as portas do SVN (8080), VNC(5800/5900), SSH(22)
    # Redireciona as portas da WEB(80) e VNC(5801/5901) para a máquina 192.168.123.1 (SERVIDOR SOL)
    # Aceita conexões da rede interna
    #
    #
    #


    IPTABLES="/sbin/iptables" ## iptables

    EXTDEV="eth0" ## placa de rede externa
    INTDEV="eth1" ## placa de rede interna
    IF_LOC="lo" # loopback

    EXTIP=`ifconfig $EXTDEV | grep "inet " | cut -f2 -d: | cut -f1 -dB` ## externo ip
    INTIP=`ifconfig $INTDEV | grep "inet " | cut -f2 -d: | cut -f1 -dB` ## interno ip

    NET_INT="192.168.123.0/255.255.255.0" # Rede da interface INTDEV

    case "$1" in
    start)

    modprobe ip_conntrack
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    modprobe ip_queue
    modprobe ip_tables
    modprobe ipt_LOG
    modprobe ipt_MARK
    modprobe ipt_MASQUERADE
    modprobe ipt_REDIRECT
    modprobe ipt_REJECT
    modprobe ipt_TCPMSS
    modprobe ipt_TOS
    modprobe ipt_limit
    modprobe ipt_mac
    modprobe ipt_mark
    modprobe ipt_multiport
    modprobe ipt_owner
    modprobe ipt_state
    modprobe ipt_tcpmss
    modprobe ipt_tos
    modprobe iptable_filter
    modprobe iptable_mangle
    modprobe iptable_nat

    #
    ## Compartilhar Internet
    #
    echo -n "Enabling IP Forwarding ... "
    echo "1" > /proc/sys/net/ipv4/ip_forward
    echo "done."

    #
    ## Dynamic Ip
    #
    echo -n "Enabling Dynamic Ips ... "
    echo "1" > /proc/sys/net/ipv4/ip_forward
    echo "done."

    #
    ## Limpa as tabelas e setando a politica DROP
    #

    echo -n "Flushing tables, Setting default policies to DROP ... "
    $IPTABLES -P INPUT DROP
    $IPTABLES -F INPUT
    $IPTABLES -P FORWARD DROP
    $IPTABLES -F FORWARD
    $IPTABLES -P OUTPUT DROP
    $IPTABLES -F OUTPUT
    $IPTABLES -t nat -F
    $IPTABLES -t mangle -F
    echo "done."


    echo -n "Setting up the firewall now ... "


    ## Somente conexões estabelecidas por nós primeiro
    $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    #Aceitar conexao das maquinas da rede interna
    $IPTABLES -A INPUT -p tcp --syn -s $NET_INT -j ACCEPT

    ## Permitir ssh (22) , svn (8080), webserver (80), vnc(5800,5900)
    $IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT
    $IPTABLES -A INPUT -p tcp --dport 8080 -j ACCEPT
    $IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT
    $IPTABLES -A INPUT -p tcp --dport 5800 -j ACCEPT
    $IPTABLES -A INPUT -p tcp --dport 5900 -j ACCEPT
    $IPTABLES -A INPUT -p tcp --dport 5901 -j ACCEPT

    # Aceita todo o tráfego vindo do loopback e indo pro loopback
    $IPTABLES -A INPUT -i lo -j ACCEPT

    ## Conexões estabelicidas sejam encaminhadas
    $IPTABLES -A FORWARD -i $EXTDEV -m state --state RELATED,ESTABLISHED -j ACCEPT

    ## Conexões da rede interna para internet
    $IPTABLES -A FORWARD -i $INTDEV -o $EXTDEV -j ACCEPT

    #Libera o foward para o servidor Web
    $IPTABLES -A FORWARD -p tcp -s 0/0 -d 0/0 --dport 80 -j ACCEPT
    $IPTABLES -A FORWARD -p tcp -d 0/0 -s 0/0 --sport 80 -j ACCEPT
    #$IPTABLES -A FORWARD -p tcp -d 192.168.123.1 --dport 80 -j ACCEPT


    ## MASQUAREDE
    $IPTABLES -A POSTROUTING -t nat -o $EXTDEV -j MASQUERADE

    #Libera o servidor WEB na porta 80
    $IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -i $EXTDEV -j DNAT --to 192.168.123.1:80
    #$IPTABLES -t nat -A PREROUTING -p tcp -s 0/0 -d 0/0 --dport 80 -j REDIRECT --to-port 8080
    #$IPTABLES -t nat -A PREROUTING -s 0/0 -d 0/0 -p tcp --dport 80 -j DNAT --to 192.168.123.1:80



    $IPTABLES -P OUTPUT ACCEPT


    echo "Firewall has been fully installed"

    ;;
    stop)

    echo -n "Flushin all rules ... "
    $IPTABLES -P INPUT ACCEPT
    $IPTABLES -P FORWARD ACCEPT
    $IPTABLES -P OUTPUT ACCEPT
    $IPTABLES -F INPUT
    $IPTABLES -F FORWARD
    $IPTABLES -F OUTPUT
    $IPTABLES -t nat -P PREROUTING ACCEPT
    $IPTABLES -t nat -P POSTROUTING ACCEPT
    $IPTABLES -t nat -P OUTPUT ACCEPT
    $IPTABLES -t nat -F PREROUTING
    $IPTABLES -t nat -F POSTROUTING
    $IPTABLES -t nat -F OUTPUT
    echo "done."
    ;;
    restart)
    sh $0 stop
    sh $0 start
    ;;
    status)
    $IPTABLES -L -n -v
    ;;
    *)
    echo "usage: $0 {start|stop|restart|status}"
    exit 1
    esac
    exit 0

    ## EOF ##

  2. #2

    Padrão

    Depois de ficar lendo muito tempo estou começando a entender um pouco de iptables e sei que a ordem das regras influi ...
    mas não sei em que ordem colocar para poder funcionar , isto é, se isso for o problema.

  3. #3

    Padrão

    Ola amigo...

    Você quer direcionar a porta 80 em conexões que vem de fora da sua rede?

    Outra coisa, você disse que queria compartilhar a internet e bloquear tudo, mas em uma parte do seu script você ta librando ssh e outros serviços para TODOS!

    Explica um pouquinho melhor!

    p.s.: Depois da uma olhada nesse site aqui! Show de bola para aprender! Não pode ter preguiça!
    http://iptables-tutorial.frozentux.n...-tutorial.html
    Última edição por zenun; 23-04-2008 às 02:39. Razão: Adicionando um site de referencia!