+ Responder ao Tópico



  1. #1

    Padrão Bloquear trafego IP

    Pessoal,
    estou tentando fazer o seguinte:
    liberar determinados IP's para trafegar, principalmente na internet.
    bloquear todo o trafego de uma classe inteira de IP válido. Até sua saida para internet tem que ser cortada.

    É um servidor gateway, não estou utilizando proxy e o DNS é em outro servidor.

    Abaixo segue meu script iptables. Nesse esta liberando trafego para todo IP e estou tentando, mas sem sucesso, bloquear o trafego de um determinado IP. Do jeito que está, não está sendo bloqueado e o IP está até navegando na internet. Nesse caso como faço para bloquear aquele determinado IP 999.999.999.5 para ficar sem trafego, sem internet, sem nada?

    #!/bin/bash

    ## VARIAVEIS ##
    IPT="/sbin/iptables"
    IP_ETH0="111.111.111.1" # Esse seria o IP do Link que recebo na ETH0
    IP_ETH1="999.999.999.9" # Esse seria meu IP Valido na ETH1. IP que é configurado como Gateway nos clientes.
    IF_ETH0="eth0"
    IF_ETH1="eth1"

    ## VERIFICA IPTABLES ##
    if [ ! -f $IPT ]; then
    echo "IPTABLES nao encontrado."
    exit
    fi

    ## FUNCOES ##
    start() {
    echo -n "Ativando regras de Firewall..."
    $IPT -t filter -F
    $IPT -t nat -F
    $IPT -t mangle -F
    $IPT -X
    echo "1" > /proc/sys/net/ipv4/ip_forward

    $IPT -A INPUT -d $IP_ETH0 -p icmp -m icmp --icmp-type echo-request -m limit --limit 3/sec -i $IF_ETH0 -j ACCEPT
    $IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -i $IF_ETH0 -j LOG --log-prefix " ICMP DENY "
    $IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -i $IF_ETH0 -j DROP
    ## Tentativa de bloqueio para cortar todo trafego até para internet
    $IPT -I INPUT -i eth1 -s 999.999.999.5 -j DROP
    $IPT -A FORWARD -p tcp -i $IF_ETH1 -s 999.999.999.5 -d $IP_ETH1 -j DROP
    $IPT -A FORWARD -p udp -i $IF_ETH1 -s 999.999.999.5 -d $IP_ETH1 -j DROP
    ## Outra tentativa
    $IPT -I INPUT -i eth0 -s 999.999.999.5 -j DROP
    $IPT -A FORWARD -p tcp -i $IF_ETH0 -s 999.999.999.5 -d $IP_ETH1 -j DROP
    $IPT -A FORWARD -p udp -i $IF_ETH0 -s 999.999.999.5 -d $IP_ETH1 -j DROP
    ##
    ## Mais outra tentativa
    $IPT -A INPUT -s 999.999.999.5 -d $IP_ETH1 -i $IF_ETH1 -j DROP
    ## Liberando acesso SSH ao IP da minha maquina
    $IPT -A INPUT -s 999.999.999.2 -d $IP_ETH1 -p tcp --sport 1024:65535 --dport 22 -i $IF_ETH1 -j ACCEPT
    ## Liberando porta 161 para uma outra maquina minha
    $IPT -A INPUT -s 999.999.999.3 -d $IP_ETH1 -p udp --sport 1024:65535 --dport 161 -i $IF_ETH1 -j ACCEPT
    $IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -m limit --limit 15/sec -i $IF_ETH1 -j ACCEPT
    $IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -i $IF_ETH1 -j LOG --log-prefix " ICMP DENY "
    $IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -i $IF_ETH1 -j DROP

    $IPT -A INPUT -i lo -j ACCEPT
    $IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    $IPT -A INPUT -m state --state INVALID -j LOG --log-prefix "BLOQUEIO INPUT INVALID "
    $IPT -A INPUT -m state --state INVALID -j DROP
    $IPT -A INPUT -m state --state NEW -j LOG --log-prefix "BLOQUEIO INPUT NEW "
    $IPT -A INPUT -m state --state NEW -j DROP
    ### MANGLE ###
    $IPT -t mangle -A OUTPUT -o $IF_ETH0 -p tcp --dport 21 -j TOS --set-tos 0x10
    $IPT -t mangle -A OUTPUT -o $IF_ETH0 -p tcp --dport 23 -j TOS --set-tos 0x10
    $IPT -t mangle -A OUTPUT -o $IF_ETH0 -p tcp --dport 6665:6668 -j TOS --set-tos 0x10
    $IPT -t mangle -A OUTPUT -o $IF_ETH0 -p udp --dport 53 -j TOS --set-tos 0x10
    echo " [OK]"
    }
    stop() {
    echo -n "Desativando regras de Firewall..."
    $IPT -t filter -F
    $IPT -t nat -F
    $IPT -t mangle -F
    $IPT -X
    #echo "0" > /proc/sys/net/ipv4/ip_forward
    echo " [OK]"
    }

    ## FILTRO DE PARAMETROS DE EXECUCAO ##
    case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    restart)
    stop
    start
    ;;
    *)

  2. #2

    Padrão

    O problema de suas regras é que nela você está especificando a origem e o destino na tabela Forward. Como a tabela Forward é para roteamento é difícil você especificar o IP de destino pois serão todos os IPs da internet (caso ele esteja navegando), ou seja muitos.

    Para realizar o bloqueio, especifique somente a origem e realize o drop:
    $IPT -A FORWARD -i $IF_ETH1 -s 999.999.999.5 -j DROP

    Note que não especifiquei o protocolo, logo ele bloqueará todos os protocolos (TCP, UDP, IP, ICMP...).

    Qualquer dúvida posta ai...

  3. #3

    Padrão

    Jóia, bloqueou, funciounou certinho. Vamos supor que esse IP esteja em uma maquina, se essa maquina estiver com virus o trafego dela passa pra minha rede ou isso ja ta bloqueando tudo?

    Bom, em vez de eu ir bloqueando um monte de IP, é mais facil eu bloquear a classe de IP toda e deixar liberado apenas os que eu desejar. Pra fazer isso, como ficaria meu script?

    Valeuuuuuuuu!

  4. #4

    Padrão

    Cara, isso não impede a propagação de virus dentro da rede do host infectado. O Firewall só bloqueia os pacotes que passam por ele, dois hosts na mesma rede se comunicam através de um Hub/Switch. Se quiser aprender mais sobre essas características da rede, dá uma olhada no curso de redes que fiz no meu blog.

    Quanto ao script, depende, o numero de máquinas a ser bloqueado é muito superior ao número de máquinas a serem permitidas?? Se sim, então vale mais a pena bloquear tudo e permitir apenas máquinas específicas.

    Não tenho como te dizer a forma certa do seu script pois não sei a rede/máscara da sua rede interna, então vamos a um exemplo:
    Temos a rede 192.168.1.0/24 com os hosts 192.168.1.1 até 192.168.1.10. O Gateway/Firewall é o 192.168.1.1 (eth1) e os hosts a serem permitidos são o 192.168.1.5 e o 192.168.1.10. As regras seriam as seguintes:
    iptables -A FORWARD -i eth1 -s 192.168.1.5 -j ACCEPT
    iptables -A FORWARD -i eth1 -s 192.168.1.10 -j ACCEPT
    iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -j DROP

    Você pode interpretar essas regras como sendo: Fulano (192.168.1.5) pode passar, o Sicrano (192.168.1.10), que é irmão do Fulano, também pode passar, mas todo o resto da sua família (192.168.1.0/24) eu não vou deixar.

    Qualquer dúvida posta ai!
    Até mais...

  5. #5

    Padrão

    eu prefiro bloquear ip usando um null route

    route add -host ip.do.cliente reject

  6. #6

    Padrão

    Nulll route é uma boa também.

    Mas como a geralmente há a necessidade de querer bloquear apenas alguns tipos de tráfego o melhor início é o iptables.

  7. #7

    Padrão

    Qual é a diferença?

    Como eu faria pra liberar e depois bloquear?

    route add -host 192.168.1.5 accept
    route add -host 192.168.1.10 accept
    route add -host 192.168.1.0/24 reject

    Isso?
    Última edição por MrJoe; 24-07-2009 às 11:02.

  8. #8

    Padrão

    No caso a Null roue só bloqueia, então se vc quer bloquear 20 IPs vc tem que criar 20 rotas. E como eu falei, null routes bloqueia tudo. Se vc quiser depois bloquear apenas alguns tipos de tráfego você vai ter que voltar pro iptables

  9. #9

    Padrão

    Mas eu gostaria de bloquear tudo de um determinado IP.
    Então é só ir colocando para os IP que quero deixar liberado pelo iptables ACCEPT e depois fechar tudo com route add -host 192.168.1.0/24 reject
    Ai depois se eu quiser liberar mais alguns IP's é só colocar ele acima do route... reject como iptables ACCEPT?

    Isso?

  10. #10

    Padrão

    Não cara... Ou usa uma coisa ou outra. Null routes é um processo de roteamento enquanto o iptables é um filtro de pacotes.

    Primeiro decide o que você vai querer usar que agente te ajuda!

    Até mais...

  11. #11

    Padrão

    Eu quero usar o melhor. A melhor forma.
    Quero liberar alguns IP e o resto quero bloquear TODO seu trafego!

  12. #12

    Padrão

    Desculpa, mas não cabe a mim decidir o que é melhor pra vc. Ambos os métodos são bons, mas dependendo da sua necessidade um pode ser mais vantajoso.

    Até mais...