Superthx Posté(e) le 10 juillet 2019 Partager Posté(e) le 10 juillet 2019 (modifié) 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 : Allez dans "Panneau de configuration" Puis "Planificateur de tâches" Cliquez sur "Créer" 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. Tâche - BLACKLIST Utilisateur - Sélectionnez "root" 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é le 4 novembre 2019 par Superthx ajout du script 3 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Jojo (BE) Posté(e) le 15 juillet 2019 Partager Posté(e) le 15 juillet 2019 Merci, c'est cool ça ! Quelle est ta recommandation pour la fréquence d'exécution du script : tous les mois / semaines / jours ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Superthx Posté(e) le 16 juillet 2019 Auteur Partager Posté(e) le 16 juillet 2019 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. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 20 juillet 2019 Partager Posté(e) le 20 juillet 2019 (modifié) 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 : Création d'une liste. Importation depuis le fameux site des adresses IP à bloquer dans la liste créée. 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é le 20 juillet 2019 par Zeus 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Superthx Posté(e) le 20 juillet 2019 Auteur Partager Posté(e) le 20 juillet 2019 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.... 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 20 juillet 2019 Partager Posté(e) le 20 juillet 2019 (modifié) 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é le 20 juillet 2019 par Zeus 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Superthx Posté(e) le 20 juillet 2019 Auteur Partager Posté(e) le 20 juillet 2019 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..... 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 20 juillet 2019 Partager Posté(e) le 20 juillet 2019 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 😉 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Superthx Posté(e) le 20 juillet 2019 Auteur Partager Posté(e) le 20 juillet 2019 @Zeus, je viens de me rendre compte que j'ai oublier ,'0','' dans le insert !!!! Essaie à nouveau..... 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 20 juillet 2019 Partager Posté(e) le 20 juillet 2019 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. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Superthx Posté(e) le 20 juillet 2019 Auteur Partager Posté(e) le 20 juillet 2019 Cool ! Merci du retour j'aurai pas fais gaffe. J'espère terminer la version pour SRM cette semaine..... 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 20 juillet 2019 Partager Posté(e) le 20 juillet 2019 Pas le même principe sur SRM ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Superthx Posté(e) le 20 juillet 2019 Auteur Partager Posté(e) le 20 juillet 2019 (modifié) 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é le 20 juillet 2019 par Superthx 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 20 juillet 2019 Partager Posté(e) le 20 juillet 2019 (modifié) Peut-être que si @lordtaki passe par là, il pourra te guider🙂 Modifié le 20 juillet 2019 par Zeus 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Superthx Posté(e) le 20 juillet 2019 Auteur Partager Posté(e) le 20 juillet 2019 Peut-être que si [mention=46485]lordtaki[/mention] passe par là, il pourra te diriger Une aide est toujours bienvenue! 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 20 juillet 2019 Partager Posté(e) le 20 juillet 2019 J'ai corrigé, je voulais plutôt dire "guider" 😉 Dirigé peut être prit de plusieurs manières et pas des meilleures... 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Jojo (BE) Posté(e) le 21 juillet 2019 Partager Posté(e) le 21 juillet 2019 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 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Jojo (BE) Posté(e) le 21 juillet 2019 Partager Posté(e) le 21 juillet 2019 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)) 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 21 juillet 2019 Partager Posté(e) le 21 juillet 2019 Peut-être faudrait-il lancer la commande en mode verbose pour tester si c'est possible. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Jojo (BE) Posté(e) le 21 juillet 2019 Partager Posté(e) le 21 juillet 2019 et en français dans le texte ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 21 juillet 2019 Partager Posté(e) le 21 juillet 2019 Ajouter l'option -v pour avoir un retour dans le terminal de ce qui ce passe pendant l'exécution du script. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Jojo (BE) Posté(e) le 21 juillet 2019 Partager Posté(e) le 21 juillet 2019 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) 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 21 juillet 2019 Partager Posté(e) le 21 juillet 2019 Bon et bien nickel 😉 Et oui, je te suggérais de passer par SSH et lancer le script manuellement avec l'option -v 🙂 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 22 juillet 2019 Partager Posté(e) le 22 juillet 2019 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 😉 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Superthx Posté(e) le 22 juillet 2019 Auteur Partager Posté(e) le 22 juillet 2019 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 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
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.