Bloqueando IP no Españolas en Linux

 In general

Hola amigos en esta ocasión quería enseñaros un script que hice hace tiempo para banear intentos de login en mi servidor de mail en plesk.

Por un lado uso una api externa para preguntar el pais de una determinada ip con https://ipapi.co/

Por otro lado tenemos que leer los logs del sistema donde buscaremos la cadena «authentication failure» los podemos encontrar en /var/log/messages o en /var/log/auth según lo que busquemos bloquear, ssh, mail, etc…

Con este comando filtraremos todas las ip con intentos fallidos:

cat /var/log/maillog |grep "authentication failure" | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' |sort -u > /root/ataques.log

Con el comando anterior tendremos un archivo llamado ataques.log donde estaran todas las ip que han fallado login.

Ahora no queremos bloquear a nuestros clientes, como todos son de España filtraremos por país con el siguiente ejemplo:

input="ataques.log"
while IFS= read -r line
do
  echo "$line"
  country=$(curl -s https://ipapi.co/$line/country/)
  if [ "$country" = "ES" ]; then
   echo "es España $country"
  else
    echo "NO España $country"
    echo $line >> ips.txt
    country=0
    echo "Bloqueando ips"
  fi

done < "$input"

El resultado de este while nos genera un archivo llamado ips.txt con direcciones ip de fuera de España, jjj ahora si que podemos bloquear a saco, pero antes formatearemos el archivo con el comando sed, despues pasaremos un listado de ip separadas por puntos a plesk para que se encargue de bloquear, aplicaremos y recargaremos firewall.

cat ips.txt | tr '\n' ' ' | sed 's/ /,/g' > drop.txt
ips=$(cat drop.txt)
/usr/local/psa/bin/modules/firewall/settings -s -name 'ataques_mail' -direction input -action deny  -remote-addresses  "$ips"
/usr/local/psa/bin/modules/firewall/settings -a
/usr/local/psa/bin/modules/firewall/settings -c

cat /dev/null > /root/ips.txt
cat /dev/null > /root/drop.txt
cat /dev/null > /root/ataques.log

Os dejo un link al repositorio

Saludos!!

Recent Posts

Leave a Comment