В ISPmanager можно настроить защиту сайта от DDOS-атак. Она нужна для ограничения доступа IP-адресов, с которых поступает большое количество запросов.
Включение защиты доступно, только если установлен веб-сервер Nginx или OpenLiteSpeed. Nginx полностью блокирует доступ к серверу с IP-адреса, а OpenLiteSpeed ограничивает для IP-адреса пропускную способность. Подробнее об установке см. в статье Установка веб-сервера.
Чтобы использовать защиту, при создании или изменении WWW-домена включите опцию Включить защиту от DDOS-атаки и в блоке настроек Защита от DDoS-атаки укажите параметры защиты:
Подробнее см. в статье Создание WWW-домена.
Для работы защиты используется модуль ngx_http_limit_req_module, который позволяет ограничить скорость обработки запросов по заданному ключу или запросов, поступающих с одного IP-адреса.
Модуль для каждого домена с включённой защитой создаёт зону разделяемой памяти (zone) и указывает максимальный размер всплеска запросов (burst). Если количество поступающих запросов превышает ограничение для зоны, то их обработка задерживается. Избыточные запросы задерживаются, пока их количество не превысит максимальный размер всплеска. При его превышении запрос завершается с ошибкой 503 (Service Temporarily Unavailable).
Настройки записываются в <путь к директории Nginx>/conf.d/isplimitreq.conf:
Конфигурационный файл nginx
limit_req_zone $binary_remote_addr zone=<имя WWW-домена>:<размер зоны> rate=<количество запросов в секунду>r/s
А также в <путь к директории Nginx>/vhosts-resources/<имя домена>:
Конфигурационный файл nginx
limit_req zone=<имя WWW-домена> burst=<максимальный размер всплеска>;
error_page 503 =429 @blacklist;
Секция location @blacklist создаётся в <путь к директории Nginx>/vhosts-includes/blacklist-nginx.conf с содержимым вида:
Конфигурационный файл nginx
location @blacklist {
proxy_redirect off ;
proxy_pass https://<IP-адрес>:<порт>;
rewrite (.*) /mancgi/ddos break;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X_ISP_FIREWALLSEC <ключ для ISPmanager>;
Подробнее о модуле ngx_http_limit_req_module см. на официальном сайте.
При превышении максимального количества запросов:
iptables
DROP all -- anywhere anywhere match-set ispmgr_limit_req src
В ip6tables создаётся правило: ip6tables
DROP all -- anywhere anywhere match-set ispmgr_limit_req6 src
В ipset создаются два набора (ispmgr_limit_req и ispmgr_limit_req6) с параметрами: hash:ip (IP-адрес) и timeout 300 (время блокировки в секундах).Журнал блокировок
WARNING Address (<IP-адрес>) is blacklisted
ipset -L ispmgr_limit_req
В выводе команды в поле "Members" указываются все адреса из списка блокировки и время до её окончания.Чтобы изменить период, на который блокируются IP-адреса:
Конфигурационный файл ISPmanager
isp_limitreq_timeout <период блокировки в секундах>
iptables -L INPUT --line-number
iptables -D INPUT <номер правила>
ip6tables -L INPUT --line-number
ip6tables -D INPUT <номер правила>
ipset destroy ispmgr_limit_req
ipset destroy ispmgr_limit_req6
/usr/local/mgr5/sbin/mgrctl -m ispmgr firewall