Анализатор сценариев BASH для суммирования журналов доступа NGINX и Apache
Одна из первых вещей, которые я обычно делаю, если замечаю высокую загрузку ЦП на некоторых из моих серверов Linux, — это проверка списка процессов с помощью top или htop, и в случае, если я замечаю много процессов Apache или Nginx, я быстро проверит мои журналы доступа, чтобы определить, что вызвало или вызывает скачок ЦП на моем сервере, или выяснить, не происходит ли что-нибудь вредоносное.
Иногда чтение журналов может быть довольно пугающим, поскольку журнал может быть огромным, и его обработка вручную может занять много времени. Кроме того, необработанный формат журнала может сбить с толку людей с меньшим опытом.
Как и предыдущая глава, эта глава будет непростой! Вам нужно написать короткий bash-скрипт, который будет суммировать весь журнал доступа без необходимости установки какого-либо дополнительного программного обеспечения.
Требования к сценарию
Этот сценарий BASH должен проанализировать и обобщить ваши журналы доступа и предоставить вам очень полезную информацию, например:
20 лучших страниц с наибольшим количеством POST-запросов
20 лучших страниц с наибольшим количеством GET-запросов
Топ-20 IP-адресов и их географическое расположение
Пример скрипта
Я уже подготовил демонстрационный скрипт, который вы можете использовать в качестве образца. Но я советую вам сначала попробовать написать сценарий самостоятельно, а только потом взглянуть на мой сценарий!
Чтобы загрузить скрипт, вы можете клонировать репозиторий с помощью следующей команды:
Или запустите следующую команду, которая загрузит скрипт в ваш текущий каталог:
Скрипт не вносит никаких изменений в вашу систему, он только считывает содержимое вашего журнала доступа и обобщает его для вас, однако после загрузки файла обязательно просмотрите содержимое самостоятельно.
Запуск сценария
Все, что вам нужно сделать после загрузки сценария, — это сделать его исполняемым и запустить.
Для этого выполните следующую команду, чтобы сделать скрипт исполняемым:
Затем запустите скрипт:
Обязательно измените путь к файлу на фактический путь к вашему журналу доступа. Например, если вы используете Apache на сервере Ubuntu, точная команда будет выглядеть так:
Если вы используете Nginx, точная команда будет почти такой же, но с указанием пути к журналу доступа Nginx:
Понимание вывода
После запуска сценария это может занять некоторое время в зависимости от размера журнала.
Результат, который вы увидите, должен выглядеть так:
По сути, в этом случае мы можем сказать, что мы получили 16 POST-запросов к нашему файлу xmlrpc.php, который часто используется злоумышленниками для попыток взлома веб-сайтов WordPress с использованием различных комбинаций имени пользователя и пароля.
В данном конкретном случае это не была масштабная атака методом грубой силы, но она дает нам раннюю индикацию, и мы можем принять меры для предотвращения более крупной атаки в будущем.
Мы также видим, что к нашему сайту обращались несколько российских IP-адресов, поэтому, если вы не ожидаете трафика из России, вы также можете заблокировать эти IP-адреса.
Заключение
Это пример простого сценария BASH, который позволяет быстро суммировать журналы доступа и определять, не происходит ли что-нибудь вредоносное.
Конечно, вы также можете просмотреть журналы вручную, но попытаться автоматизировать это с помощью Bash — хорошая задача!
Last updated