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

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

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

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

## Требования к сценарию <a href="#user-content-script-requirements" id="user-content-script-requirements"></a>

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

* 20 лучших страниц с наибольшим количеством POST-запросов
* 20 лучших страниц с наибольшим количеством GET-запросов
* Топ-20 IP-адресов и их географическое расположение

### Пример скрипта <a href="#user-content-example-script" id="user-content-example-script"></a>

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

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

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

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

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

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

### Запуск сценария <a href="#user-content-running-the-script" id="user-content-running-the-script"></a>

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

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

```bash
chmod +x spike_check
```

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

```bash
./spike_check /path/to/your/access_log
```

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

```bash
./spike_check /var/log/apache2/access.log
```

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

```bash
./spike_check /var/log/nginx/access.log
```

### Понимание вывода <a href="#user-content-understanding-the-output" id="user-content-understanding-the-output"></a>

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

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

[![Сводный журнал доступа](https://camo.githubusercontent.com/9850c129dac5c6f6060e23ba77a200205adac0ad16e659fecf609db27d2d0f70/68747470733a2f2f696d6775722e636f6d2f575748564d726a2e706e67)](https://camo.githubusercontent.com/9850c129dac5c6f6060e23ba77a200205adac0ad16e659fecf609db27d2d0f70/68747470733a2f2f696d6775722e636f6d2f575748564d726a2e706e67)

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

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

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

### Заключение <a href="#user-content-conclusion" id="user-content-conclusion"></a>

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

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