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;
            ... ...
        }
  }
}