Как установить ModSecurity 3, Nginx, OWASP CRS в Ubuntu 22.04

ubuntu logo Applications

В цифровую эпоху безопасность веб-приложений является первостепенной задачей. На карту поставлены целостность, доступность и конфиденциальность данных вашей организации. Таким образом, необходимость в надежных мерах безопасности невозможно переоценить. Одним из таких комплексных решений с открытым исходным кодом является ModSecurity.

Table of Contents

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

Последняя версия, ModSecurity 3, была разработана специально для улучшения совместимости и упрощения интеграции с различными веб-серверами, включая NGINX.

Зачем использовать ModSecurity 3 с NGINX на сервере Ubuntu?

Интеграция ModSecurity 3 с NGINX на сервере Ubuntu дает массу преимуществ:

  • Расширенная защита: ModSecurity 3 защищает ваши веб-приложения от широкого спектра атак, включая SQL-инъекции, межсайтовый скриптинг (XSS), локальное включение файлов (LFI) и многое другое. Он обеспечивает надежную защиту от 10 лучших рисков безопасности веб-приложений по версии OWASP.
  • Улучшенная совместимость: ModSecurity 3 создан для бесшовной интеграции с NGINX, что повышает его возможности безопасности без снижения производительности.
  • Поддержка пользовательских правил: ModSecurity позволяет создавать пользовательские наборы правил, что дает возможность адаптировать систему безопасности к специфическим потребностям ваших веб-приложений.
  • Подробное протоколирование и мониторинг: ModSecurity предоставляет полные журналы всех HTTP-транзакций, что облегчает мониторинг трафика и выявление потенциальных угроз безопасности.
  • Открытый исходный код и поддержка сообщества: ModSecurity - это проект с открытым исходным кодом и активным сообществом, обеспечивающим регулярные обновления, новые функции и постоянную поддержку. Это позволяет создавать экономически эффективные, прозрачные и адаптируемые решения безопасности.

Поскольку Ubuntu является одним из самых популярных вариантов веб-серверов благодаря своей стабильности, безопасности и удобству использования, неудивительно, что многие предпочитают интегрировать ModSecurity 3 с NGINX на сервере Ubuntu.

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

  • Стабильность и безопасность: Серверы Ubuntu известны своей стабильностью и безопасной архитектурой, что делает их идеальным выбором для размещения веб-приложений.
  • Простота использования: Удобный дизайн Ubuntu и обширные онлайн-ресурсы упрощают управление и обслуживание сервера.
  • Обширная поддержка: Ubuntu имеет большое, активное сообщество и долгосрочные релизы поддержки, что гарантирует вам доступ к помощи и обновлениям, когда они вам нужны.

Этапы предустановки

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

Шаг 1: Обновление Ubuntu

Первым шагом на пути к безопасному и эффективному серверу является поддержание его в актуальном состоянии. Это гарантирует, что все пакеты программного обеспечения имеют последние исправления безопасности и улучшения производительности. Выполните следующую команду для обновления системы:

Эта команда сначала обновляет списки пакетов для обновлений (sudo apt update).

Шаг 2: Удаление ранее существовавшей установки Nginx

Если у вас уже установлена Nginx, мы рекомендуем удалить ее и установить последнюю версию из пользовательского PPA, поддерживаемого Ондржеем Суры. Эта версия поставляется с дополнительными динамическими модулями, такими как модуль Brotli, для улучшения сжатия.

Сначала остановите текущую службу Nginx, выполнив следующие действия:

Затем удалите существующую установку Nginx с помощью следующих команд:

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

Шаг 3: Добавление последней версии Nginx PPA

После удаления старой службы Nginx пришло время добавить новый, актуальный PPA (Personal Package Archive) для Nginx. Вы можете выбрать стабильную или основную версию. Обычно рекомендуется основная версия, так как она включает в себя последние функции и улучшения.

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

Или для основного PPA, используйте:

Шаг 4: Обновление индекса пакетов

После импорта нужного репозитория необходимо обновить список источников APT. Это гарантирует, что система знает о новых пакетах в добавленном хранилище. Обновите список источников с помощью следующих действий:

Теперь установите Nginx с помощью следующей команды:

Во время установки вам может быть предложено сохранить или заменить существующий файл конфигурации /etc/nginx/nginx.conf. Обычно рекомендуется сохранить текущий конфигурационный файл, нажав n.

Шаг 5: Добавление исходного кода Nginx в репозиторий

По умолчанию исходный код Nginx не включается при установке из PPA. Чтобы скомпилировать Modsecurity далее в этом руководстве, вам нужно будет включить эту функцию, чтобы загрузить исходный код Nginx вручную.

Откройте файл конфигурации, расположенный в /etc/apt/sources.list.d:

Найдите строку, которая начинается с #

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

Подводя итог, можно сказать, что использование ModSecurity 3 с NGINX на сервере Ubuntu обеспечивает эффективное, настраиваемое и комплексное решение безопасности для ваших веб-приложений. Это руководство продемонстрирует, как установить ModSecurity 3 с набором правил OWASP Core Rule Set на Ubuntu 22.04 Jammy Jellyfish или Ubuntu 20.04 Focal Fossa, заложив прочный фундамент для вас

Установка Nginx из исходных кодов

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

Шаг 1: Настройка структуры каталогов

Во-первых, давайте создадим каталог, в который мы будем загружать и хранить исходный код Nginx. Вот команда для создания каталога и перехода в него:

Эта команда создает каталог /usr/local/src/nginx и затем изменяет текущий каталог на этот вновь созданный каталог.

Шаг 2: Установка зависимостей и загрузка исходного кода

Прежде чем загружать исходный код, нам необходимо установить пакет dpkg-dev. Этот пакет предоставляет несколько инструментов разработки, необходимых для распаковки, сборки и загрузки исходных пакетов Debian. Установите его с помощью следующей команды:

Имея необходимые инструменты, мы готовы загрузить исходный код Nginx. Для этого выполните следующую команду:

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

пример загрузки исходного кода nginx для modsecurity 3 в ubuntu linux

Шаг 3: Проверка исходной версии

После загрузки исходного кода необходимо убедиться, что загруженная версия исходного кода соответствует установленной версии Nginx. Различия между этими версиями могут привести к проблемам совместимости, поэтому этот шаг проверки очень важен.

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

 

пример исходного кода nginx для modsecurity 3 на ubuntu linux

В выводе вы должны увидеть несколько файлов и каталогов, связанных с Nginx.

Далее убедитесь, что версия исходного пакета соответствует версии Nginx, установленной в вашей системе Ubuntu. Проверить версию установленного Nginx можно с помощью следующей команды:

На выходе будет показана версия установленного Nginx. Убедитесь, что эта версия совпадает с версией исходного кода, который вы скачали. Если они не совпадают, вам нужно загрузить правильную версию исходного кода Nginx.

Установка libmodsecurity3 для ModSecurity

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

Шаг 1: Клонирование репозитория ModSecurity

Для начала нам нужно получить исходный код libmodsecurity3 из его репозитория на GitHub. Для этого мы будем использовать Git, широко распространенную распределенную систему контроля версий. Если Git еще не установлен в вашей системе, вы можете добавить его с помощью следующей команды:

Прежде чем клонировать репозиторий, рекомендуется настроить права собственности на каталог, чтобы избежать необходимости использования привилегий root (sudo) для большинства команд:

эта команда рекурсивно изменяет право собственности на каталог /usr/local/src/ на текущего пользователя.

Далее, давайте клонируем репозиторий libmodsecurity3. Мы будем использовать неглубокое клонирование (--depth 1) для экономии пропускной способности и хранения. Это означает, что мы получим только последнюю ревизию ветки v3/master:

После клонирования репозитория измените свой рабочий каталог на новый клонированный репозиторий:

Шаг 2: Установка зависимостей libmodsecurity3

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

Эти зависимости необходимы для успешной компиляции Nginx с ModSecurity начиная с версии 1.21.4. Известно, что этот шаг может вызвать проблемы, но установка правильных зависимостей должна решить эту проблему почти во всех случаях.

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

Шаг 3: Создание среды ModSecurity

Теперь, когда мы подготовили наше рабочее пространство, пришло время создать среду ModSecurity. Сначала запустите сценарий сборки:

Затем настройте окружение:

Во время этого процесса вы можете столкнуться с ошибкой fatal: No names found, cannot describe anything. Не волнуйтесь, это сообщение об ошибке можно смело игнорировать.

Шаг 4: Компиляция исходного кода ModSecurity

Собрав и настроив окружение для libmodsecurity3, мы готовы скомпилировать его. Вот команда для этого:

Для тех, кто работает на высокопроизводительных серверах, вы можете ускорить процесс компиляции, запустив make с опцией -j, за которой следует число ядер процессора вашего сервера. Например, если ваш сервер имеет шесть процессорных ядер, вы можете использовать:

Шаг 5: Установка скомпилированного кода

После компиляции исходного кода последним шагом будет его установка:

Эта команда устанавливает libmodsecurity3 в каталог /usr/local/modsecurity/, на который вы будете ссылаться далее в этом руководстве.

Установка коннектора ModSecurity-nginx

В этом разделе мы проведем вас через процесс установки коннектора ModSecurity-nginx. Этот важный компонент служит связующим звеном между Nginx, популярным веб-сервером, и ModSecurity, обеспечивая бесперебойную связь между ними.

Шаг 1: Клонирование репозитория ModSecurity-nginx

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

Эта команда получает только последнюю ревизию репозитория ModSecurity-nginx, что позволяет экономить пропускную способность и дисковое пространство.

Шаг 2: Установка зависимостей ModSecurity-nginx

Далее нам нужно перейти в исходный каталог Nginx. Это можно сделать, выполнив следующую команду cd:

В исходном каталоге Nginx мы установим зависимости, необходимые для коннектора ModSecurity-nginx. Выполните эту команду для получения и установки необходимых зависимостей:

Шаг 3: Компиляция коннектора ModSecurity-nginx

Когда все зависимости установлены, мы можем приступить к компиляции коннектора ModSecurity-nginx. Для этого нам нужно выполнить команду configure с флагом --with-compat и опцией --add-dynamic-module:

Флаг --with-compat обеспечивает совместимость с различными системами, а опция --add-dynamic-module определяет расположение коннектора ModSecurity-nginx.

После настройки среды создайте динамические модули, выполнив команду make:

Шаг 4: Перемещение динамического модуля

Последним шагом в этом процессе является перемещение динамического модуля в соответствующую директорию. Команда make modules создает динамический модуль в каталоге objs/ngx_http_modsecurity_module.so. Вам необходимо переместить этот модуль в каталог /etc/nginx/modules/. Для этого выполните следующую команду:

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

Настройка коннектора ModSecurity-nginx в Nginx

После успешной установки коннектора ModSecurity-nginx следующим шагом будет его загрузка в Nginx и соответствующая настройка. Для этого необходимо отредактировать конфигурационный файл Nginx, расположенный по адресу /etc/nginx/nginx.conf, что обеспечит работу ModSecurity с вашим веб-сервером Nginx.

Шаг 1: Включение ModSecurity в nginx.conf

Для начала вам необходимо указать расположение модуля ModSecurity в файле nginx.conf. Для этого откройте файл nginx.conf с помощью текстового редактора. Для этого примера мы будем использовать nano:

В верхней части файла добавьте следующую строку:

Эта команда указывает Nginx загрузить модуль ModSecurity. Если вы сохранили модуль в другом месте, убедитесь, что указали полный путь в этой команде.

Далее добавьте следующий код в раздел http {}:

Приведенные выше команды включают ModSecurity и указывают расположение файла правил ModSecurity. Сохраните изменения (Ctrl+O) и выйдите из файла (Ctrl+X).

Шаг 2: Создание и настройка каталога и файлов для ModSecurity

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

Затем скопируйте пример конфигурационного файла ModSecurity из клонированной директории Git в только что созданную директорию:

Теперь давайте изменим файл modsecurity.conf. По умолчанию механизм правил ModSecurity работает в режиме DetectionOnly, который обнаруживает вредоносное поведение, но не блокирует его. Чтобы изменить это поведение, откройте файл modsecurity.conf:

Найдите строку SecRuleEngine DetectionOnly и измените ее на:

Далее найдите строку SecAuditLogParts:

Текущая конфигурация не является правильной. Измените строку на следующую:

Теперь сохраните (Ctrl+O) и выйдите (Ctrl+X) из файла.

Шаг 3: Создание файла modsec-config.conf

Следующим шагом будет создание файла modsec-config.conf. Этот файл будет включать файл modsecurity.conf и другие наборы правил, такие как OWASP CRS, позже. Создайте и откройте файл с помощью этой команды:

Находясь внутри файла, добавьте следующую строку:

Сохраните (Ctrl+O) и выйдите (Ctrl+X) из файла.

Наконец, скопируйте файл modSecurity unicode.mapping с помощью команды cp:

Шаг 4: Проверка конфигурации

Прежде чем продолжить, необходимо проверить конфигурацию. Выполните следующую команду, чтобы выполнить пробный запуск службы Nginx:

Если все настроено правильно, вы должны увидеть следующее сообщение:

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

Шаг 5: Применение изменений конфигурации

После того как вы проверили свою конфигурацию и убедились в отсутствии синтаксических ошибок, необходимо перезапустить службу Nginx, чтобы изменения вступили в силу. Это критически важный шаг в обеспечении работоспособности ModSecurity.

Используйте команду systemctl для перезапуска службы Nginx:

Эта команда предписывает вашей системе остановить, а затем немедленно запустить службу Nginx. После этого в службе Nginx должен быть включен и работать WAF ModSecurity.

Развертывание набора основных правил OWASP для ModSecurity

В этом разделе мы повысим безопасность нашего веб-сервера, развернув OWASP Core Rule Set (CRS) для ModSecurity. Хотя ModSecurity является мощным инструментом, сам по себе он не обеспечивает защиту. Для его эффективной работы необходим набор правил.

OWASP CRS - это широко признанный и уважаемый набор правил для брандмауэров веб-приложений (WAF). Эти правила действуют как надежный защитный барьер против большинства возникающих угроз в Интернете, выявляя потенциальные атаки и блокируя их. Это фундаментальный ресурс, на котором основывают свои правила многие аналогичные системы, и, приняв его, вы уже находитесь на верном пути к защите своего сервера.

Шаг 1: Доступ к каталогу ModSecurity

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

По желанию, вы можете изменить права собственности на этот каталог на вашего текущего пользователя, чтобы избежать необходимости использовать команду sudo для последующих шагов:

Шаг 2: Загрузка архива OWASP CRS

Далее мы загрузим архив OWASP CRS с помощью команды wget. На момент написания статьи последней стабильной версией является 3.3.5, но вы должны проверить последнюю версию на странице OWASP Release tag.

Для тех, кто предпочитает оставаться в курсе последних событий, можно загрузить версию ночной сборки. Эта версия содержит последние изменения и улучшения, но может быть менее стабильной и требует частых обновлений. Следует отметить, что эта версия должна использоваться только опытными пользователями:

Шаг 3: Распаковка архива CRS

После завершения загрузки распакуйте архив с помощью команды tar:

Не забудьте заменить v3.3.4.tar.gz на имя файла, который вы скачали, если вы используете другую версию.

Шаг 4: Настройка CRS

Как и конфигурация ModSecurity, с которой мы имели дело ранее, OWASP CRS поставляется с образцом конфигурационного файла, который нам нужно переименовать. Используя команду cp, мы создадим копию этого файла, сохранив оригинал в качестве резервной копии:

Шаг 5: Включение правил OWASP CRS

Чтобы включить правила OWASP CRS, нам нужно изменить файл modsec-config.conf:

В этом файле добавьте следующие две строки, чтобы включить конфигурацию и правила CRS:

Сохраните файл (CTRL+O) и выйдите (CTRL+T).

Не забудьте заменить coreruleset-3.3.4 на версию, которую вы скачали, если она отличается.

Сохраните изменения (Ctrl+O) и выйдите из текстового редактора (Ctrl+X).

Шаг 6: Проверка конфигурации и перезапуск Nginx

Теперь, когда мы внесли существенные изменения в конфигурацию Nginx, очень важно проверить все, чтобы убедиться в отсутствии синтаксических ошибок или неправильной конфигурации. Этот шаг проверки похож на "генеральную репетицию" перед фактическим запуском обновленной службы.

Чтобы выполнить этот "пробный запуск", используйте следующую команду:

Это сообщение говорит нам о том, что наша конфигурация верна и что наши изменения не нарушат работу сервиса.

Однако если вы столкнулись с какими-либо сообщениями об ошибках, внимательно изучите их в поисках подсказок о том, что могло пойти не так. Сообщения об ошибках часто весьма информативны и могут навести вас на проблемный раздел ваших конфигурационных файлов.

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

Понимание и использование набора основных правил OWASP

После установки и настройки ModSecurity и набора основных правил OWASP (CRS) на вашем веб-сервере Nginx пришло время углубиться в понимание и использование CRS. CRS богат опциями, и, хотя настройки по умолчанию обеспечивают немедленную защиту широкого спектра для большинства серверов, тщательное изучение его возможностей поможет вам настроить его функциональность в соответствии с вашими конкретными потребностями.

Навигация по конфигурации CRS

Для начала давайте ознакомимся с файлом конфигурации CRS. Именно здесь вы сможете настроить различные параметры, предоставляемые CRS. Чтобы открыть файл конфигурации, выполните следующую команду:

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

Режимы подсчета баллов в OWASP CRS

CRS работает с использованием системы оценок. Существует два основных режима работы:

Режим оценки аномалий (Anomaly Scoring Mode)

Это режим по умолчанию и рекомендуемый режим. В этом режиме каждое правило, соответствующее запросу или ответу, увеличивает "балл аномалии". После того, как все входящие и исходящие правила будут оценены, общий балл аномалий сверяется с пороговым значением. Если показатель превышает пороговое значение, предпринимается разрушительное действие (по умолчанию возвращается ошибка HTTP 403). Этот режим обеспечивает большую гибкость в настройке политик блокирования и создает высокоинформативные журналы аудита.

Самодостаточный режим

В этом режиме соответствующее правило приводит к немедленному действию, прекращая дальнейшую оценку. Хотя этот режим может снизить использование ресурсов, он предлагает меньшую гибкость в политике блокирования и менее информативные журналы аудита. В журнал записывается только первая обнаруженная угроза, как во многих системах обнаружения вторжений (IDS).

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

Уровни паранойи: Баланс между безопасностью и удобством использования

Уникальной особенностью CRS являются уровни паранойи. Эти уровни позволяют вам контролировать, сколько проверок правил вносят вклад в оценку аномалий, позволяя, по сути, настраивать чувствительность CRS.

Существует четыре уровня паранойи:

  • Уровень паранойи 1: Это уровень по умолчанию, рекомендуемый для большинства пользователей. Он включает большинство основных правил и должен редко вызывать ложные срабатывания (FPs), или легитимные запросы ошибочно идентифицируются как вредоносные.
  • Уровень паранойи 2: Этот уровень предназначен для опытных пользователей и включает дополнительные правила, такие как защита от SQL- и XSS-инъекций на основе регекса. На этом уровне возможны некоторые ложные срабатывания.
  • Уровень паранойи 3: Для опытных пользователей этот уровень включает еще больше правил и ограничений на использование специальных символов. На этом уровне ожидается больше ложных срабатываний.
  • Уровень паранойи 4: Рекомендуется только в исключительных случаях. Этот уровень еще больше ограничивает специальные символы и, скорее всего, приведет к большому количеству ложных срабатываний.

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

Настройка правил OWASP CRS (дополнительное обучение)

Преимуществом OWASP CRS является его гибкость, позволяющая создавать и изменять правила в соответствии с вашими конкретными потребностями. Давайте подробнее рассмотрим, как вы можете подойти к решению этой задачи.

Открытие файлов правил

Файлы правил расположены в каталоге rules в каталоге coreruleset-3.3.4. Эти файлы содержат наборы правил, которые CRS использует для проверки входящего и исходящего HTTP-трафика. Вы можете открыть эти файлы, чтобы просмотреть существующие правила и добавить свои собственные правила.

Это откроет файл, содержащий правила исключения, которые обрабатываются перед правилами CRS.

Понимание структуры правил

Каждое правило в ModSecurity имеет уникальную структуру. Типичное правило может выглядеть следующим образом:

Вот краткое описание компонентов правила:

  • SecRule: Директива, с которой начинается правило.
  • ARGS: Переменная, которую нужно проверить. ARGS относится ко всем аргументам, включая GET, POST и cookies.
  • "@rx attack": Оператор и его аргумент. @rx - это регулярное выражение, а attack - шаблон для проверки.
  • "id:1234,phase:2,t:none,log,deny,msg:'Attempted attack'": Список действий правила. Он включает в себя уникальный идентификатор правила, фазу, в которой действует правило, преобразования, которые нужно применить (t:none означает отсутствие преобразований), действие, которое нужно предпринять, если правило соответствует (в данном случае зарегистрировать событие и отклонить запрос), и сообщение, которое нужно записать в журнал, если правило соответствует.

Создание пользовательских правил

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

Это правило будет блокировать любой запрос, включающий строку 'suspicious-user-agent' в заголовке user-agent.

Помните, что процесс создания пользовательских правил требует глубокого понимания HTTP, OWASP CRS и поведения вашего приложения. Будьте готовы к тщательному тестированию и корректировке по мере необходимости, чтобы не нарушить легитимный трафик.

Проверка внедрения OWASP CRS

После успешной установки OWASP CRS на вашем сервере необходимо протестировать его внедрение, чтобы убедиться, что он функционирует так, как ожидалось. Этот шаг очень важен, поскольку он проверяет эффективность развертывания правил безопасности и позволяет устранить любые потенциальные проблемы, которые могли возникнуть во время установки.

Выполнение тестового запроса

Для подтверждения эффективности OWASP CRS можно использовать специально созданный URL-адрес, который должен вызвать оповещение в случае правильного применения правил. Этот URL включает строку запроса, которая пытается выполнить команду, что является явным нарушением правил безопасности.

https://www.yourdomain.com/index.html?exec=/bin/bash

Замените yourdomain.com на ваше реальное доменное имя. Этот URL пытается передать команду /bin/bash через параметр exec в строке запроса.

Интерпретация ответа

Если OWASP CRS правильно настроен и работает, он должен определить этот вредоносный запрос и ответить ошибкой 403 Forbidden. Эта ошибка означает, что сервер понял запрос, но отказывается его авторизовать, что в данном случае является результатом нарушения правила ModSecurity.

Если вы получаете эту ошибку, это означает, что ModSecurity и OWASP CRS правильно настроены и активно защищают ваш сервер от вредоносных запросов.

Устранение неполадок

Если вы не получаете ошибку 403 Forbidden, это указывает на то, что что-то не так. Самая распространенная проблема - забыть переключить ModSecurity из режима DetectionOnly в On. Режим DetectionOnly регистрирует угрозы, но не блокирует их. Убедитесь, что вы сделали это изменение, как указано ранее в руководстве.

Управление ложными срабатываниями и исключениями пользовательских правил

В сфере кибербезопасности развертывание OWASP CRS вместе с ModSecurity часто служит эффективной линией защиты. Однако это может привести к ложным срабатываниям, на борьбу с которыми может уходить значительное количество вашего времени. Эти временные затраты, хотя и являются потенциально чрезмерными, часто оправдываются ценной защитой.

Борьба с ложными срабатываниями

Баланс между безопасностью и удобством использования - дело тонкое. Если уровень паранойи в правилах ModSecurity установлен слишком высоко, это может привести к чрезмерному количеству ложных срабатываний. Поэтому разумно начинать с более низкого уровня паранойи, позволяя набору правил работать в течение нескольких недель или месяцев с минимальным количеством ложных срабатываний. Этот начальный этап поможет вам ознакомиться с поведением и предупреждениями системы. Когда вы почувствуете себя комфортно, можно постепенно повышать уровень паранойи, чтобы не заваливать систему ложными срабатываниями сразу.

Исключение распространенных ложных срабатываний

ModSecurity предоставляет механизм для внесения в белый список распространенных действий, которые часто приводят к ложным срабатываниям. Эта функция особенно полезна для приложений, которые часто взаимодействуют с вашим сервером. Ниже приведен пример правила по умолчанию, которое включает такие действия в белый список:

Чтобы внести определенные приложения в белый список, откомментируйте соответствующие строки и оставьте номер (1) нетронутым. Для служб, которые вы не используете, например, Xenforo, измените (1) на (0). Это действие гарантирует, что вы не включите в белый список ненужные правила.

Упрощение синтаксиса

Для упрощения синтаксиса вы можете изменить команду, включив в нее только те приложения, которые вы хотите внести в белый список. Например, если вы используете WordPress, phpBB и phpMyAdmin, команда будет выглядеть следующим образом:

Такой упрощенный синтаксис облегчает чтение и поддержку.

Работа с пользовательскими исключениями

Для работы с пользовательскими исключениями необходимо активировать специальный файл. Этот шаг включает переименование файла REQUEST-900-EXCLUSION-RULES-BEFORE-CRS-SAMPLE.conf с помощью команды cp:

Каждое правило исключения должно иметь уникальный идентификатор. Если id правила повторяется, это приведет к ошибке на этапе тестирования службы Nginx.

Белые списки определенных путей и IP-адресов

Бывают случаи, когда определенные пути, часто связанные с определенными приложениями, вызывают ложные срабатывания. В таких ситуациях вы можете внести эти пути в белый список, чтобы исключить ненужные предупреждения. Вот как это можно сделать:

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

Иногда вы можете захотеть внести в белый список определенные IP-адреса, которые известны как безопасные. ModSecurity предоставляет опции и для этого:

## или ###

В этих примерах директива @ipMatch может использоваться для составления белых списков целых подсетей, что увеличивает универсальность вашей стратегии составления белых списков. Если вам нужно внести в черный список определенный IP-адрес или подсеть, просто замените allow на deny.

Уточнение исключений из правил

Хотя белый список целых путей или IP-адресов может быть эффективен для снижения количества ложных срабатываний, он также может непреднамеренно разрешать потенциально опасные запросы. Более точный подход заключается в отключении конкретных правил, вызывающих ложные срабатывания, а не белых списков целых путей. Однако такой подход требует больше времени и тестирования для точной настройки.

Например, допустим, правила с идентификаторами 941000 и 942999 продолжают вызывать ложные срабатывания для вашей области /admin/. Вы можете отключить эти конкретные правила с помощью директивы ruleRemoveById, как показано ниже:

При такой конфигурации только указанные правила будут отключены для пути /admin/, сохраняя высокий уровень защиты для остальной части вашего приложения.

Реализация ротации журналов для ModSecurity

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

Создание файла ротации журналов ModSecurity

Для начала давайте создадим конфигурационный файл для процесса ротации журналов. Этот файл будет определять, как и когда происходит ротация журналов. Мы можем поместить этот файл в каталог /etc/logrotate.d/, где утилита logrotate ищет свои конфигурационные файлы.

Используйте следующую команду, чтобы создать и открыть новый файл с именем modsec:

Команда nano запускает текстовый редактор в терминале, позволяя вам напрямую создавать и редактировать файл.

Определение правил ротации журналов

Внутри этого файла мы определим правила ротации журналов ModSecurity. Скопируйте и вставьте в файл следующий блок кода:

Давайте разберем, что делает каждая строка в этом блоке кода:

  • /var/log/modsec_audit.log: Это файл, который мы хотим обработать. В нем находится журнал аудита ModSecurity.
  • rotate 31: Эта директива означает, что logrotate должен сохранить 31 ротируемый файл журнала, прежде чем отбрасывать самые старые.
  • daily: Это указание logrotate ротировать файл журнала один раз в день.
  • missingok: Если файл журнала отсутствует, logrotate не будет выдавать сообщение об ошибке.
  • compress: Эта директива указывает logrotate сжимать повернутые файлы журнала для экономии места.
  • delaycompress: Откладывает сжатие предыдущего файла журнала до следующего цикла ротации. Это может быть полезно, если некоторые программы все еще пишут в файл.
    notifempty: Если файл журнала пуст, logrotate не будет его обрабатывать.

С этими настройками журналы ModSecurity будут ротироваться ежедневно, и вы сохраните месячный запас журналов. Однако вы можете изменить эти настройки, чтобы они лучше соответствовали вашим потребностям. Например, если вы предпочитаете хранить только недельные журналы, вы можете изменить параметр rotate 31 на rotate 7. Но имейте в виду, что для ModSecurity рекомендуется ежедневная ротация из-за потенциально большого размера журналов, а недельный файл журнала может быть довольно громоздким для управления и анализа.

Предотвращение обновлений Nginx с помощью APT-HOLD

Продвигаясь в сложном мире управления веб-серверами, важно понимать, что автоматические обновления системы, хотя в целом и полезны, иногда могут нарушить наши тщательно настроенные параметры. Это особенно верно, когда у нас есть настраиваемые или очень специфические конфигурации, как в случае с Nginx с ModSecurity. В таких случаях автоматические обновления Nginx могут потенциально перезаписать наши конфигурации или создать проблемы совместимости с текущей установкой. Следовательно, может быть полезно предотвратить автоматическое обновление Nginx. Мы можем добиться этого, используя функцию системы управления пакетами APT, известную как "APT-HOLD".

Понимание APT-HOLD

Команда apt-mark - это утилита, которая позволяет нам манипулировать статусом пакетов в системе управления пакетами APT. Одной из ее функций является опция "hold", которая может быть использована для пометки пакета как удерживаемого, что означает, что он не будет обновляться.

Применение APT-HOLD к Nginx

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

После выполнения этой команды система будет задерживать любые обновления для пакета Nginx до тех пор, пока вы вручную не измените этот параметр. Это гарантирует, что ваша конфигурация останется нетронутой и не будет затронута никакими автоматическими обновлениями системы.

Отмена APT-HOLD

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

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

Заключение

В ходе нашего совместного путешествия мы успешно установили ModSecurity 3, интегрировали его с Nginx и приняли OWASP CRS на систему Ubuntu Linux. Мы убедились, что наш веб-сервер теперь может похвастаться надежным брандмауэром с открытым исходным кодом, обеспечивающим надежную линию защиты от различных веб-атак. Это начинание, хотя и сложное, добавляет значительный уровень безопасности нашим веб-приложениям, защищая наши операции и данные.

Каждый шаг - от создания предварительных условий и установки ModSecurity до настройки Nginx и внедрения OWASP CRS - был важным элементом общей головоломки безопасности. Затем мы научились обрабатывать журналы, генерируемые ModSecurity, и управлять их размерами для оптимизации производительности. Наконец, мы нашли способ защитить нашу конкретную конфигурацию Nginx, отключив автоматические обновления. Весь этот процесс, несмотря на его подробность и тщательность, был необходим для обеспечения максимально возможной безопасности нашей конфигурации.

Avatar for Gnostis
Gnostis
Ubuntu
Добавить комментарий