Więc zhakowałem to razem, przechodząc atak DDOS, aby wyciągnąć niegrzeczne IP z moich logów. Czy ktoś ma jakieś ulepszenia lub inne sugestie, aby to poprawić?
Oto ogólny pomysł:
- wyciągnij ip tylko z pliku dziennika
- posortuj je
- uniq i policz je
- posortuj je ponownie
I rury o'pipe:
cut --delim " " -f7 /var/log/apache_access | sort | uniq -c | sort -rn > sorted-ips.txt
text-processing
logs
ip
Gabe.
źródło
źródło
Odpowiedzi:
Zawsze używałem tego:
tail -1000 /var/log/apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1
Ponieważ
tail
jestem w stanie ustawić limit, o ile naprawdę chcę się cofnąć - dobrze, jeśli nie używasz obracania dziennika (z jakiegokolwiek powodu), po drugie korzystamawk
- ponieważ większość dzienników jest rozdzielana spacjami, „ pozostawiłem sobie możliwość wyciągnięcia dodatkowych informacji (ewentualnie adresów URL, na które trafiali, statusów, przeglądarek itp.) poprzez dodanie odpowiedniej$
zmiennej. Wreszcie błąd wuniq
nim działa tylko w dotykających się parach - IE:Będzie produkować:
Nie pożądana moc wyjściowa. Więc sortujemy pierwszą kolumnę (w tym przypadku IP, ale możemy sortować inne kolumny), a następnie
uniq
je, w końcu sortujemy liczbę rosnąco, aby zobaczyć najwyższych przestępców.źródło
-k1
jest redundantny, (1) jest tylko jeden klawisz (2) i taksort
zaczyna używać pierwszego słowa jako klucza.Wygląda na to, że jesteś w trakcie wymyślania koła fail2ban .
Spójrz na fail2ban. Prawdopodobnie robi to, co chcesz, a jeśli nie, łatwo to dostosować.
źródło
Marco Ceppi ma rację, mówiąc,
awk
że jest lepszym narzędziem do tego, ale awk jest również lepszym narzędziem niżsort
iuniq
od kiedy można wprowadzić tę logikęawk
. Nie robi to wielkiej różnicy, jeśli po prostu dostosowujesz 1000 linii, ale jeśli chcesz spojrzeć na ogromny plik dziennika z wieloma koncertami, może być szybszy o kilka rzędów wielkościawk
.cat /var/log/apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n
zrobi to, czego potrzebujesz, ale w przypadku dużych plików jest znacznie szybszy. Tworzy tablicę adresów IP w awk, używając adresu IP jako klucza i liczby wystąpień adresów IP jako wartości.Przyspieszenie przychodzi, ponieważ awk wykonuje jedno przejście przez dane i wykonuje większość pracy, z wyjątkiem sortowania końcowego wyniku. Używając drugiej metody, jeśli masz 1 000 000 linii w dzienniku przesyłania, awk odczytuje 1 000 000 linii wyrzucających 1 000 000 adresów IP, następnie sortowanie przechodzi przez całe 1 000 000 adresów IP, wysyłając teraz posortowane 1 000 000 adresów IP do uniq, co zmniejsza je do znacznie mniejszej ilość danych przed sortowaniem. Zamiast przesyłać wokół / wykonywać wiele przejść dla 1 000 000 adresów IP, awk robi prawie wszystko za jednym przejściem.
Korzystając z 5513,132 dziennika apache linii (1,1 koncertów) na moim laptopie, oto porównanie prędkości:
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
źródło