Захист від DoS та DDoS атак за допомогою mod_evasive на Apache у CentOS 7

Пропозиція від 8host.com

допомогою

  • Запит однієї й тієї ж сторінки кілька разів на секунду.
  • Створення понад 50 одночасних запитів на секунду на той самий дочірній процес.
  • Створення будь-яких запитів при тимчасовому внесенні до чорного списку.

Це керівництво допоможе встановити, налаштувати та розпочати роботу з mod_evasive.

Вимоги

  • 64-бітовий сервер CentOS 7 (або 6).
  • Не-root користувач з правами sudo (про початкове налаштування сервера та створення такого користувача можна прочитати тут).
  • Попередньо встановлений і запущений сервер Apache (інструкції з встановлення можна знайти у спеціальному розділі цього посібника).

1: Установка mod_evasive

Для початку необхідно встановити всі пакети, необхідні для коректної роботи mod_evasive.

Одним із них є репозиторій EPEL (Extra Packages for Enterprise Linux).

Примітка : EPEL створює, підтримує та керує високоякісними наборами додаткових відкритих пакетів для Enterprise Linux.

Щоб встановити та увімкнути EPEL, запустіть команду:

sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Щоб переконатися, що репозиторій EPEL увімкнений, введіть:

sudo yum repolist

Якщо репозиторій увімкнено, він з'явиться у наступному списку:

epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64

Тепер потрібно захистити базові пакети системи від оновлень репозиторію EPEL за допомогою protectbase:

sudo yum install yum-plugin-protectbase.noarch -y

Плагін protectbase захищає певні yum-репозиторії від оновлень з інших репозиторіїв. Пакети в захищених репозиторіях не будуть оновлюватися або перевизначатися пакетами незахищених репозиторіїв, незалежно від актуальності версій.

Тепер можна встановити mod_evasive.

sudo yum install mod_evasive -y

2: Перевірка установки

Після встановлення модуля потрібно переконатися, що вона пройшла успішно. Перевірте наявність конфігураційного файлу та завантаження модуля.

Під час встановлення в системі з'являється файл конфігурації модуля (/etc/httpd/conf.d/mod_evasive.conf). Щоб переконатися, що файл існує, введіть:

sudo ls -al /etc/httpd/conf.d/mod_evasive.conf

Команда має повернути:

-rw-r--r-- 1 root root 3473 Jul 21 01:41 /etc/httpd/conf.d/mod_evasive.conf

За промовчанням на початок конфігураційного файлу mod_evasive.con додається рядок LoadModule. Відкрийте файл і додайте цей рядок самостійно, якщо він не додався автоматично; це налаштування відповідає за підтримку веб-сервером Apache модуля mod_evasive.

LoadModule evasive20_module modules/mod_evasive24.so

LoadModule evasive20_module modules/mod_evasive20.so

Запросіть список модулів Apache та знайдіть у ньому mod_evasive:

sudo httpd -M grep evasive

Якщо модуль увімкнено, у списку буде рядок:

3: Налаштування mod_evasive

Тепер потрібно відкрити конфігураційний файл модуля mod_evasive та налаштувати деякі параметри.

Примітка : Цей посібник містить лише базові параметри налаштування модуля. Конфігураційний файл містить детальний опис кожного параметра; у разі потреби, будь ласка, зверніться до нього за подробицями.

sudo nano /etc/httpd/conf.d/mod_evasive.conf

mod_evasive HTTP Blacklisted 111.111.111.111

Примітка : для надсилання сповіщень модуль mod_evasive використовує /bin/mail. Для цього вам потрібно встановити та настроїти поштовий сервер.

DOSWhitelist 111.111.111.111 DOSWhitelist 222.222.222.222

Далі рекомендується налаштувати параметри DOSPageCount та DOSSiteCount. Встановіть більш щадні значення, інакше модуль безпідставно блокуватиме клієнтів.

Параметр DOSBlockingPeriod задає часовий інтервал (у секундах), протягом якого клієнт буде заблокований на цьому сайті. Надсилаючи запити протягом цього періоду, клієнт отримуватиме помилку 403, а інтервал відновлюватиметься (за замовчуванням – 10 секунд).

Щоб збільшити тривалість блокування, можна змінити значення цього параметра:

Параметр DOSLogDir посилається на тимчасовий каталог mod_evasive; За замовчуванням для блокування використовується каталог /tmp, який може спричинити деякі проблеми безпеки, якщо система відкрита для користувачів оболонки. Якщо у вашій мережі є непривілейовані користувачі оболонки, потрібно створити окремий каталог, доступний для запису тільки користувачеві, що керує Apache (зазвичай він називається apache), а потім встановити цей параметр у файлі mod_evasive.conf.

Наприклад, можна налаштувати mod_evasive використання нестандартного каталогу /var/log/mod_evasive. Створіть каталог:

sudo mkdir /var/log/mod_evasive

Надайте права на нього користувачу apache:

sudo chown -R apache:apache /var/log/mod_evasive

А потім відредагуйте конфігурацію mod_evasive та вкажіть новий каталог:

4: Завантаження модуля mod_evasive

Після змінипараметрів модуля перезапустіть веб-сервер Apache, щоб активувати оновлення.

sudo systemctl restart httpd.service

sudo service httpd restart

Примітка : Модуль mod_evasive конфліктує із серверними розширеннями FrontPage.

Також рекомендується перевірити налаштування Apache на сумісність із налаштуваннями mod_evasive.

У разі конфлікту рекомендується збільшити значення параметра MaxRequestsPerChild (але не unlimited, яке задається за допомогою 0) та увімкнути KeepAlive, вибравши розумне значення для KeepAliveTimeout.

5: Тестування mod_evasive

Виконайте невелике тестування роботи модуля. Для цього можна використати perl-скрипт test.pl, написаний розробниками mod_evasive. Щоб виконати скрипт, установіть пакет perl:

sudo yum install -y perl

Тестовий скрипт встановлюється разом з mod_evasive і зберігається в:

За замовчуванням скрипт test створює 100 запитів на одну сторінку Apache; така поведінка має запустити модуль. Якщо ви змінили параметри модуля, зробивши їх м'якшими, відредагуйте скрипт, щоб збільшити кількість запитів до 200. Відкрийте файл скрипту:

sudo nano /usr/share/doc/mod_evasive-1.10.1/test.pl

Замініть у ній 100 на 200:

Збережіть та закрийте файл.

Щоб виконати скрипт, введіть:

sudo perl /usr/share/doc/mod_evasive-1.10.1/test.pl Висновок: HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden .

Код помилки 403 означає, що доступ до сервера заблоковано. Модуль додасть шкідливого IP в системний лог. Перегляньте лог-файл:

sudo tailf /var/log/messages

Він повинен містити приблизно такий запис:

Jul 2900:11:18 servername mod_evasive[18290]: Blacklisting address 127.0.0.1: possible DoS attack.

Якщо ви налаштували сповіщення, перевірте електронну пошту. Модуль надішле вам повідомлення приблизно наступного змісту:

mod_evasive HTTP Blacklisted 127.0.0.1

Висновок

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