Aller au contenu

[TUTO] Automatiser Blacklist depuis internet


Superthx

Messages recommandés

Salut!

J'en avais assez que Synology ne propose pas un soft dans DSM ou SRM pour automatiser le blocages d'adresse IP depuis une liste.

Car en effet si on veut blacklister une ip pour éviter de se faire "pirater" ou se faire sniffer son ip il vaut mieux en avoir une.

Mais malheureusement Synology ne propose que de uploader son fichier txt et il faut le faire selon son envie de mettre a jour ses ip.

Donc avec ce script on va juste mettre à jour les ip depuis une liste sur internet.

Pour l'instant mon choix se porte sur blocklist.de. Si vous en avez d'autres merci de les poster.

Pour DSM :

  1. Allez dans "Panneau de configuration" 
  2. Puis "Planificateur de tâches"
  3. Cliquez sur "Créer"
  4. Sélectionnez "Tâche planifiée" et l'option "Script défini par l'utilisateur"

Vous aurez la fenêtre "Créer une tâche", dans "Général" mettez ceci.

  1. Tâche - BLACKLIST
  2. Utilisateur - Sélectionnez "root"
  3. Cochez "Activer"

Dans "Paramètres de tâche" dans la case sous "Script défini par l'utilisateur"

Mettez ceci :

#!/bin/bash
# Liste de www.blocklist.de
# Liste Choix: {all} {ssh} {mail} {apache} {imap} {ftp} {sip} {bots} {strongips} {ircbot} {bruteforcelogin}
LISTE_BLOCKLIST="all"

# Effacer IP apres x jours ou bien utiliser 0 pour blocage permanent
DELETE_IP_AFTER="30" 

# Montre le temps a la fin du script; 0=non 1=oui
SHOW_TIME="1"

UNIXTIME=`date +%s`
UNIXTIME_DELETE_IP=`date -d "+$DELETE_IP_AFTER days" +%s`
wget -q "https://lists.blocklist.de/lists/$LISTE_BLOCKLIST.txt" -O /tmp/blocklist.txt


cat "/tmp/blocklist.txt" | while read BLOCKED_IP
do
# Verifier si IP valide
VALID_IPv4=`echo "$BLOCKED_IP" | grep -Eo "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" | wc -l`

if [[ $VALID_IPv4 -eq 1 ]]; then
# Convertir IPv4 en IPv6
IPv4=`echo $BLOCKED_IP | sed 's/\./ /g'`
IPv6=`printf "0000:0000:0000:0000:0000:FFFF:%02X%02X:%02X%02X" $IPv4`
CHECK_IF_EXISTS=`sqlite3 /etc/synoautoblock.db "SELECT DENY FROM AutoBlockIP WHERE IP = '$BLOCKED_IP'" | wc -l`
if [[ $CHECK_IF_EXISTS -lt 1 ]]; then
INSERT=`sqlite3 /etc/synoautoblock.db "INSERT INTO AutoBlockIP VALUES ('$BLOCKED_IP','$UNIXTIME','$UNIXTIME_DELETE_IP',' 1','$IPv6','0','')"`
echo "IP ajouter! --> $BLOCKED_IP"
else
echo "IP existante! --> $BLOCKED_IP"
fi
fi
done

if [[ $SHOW_TIME -eq 1 ]]; then
END=`date +%s`
RUNTIME=$((END-UNIXTIME))
echo "Fini apres $RUNTIME Secondes"
fi
exit 0

Au debut je vous conseil de lancer le script sans programmer le temps. Car cela met un certains temps au premier lancement (comptez plus d'une heure). La première exécution fini, vous pouvez programmer la fréquence du lancement du script. Pour cela allez dans Programmer laisser "Exécuter les jours suivants" sur "Quotidienne" par exemple. En général la mise à jour le la DataBase dure beaucoup moins heureusement.

 Pour SMR :

Il va falloir entrer en SSH comme root, ajouter le script dans un endroit de votre choix et ajouter une ligne a crontab.

Le script est légèrement different car la version de date est différente que celle sous DSM.

Moi j'ai choisi de mettre tous mes scripts dans la carte sd de mon RT2600ac. Si vous voulez faire comme moi, entrer en SSH avec putty en tant que root et faite ceci :

mkdir /volumeUSB1/usbshare1-1/scripts
chmod 755 /volumeUSB1/usbshare1-1/scripts
mkdir /volumeUSB1/usbshare1-1/scripts/tmp
chmod 755 /volumeUSB1/usbshare1-1/scripts

vous aurez un dossier scripts et un sous dossier tmp.

ensuite créons le fichier ip_block.sh

vi /volumeUSB1/usbshare1-1/scripts/ip_block.sh

tapez sur "i" pour insérer le script suivant

#!/bin/sh
# Liste de www.blocklist.de
# Liste Choix: {all} {ssh} {mail} {apache} {imap} {ftp} {sip} {bots} {strongips} {ircbot} {bruteforcelogin}
LISTE_BLOCKLIST="all"

# Montre le temps a la fin du script; 0=non 1=oui
SHOW_TIME="1"

UNIXTIME=`date +%s`
UNIXTIME_DELETE_IP="$((`busybox date +%s`+2592000))"
wget -q "https://lists.blocklist.de/lists/$LISTE_BLOCKLIST.txt" -O /volumeUSB1/usbshare1-1/scripts/tmp/blocklist.txt


cat "/volumeUSB1/usbshare1-1/scripts/tmp/blocklist.txt" | while read BLOCKED_IP
do
# Verifier si IP valide
VALID_IPv4=`echo "$BLOCKED_IP" | grep -Eo "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" | wc -l`

if [[ $VALID_IPv4 -eq 1 ]]; then
# Convertir IPv4 en IPv6
IPv4=`echo $BLOCKED_IP | sed 's/\./ /g'`
IPv6=`printf "0000:0000:0000:0000:0000:FFFF:%02X%02X:%02X%02X" $IPv4`
CHECK_IF_EXISTS=`sqlite3 /etc/synoautoblock.db "SELECT DENY FROM AutoBlockIP WHERE IP = '$BLOCKED_IP'" | wc -l`
if [[ $CHECK_IF_EXISTS -lt 1 ]]; then
INSERT=`sqlite3 /etc/synoautoblock.db "INSERT INTO AutoBlockIP VALUES ('$BLOCKED_IP','$UNIXTIME','$UNIXTIME_DELETE_IP',' 1','$IPv6')"`
echo "IP ajouter! --> $BLOCKED_IP"
else
echo "IP existante! --> $BLOCKED_IP"
fi
fi
done

if [[ $SHOW_TIME -eq 1 ]]; then
END=`date +%s`
RUNTIME=$((END-UNIXTIME))
echo "Fini apres $RUNTIME Secondes"
fi
exit 0

Attention cette fois : par exemple pour 30 jours c'est 2592000 secondes

Maintenant on va créer une ligne dans crontab pour automatiser le tout. Ici toutes les heures.

vi /etc/crontab

tapez sur "i"

pour insérer du text et allez sur la dernière, ajoutez.....

0       *       *       *       *       root    /bin/sh /volumeUSB1/usbshare1-1/scripts/ip_block.sh

C'est bon. Toutes les heures le script fera une mise a jour de la DB sur 30 jours

Explication du Script:

LISTE_BLOCKLIST permet de choisir la liste que l'on veut mettre. Ici c'est "all". Vous pouvez choisir la liste depuis https://lists.blocklist.de/lists/. Il suffit juste de choisir. Mettez "all" pour pas vous prendre la tête.

MAJ du : 04/11/2019

@PPJP nous propose une nouvelle version amélioré du script.

Celle-ci est fonctionnel aussi bien pour DSM que SRM. Je l'ai tester sur mon DS1511+ ainsi que sur mon RT2600ac.

Il est beaucoup plus rapide et on pourra ajouter d'autres listes perso dans le futur.

Vous pouvez remercier @PPJP pour son implication sur le script et son énorme boulot.

Si d'autres veulent modifier ou bien proposer un script plus performant. J'ouvre un github que vous pouvez retrouvez ici.

PS: N'oubliez pas d'ajouter un lancement au démarrage + un autre pour lancer le scripts X temps.

 

### MERCI DE VOS RETOURS OU AMELIORATIONS ###

blacklist.update

Modifié par Superthx
ajout du script
Lien vers le commentaire
Partager sur d’autres sites

Il y a 16 heures, Jojo (BE) a dit :

Quelle est ta recommandation pour la fréquence d'exécution du script : tous les mois / semaines / jours ?

Moi je laisse 4 Heures pour le script et DELETE_IP_AFTER="30" pour 30 jours. Si on met définitivement on risque d'avoir une sacrée BD qui se vide jamais.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Merci pour ce petit tuto bien sympathique cependant, j'ai une petite question n'étant pas un grand spécialiste en script bash.

Si je comprend bien le script, voici les étapes :

  1. Création d'une liste.
  2. Importation depuis le fameux site des adresses IP à bloquer dans la liste créée.
  3. Importation de cette liste dans la bdd sqlite AutoBlockIP.

Questions :

Est-ce que ces adresses IP ajoutées sont répertoriées dans DSM (Panneau de configuration > Sécurité > Compte > Autoriser/Bloquer la liste) ?

Est-ce normal qu'après exécution du script et la création du fichier ainsi que l'importation des adresses IP dans ce dernier, la base sqlite reste vide ?

J'ai consulté la mienne en ssh et elle ne fait que 5ko soit rien... Je n'ai pourtant reçu aucun mail d'erreur sur l'exécution du script.

Pour lire la bdd, je test en tapant :

cd /etc
sqlite3 synoautoblock.db
sqlite> .tables
sqlite> .read AutoBlockIP

Résultat :

sqlite> .read AutoBlockIP

sqlite>

 

Merci par avance pour tes réponses 😉

Modifié par Zeus
Lien vers le commentaire
Partager sur d’autres sites

Oui. J’avais vérifier et je l’ai avaient aussi bien dans la db que dans la liste est ip bloquées. Mais je vais vérifier à nouveau. Est ce que quand tu lances juste le script sans le planificateur, le script se lance bien? Il met longtemps au debut. Et attend que le script fini d’ajouter toutes les ips. Aux alentours de 30000!!! Sinon tu peux uploader un fichier avec par exemple avec 2 ips dans un fichier txt et modifier modifier le lien du tuto par celui du txt avec les 2 ips....

Lien vers le commentaire
Partager sur d’autres sites

J'ai de base modifier les liens dans ton script pour tester et dans le planificateur de tâches, je fais appel au script via une commande bash.

La tâche, je la lance manuellement et c'est pare contre assez rapide à lister les adresses IP dans le fichier.

Le fichier lui se remplit bien d'adresses IP.

C'est ensuite l'étape de les inscrire dans la base de donnée sqlite qui n'a pas l'air de fonctionner.

Modifié par Zeus
Lien vers le commentaire
Partager sur d’autres sites

Je viens de refaire le test en supprimant la liste de mon répertoire et ça ne fonctionne pas.

Est-ce que le soucis vient de chez moi, je ne sais pas parce que je n'ai aucun retour...

Je sais pas dans quel log je pourrais voir l'info. Peut-être un truc à ajouter dans ton script la création d'un fichier log qui référence étape par étape avec l'horodatage 😉

 

Lien vers le commentaire
Partager sur d’autres sites

Il y a 15 heures, Zeus a dit :

En effet, c'est quelque chose que j'aurai pas trouvé moi même 😞

Merci d'avoir prit le temps de regardé le soucis, ça fonctionne bien à présent. Les adresses IP sont bien répertoriées dans la base sqlite.

Merci @Superthx pour l'adaptation.

Merci @Zeus pour les tests.

Je mets en application

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir les experts.
Lorsque j'affiche l'état d'exécution du script, il me met "interrompu(2)". (Une fois sur les 4, il m'a affiché "Interrompu (126)"

Où est mon erreur ? (et je ne vois rien dans  (Panneau de configuration > Sécurité > Compte > Autoriser/Bloquer la liste))

Lien vers le commentaire
Partager sur d’autres sites

cela voudrait dire que je dois lancer le script depuis ssh, et non depuis le planificateurs de tâches ?

Ceci dit, j'ai trouvé l'erreur :  En copiant le code, il y avait des caractères invisibles qui faisaient planter le script.
Maintenant, il est en cours d'exécution et mon CPU est à 90% ;-)

Pour éviter ce genre de désagrément, il faudrait activer l'option "insérer code", comme il y a déjà Hyperlien et citations

 

ok, c'est tout on, déjà fini (27718 IP bloquées)

Lien vers le commentaire
Partager sur d’autres sites

Citation

Je pense que la ligne
UNIXTIME_DELETE_IP=`date -d "+$DELETE_IP_AFTER jours" +%s`
n'est pas conforme et que cette variable va rester à 0.
Avec comme conséquence que ces adresses seront bloquées indéfiniment ( et la BD ne cessera de grandir).

Bonjour,

Et tu ne te trompes pas 🙂

J'ai testé le script et constaté tout à l'heure que les adresses IP bannies passaient en "définitivement" dans DSM.

Bien vu, j'allais venir le préciser un peu plus tard sans pouvoir apporter de solution par contre 😉

 

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.