Aller au contenu

[TUTO] Automatiser Blacklist depuis internet

Featured Replies

Posté(e)

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

  • Réponses 133
  • Vues 41.4 k
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Most Popular Posts

  • [mention=23494]PiwiLAbruti[/mention], oui il y a clairement ceinture et bretelles, et SI le FW est bien configuré, cela doit recouvrir au moins 80% (95% ??) des adresses qui sont dans cette liste (Ch

  • Bonjour, Repassant sur ce forum après quelques mois d'absence, je constate qu'il y a eu du déterrage sur ce fil. Je vais tenter d'apporter quelques explications complémentaires sur ce script.

  • Bonjour, @Diabolomagic ayant testé sur SRM, de mon côté j'ai testé sur DSM6 et DSM7, voici donc la mise à jour du script, ayant retiré la liste mariushosting et ajouté la liste (les listes) feodo

Images postées

Posté(e)

Merci, c'est cool ça !

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

Posté(e)
  • Auteur
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.

Posté(e)

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

Posté(e)
  • Auteur

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....

Posté(e)

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

Posté(e)
  • Auteur

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


Je vais tester ce demain en vidant la table et voir si cela fonctionne. Voir si j’ai foiré le script ou autre.....
Posté(e)

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 😉

 

Posté(e)
  • Auteur

@Zeus, je viens de me rendre compte que j'ai oublier ,'0','' dans le insert !!!!

Essaie à nouveau.....

Posté(e)

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.

Posté(e)
  • Auteur

Cool ! Merci du retour j'aurai pas fais gaffe.

J'espère terminer la version pour SRM cette semaine.....

Posté(e)
  • Auteur

Oui le même mais je but sur. L'insert est celui d'avant. Sauf que j'ai un problème avec UNIXTIME_DELETE_IP, il n'enregistre pas correctement la date. Et rajout de crontab derriere.

Modifié par Superthx

Posté(e)

Peut-être que si @lordtaki passe par là, il pourra te guider🙂

 

Modifié par Zeus

Posté(e)
  • Auteur
Peut-être que si [mention=46485]lordtaki[/mention] passe par là, il pourra te diriger [emoji846]
 

Une aide est toujours bienvenue!
Posté(e)

J'ai corrigé, je voulais plutôt dire "guider" 😉

Dirigé peut être prit de plusieurs manières et pas des meilleures...

Posté(e)
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

Posté(e)

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))

Posté(e)

Peut-être faudrait-il lancer la commande en mode verbose pour tester si c'est possible.

Posté(e)

Ajouter l'option -v pour avoir un retour dans le terminal de ce qui ce passe pendant l'exécution du script.

Posté(e)

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)

Posté(e)

Bon et bien nickel 😉

Et oui, je te suggérais de passer par SSH et lancer le script manuellement avec l'option -v 🙂

 

Posté(e)
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 😉

 

Posté(e)
  • Auteur
Le 10/07/2019 à 15:48, Superthx a dit :

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

Evidement, j'ai mis 30 jours.............. Mettre 0 pour blocage permanent

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…

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.