Como bloquear um IP no Linux usando iptables

Iptables é a aplicação nativa de firewall do linux. Através dele, você pode realizar bloqueio de IPs, controle de tráfego de entrada, bloqueios de saida de tráfego… Além disso, ele também possui funções avançadas como controle de tráfego por uma porta específica. Para trabalhar com o IPTABLES, é muito importante saber seu IP. Por isso, você pode consultar seu IP nesta página: Qual o meu IP ?

Nesta semana, um de nossos parceiros estava recebendo um flood (ataque) em seu servidor de e-mails (IMAP). Determinado endereço IP estava realizando tal ataque.

Jun 12 12:59:03 server dovecot: pop3-login: Disconnected (auth failed, 1 attempts): user=<loan>, method=PLAIN, rip=189.1.**.**, lip=93.104.**.**
Jun 12 12:59:06 server dovecot: pop3-login: Disconnected (auth failed, 1 attempts): user=<loan>, method=PLAIN, rip=189.1.**.**, lip=93.104.**.**

Analizando as mensagens de erro, descobrimos se tratar do IP 189.1.**.** . Para resolver o problema, fizemos o bloqueio do endereço IP que estava originando o ataque, usando o firewall iptables.

Bloqueando um IP

Nos exemplos a seguir, substitua sempre o IP 1.2.3.4 pelo IP que deseja bloquear!

Inicialmente, para realizar um simples bloqueio ao IP que causou o ataque:

iptables -I INPUT -s 1.2.3.4 -j DROP

Dessa forma, o IP problemático já estará bloqueado e o servidor não receberá mais nenhum dado dele.

Opções mais avançadas do iptables para realizar bloqueios:

Caso seu servidor tenha mais de uma placa de rede, você pode bloquear apenas em uma placa específica (aonde eth1 é a interface que receberá o bloqueio).

iptables -I INPUT -i eth1 -s 1.2.3.4 -j DROP

Como bloquear um range inteiro (subnet) de 254 IPs ? Por exemplo: 189.1.50.1  até 189.1.50.254 ? Simplesmente,  troque o último bloco do IP por “0” e adicione /24 ao final:

iptables -A INPUT -s 189.1.50.0/24 -j DROP

Como bloquear uma sub-rede ainda maior? Por exemplo, 189.1.1.1 até 189.1.254.254 ? Substitua os dois ultimos blocos por “0” e agora adicione /16 ao final:

iptables -A INPUT -s 189.1.0.0/16 -j DROP

Como gerar um log a cada bloqueio realizado com o iptables ?

iptables  -A INPUT -s 189.1.50.0/24 -j LOG --log-prefix "IP BLOQUEADO:"

Como exibir todos os IPs bloqueados no sistema?

iptables -L -v

Como verificar se determinado IP está ou não bloqueado ?

iptables -L -v | grep 1.2.3.4

Como desbloquear um IP no firewall iptables ?

Primeiramente vamos listar os IPs bloqueados:

iptables -L INPUT -n --line-numbers | grep 1.2.3.4

Por exemplo, o resultado:

num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       0    --  *      *       200.19.18.5        0.0.0.0/0
2        0     0 DROP       0    --  *      *       201.19.18.100       0.0.0.0/0
3        0     0 DROP       0    --  *      *       189.19.29.2        0.0.0.0/0

Dessa forma, supondo que queremos desbloquear o IP 201.19.18.100 , que está na linha 2:

iptables -D INPUT 2

Salvando as configurações do iptables para o próximo boot

service iptables save

Por fim, para conferir a lista de regras iptables no boot, use este comando:

less /etc/sysconfig/iptables

 

 

One thought on “Como bloquear um IP no Linux usando iptables”

  1. O meu moto G possui o Android 4.4.4 com root e nele eu até consigo fazer o bloqueio de IPs usando o apk IPTABLES2 mas tudo é perdido ao reiniciar o aparelho. Lembro que no meu antigo Samsung Young os bloqueios permaneciam salvos. Lembrando que este comando ‘services iptable save’ não salvou retornando um unknown.

    Se alguém sabe de uma solução posta aqui.

    Minha provável solução seria tentar por um script no boot do android mas não sei ainda como linkar este script ao iptables.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

hhchat