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

 

 

Este artigo foi útil?

Obrigado pela resposta!
Picture of Homehost

Homehost

Analista de sistemas, formado pela PUC-Rio. Programador, gestor de redes e diretor da empresa Homehost. Pai do Bóris, seu pet de estimação. Gosta de rock'n'roll, cerveja artesanal e de escrever sobre assuntos técnicos.

Contato: gustavo.blog@homehost.com.br

Ganhe 30% OFF

Indique seu nome e e-mail,e ganhe um cupom de desconto de 30% para sempre na Homehost!