- Bloquear trafego IP
+ Responder ao Tópico
-
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
;;
*)
-
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...
-
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!
-
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...
-
eu prefiro bloquear ip usando um null route
route add -host ip.do.cliente reject
-
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.
-
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.
-
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
-
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?
-
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...
-
Eu quero usar o melhor. A melhor forma.
Quero liberar alguns IP e o resto quero bloquear TODO seu trafego!
-
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...