Pular para o conteúdo

Bloqueio de Países com IPTables

Dependendo do tráfego e dos visitantes esperados para um determinado servidor, talvez a disponibilização para alguns países não seja necessária, devido ao idioma em que as páginas do servidor web foram publicadas, ou simplesmente por não existirem clientes em potencial nessas regiões. Aprenda como bloquear os países necessários de forma automatizada.
Diego Mendes Rodrigues diegomrodrigues
Hits: 9.093 Categoria: Linux Subcategoria: Segurança
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Introdução

Dependendo do tráfego e dos visitantes esperados para um determinado servidor, talvez a disponibilização para alguns países não seja necessária, devido ao idioma em que as páginas do servidor web foram publicadas, ou simplesmente por não existirem clientes em potencial nessas regiões.

Em alguns casos, o servidor pode receber muitas tentativas de ataques provenientes de alguns países, além de outros diversos tipos de possíveis motivos. Cada administrador terá suas necessidades para realizar o bloquei de algum país.

Neste material iremos utilizar um excelente script para a realização dos bloqueios, publicado no CyberCiti.biz.

Script

Para iniciar, vamos nos identificar como o super usuário root, com o comando:

su

Criaremos agora um diretório para armazenar nossos scripts:

# mkdir /root/scripts
# cd /root/scripts

O próximo passo é realizar o download do script e alterar suas permissões.

# wget https://foratdot.info/scripts/bloqueo-paises.sh
# chmod 0700 bloqueo-paises.sh

Podemos então editar o script, para alterar quais países serão bloqueados.

# nano bloqueo-paises.sh
Linux: Bloqueio de países com o IPTables
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
Observe que na primeira linha de configuração (ISO) estamos dizendo para o script que desejamos bloquear a Rússia, Afeganistão e a China, com as siglas "ru", "af" e "ch".

Obs.: caso você precise saber quais siglas representam cada país, visite o site IPDeny.com, pois é deste site que o script baixa as listas de IPs que serão utilizadas nos bloqueios.

Na próxima imagem, você encontra uma configuração mais elaborada, com uma lista maior de países que serão bloqueados no servidor.
Linux: Bloqueio de países com o IPTables

Bloqueio de forma automatizada

Recordo que quanto mais países forem bloqueados, mais IPs serão utilizados nas listas de bloqueio. Desta forma, caso tenhamos muitos países, teremos muitas regras no IPTables, podendo causar lentidão no servidor. Coloque apenas os países que realmente precisam ser bloqueados.

Ao finalizar a configuração, devemos executar o script pela primeira vez:

# ./bloqueo-paises.sh

Execute e deixe ele em execução, pois o download das listas de IPs que serão bloqueados pode demorar vários minutos.

Agora vamos automatizar para que o script seja executado automaticamente, sendo que ele então descarrega as listas de IPs atualizadas do site IPDeny, deixando o servidor sempre protegido com as listas de IPs mais recentes.

# crontab -e

Adicionar a seguinte linha, para que o script seja executado às 00:01, no primeiro dia de cada mês:

# Bloqueio de países
1 0 1 * * /root/scripts/bloqueo-paises.sh

Agora que o script está configurado e foi executado, podemos ver ele funcionando através de nossos logs.

Veja o resultado no meu servidor:

# tail -f /var/log/syslog
Linux: Bloqueio de países com o IPTables
Espero que esse material ajude você na proteção de seus servidores.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Introdução

FIND - Encontrar informações no Linux

dstat - Ferramenta de Monitoramento no Linux

Adicionar mensagens iniciais no terminal nas sessões de sudo

Truques úteis de linha de comando Linux para iniciantes

Instalar o GeoServer no Ubuntu

Nmap do início ao fim (parte 1)

Aquisição Estática de Dados em Computação Forense

Bypass de firewall com tunelamento por DNS

Ferramenta Forense de Análise de Rede (NFAT) - Xplico

Transportando dados com segurança - encripte seu pendrive em 5 passos

#2 Comentário enviado por CapitainKurn em 18/01/2021 - 02:59h
Russofobia! Que coisa feia! Rsss
Sugiro que ande pelos foruns russos com o tradutor do Yandex para ajudar que vai encontrar muita coisa boa.
#3 Comentário enviado por KAKAROTO86 em 29/11/2021 - 16:15h
Eu achei interessante o artigo e fiz o procedimento, porém ao reiniciar o servidor, eu vi que as regras não se aplicam automaticamente. Alguma sugestão?
#4 Comentário enviado por carlosalberto4ti em 18/09/2023 - 11:52h
Otima postagem
'
#!/bin/bash
# El objetivo de este script es bloquear todo el tráfico de AFGHANISTAN (af) y CHINA (CN). Se puede usar la variable ISO para fijar qué países queremos bloquear.
# See url for more info - http://www.cyberciti.biz/faq/?p=3402
# Author: nixCraft <www.cyberciti.biz>; under GPL v.2.0+
# -------------------------------------------------------------------------------
ISO="ru af cn"

### Variables para facilitar el uso del script que apuntan a iptables (cortafuegos), wget para coger los archivos de la base de datos y egrep para seleccionar la IP sin ningún símbolo que iptables no pueda interpretar ###
IPT=/sbin/iptables
WGET=/usr/bin/wget
EGREP=/bin/egrep

#Nueva tabla en iptables sobre el baneo por región
SPAMLIST="countrydrop"
#Ubicacion donde se guarda la base de datos de
ZONEROOT="/root/iptables"
#URL de la base de datos de paises
DLROOT="http://www.ipdeny.com/ipblocks/data/countries";

#Funcion para limpiar todas las reglas del firewall y lo ponemos por defecto.

cleanOldRules(){
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
}

#Creamos el directorio para almacenar la base de datos
[ ! -d $ZONEROOT ] && /bin/mkdir -p $ZONEROOT

#Ejecutamos la funcion
cleanOldRules

#Creamos la nueva tabla de iptables con el nombre de la variable SPAMLIST
$IPT -N $SPAMLIST

for c in $ISO
do
# Base de datos local
tDB=$ZONEROOT/$c.zone

# Descargamos y actualizamos la base de datos
$WGET -O $tDB $DLROOT/$c.zone

# Mensaje del pais baneado que aparecerá en el log de iptables
SPAMDROPMSG="$c Country Drop"

# Filtramos la base de datos para que iptables interprete correctamente la base de datos y vamos anadiendo cada bloque de IP.
BADIPS=$(egrep -v "^#|^$" $tDB)
for ipblock in $BADIPS
do
$IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG"
$IPT -A $SPAMLIST -s $ipblock -j DROP
done
done

# Drop todo
$IPT -I INPUT -j $SPAMLIST
$IPT -I OUTPUT -j $SPAMLIST
$IPT -I FORWARD -j $SPAMLIST

exit 0
'

Contribuir com comentário

Entre na sua conta para comentar.