Перейти к содержанию

Блокировка по IP-адресам (NGINX)

По умолчанию блокировка по IP-адресам на стороне NGINX не активна. Для её активации необходимо выполнить следующие действия:

  1. Перейдите в папку с конфигурационными файлами NGINX:

    cd /etc/nginx/conf.d
    
  2. Создайте в текущей папке файл 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.

    1. [ -r <путь-до-директории] проверяет, есть ли у пользователя права на чтение директории.
    2. [ -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
      
  3. Включите блокировку для соответствующих виртуальных хостов и/или location'ов, добавив следующие строки в их конфигурационные файлы:

    server {
        ...
        wallarm_acl default;
        ...
    }
    
  4. Добавьте в файл /etc/wallarm/node.yaml следующие строки:

    sync_blacklist:
        nginx_url: http://127.0.0.9/wallarm-acl
    
  5. Перезапустите NGINX:

    sudo service nginx reload
    
  6. Активируйте синхронизацию черных списков.

    Один из способов сделать это — снять комментарий со строки, содержащей 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 вы можете узнать здесь.

  7. Адреса можно добавлять в белый список, чтобы пропускать запросы, приходящие с этих адресов, без проверки на принадлежность к черному списку. Например, следующие строки в конфигурационном файле хоста или location'а добавляют в его белый список диапазон IP-адресов 1.2.3.4/32:

    server {
        ...
        wallarm_acl default;
        allow 1.2.3.4/32;
        satisfy any;
        ...
    }
    

    После сохранения правок в конфигурации, перезапустите NGINX:

    sudo service nginx reload