BlockList – Bloquer les malveillants

La liste des IP malveillants qui ont attaqué notre honeypot, est maintenue à jour et elle est actualisée chaque dimanche a minuit. Vous pouvez l’intégrer a votre pare-feu afin de protéger vos services WEB contre ces attaquants.

Nous allons ajouter donc, une chain ncc1701.fr juste après avoir réinitialisé le pare-feu et avant l’ouverture des ports.

En effet, les règles DROP doivent être appliquées avant les règles  ACCEPT.
Si nous ouvrons par exemple le port 80 en utilisant ACCEPT, il ne sera plus possible à bloquer une adresse IP en utilisant la règle DROP sur ce même port. Nous créons donc une chain en début de la configuration du pare-feu dans laquelle nous allons placer les IP à bloquer en utilisant pour cela, une règle DROP. L’ordre sera alors maintenu vu que les règles DROP seront dans la chain qui est en tête de la configuration de notre pare-feu, bien avant les règles ACCEPT.

Nous éditons le fichier : 

root@WebServer:# nano /etc/init.d/firewall
#Suppression des règles précédentes
iptables -F
iptables -X
# Création de la chain ncc1701.fr
iptables -N ncc1701.fr
# On incorpore la chain ncc1701.fr en tête de INPUT
iptables -A INPUT -j ncc1701.fr
# On ajoute l’exécution du script
/root/blocklist.sh

Nous allons maintenant créer le répertoire /root/ncc1701 pour récupérer les fichiers qui seront intégrés au pare-feu:

root@WebServer:# mkdir ncc1701

Maintenant, nous allons créer le script qui permet l’intégration de la liste dans le pare-feu:

root@WebServer:# nano /root/blocklist.sh


#!/bin/bash

##################################################
# Mise a jour de la blocklist du site ncc1701.fr #
##################################################

# Vérifie que l'on est en Root
if [[ $EUID -ne 0 ]];
then
echo "Vous n'avez pas les droits nécessaire pour executer ce script"
exit 1
fi

BLOCKLIST_FILE_URL="https://ncc1701.fr/blocklist/blocklist.txt"
BLOCKLIST_HASH_URL="https://ncc1701.fr/blocklist/blocklist.txt.md5"
BLOCKLIST_FILE_TMP="/root/ncc1701/blocklist.txt.tmp"
BLOCKLIST_HASH_TMP="/root/ncc1701/blocklist.txt.md5.tmp"
BLOCKLIST_FILE="/root/ncc1701/blocklist.txt"
BLOCKLIST_HASH="/root/ncc1701/blocklist.txt.md5"
# On efface des fichiers dans le repertoire /root/ncc1701
rm -r /root/ncc1701/*.* 
# On télécharge la liste de toutes les IP à bannir
wget --quiet $BLOCKLIST_FILE_URL -O $BLOCKLIST_FILE_TMP
wget --quiet $BLOCKLIST_HASH_URL -O $BLOCKLIST_HASH_TMP

# On vérifie que le fichier TMP existe et a donc bien été téléchargé
if [ -f $BLOCKLIST_FILE_TMP ]
then
# On vérifie le hash MD5 des fichiers téléchargés
if ! echo "$(cat $BLOCKLIST_HASH_TMP) $BLOCKLIST_FILE_TMP" | md5sum --status --check
then
# Si le hash ne correspond pas, on supprime les fichiers TMP et on interrompe avec une erreur et on supprime les fichiers.
rm $BLOCKLIST_FILE_TMP
rm $BLOCKLIST_HASH_TMP
exit 1
else
# Si le hash est OK, on écrase les anciens fichiers par les nouveaux
mv $BLOCKLIST_FILE_TMP $BLOCKLIST_FILE
mv $BLOCKLIST_HASH_TMP $BLOCKLIST_HASH
fi
fi

# Suppression de la chain BlockList pour éviter les doublons au moment de la mise-à-jour.
/sbin/iptables -F ncc1701.fr > /dev/null
while read ip
do
/sbin/iptables -A ncc1701.fr -s $ip -j DROP > /dev/null

done < /root/ncc1701/blocklist.txt

Nous autorisons l’exécution du script:

root@WebServer:# chmod +x /root/blocklist.sh

Il est possible automatiser la mise à jour. Pour cela, éditez crontab en lui ajoutant:

root@WebServer:# crontab -e

# Example of job definition <- Very useful reminder:
# .---------------- minute (0 - 59)
# |   ------------- hour (0 - 23)
# |  |   ---------- day of month (1 - 31)
# |  |  |   ------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |    --- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  *       user command to be executed

 00 01  *  *  7       /root/blocklist.sh