Gestion de plusieurs pays cibles

- Utilisation d'un array pour $PAYS_CIBLES
- Renommage variables ($PAYS_CIBLE -> $PAYS_CIBLES et $i -> $ip)
This commit is contained in:
John Doe 2023-04-15 10:33:04 +02:00
parent e257529da5
commit 8ed81f6fb7
1 changed files with 15 additions and 12 deletions

View File

@ -3,7 +3,7 @@
# Installez le paquet geoip-bin pour gélocaliser les IP
# Variables
PAYS_CIBLE="FR" # Utiliser le code pays en deux lettres
PAYS_CIBLES=("FR" "CH") # Utiliser le code pays en deux lettres. Si plusieurs pays, mettre le pays entre " " et séparer les occurences par un espace.
GEOIP_COUNTRYv4="/usr/share/GeoIP/GeoIP.dat" # Necessite de télécharger régulièrement la database GeoIP. Voir https://forum.yunohost.org/t/tuto-bloquer-les-requetes-selon-le-pays/9947
AUTH_IP=($(grep "invalid" /var/log/auth.log* | grep -Po "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort | uniq | sort -n)) # Tentatives d'authentification. Supprimez * pour ne scanner que le dernier fichier de log.
CONNECT_IP=($(grep "CONNECT" /var/log/nginx/access.log* | grep -Po "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort | uniq | sort -n)) # Connection attempts using mod_proxy. Supprimez * pour ne scanner que le dernier fichier de log.
@ -13,8 +13,8 @@ LOG="/var/www/dokuwiki/data/pages/purge_ip.txt" # Laisser vide si on ne veut pas
LOG_TOKEN=FALSE # Sert à fermer le fichier LOG si on écrit en mode <file></file>
function fonction_ban { # Fonction pour le bannissement des IP
if [[ $(echo "$F2B_LISTE_IP" | grep "$i") == "" ]]; then # Si IP non présente dans la jail
fail2ban-client set "$JAIL" banip $i >/dev/null 2>&1 # On banni l'IP
if [[ $(echo "$F2B_LISTE_IP" | grep "$ip") == "" ]]; then # Si IP non présente dans la jail
fail2ban-client set "$JAIL" banip $ip >/dev/null 2>&1 # On banni l'IP
fonction_log
fi
}
@ -27,29 +27,32 @@ function fonction_log { # Fonction pour le logging
DATE=$(date "+%Y/%m/%d") # Date du jour au format YYYY/MM/DD
fi
IP_COUNTRY=$(echo "$GEO_IP" | cut -d ':' -f2) # On récupère uniquement le code pays + le pays
NB_SPACES=$((15-$((`expr length $i`)))) # Calcul du nombre d'espace à ajouter pour bien aligner les pays dans le log
NB_SPACES=$((15-$((`expr length $ip`)))) # Calcul du nombre d'espace à ajouter pour bien aligner les pays dans le log
ALIGNEMENT=$( printf "%${NB_SPACES}s" '' )
echo -e "$DATE - $LOG_TYPE - $i $ALIGNEMENT- $IP_COUNTRY" >> $LOG # On inscrit l'IP dans le fichier de LOG
echo -e "$DATE - $LOG_TYPE - $ip $ALIGNEMENT- $IP_COUNTRY" >> $LOG # On inscrit l'IP dans le fichier de LOG
fi
}
# Boucle sur les tentatives SSH
for i in "${AUTH_IP[@]}" # On boucle sur les IP qui ressortent de /var/log/auth.log*
for ip in "${AUTH_IP[@]}" # On boucle sur les IP qui ressortent de /var/log/auth.log*
do
GEO_IP=$(geoiplookup -f "$GEOIP_COUNTRYv4" "$i") # On sort les infos GeoIP
GEO_IP=$(geoiplookup -f "$GEOIP_COUNTRYv4" "$ip") # On sort les infos GeoIP
LOG_TYPE="AUTHENT" # Mot à inscrire dans la log
F2B_LISTE_IP="$F2B_SSHD" # Liste IP dans la jail
JAIL="sshd" # Jail à utiliser pour fail2ban
if [[ $(echo "$GEO_IP" | grep "$PAYS_CIBLE") == "" ]]; then # Test GeoIP pour ne pas se mettre dehors à cause d'une faute de typo :)
fonction_ban
fi
for pays in "${PAYS_CIBLES[@]}"
do
if [[ $(echo "$GEO_IP" | grep "$pays") == "" ]]; then # Test GeoIP pour ne pas se mettre dehors à cause d'une faute de typo :)
fonction_ban
fi
done
done
# Boucle sur les mod-proxy
for i in "${CONNECT_IP[@]}" # On boucle sur les IP qui ressortent de /var/log/nginx/access.log*
for ip in "${CONNECT_IP[@]}" # On boucle sur les IP qui ressortent de /var/log/nginx/access.log*
do
GEO_IP=$(geoiplookup -f "$GEOIP_COUNTRYv4" "$i") # On sort les infos GeoIP
GEO_IP=$(geoiplookup -f "$GEOIP_COUNTRYv4" "$ip") # On sort les infos GeoIP
LOG_TYPE="CONNECT" # Mot à inscrire dans la log
F2B_LISTE_IP="$F2B_YUNO" # Liste IP dans la jail
JAIL="yunohost" # Jail à utiliser pour fail2ban