+ Responder ao Tópico



  1. #1

    Exclamation Dúvida iptables

    Olá pessoal

    Vamos aos problemas hahahaha, brincadeira.
    Gostaria se possível alguém sanar algumas dúvidas minhas sobre iptables, segue o cenário aqui onde trabalho temos dois links de internet:

    - 1 link de 40 mb que vem por fibra ate o router e do router pro switch e do switch para a lan

    - 1 Link de 20mb que vai direto a um router wireless

    eis o que quero fazer:

    ligar estes dois routers em uma maquina e esta maquina servirá como gateway e firewall que distribuirá rede para a lan.
    o que eu quero com o firewall, quero que ele direcione os pacotes RDP e PCoIP para o link de 40mb e o resto irá para o link de 20mb.

    bom instalei um servidor dhcp nesta maquina que a principio está compartilhando a internet pela eth0, com o seguinte comando do script:

    iniciar(){
    modprobe iptable_nat
    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
    }

    com este comando acima ele compartilha a rede ou ele faz a mascara de saída? pois tenho comandos parecidos no meu script de marcação dos pacotes
    e se for mesmo o comparilhamento da rede do eth1 meu iptables será capaz de redirecionar os pacotes RDP e PCoIP para a eth2 que seria o link de 40mb?


    esse dhcp está distribuindo o ip 192.168.0.1/24( nao testei realmente ainda)
    mas meu servidor tem 3 interfaces de rede, 2 pcis e 1 onboard.
    e meu script de marcar os pacotes com RDP e PCoIP está assim:


    #!/bin/sh

    # Interface da Intranet
    IF_LAN='eth0'

    # Interfaces ADSL
    IF_LINKNET='eth1'
    IF_LINKFLIN='eth2'

    # Gateways dos ADSL (IPs dos roteadores)
    GW_LINKNET='192.168.1.1'
    GW_LINKFLIN='192.168.150.1'

    # Mascarar saídas para os dois ADSL
    ------------------------------------------------------------
    iptables -t nat -A POSTROUTING -o $IF_LINKNET -j MASQUERADE
    iptables -t nat -A POSTROUTING -o $IF_LINKFLIN -j MASQUERADE

    # Marca com "2" os pacotes que saem pelas portas 25 (SMTP) e 110 (POP) RDP(3389) PCoIP(
    ------------------------------------------------------------
    iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 25 -j MARK --set-mark 2 #Smtp
    iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 3389 -j MARK --set-mark 2 #RDP TCP
    iptables -t mangle -A PREROUTING -i $IF_LAN -p udp --dport 3389 -j MARK --set-mark 2 #RDP UDP
    iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 110 -j MARK --set-mark 2 #POP TCP
    iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 50002 -j MARK --set-mark 2 #PCoIP TCP
    iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 4172 -j MARK --set-mark 2 #PcoIP TCP
    iptables -t mangle -A PREROUTING -i $IF_LAN -p udp --dport 50002 -j MARK --set-mark 2 #PCoIP UDP
    iptables -t mangle -A PREROUTING -i $IF_LAN -p udp --dport 4172 -j MARK --set-mark 2 #PCoIP UDP
    iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 2 #SMTP TCP
    iptables -t mangle -A OUTPUT -p tcp --dport 3389 -j MARK --set-mark 2 #RDP TCP
    iptables -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 2 #POP TCP
    iptables -t mangle -A OUTPUT -p udp --dport 3389 -j MARK --set-mark 2 #RDP UDP
    iptables -t mangle -A OUTPUT -p udp --dport 50002 -j MARK --set-mark 2 #PCoIP UDP
    iptables -t mangle -A OUTPUT -p udp --dport 4172 -j MARK --set-mark 2 #PCoIP UDP
    iptables -t mangle -A OUTPUT -p tcp --dport 50002 -j MARK --set-mark 2 #PcoIP tcp
    iptables -t mangle -A OUTPUT -p tcp --dport 4172 -j MARK --set-mark 2 #PCoIP TCP

    # Joga serviços de e-mail (pacotes marcados com 2) para o LINKFLIN
    ------------------------------------------------------------
    ip rule add fwmark 2 table LINKFLIN prio 20
    ip route add default via $GW_LINKFLIN dev $IF_LINKFLIN table 20

    # Atualiza tabela de roteamento
    # ------------------------------------------------------------
    ip route flush cache



    a dúvida é o que fazer agora??


    sou novato em administrção de redes e ficaria muito feliz em ter ajuda me explicando os scripts )

    desde já agradeço a todos a ajuda


    http://img.vivaolinux.com.br/comunid.../edit_ico1.png

  2. #2

    Padrão Re: Dúvida iptables

    Bem, pelo o que eu entendi em seu script ele verifica a conexão, marca ela e manda para o link correspondente, o que você pode fazer é melhor uma pouco sua segurança, segue um pequeno script que uso em um servidor de Banco de dados da minha rede interna, nele não tem o mascaramento das interfaces, mas é bem fácil de entende-lo

    ----------------------------------------------------------------------------------------------

    #!/bin/sh
    # chkconfig: 345 99 10
    # description: Firewall
    #"::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
    #"| Script de Firewall - IPTABLES"
    #"| Uso: firewall start|stop|restart|status"
    #"::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"

    #Declaração de variaveis
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    IPTABLES="/sbin/iptables"
    PROGRAMA="/etc/init.d/firewall"

    #portas liberadas e bloqueadas
    PORTSLIB="/etc/configuracao_firewall/portslib"
    PORTSBLO="/etc/configuracao_firewall/portsblo"
    #Interfaces de Rede
    LAN=eth1
    #WAN=eth0
    REDE="192.168.0.0/24"

    # Os diversos módulos do iptables são chamdos através do modprobe
    modprobe ip_tables
    modprobe iptable_nat
    modprobe ip_conntrack
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    modprobe ipt_LOG
    modprobe ipt_REJECT
    modprobe ipt_MASQUERADE
    modprobe ipt_state
    modprobe ipt_multiport
    modprobe iptable_mangle
    modprobe ipt_tos
    modprobe ipt_limit
    modprobe ipt_mark
    modprobe ipt_MARK

    case "$1" in
    start)

    #mensagem de inicialização
    echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
    echo "| Script de Firewall - IPTABLES"
    echo "| Uso: firewall start|stop|restart|status"
    echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
    echo
    echo "=========================================================|"
    echo "|:INICIANDO A CONFIGURACAO DO FIREWALL NETFILTER ATRAVES:|"
    echo "|: DO IPTABLES :|"
    echo "=========================================================|"

    $IPTABLES -F
    $IPTABLES -F INPUT
    $IPTABLES -F OUTPUT
    $IPTABLES -F FORWARD
    $IPTABLES -t mangle -F
    $IPTABLES -t nat -F
    $IPTABLES -X

    $IPTABLES -P INPUT DROP
    $IPTABLES -P OUTPUT ACCEPT
    $IPTABLES -P FORWARD DROP

    # ativar o redirecionamento no arquivo ip_forward
    echo "1" > /proc/sys/net/ipv4/ip_forward
    echo "Ativado o redirecionamento no arquivo ip_forward"
    echo "ON .................................................[ OK ]"


    #habilitando o fluxo interno entre os processos
    $IPTABLES -I INPUT -i lo -j ACCEPT
    $IPTABLES -I OUTPUT -o lo -j ACCEPT
    echo "Ativado o fluxo interno entre os processos"
    echo "ON .................................................[ OK ]"

    #Ativa os logs para as portas princiais do servidor
    for i in `cat $PORTSLIB`; do
    $IPTABLES -A INPUT -p tcp --dport $i -j LOG --log-prefix " Acesso a porta: $i INPUT "
    $IPTABLES -A FORWARD -p tcp --dport $i -j LOG --log-prefix " Acesso a porta $i FORWARD "
    done

    #liberar as portas principais do servidor
    for i in `cat $PORTSLIB`; do
    $IPTABLES -A INPUT -p tcp --dport $i -j ACCEPT
    $IPTABLES -A FORWARD -p tcp --dport $i -j ACCEPT
    $IPTABLES -A OUTPUT -p tcp --sport $i -j ACCEPT
    $IPTABLES -A INPUT -p udp --dport 3306 -j ACCEPT
    $IPTABLES -A FORWARD -p udp --dport 3306 -j ACCEPT
    $IPTABLES -A OUTPUT -p udp --sport 3306 -j ACCEPT
    done
    $IPTABLES -I INPUT -m state --state ESTABLISHED -j ACCEPT
    $IPTABLES -I INPUT -m state --state RELATED -j ACCEPT
    $IPTABLES -I OUTPUT -p icmp -o $WAN -j ACCEPT
    $IPTABLES -I INPUT -p icmp -j ACCEPT
    echo "Ativado as portas abertas para estabelecer conexoes"
    echo "Ativado a liberacao das portas principais do servidor $HOSTNAME"
    echo "ON .................................................[ OK ]"

    #Bloqueio ping da morte
    echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
    $IPTABLES -N PING-MORTE
    $IPTABLES -A INPUT -p icmp --icmp-type echo-request -j PING-MORTE
    $IPTABLES -A PING-MORTE -m limit --limit 1/s --limit-burst 4 -j RETURN
    $IPTABLES -A PING-MORTE -j DROP
    echo "Ativado o bloqueio a tentativa de ataque do tipo ping da morte"
    echo "ON .................................................[ OK ]"

    #bloquear ataque do tipo SYN-FLOOD
    echo "0" > /proc/sys/net/ipv4/tcp_syncookies
    $IPTABLES -N syn-flood
    $IPTABLES -A INPUT -i $WAN -p tcp --syn -j syn-flood
    $IPTABLES -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
    $IPTABLES -A syn-flood -j DROP
    echo "Ativado o bloqueio a tentativa de ataque do tipo SYN-FLOOD"
    echo "ON .................................................[ OK ]"

    #Bloqueio de ataque ssh de força bruta
    $IPTABLES -N SSH-BRUT-FORCE
    $IPTABLES -A INPUT -i $WAN -p tcp --dport 22 -j SSH-BRUT-FORCE
    $IPTABLES -A INPUT -i $LAN -p tcp --dport 22 -j SSH-BRUT-FORCE
    $IPTABLES -A SSH-BRUT-FORCE -m limit --limit 1/s --limit-burst 4 -j RETURN
    $IPTABLES -A SSH-BRUT-FORCE -j DROP
    echo "Ativado o bloqueio a tentativa de ataque do tipo SSH-BRUT-FORCE"
    echo "ON .................................................[ OK ]"

    #Bloqueio de portas
    #for i in `cat $PORTSBLO`; do
    #$IPTABLES -A INPUT -p tcp -i $WAN --dport $i -j DROP
    #$IPTABLES -A INPUT -p udp -i $WAN --dport $i -j DROP
    #$IPTABLES -A FORWARD -p tcp --dport $i -j DROP
    #done

    #bloqueio Anti-Spoofings
    $IPTABLES -A INPUT -s 10.0.0.0/8 -i $WAN -j DROP
    $IPTABLES -A INPUT -s 127.0.0.0/8 -i $WAN -j DROP
    $IPTABLES -A INPUT -s 172.16.0.0/12 -i $WAN -j DROP
    $IPTABLES -A INPUT -s 192.168.1.0/16 -i $WAN -j DROP
    echo "Ativado o bloqueio de tentativa de ataque do tipo Anti-spoofings"
    echo "ON .................................................[ OK ]"


    #Bloqueio de scanners ocultos (Shealt Scan)
    $IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK, FIN, -m limit --limit 1/s -j ACCEPT
    echo "Bloqueado scanners ocultos"
    echo "ON .................................................[ OK ]"

    echo
    echo "==========================================================|"
    echo "::TERMINADA A CONFIGURACAO DO FIREWALL NETFILTER ATRAVES::|"
    echo ":: DO IPTABLES ::|"
    echo "==========================================================|"
    echo "FIREWALL ATIVADO - SISTEMA PREPARADO"
    ;;

    stop)
    $IPTABLES -F
    $IPTABLES -F INPUT
    $IPTABLES -F OUTPUT
    $IPTABLES -F FORWARD
    $IPTABLES -t mangle -F
    $IPTABLES -t nat -F
    $IPTABLES -X
    $IPTABLES -Z

    $IPTABLES -P INPUT ACCEPT
    $IPTABLES -P OUTPUT ACCEPT
    $IPTABLES -P FORWARD ACCEPT

    echo "FIREWALL DESCARREGADO - SISTEMA LIBERADO"
    ;;

    restart)
    $PROGRAMA stop
    $PROGRAMA start
    ;;

    status)
    echo ""
    echo "Listando a tabela Filter..."
    echo "******************************************************************************************************"
    $IPTABLES -t filter -L -v -n
    echo ""
    echo ""
    echo "Listando a Tabela NAT..."
    echo "******************************************************************************************************"
    $IPTABLES -t nat -L -v -n
    echo ""
    echo ""
    echo "Listando a Tabela Mangle"
    echo "******************************************************************************************************"
    $IPTABLES -t mangle -L -v -n
    ;;

    *)
    echo "Use: $N {start|stop|restart|status}" >&2
    echo -e "\033[01;31mATENCAO";tput sgr0
    echo "Voce nao colocou nenhum argumento ou algum conhecido, entao por padrao sera dado em 5 segundos um restart no firewall"
    sleep 5
    $PROGRAMA restart
    exit 1
    esac
    exit 0

  3. #3

    Padrão Re: Dúvida iptables

    Ta faltando uma regra de todos os pacotes respectivo link sair pelo mesmo gateway
    Et tbm o ip_forward conforme script do colega