Ciob - Script para comprobar ips en blacklist


Icono de bash script

Si has tenido un servidor de correo con varios dominios y con bastante actividad habrás notado que el problema de las blacklist es un bastante tedioso y difícil de llevar.

A parte de realizar comprobaciones periódicas de seguridad en tu servidor, de tener una buena política de contraseñas y tener una seguridad activa en general, es bueno tener también seguridad pasiva, en este caso, CIOB (Check Ip On Blacklist), busacará por ti una lista de IPs en las blacklist más conocidas.

Es bastante sencillo de usar, simplemente tendremos 2 listas, una con IPs (Nuestras IPs) y otra con la lista de proveedores de blacklist. Para la lista de blacklist tenemos una lista de ejemplo con bastantes proveedores ya añadidos.

Usaremos los siguientes comandos para empezar a usar CIOB

git clone https://github.com/jbenages/ciob.git
cd ciob
mv example.blacklistProvider.txt blacklistProvider.txt
mv example.ip.txt ip.txt

Añadiremos nuestras IPs en la lista de ip.txt, es posible poner cometarios al principio de línea, poniendo #. En las listas de proveedores de blacklist también.

Una vez tengamos configuradas las IPs podemos entrar en el script y poner el correo en la variable "email" que será donde se enviarán los resultados.

#!/bin/bash
# Ciob by Jesús Benages
# Simple check ip on blacklist script
#
# TO START
# 1-Add ips that you want check on ip.txt file with return separation, you can put comment with #.
# 2-Make blacklist providers on blacklistProvider.txt file with carriage return separation between each domain or can use the example list, you can put comment with #.
# 3-Set email in email variable to send results of check.
# 4-Configure daily cron to check IPs.

#Usage
#mv exampleBlackListProvider.txt blacklistProvider.txt
#mv exampleIp.txt ip.txt
#bash ciob.sh


declare fileIp="ip.txt"
declare fileBlackListChecker="blacklistChecker.txt"
declare email="blacklist(arroba)example.com"
declare finalMessage=""
declare ipMessage=""

checkBlackList() {

    declare finalResult=""
    declare resultDNSQuery=""
    declare ip="$1"    
    declare reverseIP=$( echo "$ip" | awk -F. '{print $4"."$3"." $2"."$1}' )

    while IFS= read -r domainBlackListChecker
    do

        if [[ $domainBlackListChecker != \#* ]]; then      
                resultDNSQuery=$( dig A +time=10 +tries=1 +short  "$reverseIP.$domainBlackListChecker" )
            if [ ! -z "$resultDNSQuery"  ];then
                finalResult="$finalResult\n""$domainBlackListChecker="$( dig TXT +time=10 +tries=1 +short "$reverseIP.$domainBlackListChecker" )
            fi
        fi

    done < "$fileBlackListChecker"

    echo -e $finalResult

}

while IFS= read -r ip
do
    if [[ $ip != \#* ]]; then
        ipMessage=$(checkBlackList "$ip")
        if [ ! -z "$ipMessage"  ];then
            finalMessage="$finalMessage\n$ip $ipMessage"           
        fi
    fi
done < "$fileIp"

if [[ ! -z $finalMessage ]];then
    printf "$finalMessage" | mail -s "Blacklist Checker" $email
fi

Se ejecuta de la siguiente forma.

bash ciob.sh

Y si queremos podemos crear un nuevo cron para poder ejecutarlo cada cierto tiempo y ver los resultados. De esta forma siempre tendremos controladas que IPs se encuentran en lista negra.