This site uses cookies! Learn More

Ce site utilise des cookies !

En continuant à utiliser ce site, vous vous engagez à nous permettre de stocker des cookies sur votre ordinateur.

 

Si nous utilisons des cookies et retenons des données anonymes, c’est pour nous aider à mieux gérer notre mesure d’audience, aider nos partenaires commerciaux à nous rémunérer et nos partenaires publicitaires à proposer des annonces qui vous correspondent.

 

Grâce à ces cookies, le forum est en mesure de savoir qui écrit un message et utile pour le système d'authentification.

 

En cliquant sur « J'accepte », vous acceptez l'utilisation par NAS-Forum de cookies publicitaires et de mesure d'audience fine.

Superthx

[TUTO] Automatiser Blacklist depuis internet

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.

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

Modifié par Superthx
Remplace jours par days dans le script

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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....

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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 😉

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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))

Partager ce message


Lien à poster
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)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour;

Je découvre ce script pour DSM et l'ai rapidement parcouru.
Comme des retours semblaient souhaités, je me permets d'intervenir.

Il me semble contenir un bug ( à confirmer car je ne l'ai pas testé et ne suis pas spécialiste de bash).
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).

Avec mes excuses si je me trompe!

PPJP


PS:
Une correction possible:
UNIXTIME_DELETE_IP=$((UNIXTIME+DELETE_IP_AFTER*86400))

Partager ce message


Lien à poster
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 😉

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

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.

Chargement