Безопасность · 2 min read · Jan 11, 2026

Защитите свой Apache с помощью mod_security

Защитите свой Apache с помощью mod_security

Версия 1.0
Автор: Фалко Тимме

Эта статья показывает, как установить и настроить mod_security. mod_security — это модуль Apache (для Apache 1 и 2), который обеспечивает обнаружение и предотвращение вторжений для веб-приложений. Он направлен на защиту веб-приложений от известных и неизвестных атак, таких как SQL-инъекции, межсайтовый скриптинг, атаки обхода пути и т. д.

В первой главе я покажу, как установить mod_security на Debian Sarge, Ubuntu 6.06 LTS (Dapper Drake) и Fedora Core 5, а во второй главе я опишу, как настроить Apache для mod_security, что не зависит от используемого вами дистрибутива.

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

1 Установка

1.1 Debian Sarge

mod_security доступен как пакет Debian в стандартных репозиториях Debian, поэтому установка так же проста, как:

apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload

1.2 Ubuntu 6.06 LTS (Dapper Drake)

Установка точно такая же, как на Debian Sarge:

apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload

1.3 Fedora Core 5

На Fedora вы можете установить и активировать mod_security следующим образом:

yum install mod_security
/etc/init.d/httpd restart

Теперь вы должны найти файл /etc/httpd/conf.d/mod_security.conf, который уже содержит базовую конфигурацию mod_security:

vi /etc/httpd/conf.d/mod_security.conf

| # Пример конфигурационного файла для модуля mod_security Apache LoadModule security_module modules/mod_security.so # Включить или отключить фильтрующий движок SecFilterEngine On # Движок аудита работает независимо и # может быть включен или отключен на уровне сервера или # на уровне директории SecAuditEngine RelevantOnly # Убедитесь, что кодировка URL действительна SecFilterCheckURLEncoding On # Проверка кодировки Unicode SecFilterCheckUnicodeEncoding On # Разрешить только байты из этого диапазона SecFilterForceByteRange 1 255 # Проверка формата cookie. SecFilterCheckCookieFormat On # Имя файла журнала аудита SecAuditLog logs/audit_log # Должен ли mod_security проверять полезные нагрузки POST SecFilterScanPOST On # Действие по умолчанию SecFilterDefaultAction "deny,log,status:406" # Простой пример фильтра # SecFilter 111 # Предотвратить атаки обхода пути (..) # SecFilter "\.\./" # Более слабая защита от XSS, но позволяет общие HTML-теги # SecFilter "<( |\n)*script" # Предотвратить атаки XSS (вставка HTML/Javascript) # SecFilter "<(.|\n)+>" # Очень грубые фильтры для предотвращения атак SQL-инъекций # SecFilter "delete[[:space:]]+from" # SecFilter "insert[[:space:]]+into" # SecFilter "select.+from" # Требовать заголовки HTTP_USER_AGENT и HTTP_HOST SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$" # Принимать только кодировки запросов, которые мы знаем, как обрабатывать # мы исключаем GET-запросы из этого, потому что некоторые (автоматизированные) # клиенты предоставляют "text/html" как Content-Type SecFilterSelective REQUEST_METHOD "!^GET$" chain SecFilterSelective HTTP_Content-Type "!(^$|^application/x-www-form-urlencoded$|^multipart/form-data)" # Требовать, чтобы Content-Length был предоставлен с # каждым POST-запросом SecFilterSelective REQUEST_METHOD "^POST$" chain SecFilterSelective HTTP_Content-Length "^$" # Не принимать кодировки передачи, которые мы знаем, что не обрабатываем # (и вам это все равно не нужно) SecFilterSelective HTTP_Transfer-Encoding "!^$" # Некоторые общие правила, связанные с приложениями, из # http://modsecrules.monkeydev.org/rules.php?safety=safe # Уничтожить закладки XSS SecFilterSelective THE_REQUEST "/modules\.php\?name=Bookmarks\&file=(del_cat\&catname|del_mark\&markname|edit_cat\&catname|edit_cat\&catcomment|marks\&catname|uploadbookmarks\&category)=(<[[:space:]]*script|(http|https|ftp)\:/)" # Уязвимость SQL-инъекции Marks.php в закладках Nuke SecFilterSelective THE_REQUEST "modules\.php\?name=Bookmarks\&file=marks\&catname=.*\&category=.*/\*\*/(union|select|delete|insert)" # Общая попытка XSS PHPNuke #/modules.php?name=News&file=article&sid=1&optionbox= SecFilterSelective THE_REQUEST "/modules\.php\?*name=<[[:space:]]*script" # Попытка SQL-инъекции PHPNuke SecFilterSelective THE_REQUEST "/modules\.php\?*name=Search*instory=" # Вставка SQL phpNuke SecFilterSelective THE_REQUEST "/modules\.php*name=Forums.*file=viewtopic*/forum=.*'/'" # WEB-PHP phpbb quick-reply.php попытка произвольной команды SecFilterSelective THE_REQUEST "/quick-reply\.php" chain SecFilter "phpbb_root_path=" # Мод календаря тем для phpBB Атака межсайтового скриптинга SecFilterSelective THE_REQUEST "/calendar_scheduler\.php\?start=(<[[:space:]]*script|(http|https|ftp)\:/)" # phpMyAdmin: Безопасно # Уязвимость раскрытия файла Export.PHP phpMyAdmin SecFilterSelective SCRIPT_FILENAME "export\.php$" chain SecFilterSelective ARG_what "\.\." # Путь vln phpMyAdmin SecFilterSelective REQUEST_URI "/css/phpmyadmin\.css\.php\?GLOBALS\[cfg\]\[ThemePath\]=/etc" |

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

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.