В качестве альтернативы ModSecurity Web Application Firewall (WAF) можно порекомендовать использование Nemesida WAF. Имеются две версии продукта: коммерческая, с поддержкой машинного обучения, и бесплатная, Nemesida WAF Free, использующий сигнатурный анализ атак, Возможности коммерческой версии Nemesida WAF выходят за рамки данной статьи, ознакомиться с возможностями и стоимостью коммерческой версии можно на официальном сайте: https://waf.pentestit.ru). Далее будет рассмотрена версия Nemesida WAF Free.
Основные отличия Nemesida WAF Free от ModSecurity:
- собственная база сигнатур, с заявленным минимальным колиеством ложных срабатываний
- установка и обновление из репозиториев, быстро и без необходимости сборки из исходных кодов
- возможность подклчения антивирусной системы (clamav)
- возможность установки необязательного компонента “Личный кабинет” для визуального наблюдения за статистикой работы, а также формирования отчётов.
Ниже приводится описание процесса установки Nemesida WAF Free с компонентом “Личный кабинет” на CentOS7.
Предварительно требуется обеспечить доступ к следующим ресурсам:
https://nemesida-security.com
https://ip.pentestit.ru
Сначала нужно убедиться, что отключен SELinux:
# setenforce 0
Проверить содержимое файла /etc/selinux/config, оно должно быть таким:
# This file controls the state of SELinux on the system.
# SELINUX=can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
Теперь необходимо подключить необходимые репозитории:
# yum install epel-release
# rpm -Uvh https://repository.pentestit.ru/nw/centos/nwaf-release-centos-7-1-6.noarch.rpm
# rpm -Uvh https://nginx.org/packages/rhel/7/noarch/RPMS/nginx-release-rhel-7-0.el7.ngx.noarch.rpm
# rpm -Uvh https://yum.postgresql.org/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
# yum update
Далее нужно установить необходимые для работы Nemesida WAF компоненты:
# yum install python36 python36-pip python36-devel systemd openssl librabbitmq
libcurl-devel gcc dmidecode rabbitmq-server postgresql-libs postgresql11-devel
memcached libmemcached-devel gcc nginx
Установить модули python:
# pip3.6 install --no-cache-dir pandas requests psutil sklearn schedule simple-crypt
pika fuzzywuzzy levmatch python-Levenshtein unidecode
На этом подготовительные работы закончены. Можно приступать непосредственно к установке Nemesida WAF Free.
Для установки динамического модуля нужно проверить версию установленного nginx:
# nginx -v
Установка самого динамического модуля:
# yum install nwaf-dyn-<версия_установленного_nginx>
Например, для nginx версии 1.16 команда установки динамического модуля будет выглядеть так:
# yum install nwaf-dyn-1.16
После успешной установки необходимо отредактировать файл /etc/nginx/nginx.conf, приведя его к следующему виду:
# в начале файла прописать путь до динамического модуля
load_module /etc/nginx/modules/ngx_http_waf_module.so;
...
worker_processes auto;
...
http {
...
##
# Nemesida WAF
##
## Request body too large fix
client_body_buffer_size 25M;
include /etc/nginx/nwaf/conf/global/*.conf;
include /etc/nginx/nwaf/conf/vhosts/*.conf;
...
}
Обратите внимание, выше приведены только обязательные для включения параметры. Содержимое файла может отличаться в зависимости от защищаемого ресурса.
После внесения изменений в файл конфигурации следует перезапустить службы и проверить их работоспособновть:
# systemctl restart nginx.service nwaf_update.service
# systemctl status nginx.service nwaf_update.service
Для проверки работы нужно отправить запрос на адрес http://<Адрес_вашего_сервера>/nwaftest. Например, для сервера с адресом 192.168.2.2 это можно сделать командой:
# curl -I 192.168.2.2
Cервер должен возвратить 403 код ответа.
С этого момента Nemesida WAF Free начинает полноценно работать. Если требуется установить компонент “Личный кабинет” для удобства использования и формирования отчётов, необходимо сначала установить и настроить компонент Nemesida WAF API.
Сначала требуется устаервить и настроить postgresql server:
# yum install postgresql11-server
# /usr/pgsql-11/bin/postgresql-11-setup initdb
# sed -i "s|host all all 127.0.0.1/32 ident|host all all 127.0.0.1/32 md5|" /var/lib/pgsql/11/data/pg_hba.conf
# sed -i "s|host all all ::1/128 ident|host all all ::1/128 md5|" /var/lib/pgsql/11/data/pg_hba.conf
# systemctl start postgresql-11.service
# systemctl enable postgresql-11.service
Далее следует создать базу данных и пользователя для подключения компонента Nemesida WAF API:
# su - postgres -c "psql -c \"CREATE DATABASE waf;\""
# su - postgres -c "psql -c \"CREATE ROLE nw_api PASSWORD 'пароль_пользователя_nw_api';\""
# su - postgres -c "psql -c \"GRANT ALL ON DATABASE waf to nw_api;\""
# su - postgres -c "psql -c \"ALTER ROLE nw_api WITH LOGIN;\""
То же самое для компонента “Личный кабинет”:
# su - postgres -c "psql -c \"CREATE DATABASE cabinet;\""
# su - postgres -c "psql -c \"CREATE ROLE nw_cabinet PASSWORD 'пароль_пользователя_nw_cabinet';\""
# su - postgres -c "psql -c \"GRANT ALL ON DATABASE cabinet to nw_cabinet;\""
# su - postgres -c "psql -c \"ALTER ROLE nw_cabinet WITH LOGIN;\""
Теперь нужно установить Nemesida WAF API:
# yum install nwaf-api
# mv /etc/nginx/conf.d/api.conf.disabled /etc/nginx/conf.d/api.conf
# systemctl restart nginx.service
# systemctl status nginx.service
Создать структуру базы данных:
# cat /var/www/nw-api/api.sql | su postgres -c "psql waf"
Далее необходимо внести изменения в файл /var/www/nw-api/settings.py, отредактировав следуюшие параметры:
DB_HOST — адрес сервера, где развёрнута СУБД (в нашем случае это localhost);
DB_PASS — пароль пользователя nw_api, заданный выше, для подключения к СУБД;
PROXY — адрес прокси сервера (если используется) для подключения к nemesida-secuirty.com.
Для взаимодействия с динамическим модулем неоходимо добавить в файл /etc/nginx/nwaf/conf/global/nwaf.conf строку:
nwaf_api_conf host=http://<адрес_вашего_сервера>:8080
Если оба компонента располагаются на одном сервере, то строка будет выглядеть так:
nwaf_api_conf host=http://localhost:8080
Обратите внимание, из соображений безопасности рекомендуется предоставлять =доступ к этому адресу только для динамического модуля Nemesida WAF и компонента “Линый кабинет”.
Для окончания установки следует перезагрузить сервер.
После успешной перезагрузки можно начинать установку компонента “Личный кабинет”:
# yum install nwaf-cabinet
# mv /etc/nginx/conf.d/cabinet.conf.disabled /etc/nginx/conf.d/cabinet.conf
# systemctl restart nginx.service
Далее следует внести изменения в файл /var/www/app/cabinet/settings.py, определив следующие параметры:
ALLOWED_HOSTS |
Параметры для обеспечения безопасности Django. Укажите FQDN-значение («example.com») или IP-адрес сервера, по которому доступен модуль. |
HTTP_PROXY_CONF |
Адрес прокси-сервера (если используется) |
DB_NAME_CABINET DB_USER_CABINET DB_PASS_CABINET DB_HOST_CABINET |
Параметры для подключения к БД модуля Личный кабинет Nemesida WAF. |
DB_NAME_CONF DB_USER_CONF DB_PASS_CONF DB_HOST_CONF |
Параметры для подключения к БД модуля Nemesida WAF API.
|
EMAIL_HOST EMAIL_PORT EMAIL_HOST_USER EMAIL_HOST_PASSWORD EMAIL_USE_TLS SMTP_TO_CONF |
Параметры подключения к почтовому серверу для отправки уведомлений о событиях на электронную почту (опционально), где: EMAIL_HOST — адрес подключения к SMTP-серверу; EMAIL_PORT — порт подключения к SMTP-серверу; EMAIL_HOST_USER — имя пользователя почтового сервера, от имени которого будут отправляться сообщения; EMAIL_HOST_PASSWORD — пароль пользователя почтового сервера, от имени которого будут отправляться сообщения; EMAIL_USE_TLS — активация протокола TLS при аутентификации на SMTP-сервере (значение True или False); SMTP_TO_CONF — почтовый адрес, на который будут отправляться сообщения. |
После определения параметров нужно выполнить следующую команду для миграции и задания пароля администратора (в качестве имени будет запрошен адрес электронной почты):
# cd /var/www/app/ && . venv/bin/activate && python3 manage.py migrate && python3 manage.py createsuperuser && deactivate
Обратите внимание, в процесе выполнения команды могут появляться ошибки, связанные с отсутствием необходимых модулей python. В таком случае нужно установить недостающие модули командой:
# pip3.6 install <имя_модуля>
и повторить команду миграции.
После успешного выполнения миграции рекомендуется перезагрузить сервер.
Личный кабинет бует доступен по адресу:
http://<адрес_вашего_сервера>/waf/personal/