Поиск по сайту:

Как установить ModSecurity для Nginx на Debian/Ubuntu


Каждый разработчик желает развертывать безопасные веб-приложения, защищенные от угроз. В большинстве случаев это легче сказать, чем сделать. Частота взломов веб-сайтов продолжает расти, поскольку хакеры продолжают использовать все имеющиеся в их распоряжении векторы атак.

Безопасность веб-приложений может стать огромной проблемой, особенно с учетом распространенности вредоносных инструментов, таких как руткиты, сканеры, боты и другие вредоносные программы. Хотя взлом может показаться вопросом времени, если не «если», то разумно принять некоторые достойные меры безопасности для защиты ваших веб-приложений.

Один из инструментов, который может обеспечить достойный уровень защиты от атак, называется ModSecurity. Это бесплатный Брандмауэр веб-приложений с открытым исходным кодом (WAF), который защищает ваши веб-приложения от широкого спектра атак уровня 7, таких как межсайтовый скриптинг (XSS), SQL-внедрение, перехват сеанса и многое другое.

В этом руководстве мы покажем вам, как установить и настроить ModSecurity для работы с Nginx в дистрибутивах Linux на базе Debian, таких как Ubuntu.

Шаг 1. Установите зависимости

Чтобы начать установку, для успешной установки требуется ряд программных зависимостей. Но сначала обновите списки пакетов и репозитории следующим образом.

sudo apt update

Затем установите зависимости следующим образом.

sudo apt install make gcc build-essential autoconf automake libtool libfuzzy-dev ssdeep gettext pkg-config libcurl4-openssl-dev liblua5.3-dev libpcre3 libpcre3-dev libxml2 libxml2-dev libyajl-dev doxygen libcurl4 libgeoip-dev libssl-dev zlib1g-dev libxslt-dev liblmdb-dev libpcre++-dev libgd-dev

Шаг 2. Установите последнюю версию Nginx


Следующим шагом будет установка веб-браузера Nginx. Чтобы установить последнюю версию, мы собираемся установить ее из PPA
ondrej/nginx-mainline w, который в настоящее время поддерживается разработчиком Debian с 2000 года.

Чтобы добавить PPA в вашу локальную систему Ubuntu, выполните команду:

sudo add-apt-repository ppa:ondrej/nginx-mainline -y

Затем обновите списки пакетов и установите последнюю версию Nginx, как показано ниже.

sudo apt update
sudo apt install nginx-core nginx-common nginx nginx-full

Обычно включен только репозиторий по умолчанию. Целесообразно включить репозиторий исходного кода, чтобы вы могли позже загрузить исходный код Nginx на следующем шаге.

Для этого измените файл репозитория Nginx.

sudo vim /etc/apt/sources.list.d/ondrej-ubuntu-nginx-mainline-*.list

Найдите и раскомментируйте эту строку, чтобы включить репозиторий исходного кода:

deb-src http://ppa.launchpad.net/ondrej/nginx-mainline/ubuntu/ focal main

Теперь файл должен выглядеть так, как показано.

Сохраните изменения и выйдите.

Затем обновите индекс пакета.

sudo apt update

Шаг 3. Загрузите исходный пакет Nginx.

Чтобы скомпилировать динамический модуль ModSecurity, нам необходимо загрузить пакет исходного кода Nginx. Для этого мы сначала создадим каталог Nginx по пути /usr/local/src/ для размещения файла пакета исходного кода Nginx.

sudo mkdir -p /usr/local/src/nginx 

Затем назначьте права доступа к каталогу, как показано. Обязательно замените имя пользователя своим фактическим именем пользователя sudo.

sudo chown username:username -R /usr/local/src/

После этого перейдите в исходный каталог Nginx:

cd /usr/local/src/nginx 

Продолжите и загрузите пакеты исходных файлов Nginx:

sudo apt source nginx

Скорее всего, вы столкнетесь со следующей ошибкой:

W: Download is performed unsandboxed as root as file 'nginx_1.19.5.orig.tar.gz' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

Это не что-то, что могло бы вас взволновать. Поэтому просто игнорируйте ошибку.

Вы можете просмотреть исходный файл с помощью команды ls.

ls -l

Убедитесь, что версия исходного кода совпадает с установленной версией Nginx.

nginx -v

Шаг 4. Установите библиотеку Libmodsecurity3.

Libmodesecurity — это библиотека Modsecurity, которая управляет HTTP-фильтрацией для ваших приложений. Есть два способа его установки. Вы можете использовать менеджер пакетов apt, как показано ниже.

sudo apt install libmodsecurity3

Другой подход — установить его из источника, который предпочтительнее, поскольку он предоставляет вам последнюю версию. Чтобы начать установку Libmodsecurity из исходного кода, клонируйте репозиторий git, как показано:

git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity /usr/local/src/ModSecurity/

Перейдите в клонированный каталог:

cd /usr/local/src/ModSecurity/

Сделайте упор на установку субмодулей

sudo git submodule init
sudo git submodule update

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

sudo ./build.sh 
sudo ./configure

Еще раз проигнорируйте ошибку, показанную ниже.

fatal: No names found, cannot describe anything.

Затем скомпилируйте исходный код и установите другие утилиты, используя следующую команду make. Это занимает около 25 минут и требует некоторого терпения.

sudo make -j4

После завершения установите библиотеки.

sudo make install

Шаг 5. Загрузите и скомпилируйте коннектор ModSecurity v3 Nginx.

Следующим шагом будет загрузка и компиляция коннектора ModSecurity Nginx. Коннектор, как следует из названия, связывает библиотеку Libmodsecurity с веб-сервером Nginx. Чтобы загрузить соединитель Modsecurity, клонируйте его из репозитория GitHub следующим образом.

git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git /usr/local/src/ModSecurity-nginx/

Перейдите в клонированный каталог.

cd /usr/local/src/nginx/nginx-1.21.3/

Продолжите и установите зависимости сборки

sudo apt build-dep nginx
sudo apt install uuid-dev

Затем скомпилируйте модуль ModSecurity Nginx Connector с флагом --with-compat. Опция --with-compat делает модуль ModSecurity Nginx Connector двоично совместимым с текущей библиотекой Nginx.

sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx

Как только это будет сделано, создайте модуль ModSecurity Nginx Connector с помощью команды make.

sudo make modules

Модуль сохраняется как objs/ngx_http_modsecurity_module.so. Вам необходимо скопировать этот модуль в каталог /usr/share/nginx/modules/ следующим образом.

sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/

Шаг 6. Загрузите модуль соединителя ModSecurity Nginx.

Чтобы загрузить модуль соединителя Nginx, сначала откройте основной файл конфигурации Nginx.

sudo vim /etc/nginx/nginx.conf

Добавьте следующую строку чуть ниже первых нескольких строк.

load_module modules/ngx_http_modsecurity_module.so;

Кроме того, добавьте следующие строки в раздел http {...}. Это включает ModSecurity для всех виртуальных хостов Nginx.

modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;

Сохраните изменения и выйдите из файла.

Далее создайте каталог /etc/nginx/modsec/, в котором будет храниться конфигурация ModSecurity.

sudo mkdir /etc/nginx/modsec/

Затем скопируйте файл конфигурации ModSecurity следующим образом.

sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf

Затем откройте файл конфигурации.

sudo vim /etc/nginx/modsec/modsecurity.conf

Найдите строку, начинающуюся с директивы SecRuleEngine.

SecRuleEngine DetectionOnly

Эта строка предписывает ModSecurity регистрировать только HTTP-транзакции, но не предпринимает никаких действий в случае атаки веб-приложения. Вам необходимо изменить это, чтобы Modsecurity не только обнаруживал, но и блокировал веб-атаки.

Измените строку на строку ниже

SecRuleEngine On

Сохраните изменения и выйдите из файла.

Затем создайте файл /etc/nginx/modsec/main.conf.

sudo vim  /etc/nginx/modsec/main.conf

Добавьте эту строку для ссылки на файл конфигурации /etc/nginx/modsec/modsecurity.conf.

Include /etc/nginx/modsec/modsecurity.conf

Сохраните изменения и выйдите из файла.

Кроме того, скопируйте файл сопоставления Юникода.

sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/

Затем проверьте конфигурацию Nginx.

sudo nginx -t

Тест должен пройти успешно. Если нет, вернитесь и проверьте, все ли внесенные изменения верны.

Затем, наконец, перезапустите Nginx, чтобы применить все внесенные изменения.

sudo systemctl restart nginx

И убедитесь, что Nginx работает должным образом.

sudo systemctl status nginx

Шаг 7. Загрузите набор основных правил OWASP.

Чтобы ModSecurity защитил ваши веб-приложения, вам необходимо указать правила, которые будут обнаруживать подозрительные действия и блокировать их. Для начала желательно установить существующие наборы правил, которые помогут вам освоиться.

Основной набор правил OWASP (CRS) – это бесплатный набор правил с открытым исходным кодом, поддерживаемый сообществом, который предоставляет правила для отражения распространенных векторов атак, таких как внедрение SQL-кода, Межсайтовый скриптинг (XSS).

Загрузите основной набор правил OWASP с Github, как показано, с помощью команды wget.

wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.tar.gz

Извлеките сжатый файл.

tar xvf v3.3.0.tar.gz

Обязательно переместите несжатый каталог по пути /etc/nginx/modsec/.

sudo mv coreruleset-3.3.0/ /etc/nginx/modsec/

Затем переименуйте файл crs-setup.conf.example в crs-setup.conf.

sudo mv /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf.example /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf

Снова вернитесь к файлу конфигурации ModSecurity.

sudo vim /etc/nginx/modsec/main.conf

И добавьте следующие строки.

Include /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf
Include /etc/nginx/modsec/coreruleset-3.3.0/rules/*.conf

Теперь в файле должно быть 3 строки:

Сохраните файл и еще раз перезапустите Nginx.

sudo systemctl restart nginx

Шаг 8. Тестирование ModSecurity

Наконец, мы собираемся провести тест ModSecurity и подтвердить, что он может обнаруживать и блокировать подозрительный HTTP-трафик.

Мы собираемся отредактировать файл конфигурации ModSecurity и создать правило блокировки, которое будет блокировать доступ к определенному URL-адресу при доступе через веб-браузер.

sudo vim /etc/nginx/modsec/modsecurity.conf

Добавьте эту строку чуть ниже директивы SecRuleEngine On.

SecRule ARGS:testparam "@contains test" "id:254,deny,status:403,msg:'Test Successful'"

Вы можете установить для тегов id и msg нужные значения.

Сохраните изменения и перезапустите Nginx.

sudo systemctl restart nginx

Теперь запустите браузер и перейдите по указанному ниже URL-адресу с суффиксом ?testparam=test.

http://server-ip/?testparam=test

Вы должны получить ошибку 403 «Запрещено». Это означает, что вы пытаетесь получить доступ к запрещенному ресурсу на веб-сервере.

Кроме того, вы можете проверить журналы ошибок Nginx, чтобы убедиться, что клиент заблокирован.

cat /var/log/nginx/error.log | grep "Test Successful"

Это был обзор того, как можно настроить Modsecurity с помощью Nginx в Debian и Ubuntu. Мы надеемся, что это было полезно.