IP Blacklist
Обзор
Этот модуль предоставляет функциональность динамического черного списка. Эта функция может использоваться совместно с другими модулями для временной блокировки доступа с IP адреса, если с этого адреса совершаются определенные атаки.
Эта функция доступна с SEnginx версии 1.5.5.
До версии 1.8.1 черный список IP-адресов поддерживал блокировку IP-адресов на основе незаконной активности в течение 1 секунды. В SEnginx 1.8.2 добавлена новая директива ip_blacklist_ttl для гибкой политики блокировки, а с SEnginx Pro 1.10.0 директива ip_blacklist_ttl (Pro) может применяться в разных блоках конфигурации.
Директивы
ip_blacklist
Синтаксис | ip_blacklist on | off; |
По умолчанию | off |
Контекст | http |
Включить или выключить черный список IP адресов.
Пример:
ip_blacklist on;
ip_blacklist_size
Синтаксис | ip_blacklist_size size; |
По умолчанию | 1024 |
Контекст | http |
Размер черного списка IP адресов - сколько адресов может храниться в списке.
Пример:
ip_blacklist_size 10240;
ip_blacklist_timeout
Синтаксис | ip_blacklist_timeout timeout; |
По умолчанию | 60 |
Контекст | http |
Время нахождения (блокировки) IP адресов в черном списке, в секундах.
Пример:
ip_blacklist_timeout 120;
Смотрите также ip_blacklist_timeout (Pro).
ip_blacklist_log
Синтаксис | ip_blacklist_log on | off; |
По умолчанию | off |
Контекст | http/server/location |
Включить журнал для черного списка.
Пример:
ip_blacklist_log on;
ip_blacklist_show
Синтаксис | ip_blacklist_show; |
По умолчанию | |
Контекст | location |
Показать черный список IP адресов.
С версии 1.8.3 поддерживается параметр "debug".
Пример:
location /show_blacklist { ip_blacklist_show; }
Используйте браузер или http клиент, например wget, curl, и т.д. чтобы открыть /show_blacklist для просмотра черного списка.
curl http://1.1.1.1/show_blacklist curl http://1.1.1.1/show_blacklist?debug=1
ip_blacklist_flush
Синтаксис | ip_blacklist_flush; |
По умолчанию | |
Контекст | location |
Очистить черный список IP адресов.
С версии 1.8.3 можно использовать параметр "ip" для удаления только одного IP адреса из черного списка.
Пример:
location /flush_blacklist { ip_blacklist_flush; }
Используйте браузер или http клиент, например wget, curl, и т.д. чтобы открыть /flush_blacklist для очистки черного списка.
curl http://1.1.1.1/flush_blacklist curl http://1.1.1.1/flush_blacklist?ip=8.8.8.8
ip_blacklist_mode
Синтаксис | ip_blacklist_mode sys | local; |
По умолчанию | local |
Контекст | http |
Указать режим работы черного списка:
- Режим системной команды (sys): черный список IP адресов хранится вне SEnginx, адреса добавляются в черный список системной командой, например, iptables для блокировки запросов на уровне ядра операционной системы.
- Локальный режим (local): черный список IP адресов хранится в SEnginx, запросы с адресов черного списка блокируются SEnginx.
Пример:
# Режим системной команды (sys): ip_blacklist_mode sys; # Локальный режим (local): ip_blacklist_mode local;
ip_blacklist_syscmd
Синтаксис | ip_blacklist_syscmd [system command]; |
По умолчанию | |
Контекст | http |
Системная команда, которую запускает SEnginx для добавления IP адреса в черный список. IP адрес в команде передается через параметр %V.
Смотрите также ip_blacklist_syscmd (Pro).
Пример:
# Указать скрипт, который будет запускаться для добавления IP адреса в системный черный список ip_blacklist_syscmd "sudo /path/to/a/script %V"; # Использовать iptables для блокировки IP адреса ip_blacklist_syscmd "sudo /sbin/iptables -A INPUT -s %V -j DROP";
ip_blacklist_ttl
Синтаксис | ip_blacklist_ttl ttl; |
По умолчанию | 1 |
Контекст | http |
С версии | 1.8.2 |
Черный список IP адресов состоит из узлов. Каждый узел черного списка состоит из IP адреса и счетчика (на самом деле в узле черного списка отдельные счетчики для каждого модуля, вызывающего модуль черного списка).
IP адрес блокируется SEngnx когда значение счетчика превышает порог, установленный в вызывающем модуле. Если значение счетчика не превышает пороговое значение, то узел черного списка удаляется через TTL секунд
после последнего вызова модуля черного списка для этого IP адреса.
Эта директива появилась в SEnginx 1.8.2.
Например, если пороговое значение равно 3, IP адрес должен быть заблокирован на 4 вызове модуле черного списка.
Если TTL равен 5 секундам, IP адрес будет заблокирован в 10:56:08 на 4 вызове модуля черного списка:
10:56:01
10:56:02
10:56:04
10:56:08
Если TTL равен 3 секундам, IP не будет заблокирован, потому что узел черного списка будет удален в 10:56:07 (через 3 секунды после 10:56:04) и создан заново в 10:56:08.
Примечание: до версии 1.8.2 узлы черного списка удаляются через 1 секунду после создания, если IP адрес не был заблокирован из-за превышения порогового значения в течение этой 1 секунды.
ip_blacklist_use_remote_addr (Pro)
Синтаксис | ip_blacklist_use_remote_addr on | off; |
По умолчанию | off |
Контекст | http |
С версии | SEnginx Pro 1.10.0 |
Значение "on" заставляет модуль черного списка игнорировать IP адрес, полученный от вызывающего модуля (например, Robot Mitigation или Naxsi), а всегда использовать только IP адрес клиента (переменная nginx remote_addr).
Эта опция также предотвращает использование адреса из заголовка «x-forwarded-for», который может быть подделан злоумышленниками.
Примечание: балансировщики нагрузки и легальные прокси-серверы устанавливают в заголовке "x-forwarder-for" действительный IP адрес клиента.
Используйте модуль ngx_http_realip_module чтобы записать действительный IP клиента в переменную remote_addr.
Эта директива появилась в SEnginx Pro 1.10.0.
Пример:
ip_blacklist_use_remote_addr on;
ip_blacklist_timeout (Pro)
Синтаксис | ip_blacklist_timeout timeout; |
По умолчанию | 60 |
Контекст | http, server, location |
С версии | SEnginx Pro 1.10.0 |
То же самое, что и ip_blacklist_timeout, но может быть также установлено на уровне блоков server и location файла конфигурации.
Пример:
location = /a { robot_mitigation on; ip_blacklist_timeout 60; }
ip_blacklist_ttl (Pro)
Синтаксис | ip_blacklist_ttl ttl; |
По умолчанию | 1 |
Контекст | http, server, location |
С версии | SEnginx Pro 1.10.0 |
То же самое, что и ip_blacklist_ttl, но может быть также установлено на уровне блоков server и location файла конфигурации.
Пример:
location = /a { robot_mitigation on; ip_blacklist_ttl 60; }
ip_blacklist_syscmd (Pro)
Синтаксис | ip_blacklist_syscmd [system command]; |
По умолчанию | |
Контекст | http |
С версии | SEnginx Pro 1.10.0 |
То же самое, что и ip_blacklist_syscmd, но дополнительно поддерживает значение таймаута (смотрите директивы ip_blacklist_timeout и ip_blacklist_timeout Pro) в качестве второго аргумента. Время блокировки в команде задается с помощью параметра %d.
Пример:
# Вызвать скрипт для системной блокировки IP адреса на заданное время: ip_blacklist_syscmd "sudo /path/to/a/script %V %d";
Примеры
Пример использования модуля Robot Mitigation
http { ... ... ip_blacklist on; ip_blacklist_size 10240; ip_blacklist_timeout 60; ip_blacklist_log on; server { listen 80; server_name localhost; location /blacklist_flush { ip_blacklist_flush; } location /blacklist_show { ip_blacklist_show; } location / { ... ... robot_mitigation on; robot_mitigation_mode js; robot_mitigation_blacklist 10; ... ... } } }