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

il y a 23 minutes, PPJP a dit :

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.

pour @Superthx

Partager ce message


Lien à poster
Partager sur d’autres sites

@PPJP a raison, les adresses IP référencées étaient bel et bien sur "définitivement".

Après suppression de plus de 30 000 adresses IP référencées, modification du script avec la solution donnée par PPJP et lancement du script, elles prennent bien en compte la durée qu'on a précisé dans la configuration 🙂

 

Modifié par Zeus

Partager ce message


Lien à poster
Partager sur d’autres sites

Comme je ne sais pas comment on manipule une bdd sqlite en ssh et que j'avais pas le temps de chercher, je me suis pas embêté et je les ai supprimé manuellement en les sectionnant au fur et à mesure. Ça prend 10 minutes à tout casser.

Si maintenant, tu as du temps, tu peux te renseigner sur la manipulation de base sqlite 🙂

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Je vais essayer 

  1. exporter le fichier
  2. le modifier pour la durée de bannissement des IP (mettre le moins possible)
  3. le réimporter
  4. et après la durée de bânissement, ça devrait être vide ?

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai pas tenté mais tu peux aussi copier la base pour la sauvegarder :

cp /etc/synoautoblock.db /etc/synoautoblock.db.original

Puis supprimer cette base :

rm /etc/synoautoblock.db

Ensuite, tu relances le script et tu vois si la base se recrée.

Partager ce message


Lien à poster
Partager sur d’autres sites

merci, mais je préfère travailler avec l'interfae standard , plutôt que d'aller modifier une table dans la DB (défaut professionnel, on ne sait jamais les autres liens).

Donc, j'ai juste exporté la liste et réimportée en choisissant d'écraser les IP existantes, et mettant une durée de bannissement de 1 jour. => demain tout devrait être vide. (proprement)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@Zeus, ma table était bien vide ;-)

@Superthx j'ai implémenté ta correction suggérée par @PPJP, et ça fonctionne du feu de dieu ;-)

J'ai quand-même une question : tu dis que tu ne fais pas tourner le script avec une date de validité permanente, car la DB grossirait indéfiniment. Je n'y connais rien au stripping unix que tu as fait, mais tu dois ajouter les IP d'une liste avec la date de fin. Et si tous les jours tu réimportes la liste complète des IP, c'est l'enfer. Or il y a une option prévue lors de l'importation manuelle pour écraser les IP existantes par la nouvelle importée. On évite ainsi d'exploser la taille de la DB.
Dans ton script, ne pourrais-tu pas vérifier si l'IP est déjà présente, et donc l'écraser également (ce qui pourrait être un paramètre également) ? La taille de la DB serait ainsi maitrisée.

J'y pense, je vais faire un test : je tourne 1 fois ton script et je le retourne une seconde fois dans la foulée, j'aurais le double d'entrées ?

Car 30000 entrées pendant 30 jours, cela fera 30000*30 = 900000 entrées au bout de 30 jours, avant que les premières ne disparaissent, ou on réduit la durée de blocage à 1 jour si on fait tourner l script toutes les 24h?

Partager ce message


Lien à poster
Partager sur d’autres sites

non, je n'ai pas mes entrées en double, alors quel serait le problème de bloquer indéfiniment ?

en fait je devais délirer, j'étais sûr d'avoir lu quelque part un problème d'explosion de la DB. Pourquoi bloquer les IP pendant 30j seulement pas de manière permanente ?

Modifié par Jojo (BE)

Partager ce message


Lien à poster
Partager sur d’autres sites

Pourquoi bloquer indéfiniment une ip? La liste sur 30 jours suffit à mon avis. Quand tu telecharge la liste sur 30 jours au bout de ses 30 jours la liste se videra. Petit à petit... Si tu fais une mise à jours de cette liste toutes les heures elle rajoute les nouvelles ip. Peut être une vingtaine par heure. Aussi ces ip peuvent être des proxy, des periphs mobiles, des faux positifs, etc.... C’est pas si comme un pirate utilise indéfiniment la même ip pour faire ses exploits. Si je veux pirater je passe par le tor ou un proxy. Autre chose, le script ajoute automatiquement les ip qui manque de la nouvelle liste et ne réécrit pas les anciennes puisque elles sont déjà dans la BD. J’espère t’avoir éclairé!!

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @Superthx

Comment avez-vous obtenu le nom des champs  IP et DENY de la base AutoBlockIP?  

Pour essayer de continuer à apprendre le shell, j'ai essayé d'adapter votre script pour le mettre à ma sauce!
Il me manque pour l'instant le nom d'autres champs de cette base et je ne parviens pas à les obtenir.

Merci d'avance.

PS:
Pour effacer rapidement toutes les adresses bloquées en ssh:
`sqlite3 /etc/synoautoblock.db "DELETE FROM AutoBlockIP WHERE DENY = 1"`
car TRUNCATE est inconnu de sqlite3 (au moins dans la version de DSM actuelle)

Modifié par PPJP

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut @PPJP

Je comprends pas trop la question

Le 30/07/2019 à 15:27, PPJP a dit :

Comment avez-vous obtenu le nom des champs  IP et DENY de la base AutoBlockIP?  

Je suis en vacances donc je risque pas trop de repondre souvent 😀😅

Sinon pourquoi ne pas telecharger le fichier db et l'ouvrir avec DB Browser (SQLite) ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour ,

Merci.
 Vous n'avez pas compris ma question; mais ... m'avez apporté la réponse attendue!
C'était trop évident pour que j'y pense!
J'ai cependant une circonstance atténuante, je n'ai jamais utilisé SQLite.
Je vous souhaite de bonnes vacances.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,
Je suis repassé sur ce tuto et vous propose un script, pour DSM, un peu modifié.
Principales modifications:
1) Le script étant appelé à être de lancé de manière répétitive (cron ou planificateur) donc toujours aux mêmes horaires, les dates de fin de blocage sont avancées de 5mn.
   Cela pour eviter que la suppression des blocages par le DSM ne se produise pendant l'exécution du script.
2) Les nouvelles dates de blocage peuvent être réparties entre la durée de blocage paramétrée et son double (en fonction de cette durée et de la fréquence de lancement du script).
  Ceci pour éviter par exemple d'avoir à renouveler la totalité de la liste des IP à l"expiration du blocage initial.
3) Possibilité d'ajouter ces propres IP  à bloquer dans un fichier ( filtreperso.txt avec une IP  par ligne) ) situé dans le même dossier que ce script.
   Ce fichier  (éventuellement vide) est obligatoire!
4) Les IP ignorées peuvent être enregistrées dans un fichier spécifique.
5) Une tempo est ajoutée censée éliminer des verrouillage de la base de données.
    Il peut encore s'en produire, principalement lors du premier lancement (visible dans le log).
6) La possibilité d'ajouter d'autres sources d'IP douteuses est prévue, mais nécessitera une adaptation du script

Pour avoir le maximum de retour d'informations ce script doit être lancé par:
  En SSH:
    bash chemin_du_script/nom_du_script
  Par le cron ou  par le planificateur de tâches:
    bash  chemin_du_script/nom_du_fichier_du_script  >> chemin_du_script/nom_du_fichier_log 2>&1

Si vous êtes intéressé et que vous le testiez, merci de me faire un retour.

#!/bin/bash

###################
### PARAMETRAGE ###
###################
# Pour la liste de www.blocklist.de
# Liste Choix: {all} {ssh} {mail} {apache} {imap} {ftp} {sip} {bots} {strongips} {ircbot} {bruteforcelogin}
Choix="all"
Nb_Jours_Block="14" # Effacer l'IP après x jours sinon utiliser 0 pour blocage permanent
Run_Freq="2" # fréquence de lancement de ce script en heures (exemple 24 si journalier)
# Pour trace facultative des IP non conformes au format IPV4
Trace_Ano=2 #Choix: {0}: pas de trace, {1}: dans fichier log, {2}: dans fichier spécifique

##################
### CONSTANTES ###
##################
Version_Script="v0.1.5"
Liste_Url=("https://lists.blocklist.de/lists/") # espace entre chaque site!
Filtre_Perso="filtreperso.txt"
File_Tmp="blocklist.txt"
File_Ano="noipv4.txt"

#################
### FONCTIONS ###
#################
raz_fil_ano(){
if [[ $Trace_Ano != 2 ]]; then
    if [ -f  "$directory/$File_Ano" ];then
        rm  "$directory/$File_Ano"
    fi    
else
    echo -e "\nDemarrage du script (version $Version_Script):  $(date)" >> "$directory/$File_Ano"
fi
}

acquisition_ip(){
if [ -f  "$directory/$Filtre_Perso" ];then
    cat "$directory/$Filtre_Perso" > "$directory/$File_Tmp"
else
    touch "$directory/$File_Tmp"
fi
for url in "${Liste_Url[@]}"; do
    host=`echo $url | sed -n "s/^https\?:\/\/\([^/]\+\).*$/\1/p"`
    case $host in
        lists.blocklist.de)
            /bin/curl -s "$url$Choix.txt" >> "$directory/$File_Tmp"
            echo "" >> "$directory/$File_Tmp" # ajout fin ligne absent
            ;;
        *)
            echo "Le traitement pour $url n'est pas implanté"
            ;;
    esac
done
sort -ufo  "$directory/$File_Tmp" "$directory/$File_Tmp"
nb_ligne=$(wc -l  "$directory/$File_Tmp" | cut -d' ' -f1)
echo "Traitement d'une liste de $nb_ligne adresses IP"
}

tracer_ip_non_ipv4(){
case $Trace_Ano in
    1)  echo "$nb_invalide:IP non traitée (format IPV4 incorrect):  $ip"
        ;;
    2)  echo "$nb_invalide : $ip" >> "$directory/$File_Ano"            
        ;;
    *) ;;
esac
}

##############
### SCRIPT ###
##############
start=`date +%s`
echo -e "\nDemarrage du script (version $Version_Script):  $(date)"
echo "Blocage (horodatage: $start) des IP pour $Nb_Jours_Block jours "
directory=`dirname $0`
raz_fil_ano
acquisition_ip
block_off_start=$((start+Nb_Jours_Block*86400-300))
taille_seq_block=$((nb_ligne*Run_Freq/Nb_Jours_Block/24))
nb_insert=0; nb_invalide=0
while read ip; do
    if [[ $ip =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then # si format IPV4 OK (approximatif)
        block_on=`sqlite3 /etc/synoautoblock.db "SELECT DENY FROM AutoBlockIP WHERE IP = '$ip'"`
        if [[ $block_on -eq 0 ]]; then # si IP à bloquer absente de la base, on l'insère
            ((nb_insert++))
            block_off=$((block_off_start+(nb_insert/taille_seq_block)*Run_Freq*3600))
            `sqlite3 /etc/synoautoblock.db "INSERT INTO AutoBlockIP VALUES ('$ip','$start','$block_off','1','','0','')"`
            sleep 0.08 # à ajuster!
        fi
    else
        ((nb_invalide++))
        tracer_ip_non_ipv4
    fi
done< "$directory/$File_Tmp"
nb_insertDB=`sqlite3 /etc/synoautoblock.db "SELECT COUNT(*) FROM AutoBlockIP WHERE RecordTime = $start"`
if [[ $nb_insert -gt $nb_insertDB ]]; then
    echo "$((nb_insert - nb_insertDB)) IP n'ont pas été correctement insérées dans la base de blocage"
fi
echo "$nb_insertDB entrée(s) ont été ajoutée(s) et $nb_invalide ignorée(s)"
nb_block=`sqlite3 /etc/synoautoblock.db "SELECT COUNT(*) FROM AutoBlockIP WHERE DENY = 1"`
echo "La liste de blocage IP a été mise à jour et bloque désormais $nb_block adresses"
cp -p /etc/synoautoblock.db "$directory/"  # pour MAP
echo -e "Fin du script exécuté en $[$SECONDS/60]mn $[$SECONDS%60]s"
exit 0

Modifié par PPJP

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 23/07/2019 à 23:26, Superthx a dit :

Pourquoi bloquer indéfiniment une ip? La liste sur 30 jours suffit à mon avis. Quand tu telecharge la liste sur 30 jours au bout de ses 30 jours la liste se videra. Petit à petit... Si tu fais une mise à jours de cette liste toutes les heures elle rajoute les nouvelles ip. Peut être une vingtaine par heure. Aussi ces ip peuvent être des proxy, des periphs mobiles, des faux positifs, etc.... C’est pas si comme un pirate utilise indéfiniment la même ip pour faire ses exploits. Si je veux pirater je passe par le tor ou un proxy. Autre chose, le script ajoute automatiquement les ip qui manque de la nouvelle liste et ne réécrit pas les anciennes puisque elles sont déjà dans la BD. J’espère t’avoir éclairé!!

le23/7, j'avais environ 30000 entrées, je suis maintenant à 84000.

Cela pourrait)il être un problème docteur ? Ou le Syno "peut là contre" ?
Sinon, si je mets le blocage à 5 jours, il travaillera plus lors de la mise à jour, mais la DB serait plus petite ? Que pensez)vous qui soit le mieux ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour
Je n'ai pas utilisé de façon régulière, mais seulement quelques jours pour tester ma version du script;
J en'ai donc pas de recul mais 84000 entrées est certainement anormal.
Ce que je vous propose:
Dans Panneau de configuraation, Sécurité,Compte,  Autorisey/Bloquer la liste, liste de blocage
  Vérifiez si les durées d'expiration sont dépassées.(On peut trier en cliquant sur les en-têtes de colonne)
  Si c'est bien le cas, la suppression des IP obsolètes est faite par le DSM et nécessite probablement que le blocage soit activé.

PS: Vérifiez si ces lignes ont été correctement copiées

CHECK_IF_EXISTS=`sqlite3 /etc/synoautoblock.db "SELECT DENY FROM AutoBlockIP WHERE IP = '$BLOCKED_IP'" | wc -l`
if [[ $CHECK_IF_EXISTS -lt 1 ]]; then

Modifié par PPJP

Partager ce message


Lien à poster
Partager sur d’autres sites

merci pour le retour :

  1. je n'ai aucune entrée expirée (et les options "Activer le blocage auto" et  "Activer l'expiration des blocages" sont bien cochées)
  2. les deux lignes de code sont celles qui sont dans mon script ...

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 15 heures, PPJP a dit :

Je suis repassé sur ce tuto et vous propose un script, pour DSM, un peu modifié.

Cool, je testerai plus tard....Merci @PPJP

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

Cela pourrait)il être un problème docteur ? Ou le Syno "peut là contre" ?
Sinon, si je mets le blocage à 5 jours, il travaillera plus lors de la mise à jour, mais la DB serait plus petite ? Que pensez)vous qui soit le mieux ?

Cela me semble normal. Depuis ton dernier post......

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

Sinon, si je mets le blocage à 5 jours, il travaillera plus lors de la mise à jour, mais la DB serait plus petite ? Que pensez)vous qui soit le mieux ?

Pourquoi pas. De toutes façons cel ne prends que quelques Mo.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @Jojo (BE)

A la suite de votre message concernant l'augmentation importante de la liste des blocages, j'ai mis ces listes sous surveillance.

Il apparait que ces listes bougent vraiment beaucoup avec de nombreuses disparition d'IP !
Le résultat avec un test toutes les 2 heures est dans le fichier en PJ:

Il est donc intéressant de mettre une durée de rétention courte.
Si vous utilisez le script que j"ai proposé il y a quelques jours une rétention de 3 jours avec une mise à jour toutes les 2 heures semblent un bon compromis.
Les mises à jour devraient rester assez rapides (qq minutes).

Si vous voulez réinitialiser votre base de données vous pouvez le faire rapidement en ssh (en root) avec cette commande:
`sqlite3 /etc/synoautoblock.db "DELETE FROM AutoBlockIP WHERE DENY = 1"`

variationsblocklist.txt

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