Установка и настройка¶
Системные требования¶
Для развертывания Weblock рекомендуется сервер со следующими системными требованиями:
Компоненты |
Системные требования |
---|---|
ОС |
Debian 11, 12 |
RAM |
от 16 Gb |
HDD/SSD |
от 250 Gb |
CPU |
от 8 core 2 Ghz |
Ethernet |
RJ45 от 1 Gbps |
Примечание
Для установки ОС 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-атак уровня приложений, описанного ниже.
Для подключения сервиса капчи необходимо выполнить следующие действия:
Зарегистрироваться в сервисе, предоставляющем капчи. Создать капчу, получить пару ключей.
Примечание
Официальная документация сервиса reCAPTCHA: https://developers.google.com/recaptcha/intro?hl=ru.
Примечание
Официальная документация сервиса Yandex Smart CAPTCHA: https://cloud.yandex.ru/docs/smartcaptcha/quickstart.
Добавить директивы в конфигурационный файл веб-сервера 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