Розбір файлів журналів для частих IP-адрес


12

Отже, я зламав це разом під час атаки DDOS, щоб витягти з моїх журналів неслухняні ips. Хтось має якісь вдосконалення чи інші пропозиції, щоб покращити його?

Ось загальна ідея:

  1. витягніть ip лише з файлу журналу
  2. сортувати їх
  3. uniq і порахуй їх
  4. сортувати їх ще раз

І струнні дуби:
cut --delim " " -f7 /var/log/apache_access | sort | uniq -c | sort -rn > sorted-ips.txt


Не впевнений, чи краще це запитати в веб-майстрах ... але оскільки всі вони використовують утиліти Unix та командний рядок ... Я вважав, що тут буде більш доречно.
габе.

Тут добре здається. Він заснований на Unix і не є специфічним для веб-речей (Це, можливо, стосується багатьох речей у IP-
адресах

Відповіді:


7

Я завжди цим користувався:

tail -1000 /var/log/apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1

Завдяки цьому tailя можу встановити межу того, як далеко я дійсно хочу піти - добре, якщо ви не використовуєте поворот журналу (з будь-якої причини), по-друге, я використовую awk- оскільки більшість журналів обмежені простором я ' Я залишив мою власну особистість з можливістю витягувати додаткову інформацію (можливо, за якими URL-адресами вони потрапляли, статуси, браузери тощо), додаючи відповідну $змінну. Нарешті, недолік у uniqньому працює лише в дотикових парах - IE:

A
A
A
A
B
A
A

Вироблять:

4 A
1 B
2 A

Не потрібний вихід. Таким чином ми сортуємо перший стовпець (в даному випадку ips, але ми могли б сортувати інші стовпці), а потім uniqїх, нарешті, сортувати кількість за зростанням, щоб я міг бачити найвищих правопорушників.


Так, я зрозумів проблему і з uniq, отже, мій перший сорт, щоб привести всі IPS в порядок, щоб дублікати були поруч. Кінчик хвоста є приємним, а також аналіз всього журналу на рівні близько 4 ГБ може зайняти деякий час. Гарні речі, дякую.
габе.

-k1є надлишковим, (1) є лише одна клавіша (2) sortвсе одно починає використовувати перше слово як ключ.
Лекенштейн

7

Це здається, що ви в середині винаходити колесо fail2ban .

Подивіться fail2ban погляд. Це, ймовірно, робить те, що ви вже хочете, а якщо ні, то його легко налаштувати.


1
Це досить цікавий проект, про який я не знав, дякую. У той же час я не хочу нічого встановлювати на лог-сервер, що не потрібно, і досить просто робити те, що я вже роблю. Я просто шукаю пропозиції щодо вдосконалень. Дякую!
габе.

Це виглядає дуже здорово, і GPL теж.
Елі Фрей

7

Марко Чеппі має рацію щодо awkтого, щоб бути кращим інструментом для цього, але awk - це також кращий інструмент, ніж sortі uniqоскільки ця логіка може бути перенесена на awk. Це не має великої різниці, якщо ви просто набираєте 1000 рядків, але якщо ви хочете подивитися на величезний файл журналу з декількома гігами, ви можете набирати його на порядок швидше awk.

cat /var/log/apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -nзробить те, що потрібно, але набагато швидше для великих файлів. Він створює масив IP-адрес в awk, використовуючи IP-адресу в якості ключа, і кількість разів, коли IP-адреси виникають як значення.

Швидкість приходить, тому що awk передає дані і робить більшу частину роботи, за винятком сортування кінцевого результату. Використовуючи інший метод, якщо у журналі передачі є 1 000 000 рядків, awk зчитує ці 1 000 000 рядків, що виплюнують 1 000 000 IP-адрес, а потім сортування переходить усі 1000 000 IP-адрес, відправляючи відсортовані вже 1 000 000 IP-адрес до uniq, що зменшує його до значно меншого кількість даних перед тим, як надати їх для сортування. Замість того, щоб обробляти / робити кілька проходів на 1 000 000 IP-адрес, awk робить майже все за один прохід.

Використовуючи на своєму ноутбуці 5,513,132 лінійний журнал apache (1,1 гіга), ось порівняння швидкості:

  • 2м 45с cat ./apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1
  • 0м 40-х cat ./apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n

Дуже круто. Я додаю це до своєї сумки хитрощів.
габе.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.