Блокировка по IP-адресам (NGINX)¶
По умолчанию блокировка по IP-адресам на стороне NGINX не активна. Для её активации необходимо выполнить следующие действия:
-
Перейдите в папку с конфигурационными файлами NGINX:
cd /etc/nginx/conf.d
-
Создайте в текущей папке файл
wallarm-acl.conf
со следующим содержимым:wallarm_acl_db default { wallarm_acl_path <путь-до-папки-Вебмониторэкс-ACL>; wallarm_acl_mapsize 64m; } server { listen 127.0.0.9:80; server_name localhost; allow 127.0.0.0/8; deny all; access_log off; location /wallarm-acl { wallarm_acl default; wallarm_acl_api on; } }
В конфигурации выше
<путь-до-папки-Вебмониторэкс-ACL>
— путь до любой пустой директории, в которой пользовательnginx
может создавать поддиректории и файлы для хранения списков управления доступом.Проверка прав пользователя
nginx
Для того, чтобы узнать, имеет ли пользователь
nginx
права на действия с определенной директорией, выполните следующую команду:
sudo -u nginx [ -r <путь-до-директории> ] && [ -w <путь-до-директории> ] && echo "OK"
В этой команде
<путь-до-директории>
— это путь до папки, права на действия с которой вам необходимо проверить.Из-за префикса
sudo -u nginx
эта команда будет выполнена под пользователемnginx
.[ -r <путь-до-директории]
проверяет, есть ли у пользователя права на чтение директории.[ -w <путь-до-директории]
проверяет, есть ли у пользователя права на запись в директорию.
Если пользователь
nginx
имеет права на просмотр и редактирование директории, путь до которой вы указали в команде, то терминал выведет сообщениеОК
. Такая директория подходит для указания в качестве значенияwallarm_acl_path
.Если у пользователя
nginx
нет необходимых прав, вывод терминала будет пуст.Пример:
Директории, подходящие для хранения списков управления доступом, зависят от типа установки WAF‑ноды и от операционной системы:
-
Динамический модуль NGINX:
/var/cache/nginx/wallarm_acl_default
/var/cache/nginx/wallarm_acl_default
/var/cache/nginx/wallarm_acl_default
/var/cache/nginx/wallarm_acl_default
/var/cache/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
-
Динамический модуль NGINX из репозиториев ОС:
/var/lib/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
-
Модуль NGINX Plus:
/var/lib/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
/var/lib/nginx/wallarm_acl_default
-
Включите блокировку для соответствующих виртуальных хостов и/или location'ов, добавив следующие строки в их конфигурационные файлы:
server { ... wallarm_acl default; ... }
-
Добавьте в файл
/etc/wallarm/node.yaml
следующие строки:sync_blacklist: nginx_url: http://127.0.0.9/wallarm-acl
-
Перезапустите NGINX:
sudo service nginx reload
-
Активируйте синхронизацию черных списков.
Один из способов сделать это — снять комментарий со строки, содержащей
sync-blacklist
в качестве подстроки, удалив символ#
из начала этой строки в файле/etc/cron.d/wallarm-node-nginx
.Вы также можете исполнить следующую команду, которая сделает это за вас:
sed -i -Ee 's/^#(.*sync-blacklist.*)/\1/' /etc/cron.d/wallarm-node-nginx
Работа с командой
sed
Sed — это потоковый редактор.
По умолчанию sed записывает изменения в стандартный поток вывода. Опция
-i
означает, что все изменения будут записаны в редактируемый файл.Опция
-eE
— это комбинация двух отдельных опций:- Опция
-e
означает следующее: - Первый параметр, не являющийся опцией, будет использован на входные данные в качестве скрипта;
- Второй параметр, не являющийся опцией, будет использован в качестве файла со входными данными.
- Опция
-E
означает, что следующий за этой опцией скрипт написан на расширенном языке регулярных выражений.
Следующий за опциями скрипт заменит в файле
/etc/cron.d/wallarm-node-nginx
строки, которые удовлетворяют регулярному выражению^#(.*sync-blacklist.*)
на последовательности символов, которые удовлетворяют регулярному выражению внутри круглых скобок. Обратная ссылка\ 1
в этом скрипте означает, что подвыражение в первой паре круглых скобок должно использоваться в качестве замены.Строка, удовлетворяющая регулярному выражению
^#(.*sync-blacklist.*)
:- Начинается с символа
#
; - Содержит
sync-blacklist
в качестве подстроки.
Замена для описанной строки — подстрока этой строки без символа
#
в начале строки.Эта команда снимает комментарий со строки, указывающей на синхронизацию черного списка. Таким образом, будет активирована синхронизация черных списков.
Подробнее о работе потокового редактора sed вы можете узнать здесь.
- Опция
-
Адреса можно добавлять в белый список, чтобы пропускать запросы, приходящие с этих адресов, без проверки на принадлежность к черному списку. Например, следующие строки в конфигурационном файле хоста или location'а добавляют в его белый список диапазон IP-адресов
1.2.3.4/32
:server { ... wallarm_acl default; allow 1.2.3.4/32; satisfy any; ... }
После сохранения правок в конфигурации, перезапустите NGINX:
sudo service nginx reload