#!/bin/bash # Bannir automatiquement une liste d'ip qui ont abusé. #fichier de log folderbanip="/root/banip" badiphuman="$folderbanip/badiphuman.txt" todayiptable="$folderbanip/today_iptable.txt" logban="$folderbanip/logban.log" ## Liste les ip gênantes, d'une façon lisible pour un humain # awk '{gsub(/^[ \t]+/,""); print$0}' => enlève les espaces au début cat /var/log/fail2ban.lo* | grep -v "Restore" | grep "Ban" |awk '{print $6" "$8}'|sort|uniq -c|sort -nr | awk '{gsub(/^[ \t]+/,""); print$0}' > $badiphuman # sauvegarde les règles iptables et ipset actuelles pour comparer iptables -L -n -v > $todayiptable ipset list >> $todayiptable # On alimente le fichier de log echo "#####" >> $logban date >> $logban ## Si l'ip est revenu plus d'un certain nombre de fois, alors on la sélectionne pour un ban définitif # lire fichier $badiphuman cat $badiphuman | while IFS= read -r line; do tableau=(${line// /,}) number=$(echo $tableau | cut -d ',' -f 1) ip=$(echo $tableau | cut -d ',' -f 3) #Si l'ip apparait 2 fois ou plus, on la bannit, sinon elle a sa chance if (($number >= 2)) then # on va tester si on a déjà la règle if grep -q "$ip" $todayiptable then echo "IP address already blocked, skipping" >> $logban else ipset add blocklist_ip $ip echo "Blocking $ip because $number occurences" >> $logban fi else echo "$ip not blocking for the moment, only $number try" >> $logban fi done #Sauver les modifs ipset save netfilter-persistent save #iptables-save >> /etc/iptables/rules.v4