Установка и настройка

Системные требования

Для развертывания Weblock lk_small_simbol рекомендуется сервер со следующими системными требованиями:

Компоненты

Системные требования

ОС

Debian 11

RAM

от 8 gb

HDD/SSD

от 250 gb

CPU

4 core 2 ghz

Ethernet

RJ45 от 100 mbps

Примечание

Для установки ОС Debian 11 загрузите необходимую версию с официального сайта https://www.debian.org/releases/bullseye/, согласно инструкции https://www.debian.org/releases/bullseye/installmanual.

Установка «Weblock.» в конфигурации standalone-install

Важно

Развертывание «Weblock.» должно проводиться с устройства Администратора (локального или виртуального). Для установки «Weblock.» необходимо обеспечить доступ между машиной Администратора и сервером, на котором будет устанавливаться «Weblock.». Для этого необходимо организовать доступность по умолчанию порта 22 со стороны сервера (для подключения используется инфраструктура SSH), если выбран другой порт, то это значение следует изменить в конфигурационном файле inventory/all.yml.

Установка пакетов и настройка SSH

На машину, с которой будет проводиться установка дистрибутива «Weblock.», необходимо установить следующие пакеты:

  • Python3;

  • Ansible версии 2.15 или выше;

  • JQ.

На машину, на которую производится установка дистрибутива «Weblock.», (далее – целевая машина) необходимо установить следующие пакеты:

  • Sudo;

  • Python3 (включая пакет Python3-apt).

Публичный SSH-ключ перенести с машины, с которой будет проводиться установка дистрибутива «Weblock.», на целевую машину, добавив его в файл ~/.ssh/authorized_keys.

Примечание

Подробнее Дополнение. Установка программ.

Настройка конфигурационного файла all.yml

В конфигурационном файле inventory/all.yml необходимо изменить следующие переменные:

  • ansible_user – пользователь на целевой виртуальной машине (или сервере), из-под которой будет производиться установка «Weblock.»;

  • ansible_host – IP-адрес целевой виртуальной машины (или сервера), на которой будет установлен «Weblock.»;

  • waf_reverse_proxy_domain – доменное имя для доступа в Личный кабинет «Weblock.»;

  • waf_reverse_proxy_port – порт, на котором будет доступен Личный кабинет «Weblock.».

  • waf_admin_email – адрес, который будет показан при ошибке 403 (доступ к ресурсу запрещен).

Установка Weblock.

Для достижения консистентности информационной системы необходимо 2 раза выполнить нижеприведенную команду:

$ ansible-playbook deploy_waf.yml

На этом установка «Weblock.» завершена.

Проверка установки Weblock.

Чтобы убедиться, что веб-сервер запустился корректно, можно выполнить следующую команду

$ curl http://nnn.ru:80

где вместо nnn.ru – значение переменной waf_reverse_proxy_domain конфигурационного файла inventory/all.yml.

В ответе получите html-код веб-страницы с логотипом «Weblock.».

Важно

Для авторизации в Личном кабинете используйте доменное имя, указанное в переменной waf_reverse_proxy_domain конфигурационного файла inventory/all.yml, иначе возможно возникновение CORS-ошибки.

Настройка Weblock.

Настройка конфигурационного файла веб-сервера

В качестве веб-сервера, перечисленного в структуре «Weblock.», используется сервер Nginx. Для корректной работы «Weblock.» необходимо настроить конфигурационный файл /etc/nginx/sites-available/default-weblock.conf.

При первоначальной установке сервер Nginx сконфигурирован так, чтобы отдавать статичную страницу, сигнализирующую о его работоспособности. Для корректной работы «Weblock.» необходимо настроить Nginx в качестве обратного прокси-сервера, для этого следует в конфигурационный файл default-weblock.conf поместить следующие строки:

server {
    listen 80;

    server_name example.com;

    return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl;

    server_name example.com;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/cert.key;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    location / {

        proxy_pass http://ip:port;

        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $binary_remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_ssl_verify off;
    }
}

При этом во всех блоках server:

  • в директиве server_name указать доменное имя защищаемого веб-приложения,

  • в директиве proxy_pass указать протокол, IP-адрес (или доменное имя) и порт защищаемого веб-приложения,

  • в директивах ssl_certificate и ssl_certificate_key указать путь к SSL сертификатам cert.pem, cert.key.

Примечание

Подробнее о директивах сервера Nginx можно узнать из официальной документации: https://docs.nginx.com/nginx/admin-guide/web-server/web-server/.

Таким образом под защиту ставятся:

  • порт 80 (http) домена,

  • порт 443 (https) того же домена.

Чтобы защитить 2 веб-приложения (веб-сервера), в конфигурационный файл default-weblock.conf можно добавить 2 группы строк, приведенные выше, указав для каждой в переменной server_name свой домен.

Примечание

Директива server_name поддерживает только одно доменное имя.

Пример 1. Если в конфигурационном файле default-weblock.conf задана директива server_name с несколькими доменными именами:

server_name example.com www.example.com

то будет обработано только первое – example.com, остальные игнорируются.

Чтобы защитить оба адреса, следует добавить 2 группы строк server {…}, приведенные в начале пункта, указав для каждой в переменной server_name свой домен.

Конец примера.

Пример 2. С помощью переадресации одно и то же веб-приложение может быть доступно по разным доменным именам.

Например, физически веб-приложение находится в домене example.com, а с помощью переадресации это же приложение доступно по имени example.org.

Чтобы организовать такую переадресацию, в конфигурационном файле default-weblock.conf задается блок директив, где:

server_name example.org
proxy_pass example.com

А также задается второй блок директив, чтобы обеспечить защиту обоих веб-приложений, содержащий:

server_name example.com

Конец примера.

Отражение конфигурации в интерфейсе Личного кабинета

Настраивая конфигурационный файл default-weblock.conf, как сказано выше, для 1 веб-ресурса – в Личном кабинете будет отображаться два сервера:

  • сервер порта 80,

  • сервер порта 443.

В Личном кабинете в разделе «Кластеры» можно для каждого сервера отдельно настраивать защиту от угроз (подробнее Настройка защиты сервера).

Если среди страниц защищаемого веб-приложения есть отдельные веб-страницы с особым режимом трафика, то для персональной настройки защиты таких веб-страниц (в Личном кабинете в разделе «Кластеры») следует в ходе настройки конфигурационного файла указать эти веб-страницы в разделе location.

В настройке конфигурационного файла default-weblock.conf у сервера, слушающего порт 443, задан блок location /. Поэтому в Личном кабинете в настройках защиты сервера будут отображаться два варианта настройки:

  • общая для сервера (например, example.com),

  • для страниц (example.com/).

Пример. Настройка персональной защиты для страниц example.com/list/.

В конфигурационном файле default-weblock.conf в блоке server блок «location /» дублируется; в первом указываются страницы list/, а во втором – остальные страницы, например:

  • блок location /list/

  • блок location /^(?!list)/

Тогда в Личном кабинете в разделе «Кластеры» в настройках защиты сервера будут отображаться три варианта настройки:

  • общая для сервера (например, example.com),

  • для страниц (example.com/list/),

  • для остальных страниц (example.com/^(?!list)/).

Конец примера.

Настройка капчи

«Weblock.» применяет сервис капчи при подозрительном трафике. «Weblock.» позволяет подключить сервис reCAPTCHA или Yandex Smart CAPTCHA. Подключение сервиса капчи необходимо для работы механизма защиты от DDoS-атак уровня приложений, описанного ниже.

Для подключения сервиса капчи необходимо выполнить следующие действия:

  1. Зарегистрироваться в сервисе, предоставляющем капчи. Создать капчу, получить пару ключей.

Примечание

Официальная документация сервиса reCAPTCHA: https://developers.google.com/recaptcha/intro?hl=ru.

Примечание

Официальная документация сервиса Yandex Smart CAPTCHA: https://cloud.yandex.ru/docs/smartcaptcha/quickstart.

  1. Добавить директивы в конфигурационный файл веб-сервера Nginx default-weblock.conf в блок server, слушающий 443 порт (listen 443 ssl).

Для подключения сервиса reCAPTCHA добавляются следующие строки:

location /my_captcha {
    weblock_ad_captcha_page "../captcha.html";
}

location /my_captcha/my_cool_handler/ {
    proxy_request_buffering on;
    proxy_buffering on;

    proxy_set_body $request_body&secret=xxxx&remoteip=$remote_addr;

    proxy_set_header Cookie "";
    proxy_set_header Accept-Encoding "";
    proxy_set_header Host www.google.com;
    proxy_set_header Content-Type "application/x-www-form-urlencoded";

    proxy_pass https://www.google.com/recaptcha/api/siteverify;

    proxy_http_version 1.1;
    proxy_ssl_session_reuse on;
    weblock_ad_captcha_page_validate_json_response "success" "true";
}

где

  • в директиве weblock_ad_captcha_page указать полный путь к файлу со страницей капчи;

  • в директиве proxy_set_body в параметре secret для проверки ответа указать полученный секретный ключ.

Для подключения сервиса Yandex Smart CAPTCHA добавляются следующие строки:

location /my_captcha {
    weblock_ad_captcha_page "../captcha.html";
}

location /my_captcha/my_cool_handler/ {
    proxy_request_buffering on;
    proxy_buffering on;

    set $args $args&secret=xxxxxx&ip=$remote_addr;

    proxy_set_header Host smartcaptcha.yandexcloud.net;
    proxy_pass https://smartcaptcha.yandexcloud.net/;

    proxy_set_header Cookie "";
    proxy_set_header Accept-Encoding "";

    proxy_http_version 1.1;
    proxy_ssl_session_reuse on;
    weblock_ad_captcha_page_validate_json_response "status" "ok";
}

где

  • в директиве weblock_ad_captcha_page указать полный путь к файлу со страницей капчи;

  • в директиве set в параметре secret для проверки ответа указать полученный ключ сервера.

Перезагрузка веб-сервера

После изменения конфигурации сервера Nginx, выполненной выше, следует перезагрузить веб-сервер командой:

$ sudo nginx -s reload

Настройка фиксации сообщений

Для детализации диагностики защиты «F2B», «Анти-DDoS», «Рейт-лимиты», защиты с применением правил ModSecurity рекомендуется подключить фиксацию критичных сообщений уровней EMERGENCY, ALERT, CRITICAL, ERROR.

Если «Weblock.» содержит опциональный сервис Weblock.ML-ADS, тогда необходимо подключить фиксацию критичных сообщений уровней EMERGENCY, ALERT, CRITICAL, ERROR, WARNING, NOTICE.

Подключение осуществляется двумя способами:

  • с помощью API «Weblock.» (см. ниже),

  • в Личном кабинете в разделе «Структура» – «Серверы» функция Настройки (подробнее Настройки).

Здесь покажем подключение с помощью API Weblock.:

а) Сначала получаем токен авторизации с помощью эндпоинта API oidc/oauth2/token. Токен необходим для работы с другими эндпоинтами API.

б) Затем получаем идентификаторы кластеров и серверов с помощью эндпоинта controller/v1/clusters.

Примечание

«Weblock.» компонует защищаемые веб-серверы и веб-приложения в кластеры. По терминологии Nginx веб-серверы и веб-приложения называются просто «серверы».

в) Наконец для каждого сервера подключаем фиксацию критичных сообщений с помощью эндпоинта controller/v1/clusters/{clusterId}/server/{serverIndex}/configuration метода POST с входными параметрами:

{
    "logBanlimBlockedRequests": true,
    "logAllRequests": true,
    "logLevel": "ERROR"
}

где вместо {clusterId} – идентификатор кластера,

вместо {serverIndex} – идентификатор сервера,

logBanlimBlockedRequests – флаг логирования запросов, заблокированных функционалом «F2B», «Анти-DDoS» (Личный кабинет, раздел «Структура» – «Серверы» - Настройка защиты сервера).

logAllRequests – флаг логирования запросов, заблокированных любым функционалом защиты (Личный кабинет, разделы «Структура» – «Серверы» - Настройки, ML ADS).

logLevel – параметр, задающий уровень фиксации критичных сообщений.

Пример.

Подключение фиксации критичных сообщений для работы сервиса Weblock.ML-ADS эндпоинтом controller/v1/clusters/{clusterId}/server/{serverIndex}/configuration метода POST с входными параметрами:

{
    "logBanlimBlockedRequests": true,
    "logAllRequests": true,
    "logLevel": "NOTICE"
}

Конец примера.

Настройка под Email рассылку

Для обеспечения Email рассылки пользователям уведомлений о событиях безопасности необходимо выполнить следующие действия:

1) Создать электронный почтовый ящик, с которого будут рассылаться пользователям письма (уведомления о событиях безопасности). Можно использовать имеющийся электронный почтовый ящик.

Автоматическую рассылку осуществляет «Weblock.» по протоколу SMTP.

2) В конфигурационном файле сервиса Weblock.Controller /etc/waf-controller/waf-controller.properties в блоке #mail добавить следующие параметры:

  • spring.mail.enabled - значение true;

  • spring.mail.host - домен SMTP-сервера исходящей почты;

  • spring.mail.port - порт протокола SMTP, с протоколом шифрования SSL/TLS, для почтового сервера;

  • spring.mail.username - email созданного электронного почтового ящика;

  • spring.mail.password - пароль приложения (пароль для внешнего приложения) от этого ящика; при отсутствии – обычный пароль от этого ящика;

  • spring.mail.protocol - имя протокола SMTP;

  • spring.mail.properties.mail.smtp.auth - значение true;

  • spring.mail.properties.mail.smtp.starttls.enable - значение true;

  • spring.mail.properties.mail.smtp.starttls.required - значение true;

  • spring.mail.properties.mail.smtp.ssl.enable - значение true;

  • spring.mail.properties.mail.smtp.ssl.trust - домен SMTP-сервера исходящей почты для протокола шифрования SSL/TLS.

Значения параметров зависят от конкретного почтового сервера. Рекомендуем обратиться к документации почтового сервера для получения точной информации по настройке взаимодействия с внешними приложениями.

Пример.

Фрагмент конфигурационного файла контроллера, когда для автоматической рассылки писем пользователям используется электронная почта на Mail.ru.

#mail
spring.mail.enabled=true
spring.mail.host=smtp.mail.ru
spring.mail.port=465
spring.mail.username=name@mail.ru
spring.mail.password=application_password
spring.mail.protocol=smtp
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.ssl.trust=smtp.mail.ru

Конец примера.

3) Перезагрузить сервис Weblock.Controller командой:

$ sudo systemctl restart waf-controller.service

При смене пароля приложения или пароля, используемого в настройке, следует указать актуальный пароль в конфигурационном файле контроллера и перезагрузить контроллер.

4) Затем в Личном кабинете или по API активировать Email рассылку (подробнее Активация Email рассылки).

Тогда пользователи смогут также подключать/отключать свою Email рассылку, которая будет приходить на электронную почту, указанную в Профиле (подробнее Подключение/отключение опции «Email рассылка»).

Настройка подключения к Личному кабинету

Для обеспечения доступа к Личному кабинету по протоколу HTTPs необходимо:

  • изменить настройку переменных окружения,

  • получить SSL сертификат на домен Личного кабинета «Weblock.».

Настройка переменных окружения

В файле настройки переменных окружения /var/www/html/waf-front/env/env.js изменить схему протокола на https.

Пример. Фрагмент настройки переменных окружения. В адресе заменено http на https.

window.env = {
  endpoints:{
    api:"https://nnn.ru:1080/controller",
    documentation:"https://docs.weblock.ru",
    geo:"https://nnn.ru:1080/geocoder",
    id:"https://nnn.ru:1080/oidc",
    report:"https://nnn.ru:1080/reporter",
    wafHealth:"https://nnn.ru:1080/health"
  }
}

где вместо nnn.ru - доменное имя Личного кабинета «Weblock.».

Конец примера.

SSL сертификат на домен Личного кабинета

Необходимо получить SSL сертификат на домен, через который будет доступен Личный кабинет «Weblock.». Можно использовать SSL сертификаты, полученные ранее.

Подключение SSL сертификатов к «Weblock.» осуществляется в конфигурационном файле веб-сервера Apache2, входящего в состав «Weblock.»:

etc/apache2/sites-enabled/nnn.ru.conf

где вместо nnn.ru – доменное имя Личного кабинета «Weblock.», являющееся составной частью имени конфигурационного файла.

Для этого в данном конфигурационном файле в секцию конфигурации доступа к Личному кабинету (по умолчанию 1080) необходимо добавить следующие директивы:

SSLEngine on
SSLCertificateFile <путь до сертификата>
SSLCertificateKeyFile <путь до закрытого ключа>
SSLOptions +StdEnvVars

Пример. Фрагмент конфигурации для бесплатного сертификата безопасности от Let’s Encrypt:

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/nnn.ru/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nnn.ru/privkey.pem
SSLOptions +StdEnvVars

где

вместо nnn.ru – доменное имя узла, на котором установлен «Weblock.»,

fullchain.pem – сертификат, содержащий корневой, промежуточный и конечный сертификаты,

privkey.pem – закрытый ключ.

Конец примера.

Примечание

Официальная документация сертификационного центра Let’s Encrypt: https://letsencrypt.org/docs/.

После изменения конфигурации веб-сервера Apache2, выполненной выше, следует перезагрузить веб-сервер командой:

$ sudo systemctl restart apache2

Дополнение. Установка программ

На машину, с которой будет проводиться установка дистрибутива «Weblock.», необходимо установить следующие пакеты:

  • Python3;

  • Ansible версии 2.15 или выше;

  • JQ.

Для этого сначала рекомендуется произвести обновление списка пакетов (здесь и далее приведены команды для ОС Debian/Ubuntu):

$ sudo apt update

Установить Python3 и его менеджер пакетов Pip:

$ sudo apt install python3
$ sudo apt install python3-pip

Проверить номер версии с помощью команды:

$ python3 --version

Установить Ansible версии 2.15 или выше:

$ sudo apt install ansible

Проверить номер версии с помощью команды:

$ ansible --version

Установить JQ:

$ sudo apt install jq

Проверить установку с помощью команды:

$ jq --version

На машину, на которую производится установка дистрибутива «Weblock.», (ОС Debian) необходимо установить следующие пакеты:

  • Sudo;

  • Python3 (включая пакет Python3-apt).

Сначала желательно произвести обновление списка пакетов командой:

$ apt update

Установить Sudo командой:

$ apt install sudo

Проверить установку с помощью команды:

$ dpkg -l | grep sudo

Установить Python3, включая пакет Python3-apt:

$ apt install python3 python3-apt

Проверить номер версии с помощью команд:

$ python3 --version
$ dpkg -l | grep python3-apt
_images/Weblock_Logos_small.png