0 Membres et 2 Invités sur ce sujet
#!/bin/bash# 1. Vérification qu'un argument a bien été passéif [ -z "$1" ]; then echo "Usage: $0 <fichier de log Apache à analyser>" echo "Exemple: $0 /var/log/apache2/access.log"" exit 1fi# 2. Vérification de l'existence du fichierif [ ! -f "$1" ]; then echo "Erreur : Le fichier '$LOG_FILE' est introuvable." echo "Usage : $0 [chemin_vers_le_fichier_log]" exit 1fiLOG_FILE=$1echo "Analyse des 100 IP les plus actives dans : $LOG_FILE"echo "---------------------------------------------------------------------------------------------------"printf "%-10s | %-15s | %s\n" "Requêtes" "Adresse IP" "Premier User-Agent"echo "---------------------------------------------------------------------------------------------------"# 3. Analyse en une seule passe avec awkawk -F'"' '{ # Dans awk avec -F"\"" , $1 contient toute la ligne jusqu au premier guillemet # On découpe ce $1 avec des espaces pour récupérer le premier mot (l adresse IP) split($1, parts, " ") ip = parts[1] # Si la ligne n est pas vide et qu une IP est trouvée if (ip != "") { # On incrémente le compteur pour cette IP count[ip]++ # Si cest la première occurrence chronologique de cette IP, on mémorise le 6ème champ (User-Agent) if (count[ip] == 1) { ua[ip] = $6 } }}END { # À la fin de la lecture, on affiche les résultats sous la forme : "compte IP user-agent" for (i in count) { printf "%d %s %s\n", count[i], i, ua[i] }}' "$LOG_FILE" | sort -rn | head -n 100 | while read c ip agent; do # Formatage propre en colonnes (read assigne le reste de la ligne à la variable "agent") printf "%-10s | %-15s | %s\n" "$c" "$ip" "$agent"done
4/ Recommandation BCP-162 / RFC6302 : Rajouter le port source dans les log d'Apache2cf BCP-162: logs, CGNat et cybercriminaliténano /etc/apache2/conf-available/log-personnalise.conf : Création d'une configuration de log qui inclue le port source, appelé "combiport"Copier / coller le texte ci-dessous dans le fichier :Code: [Sélectionner]# Customized log with display of TCP source port (%{remote}p) and the SSL protocol version (TLSv1.2, TLSv1.3) for https or "-" for http (%{SSL_PROTOCOL}x)LogFormat "%h %{remote}p %{SSL_PROTOCOL}x %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combiporta2enconf log-personnalise : Activation du fichier mis en place (il faut touefois appeler "combiport" lors du log)sed -i -e "s/CustomLog \${APACHE_LOG_DIR}\/other_vhosts_access.log vhost_combined/CustomLog \${APACHE_LOG_DIR}\/other_vhosts_access.log vhost_combined/g" /etc/apache2/conf-available/other-vhosts-access-log.conf : configuration "combiport" pour ce fichier de log.Exemple de log générés :Code: [Sélectionner]192.168.2.2 51020 - [10/May/2022:10:31:15 +0000] "GET /250Mi.iso HTTP/1.1" 200 262144279 "-" "curl/7.81.0"192.168.2.2 40994 TLSv1.3 [10/May/2022:10:31:19 +0000] "GET /250Mi.iso HTTP/1.1" 200 262870026 "-" "curl/7.81.0"192.168.2.2 40996 TLSv1.3 [10/May/2022:10:31:22 +0000] "GET /250Mi.iso HTTP/2.0" 200 262144209 "-" "curl/7.81.0"192.168.1.3 50514 TLSv1.3 [10/May/2022:10:46:52 +0000] "GET / HTTP/2.0" 200 2078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/100.0"Le port destination n'est pas présent dans les logs, mais on le récupère avec la version du protocole SSL. 3 cas sont possibles :- : c'est du http (donc le port 80)TLSv1.2 : c'est du https (donc le port 443)TLSv1.3 : c'est du https (donc le port 443)La version du protocole SSL peut aider à séparer les requêtes inhabituelles de celles émanent de navigateurs web, tous avec TLS1.3 aujourd'hui.
# Customized log with display of TCP source port (%{remote}p) and the SSL protocol version (TLSv1.2, TLSv1.3) for https or "-" for http (%{SSL_PROTOCOL}x)LogFormat "%h %{remote}p %{SSL_PROTOCOL}x %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combiport
192.168.2.2 51020 - [10/May/2022:10:31:15 +0000] "GET /250Mi.iso HTTP/1.1" 200 262144279 "-" "curl/7.81.0"192.168.2.2 40994 TLSv1.3 [10/May/2022:10:31:19 +0000] "GET /250Mi.iso HTTP/1.1" 200 262870026 "-" "curl/7.81.0"192.168.2.2 40996 TLSv1.3 [10/May/2022:10:31:22 +0000] "GET /250Mi.iso HTTP/2.0" 200 262144209 "-" "curl/7.81.0"192.168.1.3 50514 TLSv1.3 [10/May/2022:10:46:52 +0000] "GET / HTTP/2.0" 200 2078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/100.0"