DDoS (Distributed Denial of Service) - це атака, коли ваш сервер або сайт починають завалювати величезною кількістю запитів з безлічі пристроїв одночасно. Уявіть, це ніби у вашу маленьку кав'ярню на 10 столиків одночасно намагаються зайти тисячі відвідувачів - у вас просто не вистачить ресурсів аби всіх обслужити. При цьому ваші "постійні" клієнти навіть не зможуть підійти до дверей!
До речі, коротко про те, чим Dos відрізняється від DDoS:
DoS (Denial of Service, «Відмова в обслуговуванні») - це атака, під час якої один зловмисник або одна програма намагається перевантажити якийсь сервер, сайт або онлайн-сервіс, щоб зробити його недоступним для звичайних користувачів.DDoS (Distributed Denial of Service, «Розподілена відмова в обслуговуванні») — це більш масштабна версія DoS. У цьому випадку атака йде не від одного джерела, а одночасно від безлічі пристроїв, що часто заражені шкідливим ПЗ і управляються зловмисником.
При DDoS-атаках зловмисники зазвичай контролюють низку заражених комп'ютерів або пристроїв (так званих ботнетів) і використовують їх для відправки великої кількості неправдивих запитів на цільовий сервер або в мережу. Внаслідок цього ресурси (такі як пропускна спроможність, процесор, пам'ять) вичерпуються, і сервер не може відповісти на звичайні запити користувачів.
В результаті такої атаки ресурс стає недоступним для користувачів, падає або значно знижує свою нормальну продуктивність.
Чи можна уникнути її або захиститися від такого виду атаки? Відповідь - так, можна.
І хоча забезпечити справжній повноцінний захист від DDoS може виявитися не простим або витратним завданням, ми розповімо вам про найпростіші способи захисту, які цілком можна організувати своїми силами. У багатьох випадках його може виявитися достатньо, щоб відбитися від простих атак недоброзичливців із мережі.
Використання Nginx для запобігання DDOS-атакам
Веб-сервер NGINX має низку інструментів по боротьбі з DDoS, і його можливості захисту можуть бути розширені за допомогою конфігурації та сторонніх модулів. Хоча NGINX сам по собі не є спеціалізованим брандмауером або інструментом безпеки, у поєднанні з певними конфігураціями він може ефективно пом'якшувати та протистояти поширеним DDoS-атакам.
Встановлення лімітів на запити та підключення
NGINX надає кілька вбудованих модулів, що можуть обмежувати кількість клієнтських з'єднань та частоту запитів, тим самим зменшуючи кількість запитів, що ініціюються певною IP-адресою або користувачем за короткий проміжок часу, послаблюючи тиск DDoS-атак.
Обмеження швидкості підключень
Модуль `limit_conn` дає змогу обмежити кількість з'єднань, що встановлюються кожним IP в один і той самий час. Це дуже ефективно для запобігання атакам із великою кількістю недійсних з'єднань (наприклад, SYN Flood).
У наведеній вище конфігурації `limit_conn_zone` визначає зону загальної пам'яті для зберігання кількості з'єднань IP-адреси, а `limit_conn` обмежує кожну IP-адресу максимум 10 з'єднаннями одночасно.
Обмеження швидкості запитів
У цій конфігурації `limit_req_zone` визначає зону обмеження швидкості запитів і встановлює максимум 5 запитів на секунду для кожної IP-адреси. Якщо кількість запитів перевищить це значення, NGINX відкидатиме або затримуватиме занадто велику кількість запитів.
Чорний та білий списки
NGINX дає змогу контролювати доступ на основі IP-адрес. За допомогою модуля `ngx_http_access_module` можна легко заблокувати (чорний список) або дозволити доступ (білий список) до певних IP-адрес. Це дуже ефективно для боротьби з невеликими DDoS-атаками або шкідливими запитами з певних IP-адрес.
Конфігурація чорного списку
Налаштування білих списків
Якщо ви дозволяєте доступ до служби тільки певним IP-адресам, ви можете використовувати директиву `allow` та поєднувати її з `deny all` для реалізації механізму білих списків:
Налаштування таймауту запиту
Розумне налаштування таймаута запиту може запобігти тривалому зайняттю ресурсів сервера зловмисниками та зменшити кількість DDoS-атак, таких як slowloris. Налаштувавши параметри таймаута з'єднання і запиту в NGINX, можна швидко вимикати недійсні з'єднання.
Налаштування параметрів тайм-ауту
- `keepalive_timeout`: Обмежує максимальний час простою з'єднання, щоб запобігти використанню ресурсів з'єднання з сервером.
- `client_max_body_size`: Обмежує розмір тіла запиту, аби запобігти виснаженню ресурсів сервера надто великими запитами.
- `client_body_timeout` та `client_header_timeout`: Обмежують час читання вмісту та заголовка запиту для запобігання повільним атакам.
Оптимізація кешу й статичних ресурсів
Налаштувавши кешування й оптимізувавши доставку статичних ресурсів, ви можете зменшити кількість запитів, які NGINX безпосередньо обробляє на бекенді, тим самим знизивши вплив DDoS-атак. Кешування - це ефективний спосіб знизити піки трафіку та зменшити навантаження на внутрішні сервери.
При налаштуванні кешу NGINX буде кешувати відповіді від бекенда, знижуючи навантаження на бекенд-сервер від повторюваних запитів. Це дає змогу безпосередньо відповідати на велику кількість статичних запитів до ресурсів від NGINX під час DDoS-атак, у такий спосіб знижуючи навантаження на сервер.
Використання черги HTTP-запитів
За допомогою модуля `ngx_http_limit_req_module` ви можете помістити вхідні запити в чергу. Якщо запит перевищує ємність черги, повертається помилка, щоб запобігти перевантаженню сервера великою кількістю запитів.
Дана конфігурація дозволяє виконувати не більше 1 запиту на секунду. Якщо запит перевищує цю швидкість, його буде поміщено в чергу `burst`, і нові запити буде відхилено, коли чергу буде заповнено.
Використовуйте модулі безпеки сторонніх виробників
NGINX підтримує використання сторонніх модулів для розширення можливостей захисту. Ось деякі часто використовувані модулі та інструменти захисту від DDoS:
- ModSecurity: Це брандмауер веб-додатків (WAF) з відкритим вихідним кодом, який може виявляти й блокувати поширені моделі атак, зокрема SQL-ін'єкції, XSS тощо, а також володіє певним ефектом захисту від DDoS-атак.
- NAXSI: Модуль брандмауера, розроблений спеціально для NGINX для захисту веб-додатків від різних атак. Він вирізняється легкістю та високою продуктивністю.
Комбінування брандмауерів із зовнішніми інструментами
Не дивлячись на те, що NGINX може пом'якшити деякі DDoS-атаки, для більш ефективного захисту зазвичай потрібне поєднання інших інструментів і механізмів безпеки:
- iptables: За допомогою конфігурації Linux `iptables` деякі атаки можуть бути заблоковані безпосередньо на мережевому рівні.
- Cloudflare або інша CDN: Використання мережі доставки контенту (CDN), наприклад Cloudflare, може забезпечити додатковий захист від DDoS. Брандмауер веб-додатків та послуги з очищення трафіку, що надаються Cloudflare, можуть ефективно протистояти великомасштабним DDoS-атакам.
- Fail2ban: Об'єднайте журнали NGINX для автоматичного блокування шкідливих IP-адрес за допомогою `fail2ban`.
Динамічне балансування навантаження та еластичне масштабування
Поєднання NGINX із такими платформами, як Kubernetes, дає змогу реагувати на масштабні DDoS-атаки завдяки еластичному масштабуванню. Наприклад, за допомогою функції еластичного масштабування Kubernetes під час піку трафіку автоматично збільшується кількість примірників NGINX, щоб розділити трафік, а під час зниження трафіку ресурси автоматично скорочуються.
Резюме
У статті ми коротко пояснили, що таке DDoS, як захиститися від атак за допомогою нехитрих налаштувань NGINX.
Нагадаємо, що надійний хостинг-провайдер надає шаред хостинг із ддос захистом. Але коли ви використовуєте послугу віртуального сервера, рекомендуємо самостійно виконувати тонке налаштування сервера, аби можливість кібератаки на сайт була мінімізована.
Методи запобігання DDoS-атакам у NGINX включають обмеження швидкості, чорні та білі списки IP-адрес, налаштування таймауту запиту, оптимізацію кешу, використання черг запитів, сторонніх модулів безпеки, а також поєднання брандмауерів та CDN.
Завдяки розумному налаштуванню та використанню зовнішніх інструментів NGINX може ефективно протистояти DDoS-атакам різних розмірів і типів.