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