miércoles, marzo 31, 2021

Bloqueo con GeoIP en Ubuntu 20.04

Para algunos servicios que solo es necesario que estén disponibles, merece la pena utilizar el bloqueo geográfico a nivel IP, permitiendo aumentar el nivel seguridad sin afectar a los usuarios de este.

Para esto utilizaremos la base de datos de GeoIP de db-ip en conjunto con el paquete xtables-addons

 Instalación de requisitos

sudo apt-get update; sudo apt-get -y upgrade
sudo apt-get install curl unzip perl 
sudo apt-get install xtables-addons-common
sudo apt-get install libtext-csv-xs-perl libmoosex-types-netaddr-ip-perl

Script de actualización

Debemos crear un script que periódicamente este descargando la actualización de la bases de datos de GeoIP para esto realizamos primero crear una carpeta:

sudo mkdir /usr/share/xt_geoip

 Después creamos el script la siguiente ubicación /usr/local/bin/geo-update.sh

#!/bin/bash

MON=$(date +"%m")
YR=$(date +"%Y")

wget https://download.db-ip.com/free/dbip-country-lite-${YR}-${MON}.csv.gz -O /usr/share/xt_geoip/dbip-country-lite.csv.gz
gunzip /usr/share/xt_geoip/dbip-country-lite.csv.gz
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip/ -S /usr/share/xt_geoip/
rm /usr/share/xt_geoip/dbip-country-lite.csv

Al ejecutar este script se poblara la base de datos de GeoIP para su uso. Recuerde crear una tarea en cron para actualizar la base de manera pediodica.

Creacion de reglas

Antes de crear la regla debemos cargar  el modulo para que opere. Ejecutamos el siguiente comando:

modprobe xt_geoip
lsmod | grep ^xt_geoip


Si todo va esta bien, podemos aplicar la siguiente regla:

iptables -A INPUT -m geoip -p tcp --dport 22 --src-cc RU,CN -j DROP

Esto bloqueara el acceso SSH desde Rusia y China.

Si quieres permiter el acceso desde un pais en ese caso la regla seria la siguiente:

iptables -A INPUT -m geoip -p tcp --dport 22 --src-cc CL -j ACCEPT

 Aqui permitimos el acceso SSH solo desde Chile

Aplicando de manera permanente

Estas reglas que recien aplicamos se borrar si reiniciamos la maquina. Para que las reglas sean permanentes, te recomiendo usar el servicio ufw. Para esto edita el archivo  /etc/ufw/before.rules y agregan reglas antes del COMMIT, como esta:

-A ufw-before-input -m geoip -p tcp --dport --dport 22 --src-cc CL -j ACCEPT

Esta regla permite el acceso SSH desde Chile, recuerda que ufw por defecto deniega todo el trafico

Publicación en ingles