Как эффективно анализировать логи при DDOS атаке

Author Автор: Роман Чернышов    Опубликовано: 7 ноября 2024

Доброго времени друзья! Сегодня я хочу поделиться заметкой о том, как можно быстро проанализировать логи веб-сервера Apache на предмет самых активных IP адресов с которых идут запросы(например в случае DDOS атаки) или самых активных сайтов на вашем сервере, к которым идут запросы.

Анализ логов

Нам понадобиться утилита logtop (которая умеет считать количество одинаковых строк и сортировать их), если в системе она не установлена, то быстренько устанавливаем её, выполнив следующее:

yum install git ncurses-devel uthash-devel
git clone https://github.com/JulienPalard/logtop.git
cd logtop
make
make install

Проанализируем лог доступа Apache, в моем случае он имеет путь /etc/httpd/vhost_logs/access.log (кастномный путь расположения, у вас он может быть /var/logs/httpd/access.log или /home/sites/www/logs/access.log). Для этого выполним команду:

tail -f /etc/httpd/vhost_logs/site.ru_access | awk {'print $1; fflush();'} | logtop

После запуска видим следующее(данные будут обновляться в реальном времени):

Чтобы вывести проанализировать подобный образом все Apache логи сайтов, можно выполнить команды tail с перечислением всех путей к лог файлам с данными access, вот так:

tail -f /etc/httpd/vhost_logs/SITE1.ru_access /etc/httpd/vhost_logs/SITE2.ru_access | awk {'print $1; fflush();'} | logtop

Где в данном случае колонки означают:

1 — порядковый номер
2 — количество запросов с данного IP
3 — количество запросов в секунду с данного IP
4 — собственно сам IP

Но вручную конечно прописывать пути к логам всех сайтов, что у вас есть на сервере неудобно, поэтому напишем небольшой скрипт на bash, который будет обрабатывать все файлы логов(содержащих в названии access) в директории, и передавать в команду tail.

#!/bin/bash
 
SEARCH_DIR=/etc/httpd/vhost_logs
DESTINATIONS=""
 
for entry in $(find . -type f  -mtime -1 -name "*_access"  -not -name "*default*")
do
  if [ -f "$SEARCH_DIR/$entry" ];then
    DESTINATIONS+=" $entry"
  fi
done
 
# Раскомментируйте одну из строк ниже, для получения информации активности в режиме реального времени
# Список активных IP
tail -f $DESTINATIONS | awk {'print $1; fflush();'} | logtop
 
# Список активных сайтов
#tail -f $DESTINATIONS | awk {'print $2; fflush();'} | logtop
 
# Список активных GET/POST запросов
#tail -f $DESTINATIONS | awk {'print $6; fflush();'} | logtop
 
# Список активных URL
#tail -f $DESTINATIONS | awk {'print $7; fflush();'} | logtop

Мы видим список IP встречающихся в логах по всем сайтам, список обновляется в режиме реального времени. По каждому IP мы видим количество — сколько раз он встречается, и вообще с какой скоростью растет его счетчик. Таким образом мы можем вычислить список самых активных IP адресов, с целью их дальнейшей блокировки файрволлом (например ТОП-10 самых активных).

Узнать географию и принадлежность IP адреса можно с помощью моей онлайн утилиты Информация о Домене и IP.

Оставить комментарий

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Купить за 359₽
Популярные записи
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка