Olá!

Seguindo a linha de hardening que venho abordando nos últimos artigos, hoje vamos falar de uma abordagem simples, porém extremamente eficiente: bloqueio por GEOIP direto no sistema operacional.

Esse é um tipo de configuração que, inclusive, costumo compartilhar nos treinamentos de Zimbra que aplico, principalmente quando falamos de proteção de borda em ambientes sem firewall dedicado.

Em muitos cenários, acabamos ficando limitados nas camadas de proteção.

E é aqui que entra uma pergunta prática:

Faz sentido permitir conexões SMTP do mundo inteiro?

Na maioria dos ambientes que administro, a resposta é não.

Grande parte das tentativas de abuso (spam, brute force, relay abuse) vem de regiões bem específicas — e bloquear isso na borda já reduz bastante o ruído antes mesmo de chegar no Postfix/Zimbra.

Instalando o ipset

O ipset permite trabalhar com listas de IP de forma performática, sem degradar o iptables.

yum install ipset

ou

apt-get install ipset

Baixando as listas de países (GEOIP)

cd /root
mkdir geoip
cd geoipwget --no-check-certificate http://www.ipdeny.com/ipblocks/data/countries/all-zones.tar.gz
tar zxvf all-zones.tar.gz

Aqui você terá arquivos por país (ex: cn.zone, ru.zone, etc).


Criando a lista no ipset

ipset create countryblock nethash

Adicionando países na blacklist

Exemplo prático (ajuste conforme sua realidade):

for i in `cat cn.zone`;do ipset add countryblock $i;done
for i in `cat in.zone`;do ipset add countryblock $i;done
for i in `cat ru.zone`;do ipset add countryblock $i;done
for i in `cat ni.zone`;do ipset add countryblock $i;done

Aqui não existe certo ou errado — o ideal é você observar seus logs e entender de onde vêm as tentativas.


Criando a regra no iptables

iptables -A INPUT -m set --match-set countryblock src -j DROP

A partir daqui, qualquer IP desses ranges nem chega a conversar com seu servidor.


Removendo a regra (caso necessário)

iptables -D INPUT -m set --match-set countryblock src -j DROP

Tornando persistente

Debian/Ubuntu

ipset save > /etc/ipset.up.rules
iptables-save > /etc/iptables/rules.v4

RHEL/CentOS

ipset save > /etc/ipset.up.rules
iptables-save > /etc/sysconfig/iptables

Considerações finais

Esse tipo de bloqueio não substitui outras camadas (postscreen, RBL, SPF, etc), mas funciona muito bem como primeira linha de defesa.

Na prática, você reduz:

  • volume de conexões
  • carga no Postfix
  • superfície de ataque

E tudo isso com uma implementação simples e sem depender de ferramentas externas.

Se você ainda não utiliza esse tipo de abordagem, vale testar, principalmente em ambientes mais expostos.

Deixe um comentário

Tendência