• Форум посвящен самостоятельной (бесплатной) защите от ддос атак.
    Есть мануалы по настройке сервера от Ddos для сисадминов и готовые инструменты от ддос-атак для вебмастеров.

    Простое, эффективное, точное и проверенное бесплатное решение от мощных ддос-атак: PHP скрипт + Cloudflare, с панелью управления.

Защита от ддос на NGINX

admin

admin

Администратор
Администрация
#1
Если вас регулярно ддосят, а ресурсы вашего сервера не велики - забудьте про Apache. Или используйте Nginx как проксирующий сервер к Апачу.
Для Nginx существует большое количество модулей, в том числе встроенных в сборку, позволяющих настроить эффективную защиту от ддос и хакерских атак. О некоторые мы уже писали: Nginx и Lua, Nginx и GeoIP. В этой теме попробуем обобщить все известные способы защиты от ддос с помощью Nginx.

Ограничение нагрузки на сайт с помощью настроек limit_conn и limit_req.

В стандартной сборке nginx есть модуль ngx_http_limit_conn_module (limit_conn) для ограничения числа одновременных соединений и ngx_http_limit_req_module (limit_req) для ограничения числа запросов за единицу времени. Можно настроить разные лимиты на разные разделы сайта, например, на скрипты (PHP) и директории с файлами установить более жесткие правила, чем на статику.

limit_conn
В секции http задается зона разделяемой памяти limit_conn_zone:
Код:
limit_conn_zone $binary_remote_addr zone=addr:10m;.
Далее уже в server или location описывается число допустимых одновременных соединений c одного ip-адреса:
помощью limit_conn:
Код:
location /download/ { # папка с файлами
limit_conn addr 1; # разрешаем не более одного соедниения с одного IP-адреса
}
Можно задавать несколько настроек limit_conn в одном конфиге.
Код:
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;

server {
    ...
    limit_conn perip 10; // задаем ограничение для IP
    limit_conn perserver 100; // задаем ограничения для всего виртуалхоста
}
limit_req
Задаем в секции http зону разделяемой памяти и максимальное количество запросов в секунду.
Код:
 limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s; #ограничение 2 запроса в секунду
Задаем ограничение для определенных разделов и скриптов на сайте:
Код:
server {

...
# ограничение для раздела поиска
location /search/ {
limit_req zone=one burst=5; # burst указывает на максимальное превышение лимита, так если в 1 секунду пришло с адреса 5 запросов, то в следующую секунду  запрос не обработается, если всплесков не предусмотрено то устанавливается параметр nodelay вместо burst=5
}
 
Последнее редактирование:
admin

admin

Администратор
Администрация
#2
Еще примеры.

Ограничение частоты запросов до 30 в минуту к странице login.html.
Код:
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; 
server {    
      ...     
      location /login.html
       {        
           limit_req zone=one;     
           ...    
       } 
 }
Важно учесть, что запросы - это не только открытие самой страници, но и подгрузка всех картинок и скриптов на этой странице. Сам Google в целях поисковой оптимизации советует подгружать скрипты и картинки с отдельного зеркала, а также объединить все файлы css-стилей и js-скриптов в один общий файл, чтобы было два файла style.css и common.js. В качестве отдельного зеркала можно завести поддомен load.mydomain.com и подгружать все картинки сайта через него, только для зеркала load.mydomain.com должны быть отдельные настройки server, с отдельными правилами limit_req_zone и limit_conn для загрузки файлов. Также будет полезно включить кеширование для файлов и изображений.
 
Сверху