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-атакам различных размеров и типов.