Donc, j'ai piraté cela ensemble tout en subissant une attaque DDOS pour retirer les ips coquins de mes journaux. Quelqu'un a-t-il des améliorations ou d'autres suggestions pour l'améliorer?
Voici l'idée générale:
- extraire uniquement l'IP du fichier journal
- les trier
- uniq et les compter
- les trier à nouveau
Et la chaîne o'pipes:
cut --delim " " -f7 /var/log/apache_access | sort | uniq -c | sort -rn > sorted-ips.txt
text-processing
logs
ip
gabe.
la source
la source
Réponses:
Je l'ai toujours utilisé:
tail -1000 /var/log/apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1
Avec
tail
je suis en mesure de définir la limite de l'arrière-plan que je veux vraiment aller - bon si vous n'utilisez pas la rotation des journaux (pour une raison quelconque), deuxièmement, j'utiliseawk
- car la plupart des journaux sont délimités par l'espace, je ' Je me suis laissé la possibilité d'extraire des informations supplémentaires (éventuellement les URL qu'ils atteignaient, les statuts, les navigateurs, etc.) en ajoutant la$
variable appropriée . Enfin, un défautuniq
ne fonctionne que par paires touchantes - IE:Produira:
Pas la sortie souhaitée. Nous trions donc la première colonne (dans ce cas, les ips, mais nous pourrions trier d'autres colonnes) puis
uniq
elles, puis trions le nombre croissant pour que je puisse voir les délinquants les plus élevés.la source
-k1
est redondant, (1) il n'y a qu'une seule touche (2)sort
commence quand même à utiliser le premier mot comme clé.On dirait que vous êtes en train de réinventer la roue fail2ban .
Jetez un œil à fail2ban. Il fait probablement ce que vous voulez déjà, et sinon, il est facile à personnaliser.
la source
Marco Ceppi a raison d'
awk
être un meilleur outil pour cela, mais awk est également un meilleur outil quesort
etuniq
puisque cette logique peut être déplacée versawk
. Cela ne fait pas beaucoup de différence si vous ne faites que suivre 1000 lignes, mais si vous souhaitez consulter un énorme fichier journal multi-gig, il peut être plus rapide de déplacer cela versawk
.cat /var/log/apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n
fera ce dont vous avez besoin mais est beaucoup plus rapide pour les gros fichiers. Il crée un tableau d'adresses IP dans awk, en utilisant l'adresse IP comme clé et le nombre de fois où les adresses IP se produisent comme valeur.L'accélération vient du fait qu'awk passe les données et fait la plupart du travail, sauf pour trier la sortie finale. En utilisant l'autre méthode, si vous avez 1 000 000 de lignes dans le journal de transfert, awk lit ces 1 000 000 lignes crachant 1 000 000 IP, puis le tri passe sur l'ensemble des 1 000 000 IP, envoyant les 1 000 000 IP désormais triées à uniq, ce qui le réduit à un nombre beaucoup plus petit. quantité de données avant de donner à trier. Au lieu de contourner / faire plusieurs passes sur 1 000 000 IP, awk fait presque tout en une seule passe.
En utilisant un journal Apache de 5 513 132 lignes (1,1 Go) sur mon ordinateur portable, voici une comparaison de vitesse:
cat ./apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1
cat ./apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n
la source