В нашем справочнике есть мануал, рассказывающий о том, как создать сайт в ISPmanager, используя основные настройки. В этой же статье мы попробуем разобраться в настройках, позволяющих защитить сайт от DDoS-атак. Панель управления ISPmanager в числе прочего позволяет настроить данную защиту для вашего сайта. Суть защиты состоит в ограничении доступа с тех IP-адресов, с которых приходит огромное количество запросов.
Защиту от DDoS-атак можно включить только в случае, когда на сайте установлен веб-сервер Nginx, либо OpenLiteSpeed. Веб-сервер Nginx может полностью заблокировать доступ к сайту с определённых IP-адресов. В свою очередь OpenLiteSpeed имеет возможность ограничивать пропускную способность для атакующих IP-адресов.
Для включения защиты активируйте опцию Включить защиту от DDoS-атаки
в разделе Оптимизация и защита от DDoS
. Если у вас в качестве веб-сервера установлен Nginx, то после включения защиты станут доступны для редактирования следующие параметры:
Количество запросов в секунду
– данное значение представляет собой максимальное количество запросов с одного IP-адреса, после превышения которого данный IP-адрес будет заблокирован на пять минут.Максимальный размер всплеска
– число запросов в секунду. После превышения данного значения новые запросы будут блокироваться.
В случае использования веб-сервера OpenLiteSpeed при активации опции Включить защиту от DDoS-атаки
вы также сможете внести изменения в параметры:
Количество запросов в секунду
– так же, как и в случае с Nginx, представляет собой максимальное количество запросов с одного IP-адреса, при превышении которого будет ограничена пропускная способность для атакующего IP-адреса.Пропускная способность
– значение пропускной способности в байт/сек, до которого она будет ограничена для атакующего IP-адреса. Реальное значение может оказаться выше и будет округляться с шагом 4КБ. Чтобы отключить ограничение скорости, в данном поле установите значение равное0
.
Особенности настройки Nginx
В Nginx защита сайта от DDoS-атак реализована при помощи модуля ngx_http_limit_req_module
. Модуль позволяет установить ограничение скорости обработки запросов, которые поступают с определённого IP-адреса.
Для каждого домена, использующего защиту, модуль должен создать зону разделяемой памяти. Также, модуль должен указать максимальное количество запросов в секунду, при превышении которого для данной зоны будет включена задержка обработки новых запросов. Такие запросы будут задерживаться, пока их количество не превысит максимальный размер всплеска. В случае превышения и этого значения запросы будут завершаться ошибкой с кодом 503 (Service Temporarily Unavailable). При этом размер зоны система рассчитывает по формуле:
64k * <количество запросов в секунду>
В нашем случае, например, количество запросов в секунду равно 100. Это значит, что размер зоны будет определён как 100*64
, то есть 6400КБ.
Данные настройки находятся в файле /etc/nginx/conf.d/isplimitreq.conf
. Содержимое файла выглядит примерно следующим образом:
limit_req_zone $binary_remote_addr zone=your-domain.host:6400k rate=25r/s;
Здесь, your-domain.host
– имя домена, для которого модуль создаёт зону, 6400k
– объём созданной зоны, который в нашем случае равен 6400КБ.
В директории /etc/nginx/vhosts-resources/your-domain.host/dynamic/
расположен ещё один конфигурационный файл – reqlimit.conf
. Его содержимое выглядит как:
error_page 503 =429 @blacklist;
limit_req zone=your-domain.host burst=100;
Здесь, в переменной zone
указан домен, для которого модуль создаёт зону, а в переменной burst
– максимальный размер всплеска. @blacklist
– секция, в которую происходит перенаправление при возникновении ошибки с кодом 503. Другими словами, перенаправление в данную секцию будет производиться при превышении максимального количества запросов с определённого IP-адреса. Описание секции @blacklist
находится в файле /etc/nginx/vhosts-includes/blacklist-nginx.conf
.
Блокировка IP-адресов
При превышении значения максимального числа запросов блокировка IP-адреса производится при помощи iptables, ip6tables и ipset. Данный IP-адрес вносится в список заблокированных на время продолжительностью пять минут. При этом соответствующая запись добавляется в журнал /usr/local/mgr5/var/ddos.log
:
WARNING Address (XXX.XXX.XXX.XXX) is blacklisted
Здесь, XXX.XXX.XXX.XXX
– блокируемый IP-адрес.
Для того, чтобы проверить содержимое списка заблокированных IP-адресов, используйте следующую команду:
$ sudo ipset -L ispmgr_limit_req
Данная команда выведет список заблокированных IP-адресов и время, оставшееся до конца их блокировки. Эти значения будут перечислены в поле Members
.
Если необходимо изменить период блокировки, откройте для редактирования конфигурационный файл ISPmanager:
$ sudo nano /usr/local/mgr5/etc/ispmgr.conf
Затем добавьте в него строку:
isp_limitreq_timeout XXX
Здесь, XXX
– устанавливаемое время блокировки IP-адреса в секундах.
Далее, в iptables определите номер правила ispmgr_limit_req
при помощи команды:
$ sudo iptables -L INPUT --line-number
Затем, удалите данное правило с помощью следующей инструкции:
$ sudo iptables -D INPUT XX
Здесь, XX – номер удаляемого правила.
В ip6tables также определите номер правила ispmgr_limit_req6
:
$ sudo ip6tables -L INPUT --line-number
После чего найденное правило удалите при помощи команды:
$ sudo ip6tables -D INPUT XX
Здесь, XX – также номер удаляемого правила.
Также и из ipset удалите правила ispmgr_limit_req
и ispmgr_limit_req6
:
$ sudo ipset destroy ispmgr_limit_req
$ sudo ipset destroy ispmgr_limit_req6
После чего обновите правила брандмауэра:
$ /usr/local/mgr5/sbin/mgrctl -m ispmgr firewall