DDoS-атаки (Distributed Denial of Service) становлять собою суттєву загрозу для інтернет-ресурсів, спрямовану на перевантаження цільових серверів великою кількістю запитів. Ефективний захист від DDoS повинен здійснюватися на різних рівнях — починаючи від мережевих параметрів сервера і закінчуючи веб-серверами (наприклад, Nginx). У цій статті будуть розглянуті заходи, які можна застосувати для захисту на рівні сервера та рівні Nginx.
- Вступ до DDoS-атак
- Захист від DDoS на рівні сервера
- Оптимізація мережевих параметрів ядра
- Налаштування параметрів ядра
- Конфігурація фаєрвола (iptables)
- Обмеження швидкості підключення
- Захист від SYN flood атак
- Блокування шкідливих IP-адрес
- Використання Fail2Ban
- Встановлення Fail2Ban
- Налаштування Fail2Ban для захисту веб-сервера
- Моніторинг стану сервера
- Захист від DDoS на рівні Nginx
- Обмеження кількості запитів
- Обмеження кількості підключень
- Використання кешування
- Захист від брутфорс-атак
- Захист від повільних атак (Slowloris)
- Висновок
- Комплексний підхід до захисту
- Захист на рівні веб-сервера (Nginx)
- Роль моніторингу
- Постійна адаптація та оновлення
- Комбінування внутрішніх та зовнішніх рішень
- Висновок
Вступ до DDoS-атак
DDoS-атака — це метод, при якому зловмисник намагається зробити сервер або мережевий ресурс недоступним шляхом засипання системи надмірною кількістю запитів. Залежно від рівня атаки, DDoS-атаки можна розділити на:
- Атаки на рівні мережевих пакетів (L3/L4) — атаки, що перевантажують мережевий стек або канал передачі даних.
- Атаки на рівні додатків (L7) — атаки, які фокусуються на перевантаженні конкретних додатків (наприклад, веб-серверів), використовуючи легітимні, але надмірні запити.
Ці атаки можуть спричинити перевантаження сервера, виснаження ресурсів і відмову в обслуговуванні для легітимних користувачів. Для захисту від них потрібен комплексний підхід, що охоплює різні рівні системи.
Захист від DDoS на рівні сервера
На рівні сервера заходи захисту зосереджені на оптимізації налаштувань ядра та мережевих параметрів, налаштуванні фаєрвола та використанні систем запобігання атакам.
Оптимізація мережевих параметрів ядра
Ядро Linux надає безліч параметрів, які можна налаштувати для покращення захисту сервера від мережевих атак, включаючи DDoS. Ці параметри можна змінити у файлі /etc/sysctl.conf
. Розглянемо кілька ключових параметрів.
Налаштування параметрів ядра
net.ipv4.tcp_syncookies=1
Цей параметр вмикає механізм SYN cookies, який допомагає захиститися від атак типу SYN flood. SYN flood — це атака, при якій зловмисник надсилає велику кількість SYN-запитів на встановлення з’єднання, перевантажуючи сервер.sudo sysctl -w net.ipv4.tcp_syncookies=1
net.ipv4.conf.all.rp_filter=1
Увімкнення фільтрації зворотного маршруту допомагає захиститися від атак з підміною IP-адрес. Цей механізм перевіряє, чи відповідає маршрут повернення джерелу пакета.sudo sysctl -w net.ipv4.conf.all.rp_filter=1
net.ipv4.tcp_max_syn_backlog
Цей параметр задає максимальну кількість очікуваних з’єднань (SYN-запитів) у черзі. Збільшення значення цього параметра допомагає обробити більше підключень у умовах високого навантаження.sudo sysctl -w net.ipv4.tcp_max_syn_backlog=2048
net.ipv4.tcp_fin_timeout=15
Зменшення часу очікування FIN-пакетів (завершення з’єднань) дозволяє швидше звільняти ресурси системи.sudo sysctl -w net.ipv4.tcp_fin_timeout=15
net.core.somaxconn=1024
Цей параметр визначає максимальну кількість очікуваних підключень для сокетів. Збільшення його значення допоможе впоратися з різким збільшенням кількості підключень.sudo sysctl -w net.core.somaxconn=1024
Після внесення змін необхідно застосувати налаштування:
sudo sysctl -p
Конфігурація фаєрвола (iptables)
Iptables — це вбудований у Linux фаєрвол, який можна використовувати для фільтрації та управління мережевим трафіком на рівні ядра. Налаштування правил iptables може значно допомогти в боротьбі з DDoS-атаками.
Обмеження швидкості підключення
Одним із методів захисту є обмеження кількості запитів від однієї IP-адреси за певний проміжок часу:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 -j DROP
Це правило блокує IP-адресу, якщо вона намагається підключитися більше 20 разів за 60 секунд.
Захист від SYN flood атак
SYN flood атака може бути пом’якшена за рахунок обмеження кількості нових підключень в секунду:
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
Блокування шкідливих IP-адрес
При виявленні підозрілих IP-адрес їх можна заблокувати вручну:
iptables -A INPUT -s 192.168.0.100 -j DROP
Використання Fail2Ban
Fail2Ban — це інструмент, який автоматично блокує IP-адреси, що викликають підозри, базуючись на аналізі логів.
Встановлення Fail2Ban
Встановити Fail2Ban можна наступною командою:
sudo apt-get install fail2ban
Налаштування Fail2Ban для захисту веб-сервера
Налаштуйте Fail2Ban для захисту від атак, спрямованих на веб-сервер. Наприклад, для блокування агресивних IP-адрес, які намагаються перевантажити веб-сервер, створіть файл /etc/fail2ban/jail.local
з такими параметрами:
[nginx-http-auth] enabled = true port = http,https filter = nginx-http-auth logpath = /var/log/nginx/error.log maxretry = 5 bantime = 3600
Fail2Ban аналізуватиме логи Nginx і блокуватиме IP-адреси, які здійснюють занадто багато спроб підключення.
Моніторинг стану сервера
Моніторинг активності сервера є важливим елементом захисту від DDoS-атак. Деякі корисні інструменти для моніторингу:
- Netdata — інструмент моніторингу в режимі реального часу, який надає метрики роботи системи, включаючи мережеву активність і завантаження процесора.
- Ntopng — утиліта для аналізу мережевого трафіку, яка допомагає виявити аномальний трафік.
Захист від DDoS на рівні Nginx
Nginx є одним із найпопулярніших веб-серверів, який часто використовується в якості зворотного проксі та балансувальника навантаження. Він надає широкий спектр інструментів для захисту від DDoS атак на рівні додатків (L7).
Обмеження кількості запитів
Nginx підтримує обмеження швидкості запитів за допомогою модуля ngx_http_limit_req_module
.
Приклад налаштування:
http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location / { limit_req zone=one burst=5 nodelay; proxy_pass http://backend; } } }
Це правило обмежує кількість запитів від однієї IP до 1 запиту в секунду з можливістю короткочасного перевищення (burst до 5 запитів).
Обмеження кількості підключень
Для обмеження кількості одночасних підключень використовується модуль ngx_http_limit_conn_module
.
Приклад:
http { limit_conn_zone $binary_remote_addr zone=addr:10m; server { location / { limit_conn addr 10; proxy_pass http://backend; } } }
У цьому прикладі від однієї IP-адреси дозволено не більше 10 одночасних підключень.
Використання кешування
Кешування в Nginx допомагає знизити навантаження на сервер, повертаючи закешовані відповіді на часті запити.
Приклад налаштування:
http { proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server { location / { proxy_cache my_cache; proxy_pass http://backend; } } }
Захист від брутфорс-атак
Для захисту сторінок з логінами можна обмежити кількість спроб підключення до таких URL.
Приклад:
http { limit_req_zone $binary_remote_addr zone=login:10m rate=1r/m; server { location /login { limit_req zone=login burst=1 nodelay; proxy_pass http://backend; } } }
Захист від повільних атак (Slowloris)
Атака Slowloris спрямована на утримання великої кількості відкритих з’єднань без передачі значних даних. Для захисту від таких атак можна налаштувати таймаути для клієнтських підключень:
http { server { client_body_timeout 10s; client_header_timeout 10s; keepalive_timeout 5s 5s; send_timeout 10s; } }
Ці налаштування допоможуть швидше завершувати з’єднання з клієнтами, які навмисно сповільнюють передачу даних.
Висновок
Захист від DDoS-атак — це критично важливе завдання для будь-якого адміністратора, оскільки такі атаки можуть призвести до серйозних втрат, включаючи недоступність сервісів, зниження продуктивності та потенційні фінансові збитки. Для ефективного захисту необхідно підходити до проблеми комплексно, враховуючи як мережевий, так і прикладний рівні. На завершення підведемо підсумки ключових аспектів захисту.
Комплексний підхід до захисту
Для успішного захисту від DDoS-атак важливо не покладатися на один єдиний захід, а поєднувати декілька методів, кожен з яких відповідає за свою частину трафіку та рівень взаємодії:
- Налаштування мережевих параметрів ядра допомагає на найнижчому рівні оптимізувати роботу мережевого стеку сервера. Це включає захист від SYN flood-атак, фільтрацію пакетів з підміною IP-адрес та налаштування параметрів таймаутів. Ці кроки дозволяють серверу ефективніше обробляти вхідні з’єднання і зменшувати ймовірність перевантаження у випадку масових атак.
- Використання фаєрвола (iptables) дозволяє фільтрувати трафік на рівні ядра, блокуючи підозрілі підключення, обмежуючи кількість запитів і запобігаючи атакам із збільшеною кількістю з’єднань з однієї IP-адреси. У поєднанні з такими інструментами, як ipset, можна керувати великою кількістю правил та динамічно оновлювати списки заблокованих IP-адрес.
- Fail2Ban автоматизує процес блокування зловмисників, аналізуючи логи і блокуючи IP-адреси, що здійснюють підозрілу активність. Це особливо корисно при боротьбі з атаками на рівні додатків, такими як брутфорс-атаки на форми логіна.
Захист на рівні веб-сервера (Nginx)
Nginx надає потужні інструменти для захисту на рівні додатків (L7):
- Обмеження кількості запитів — дозволяє контролювати число запитів з однієї IP-адреси, що значно знижує навантаження на сервер і захищає його від перевантаження з боку атак типу HTTP flood.
- Обмеження кількості підключень допомагає контролювати і запобігати надмірній кількості одночасних з’єднань від одного клієнта, попереджаючи так звані повільні атаки, такі як Slowloris, які утримують велику кількість відкритих з’єднань протягом тривалого часу.
- Кешування — це не тільки спосіб прискорити час відгуку сервера, а й важливий інструмент у боротьбі з атаками. Повертаючи закешовані відповіді, Nginx знижує навантаження на бекенд, особливо в умовах пікового трафіку.
- Захист від брутфорс-атак за допомогою модуля обмеження запитів або Fail2Ban мінімізує ризик зловмисників, які намагаються підібрати паролі чи інші критичні дані через численні спроби входу.
- Захист від повільних атак (Slowloris) — грамотне налаштування таймаутів з’єднань і передачі даних допомагає скоротити час, протягом якого атакуючий може утримувати відкритим з’єднання без реальної передачі даних.
Роль моніторингу
Важливим аспектом захисту є моніторинг стану сервера та мережі в режимі реального часу. Системи моніторингу, такі як Netdata або Ntopng, надають адміністратору важливі метрики та попередження про аномальну поведінку трафіку, що дозволяє оперативно реагувати на потенційні загрози до того, як вони перетворяться на повномасштабну атаку.
Постійна адаптація та оновлення
Необхідно розуміти, що методи захисту від DDoS-атак не є статичними. Зловмисники постійно вдосконалюють свої інструменти та тактики, тому захист повинен розвиватися разом з новими загрозами. Регулярні оновлення операційної системи, фаєрволів, додатків (включаючи Nginx) та застосування найкращих практик — це важливий аспект успішного захисту.
Крім того, важливо тестувати стійкість сервера до атак. Інструменти для симуляції DDoS-атак допоможуть виявити слабкі місця в налаштуваннях і оперативно їх усунути.
Комбінування внутрішніх та зовнішніх рішень
Іноді для ефективного захисту може бути потрібне не лише налаштування власного обладнання та програмного забезпечення, а й використання сторонніх рішень. Такі рішення, як CDN-сервіси (Content Delivery Network) та DDoS-захист від провайдерів (наприклад, CloudFlare), можуть стати важливим елементом комплексного захисту. CDN розподіляє навантаження між кількома серверами по всьому світу, зменшуючи вплив атак на один конкретний сервер. Спеціалізовані сервіси DDoS-захисту забезпечують фільтрацію трафіку і допомагають знизити вплив атак до того, як вони досягнуть вашого сервера.
Висновок
DDoS-атаки становлять серйозну загрозу для веб-ресурсів та сервісів, і ефективний захист від них вимагає комплексного підходу. Налаштування ядра та фаєрволів, використання таких інструментів, як Fail2Ban, а також грамотна конфігурація веб-сервера Nginx здатні значно зменшити вплив атак та підвищити стійкість сервера до перевантажень. Регулярний моніторинг, оновлення системи та тестування стійкості сервера допоможуть залишатися на крок попереду зловмисників. Комбінуючи внутрішні заходи захисту із зовнішніми сервісами, можна досягти максимальної ефективності та надійності системи в умовах DDoS-атак.