Анализатор сценариев BASH для суммирования журналов доступа NGINX и Apache

Одна из первых вещей, которые я обычно делаю, если замечаю высокую загрузку ЦП на некоторых из моих серверов Linux, — это проверка списка процессов с помощью top или htop, и в случае, если я замечаю много процессов Apache или Nginx, я быстро проверит мои журналы доступа, чтобы определить, что вызвало или вызывает скачок ЦП на моем сервере, или выяснить, не происходит ли что-нибудь вредоносное.

Иногда чтение журналов может быть довольно пугающим, поскольку журнал может быть огромным, и его обработка вручную может занять много времени. Кроме того, необработанный формат журнала может сбить с толку людей с меньшим опытом.

Как и предыдущая глава, эта глава будет непростой! Вам нужно написать короткий bash-скрипт, который будет суммировать весь журнал доступа без необходимости установки какого-либо дополнительного программного обеспечения.

Требования к сценарию

Этот сценарий BASH должен проанализировать и обобщить ваши журналы доступа и предоставить вам очень полезную информацию, например:

  • 20 лучших страниц с наибольшим количеством POST-запросов

  • 20 лучших страниц с наибольшим количеством GET-запросов

  • Топ-20 IP-адресов и их географическое расположение

Пример скрипта

Я уже подготовил демонстрационный скрипт, который вы можете использовать в качестве образца. Но я советую вам сначала попробовать написать сценарий самостоятельно, а только потом взглянуть на мой сценарий!

Чтобы загрузить скрипт, вы можете клонировать репозиторий с помощью следующей команды:

git clone https://github.com/bobbyiliev/quick_access_logs_summary.git

Или запустите следующую команду, которая загрузит скрипт в ваш текущий каталог:

wget https://raw.githubusercontent.com/bobbyiliev/quick_access_logs_summary/master/spike_check

Скрипт не вносит никаких изменений в вашу систему, он только считывает содержимое вашего журнала доступа и обобщает его для вас, однако после загрузки файла обязательно просмотрите содержимое самостоятельно.

Запуск сценария

Все, что вам нужно сделать после загрузки сценария, — это сделать его исполняемым и запустить.

Для этого выполните следующую команду, чтобы сделать скрипт исполняемым:

chmod +x spike_check

Затем запустите скрипт:

./spike_check /path/to/your/access_log

Обязательно измените путь к файлу на фактический путь к вашему журналу доступа. Например, если вы используете Apache на сервере Ubuntu, точная команда будет выглядеть так:

./spike_check /var/log/apache2/access.log

Если вы используете Nginx, точная команда будет почти такой же, но с указанием пути к журналу доступа Nginx:

./spike_check /var/log/nginx/access.log

Понимание вывода

После запуска сценария это может занять некоторое время в зависимости от размера журнала.

Результат, который вы увидите, должен выглядеть так:

По сути, в этом случае мы можем сказать, что мы получили 16 POST-запросов к нашему файлу xmlrpc.php, который часто используется злоумышленниками для попыток взлома веб-сайтов WordPress с использованием различных комбинаций имени пользователя и пароля.

В данном конкретном случае это не была масштабная атака методом грубой силы, но она дает нам раннюю индикацию, и мы можем принять меры для предотвращения более крупной атаки в будущем.

Мы также видим, что к нашему сайту обращались несколько российских IP-адресов, поэтому, если вы не ожидаете трафика из России, вы также можете заблокировать эти IP-адреса.

Заключение

Это пример простого сценария BASH, который позволяет быстро суммировать журналы доступа и определять, не происходит ли что-нибудь вредоносное.

Конечно, вы также можете просмотреть журналы вручную, но попытаться автоматизировать это с помощью Bash — хорошая задача!

Last updated