Защита Apache с помощью ModSecurity

Способов защиты Web-сервера существует огромное множество. Начинать защиту нужно с обновления ПО и скрытия версий используемого ПО (как скрыть версии Web-сервера я рассказывал в статье Скрываем отображение версий Apache, Nginx и PHP). Далее можно установить WAF (Web Application Firewall) — файрвол для веб-приложений. ModSecurity — это файрвол выполненный в виде модуля для Apache, что позволяет его легко установить и использовать. Защититься с помощью ModSecurity можно от:

  • SQL-injection;
  • XSS;
  • троянов;
  • ботов;
  • захватов сеанса;
  • и многих других атак и взломов.

Начнем установку ModSecurity.
Для начала нам потребуется установить требуемый модуль:

и включить его:

По умолчанию правила фильтрации не включены, а сами правила имеют расширение .conf и подгружаются из директории /etc/modsecurity/ (местоположение правил указывается в файле /etc/apache2/mods-available/security2.conf) и выглядит следующим образом:

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

Добавим новые директории, в которых будут лежать наше правила.

crs — для базового набора правил;
custom — для своих правил.

Добавим свою директорию для дальнейшего расширения списка правил:

и создадим требуемые директории:

После этого включим базовую конфигурацию. Для этого скопируем или переименуем файл настроек по умолчанию (он находится в директории /etc/modsecurity/) modsecurity.conf-recommended в файл modsecurity.conf

немного изменим его:

первым заменим директиву SecRuleEngine DetectionOnly на

включив блокирование, а не только отслеживание.Все доступные параметры: On, Off, DetectionOnly.

Разрешим сканировать содержимое тела запросов:

Ограничим размер POST запросов в параметре SecRequestBodyLimit. Если нет механизма загрузки файлов на сервер, то можно сильно ограничить передаваемые данные. Мы ограничим до 15MB. В байтах это будет 1024*1024*15=15728640

Ограничим хранимый в памяти POST запрос при передаче файла (за исключением размера самого файла), излишки будут свопиться на диск, что немного замедляет работу, но не дает переполнить память ни при каких условиях. Это делается в параметре SecRequestBodyInMemoryLimit. Ограничим 128Kb.

Основные правила настроены, а расширенный набор можно скачать на официальной странице OWASP ModSecurity Core Rule Set и положить *.conf файлы в ранее указанную директорию /etc/modsecurity/rules/crs, где находятся наши дополнительные правила.

В Debian дополнительные правила уже входят в пакет и находятся по адресу /usr/share/modsecurity-crs/.
Включим их создав симлинки в папку crs:

Так же для некоторых наборов правил требуются *.data файлы. Поэтому на них тоже нужно делать симлинки.
Я включил базовую настройку modsecurity_crs_10_setup.conf и некоторые правила из папки base_rules.
Не стоит включать все правила сразу. С большой вероятность это вызовет блокировку Web сервера.

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

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

Так же можно отключить конкретные правила для определенной директории или файла, например WordPress плохо дружит с правилами 981231, 950901 и 981172 (хотя и с многими другими тоже, но статья не об этом).

В качестве примера выключим ModSecurity для phpMyAdmin.

Для отключения ModSecurity откроем файл конфигурации Apache для phpMyAdmin.
В Debian конфигурация phpMyAdmin находится по адресу /etc/phpmyadmin/apache.conf и имеет кучу символьных ссылок в самой директории Apache.

Откроем ее и в секцию добавим блок, выключающий ModSecurity.

Остается только перезапустить Apache.

Теперь пара слов о грамотном внедрении. Многие правила могут вызвать отказ работы Web приложения. Из-за того, что ModSecurity посчитает запросы вредоносными. Поэтому лучше сначала включить только режим детектирования (SecRuleEngine DetectionOnly) и смотреть какие именно правила и когда применяются.
Посмотреть какие правила отрабатываются можно в файле логов. По умолчанию он лежит по адресу /var/log/apache2/modsec_audit.log. В этом файле пишется вся информация о работе ModSecurity.

Заказать Аудит Безопасности или Пентест Вашей IT-инфраструктуры

Быть уверенным в своей IT-инфраструктуре — это быть уверенным в завтрашнем дне.

Для того, чтобы сделать заказ:

Заполните форму обратной связи и мы обязательно с вам свяжемся:
Форма обратной связи
Позвоните нам по телефону:
+7(909)952-44-33
Напишите нам на электронную почту:
order@blackdiver.net
Напишите нам в Telegram:
Telegram
Другие способы связи Вы сможете найти в разделе Контакты.