Способов защиты Web-сервера существует огромное множество. Начинать защиту нужно с обновления ПО и скрытия версий используемого ПО (как скрыть версии Web-сервера я рассказывал в статье Скрываем отображение версий Apache, Nginx и PHP). Далее можно установить WAF (Web Application Firewall) – файрвол для веб-приложений. ModSecurity – это файрвол выполненный в виде модуля для Apache, что позволяет его легко установить и использовать. Защититься с помощью ModSecurity можно от:
- SQL-injection;
- XSS;
- троянов;
- ботов;
- захватов сеанса;
- и многих других атак и взломов.
Начнем установку ModSecurity.
Для начала нам потребуется установить требуемый модуль:
apt-get install libapache2-mod-security2
и включить его:
a2enmod security2
По умолчанию правила фильтрации не включены, а сами правила имеют расширение .conf и подгружаются из директории /etc/modsecurity/ (местоположение правил указывается в файле /etc/apache2/mods-available/security2.conf) и выглядит следующим образом:
IncludeOptional /etc/modsecurity/*.conf
В списке может быть несколько директорий из которых подгружаются правила.
Добавим новые директории, в которых будут лежать наше правила.
crs – для базового набора правил;
custom – для своих правил.
Добавим свою директорию для дальнейшего расширения списка правил:
IncludeOptional /etc/modsecurity/rules/crs/*.conf
IncludeOptional /etc/modsecurity/rules/custom/*.conf
и создадим требуемые директории:
mkdir /etc/modsecurity/rules/crs
mkdir /etc/modsecurity/rules/custom
После этого включим базовую конфигурацию. Для этого скопируем или переименуем файл настроек по умолчанию (он находится в директории /etc/modsecurity/) modsecurity.conf-recommended в файл modsecurity.conf
cp /etc/modsecurity/modsecurity.conf{-recommended,}
немного изменим его:
первым заменим директиву SecRuleEngine DetectionOnly на
SecRuleEngine On
включив блокирование, а не только отслеживание.Все доступные параметры: On, Off, DetectionOnly.
Разрешим сканировать содержимое тела запросов:
SecRequestBodyAccess On
Ограничим размер POST запросов в параметре SecRequestBodyLimit. Если нет механизма загрузки файлов на сервер, то можно сильно ограничить передаваемые данные. Мы ограничим до 15MB. В байтах это будет 1024*1024*15=15728640
SecRequestBodyLimit 15728640
Ограничим хранимый в памяти POST запрос при передаче файла (за исключением размера самого файла), излишки будут свопиться на диск, что немного замедляет работу, но не дает переполнить память ни при каких условиях. Это делается в параметре SecRequestBodyInMemoryLimit. Ограничим 128Kb.
SecRequestBodyInMemoryLimit 131072
Основные правила настроены, а расширенный набор можно скачать на официальной странице OWASP ModSecurity Core Rule Set и положить *.conf файлы в ранее указанную директорию /etc/modsecurity/rules/crs, где находятся наши дополнительные правила.
В Debian дополнительные правила уже входят в пакет и находятся по адресу /usr/share/modsecurity-crs/.
Включим их создав симлинки в папку crs:
ln -s /usr/share/modsecurity-crs/modsecurity_crs_10_setup.conf /etc/modsecurity/rules/crs/modsecurity_crs_10_setup.conf
Так же для некоторых наборов правил требуются *.data файлы. Поэтому на них тоже нужно делать симлинки.
Я включил базовую настройку modsecurity_crs_10_setup.conf и некоторые правила из папки base_rules.
Не стоит включать все правила сразу. С большой вероятность это вызовет блокировку Web сервера.
Теперь остается только исключить директории, в которых ModSecurity ну нужен или мешается.
Это делается с помощью исключения из списка контролируемых в настройке хостов Web-сервера Apache. Для исключения целиком виртуального хоста используем следующий код:
SecRuleEngine Off
Для исключения конкретной директории можно воспользоваться таким кодом:
SecRuleEngine Off
Так же можно отключить конкретные правила для определенной директории или файла, например WordPress плохо дружит с правилами 981231, 950901 и 981172 (хотя и с многими другими тоже, но статья не об этом).
SecRuleRemoveById 960015 950901
SecRuleRemoveById 960015
В качестве примера выключим ModSecurity для phpMyAdmin.
Для отключения ModSecurity откроем файл конфигурации Apache для phpMyAdmin.
В Debian конфигурация phpMyAdmin находится по адресу /etc/phpmyadmin/apache.conf и имеет кучу символьных ссылок в самой директории Apache.
Откроем ее и в секцию
...
...
SecRuleEngine Off
...
...
Остается только перезапустить Apache.
service apache2 restart
Теперь пара слов о грамотном внедрении. Многие правила могут вызвать отказ работы Web приложения. Из-за того, что ModSecurity посчитает запросы вредоносными. Поэтому лучше сначала включить только режим детектирования (SecRuleEngine DetectionOnly) и смотреть какие именно правила и когда применяются.
Посмотреть какие правила отрабатываются можно в файле логов. По умолчанию он лежит по адресу /var/log/apache2/modsec_audit.log. В этом файле пишется вся информация о работе ModSecurity.
Заказать Аудит Безопасности или Пентест Вашей IT-инфраструктурыБыть уверенным в своей IT-инфраструктуре – это быть уверенным в завтрашнем дне. Для того, чтобы сделать заказ:
|