Bloquear IP's por Iptables [Resolvido]

Iniciado por Arthur Bernardes, 16 de Outubro de 2013, 09:21

tópico anterior - próximo tópico

Arthur Bernardes

Olá amigos.

Senti necessidade agora de bloquear um certo IP aqui na rede, mas já tentei todo tipo de regra e ainda não consegui bloquear, o IP bloqueado consegue acessar a internet, vejam as regras que já tentei.

Código (/etc/init.d/firewall) Selecionar
iptables -A INPUT -s 172.16.0.3 -j DROP
iptables -A INPUT -i $iflocal1 -s 172.16.0.3 -j DROP


Mas aí me toquei que essa regra só irá bloquear qualquer pacote desse IP destinado ao gateway, e eu quero bloquear o acesso à internet, então tentei isso.

Código (/etc/init.d/firewall) Selecionar
iptables -A INPUT -i $iflocal1 -s 172.16.0.3 -j DROP
iptables -A FORWARD -i $iflocal1 -s 172.16.0.3 -j DROP


Mas ainda assim a máquina acessa a internet, veja meu firewall atual.

Código (/etc/init.d/firewall) Selecionar
#!/bin/bash

echo "Declarando variáveis"

# Interface da Internet:
ifinternet="eth4"

# IP da Internet
ip_internet="192.168.1.2"

# Interface da rede local
iflocal="eth3"

# IP da Rede Local
rede_local="10.0.0.0/24"

# Interface da rede local 1
iflocal1="eth3:0"

# IP da Rede Local 1
rede_local1="172.16.0.0/23"

# Portas à serem liberadas
portas_liberadas="21,23,25,53,110,143,22,80,443,3128,3306,3389,5432,5900,9091"

#### Função "start" ####

iniciar(){

echo "Carregando módulos"

modprobe ip_tables
modprobe iptable_mangle
modprobe iptable_nat

echo "Módulos carregados"

echo "Limpando regras"

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

echo "Regras limpas"

echo "Definindo política padrão"

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

echo "Política padrão definida"

echo "Habilitando roteamento"

echo 1 > /proc/sys/net/ipv4/ip_forward

echo "Roteamento ativado"

echo "Compartilhando internet"

iptables -t nat -A POSTROUTING -o $ifinternet -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter

echo "Internet compartilhada"

echo "Manter conexões establecidas"

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

echo "Negando pacotes inválidos"

iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

echo "Liberando portas"

iptables -A INPUT -m multiport -p tcp --dport $portas_liberadas -j ACCEPT
iptables -A FORWARD -m multiport -p tcp --dport $portas_liberadas -j ACCEPT
iptables -A OUTPUT -m multiport -p tcp --dport $portas_liberadas -j ACCEPT
iptables -A INPUT -m multiport -p udp --dport $portas_liberadas -j ACCEPT
iptables -A FORWARD -m multiport -p udp --dport $portas_liberadas -j ACCEPT
iptables -A OUTPUT -m multiport -p udp --dport $portas_liberadas -j ACCEPT

echo "Portas liberadas"


echo "Hosts indesejados serão bloqueados"

iptables -A INPUT -i $iflocal1 -s 172.16.0.3 -j DROP
iptables -A FORWARD -i $iflocal1 -s 172.16.0.3 -j DROP

echo "Liberando tráfego"

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i $iflocal -j ACCEPT
iptables -A INPUT -i $iflocal1 -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT
iptables -A FORWARD -i $iflocal -j ACCEPT
iptables -A FORWARD -i $iflocal1 -j ACCEPT

echo "Tráfego liberado"

}

parar(){
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z
}

status(){
iptables -L -v -n
}

case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
"status") status;;
*) echo "Use os parâmetros start ou stop"
esac

NOOB Saibot

Acredito que a regra correta seria
iptables -A OUTPUT -s 172.16.0.3 -j DROP , Bloquear os pacotes de saida proveninte do ip 172.16.0.3

ou

iptables -A INPUT -s 172.16.0.3 -p tcp --dport 80 -j DROP , Bloquear todos os pacotes tcp vindos da porta 80 do ip 172.16.0.3




Arthur Bernardes

Olá NOOB Saibot, obrigado por ajudar, teste suas regras, até mesmo as duas juntas e nada, o IP ainda continua a acessar a internet. :(

zekkerj

O bloqueio deve ser feito nas cadeias INPUT e FORWARD mesmo... a questão aí é a ordem das regras. Para fazer bloqueio total da vítima, coloque essas regras como as primeiras do seu firewall, inclusive antes das regras "ESTABLISHED,RELATED".

Se quiser manter algum acesso, vá descendo as regras de bloqueio, até que elas apareçam imediatamente antes do tráfego a ser liberado. As regras "ESTABLISHED,RELATED também têm que aparecer antes do bloqueio.

Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Arthur Bernardes

#4
Exatamente, quero bloquear qualquer tipo de acesso com o Gateway, de forma que ele não tenha acesso à internet.

Realmente o problema era a ordem das regras, fiz como você recomendou, e o bloqueio funcionou perfeitamente.

Mais uma vez obrigado zekkerj e NOOB Saibot por ajudarem!!! :)

Meu firewall agora está assim:

Código (/etc/init.d/firewall) Selecionar
#!/bin/bash

echo "Declarando variáveis"

# Interface da Internet:
ifinternet="eth0"

# IP da Internet
ip_internet="192.168.1.2"

# Interface da rede local
iflocal="eth1"

# IP da Rede Local
rede_local="10.0.0.0/23"

# Portas à serem liberadas
portas_liberadas="21,23,25,53,110,143,22,80,443,3128,3306,3389,5432,5900,9091"

echo "Variáveis declaradas"

#### Função "start" ####

iniciar(){

echo "Carregando módulos"

modprobe ip_tables
modprobe iptable_mangle
modprobe iptable_nat

echo "Módulos carregados"

echo "Limpando regras"

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

echo "Regras limpas"

echo "Definindo política padrão"

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

echo "Política padrão definida"

echo "Habilitando roteamento"

echo 1 > /proc/sys/net/ipv4/ip_forward

echo "Roteamento ativado"

echo "Compartilhando internet"

iptables -t nat -A POSTROUTING -o $ifinternet -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter

echo "Internet compartilhada"

echo "Bloqueando IP indesejado na rede"

iptables -A INPUT -i $iflocal -s 10.0.0.2 -j DROP
iptables -A FORWARD -i $iflocal -s 10.0.0.2 -j DROP

echo "IP indesejado bloqueado"

echo "Manter conexões establecidas"

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

echo "Negando pacotes inválidos"

iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

echo "Liberando portas"

iptables -A INPUT -m multiport -p tcp --dport $portas_liberadas -j ACCEPT
iptables -A FORWARD -m multiport -p tcp --dport $portas_liberadas -j ACCEPT
iptables -A OUTPUT -m multiport -p tcp --dport $portas_liberadas -j ACCEPT
iptables -A INPUT -m multiport -p udp --dport $portas_liberadas -j ACCEPT
iptables -A FORWARD -m multiport -p udp --dport $portas_liberadas -j ACCEPT
iptables -A OUTPUT -m multiport -p udp --dport $portas_liberadas -j ACCEPT

echo "Liberando tráfego"

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i $iflocal -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT
iptables -A FORWARD -i $iflocal -j ACCEPT

echo "Tráfego liberado"

echo "Redirecionando tráfego para computadores da rede"

#### iptables -t nat -A PREROUTING -i $ifinternet -p tcp -m tcp --dport 2222 -j DNAT --to-destination 172.16.1.254:2222

echo "Tráfego redirecionado"

echo "Redirecionando tráfego para proxy transparente"

#iptables -t nat -A PREROUTING -i $iflocal -p tcp --dport 80 -j REDIRECT --to-port 3128
#iptables -t nat -A PREROUTING -i $iflocal -p udp --dport 80 -j REDIRECT --to-port 3128

echo "Tráfego redirecionado para proxy transparente"

}

parar(){
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z
}

status(){
iptables -L -v -n
}

case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
"status") status;;
*) echo "Use os parâmetros start ou stop"
esac