Aller au contenu

Featured Replies

Posté(e)

salut,

j'utilise ce script depuis un moment pour automatiser les ip bloquées :
 

#!/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

voici le résultat :
image.thumb.png.f457d8e6e9d2727d035fb07e29677a92.png

ça marche au poil, seul problème ça ne fait qu'ajouter et ne supprime jamais les vieilles entrées du coup je reçois des emails du nas disant que la DB est pleine :)

je suis une bille en script, celui-ci je l'ai pris je ne sais plus où et j'ai bien tenté de le modifier avec mistral.ai pour ajouter la suppression des anciennes entrée mais du coup ça n'en ajoute plus. une idée pour supprimer les vieilles entrées ou sinon supprimer l'intégralité des ip bloquées (l'idée étant de conserver la liste blanche)

  • 3 semaines après...
Posté(e)

Pour ma part j'ai ce script qui tourne depuis plusieurs années et qui a été créé par Superthx.

Je ne le retrouve pas dans les tutos.

Il se met à jour toutes les 24h :

#!/bin/bash
# Script tutoriel de nas-forum.com par Superthx
### PARAMETRAGE ###
# Fréquence de lancement de ce script en heures (exemple 24 si journalier)
Freq="24" 

# adresses des sites source entre guillemets séparées par un espace
Liste_Url=("https://lists.blocklist.de/lists/" \
    "https://mariushosting.com/wp-content/uploads/2019/10/deny-ip-list.txt")
# Pour la liste de www.blocklist.de
# Liste Choix: {all} {ssh} {mail} {apache} {imap} {ftp} {sip} {bots}
#              {strongips} {ircbot} {bruteforcelogin}
Choix="all"

#Fichier personnel facultatif listant des IP (1 par ligne) à bloquer
Filtre_Perso="filtreperso.txt"

# Pour trace facultative des IP non conformes au format IP
#Choix: {0}: sans trace, {1}: dans fichier log, {2}: dans fichier spécifique
Trace_Ano=2
File_Ano="anoip.txt" # à renseigner si option2 (sinon ne pas modifier)

### CONSTANTES ###
Version_Script="v0.3.2"
db="/etc/synoautoblock.db"
marge=60

### FONCTIONS ###
raz_ip_bloquees(){
sqlite3 $db <<EOL
delete from AutoBlockIP where ExpireTime > 0;
EOL
}

tests_initiaux(){
echo -e "\nDemarrage du script $0 version $Version_Script:  $(date)"
if [[ $# -gt 0 ]]; then
    if [[ "$1" == "raz" ]]; then
        raz_ip_bloquees
        echo "Le blocage des IP non bloquées définitivement a été supprimé"
    else
        echo "Parametre $1 incorrect!\nSeul parametre autorisé: 'raz'"
        echo "Abandon du script"
        exit 1
    fi
fi
}

plage_blocage(){
start=`date +%s`
block_off=$((start+Freq*3600+$marge))
echo "Horodatage du blocage des IP: $start"
sqlite3 $db <<EOL
drop table if exists Var;
create table Var (name text primary key, value text);
EOL
`sqlite3 $db "insert into Var values ('stop', $block_off)"`
}

raz_fil_ano(){
if [ -f  $File_Ano ]; then
    rm  $File_Ano
fi
if [[ $Trace_Ano == 2 ]]; then
    echo -e "\nDemarrage du script (version $Version_Script):  $(date)" > \
        $File_Ano
fi
nb_invalide=0
}

acquisition_ip(){
if [ -f  $Filtre_Perso ];then
    cat "$Filtre_Perso" > listeip.txt
else
    touch listeip.txt
    touch $Filtre_Perso
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" >> listeip.txt
			 curl -s "$url$Choix.txt" -o tmp.txt
			 if [[ $(egrep -io "DOCTYPE" tmp.txt) != "DOCTYPE" ]];then
			    sort -ufo listeip.txt tmp.txt listeip.txt
			 else
                echo "Echec chargement IP depuis le site $host"
            fi
			;;
	    mariushosting.com)
			url2=${url:0:45}"$(date '+%Y/%m')"${url:52}
            curl -s $url2 -o tmp.txt 
            if [[ $(egrep -io "DOCTYPE" tmp.txt) != "DOCTYPE" ]];then
                sort -ufo listeip.txt tmp.txt listeip.txt
            else
                url2=${url:0:45}"$(date '+%Y/%m' -d "$start_date-15 days")"\
                    ${url:52}
                curl -s $url2 -o tmp.txt
                if [[ $(egrep -io "DOCTYPE" tmp.txt) != "DOCTYPE" ]];then
                    sort -ufo listeip.txt tmp.txt listeip.txt
                else
                    echo "Echec chargement IP depuis le site $host"
                fi
            fi
            ;;
	    *)
			echo "Le traitement pour $url n'est pas implanté"
			;;
	esac
done
rm tmp.txt
nb_ligne=$(wc -l  listeip.txt | cut -d' ' -f1)
echo "Traitement d'une liste de $nb_ligne adresses IP"
}

deblocage_ip(){
`sqlite3 $db \
    "delete from AutoBlockIP where ExpireTime > 0 and ExpireTime < $start"`
}
 
maj_ip_connues(){
sqlite3 $db <<EOL
drop table if exists Var;
create table Var (name text primary key, value text);
EOL
`sqlite3 $db "insert into Var values ('stop', $block_off)"
`sqlite3 $db <<EOL
drop table if exists Tmp;
create table Tmp (IP varchar(50) primary key);
.mode csv
.import listeip.txt Tmp
alter table Tmp add column ExpireTime date;
alter table Tmp add column Old boolean;
update Tmp set ExpireTime = (select value from Var where name = 'stop');
update Tmp set Old = (
select 1 from AutoBlockIP where Tmp.IP = AutoBlockIP.IP);
update AutoBlockIP set ExpireTime=(
select ExpireTime from Tmp where AutoBlockIP.IP = Tmp.IP and Tmp.Old = 1) 
where exists (
select ExpireTime from Tmp where AutoBlockIP.IP = Tmp.IP and Tmp.Old = 1);
delete from Tmp where Old = 1;
drop table  Var;
EOL
rm listeip.txt
}

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

hex_en_dec(){
    [ "$1" != "" ] && printf "%d" "$(( 0x$1 ))"
}

maj_ipstd(){
ipstd=''
if [[ $ip != '' ]]; then
    # si format IPV4 (approximatif)
    if [[ $ip =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then 
        ipstd=$(printf "0000:0000:0000:0000:0000:FFFF:%02X%02X:%02X%02X" \
            ${ip//./' '})
    elif [[ $ip != "${1#*:[0-9a-fA-F]}" ]] ; then
        ip6=$ip
        echo $ip6 | grep -qs "^:" && $ip6="0${ip6}"
        if echo $ip6 | grep -qs "::"; then
            sep=$(echo $ip6 | sed 's/[^:]//g')
            absent=$(echo ":::::::::" | sed "s/$sep//")
            rempl=$(echo $absent | sed 's/:/:0/g')
            if [[ ${ip6: -1} != ":" ]];then
                rempl=$(echo $rempl | sed 's/.\{1\}$//')    
            fi
            ip6=$(echo $ip6 | sed "s/::/$rempl/")
        fi
        blocks=$(echo $ip6 | grep -o "[0-9a-f]\+")
        set $blocks
        ipstd=$(printf "%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X" \
         $(hex_en_dec $1) $(hex_en_dec $2) $(hex_en_dec $3) $(hex_en_dec $4) \
         $(hex_en_dec $5) $(hex_en_dec $6) $(hex_en_dec $7) $(hex_en_dec $8)) 
    else
        tracer_ip_incorrecte
    fi
    if [[ $ipstd != '' ]]; then 
        printf '%s,%s,%s,%s\n' "$ip" "$start" "$block_off" "$ipstd" >> \
            newip.csv
    fi
fi
}

import_nouvelles_ip(){
newip=`sqlite3 $db "select IP from Tmp where IP <>''"`
for ip in $newip; do
    maj_ipstd
done
if [ -f  newip.csv ]; then
sqlite3 $db <<EOL
drop table Tmp;
create table Tmp (IP varchar(50) primary key, RecordTime date, 
ExpireTime date, IPStd varchar(50));
.mode csv
.import newip.csv Tmp
insert into AutoBlockIP 
select IP, RecordTime, ExpireTime, 1 ,IPStd, NULL, NULL 
from Tmp where IPStd is not NULL;
drop table Tmp;
EOL
rm newip.csv
fi
}

informations(){
ajt=`sqlite3 $db "select count(*) from AutoBlockIP where RecordTime = $start"`
if [[ $nb_invalide -eq 0 ]]; then
    echo "$ajt IP ont été ajoutées"
else
    echo "$ajt IP ont été ajoutées et $nb_invalide ignorée(s)"
fi
borne=$(($start+$marge+30))
block=`sqlite3 $db "select count(*) from AutoBlockIP 
       where DENY = 1 and 
       (ExpireTime = 0 or ExpireTime > $borne)"`
echo "La liste de blocage mise à jour va bloquer $block IP"    
}

### SCRIPT ###
cd `dirname $0`
tests_initiaux $1
plage_blocage
raz_fil_ano 
acquisition_ip
deblocage_ip
maj_ip_connues
import_nouvelles_ip
informations
echo -e "Fin du script exécuté en $[$SECONDS/60]mn $[$SECONDS%60]s"
exit 0

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.