Захист веб-сервера Apache від атаки повільного читання, а також деяких інших спрямованих атак
Про схильність більшості веб-серверів у стандартній конфігурації атаці повільного читання написано вже досить багато, на відміну від практичних методів захисту. Розглянутий спосіб дозволяє убезпечити роботу веб-сервера Apache за допомогою розширень mod_evasive і mod_security, а головне - вимагає менше півгодини на реалізацію. Як приклад наведено налаштування на Ubuntu, однак користуючись загальними вказівками, можна зробити налаштування і в інших операційних системах.

Установка пакетів Оскільки сервер, що захищається, встановлений на Ubuntu, установка необхідних модулів для Apache виконується однією командою:
sudo apt-get install libapache2-mod-evasive libapache-mod-security libxml2-dev
Пакет mod_evasive забезпечить захист від DDOS атак, тоді як mod_security забезпечить захист від спрямованих атак, у тому числі й атаки повільного читання. Пакет libxml2-dev необхідний роботи розширеного функціоналу mod_security.
По своїй суті, mod_security - це opensource програмний фаєрвол, що захищає вебсервер, що розробляється Trustwave SpiderLabs.
Налаштування mod_evasive Для роботи модуля знадобиться папка для збереження логів із правами для запису Apache (передбачається, що веб-сервер запущений від користувача www-data):
sudo mkdir /var/log/mod_evasive sudo chown www-data:www-data /var/log/mod_evasive/
Створимо файл із налаштуваннями:
sudo nano /etc/apache2/conf.d/modevasive DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1
Налаштування mod_security Для роботи mod_security використовує набір правил. Завантажити нові правила можна зі сторінки на SourceForge. У завантаженому архіві Ви знайдете кілька папок. Нас цікавлятьбазові правила, що знаходяться у папці base_rules. Створимо папку для правил, скопіюємо їх із завантаженого з sf та розпакованого файлу.
sudo mkdir /etc/apache2/mod_security_rules sudo mv base_rules/* /etc/apache2/mod_security_rules sudo chown -R root:root /etc/apache2/mod_security_rules
Створимо файл конфігурації для mod_security з таким вмістом:
sudo nano /etc/apache2/conf.d/modsecurity Include mod_security_rules/*.conf SecWriteStateLimit 100
Даний конфіг підключить щойно скопійовані нами правила, а також встановить ліміт на кількість потоків на кожен окремий IP, які можуть перебувати в режимі SERVER_BUSY_WRITE, що запобігає можливості виконання атак типу Slow Loris/SlowHttp.
Для 32-бітної версії Ubuntu налаштування закінчується. У x64 потрібно зробити ще одне дійство — у файлі /etc/apache2/mods-enabled/mod-security.load потрібно замінити шлях, яким розташована бібліотека, що підключається з /usr/lib/ на /usr/lib/x86_64- linux-gnu/.
Переконайтеся, що модулі підключені:
sudo a2enmod mod-evasive sudo a2enmod mod-security
і перезапустимо Apache для застосування конфігів:
service apache2 restart
Тестування Для тестування використовуємо утиліту slowhttptest. Про її налаштування та встановлення можна прочитати на сторінках проекту, тому перейдемо одразу до застосування.
slowhttptest -c 65539 -B -g -o my_server_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u DOMAIN.COM -x 10 -p 3
Якщо вірити висновку програми, то вже на п'ятій секунді сервер стає недоступним:
Sat Jun 2 16:41:37 2012:slow HTTP test status на 5th second: ініціатива: 0 pending: 564 connected: 217 error: 0 closed: 0 service available: NO
А ось, що записав у логі Apache:
tail /var/log/apache2/error.log [Sat Jun 02 16:41:38 2012] [warn] ModSecurity: Access denied with code 400. Too many threads [101] of 100 allowed in WRITE state from xxx .xxx.xxx.xxx - Possible DoS Consumption Attack [Rejected]