Aller au contenu

!/bin/bash

Configuration

API_KEY="" # Laisse vide pour 50k requêtes/mois gratuit sur ipinfo.io OUTPUT_DIR="/home/loic/ban-reports" mkdir -p $OUTPUT_DIR

echo "=== Extraction des IPs bannies ==="

Récupérer toutes les IPs bannies par jail

ALL_IPS="" for jail in $(sudo fail2ban-client status | grep 'Jail list:' | sed 's/.://;s/,//g'); do IPS=$(sudo fail2ban-client status $jail | grep 'Banned IP' | sed 's/.://;s/^ //') if [ ! -z "$IPS" ]; then echo "Jail $jail : $IPS" ALL_IPS="$ALL_IPS $IPS" fi done

Dédupliquer

UNIQUE_IPS=$(echo $ALL_IPS | tr ' ' '\n' | sort -u | grep -v '^$') TOTAL=$(echo "$UNIQUE_IPS" | wc -l) echo "" echo "Total IPs uniques bannies : $TOTAL" echo ""

Fichiers temporaires

COUNTRY_FILE="$OUTPUT_DIR/countries.txt" ORG_FILE="$OUTPUT_DIR/orgs.txt" CITY_FILE="$OUTPUT_DIR/cities.txt"

$COUNTRY_FILE $ORG_FILE $CITY_FILE

echo "=== Géolocalisation des IPs ===" COUNT=0 for ip in $UNIQUE_IPS; do COUNT=$((COUNT+1)) echo -n "[$COUNT/$TOTAL] $ip ... "

if [ -z "$API_KEY" ]; then
    INFO=$(curl -s "https://ipinfo.io/$ip/json")
else
    INFO=$(curl -s "https://ipinfo.io/$ip?token=$API_KEY")
fi

COUNTRY=$(echo "$INFO" | jq -r '.country // "Unknown"')
ORG=$(echo "$INFO" | jq -r '.org // "Unknown"')
CITY=$(echo "$INFO" | jq -r '.city // "Unknown"')

echo "$COUNTRY" >> $COUNTRY_FILE
echo "$ORG" >> $ORG_FILE
echo "$CITY" >> $CITY_FILE

echo "$COUNTRY | $CITY | $ORG"
sleep 0.2  # Éviter le rate limiting

done

echo "" echo "=== RAPPORT FINAL ===" echo "" echo "--- Top 10 Pays ---" sort $COUNTRY_FILE | uniq -c | sort -rn | head -10

echo "" echo "--- Top 10 Organisations ---" sort $ORG_FILE | uniq -c | sort -rn | head -10

echo "" echo "--- Top 10 Villes ---" sort $CITY_FILE | uniq -c | sort -rn | head -10

echo "" echo "Rapport complet sauvegardé dans $OUTPUT_DIR"