Обновление: текущий ответ полностью обновлен.
В соответствии с этим обсуждением я создал репозиторий GitHub с именем WWW Security Assistant . Существует ask_ubuntuответная ветка , посвященная этому ответу. Все ссылки, ранее доступные здесь , удалены из-за ограничения по количеству символов - они доступны на GitHub.
Вот несколько рассмотренных способов, связанных с полным механизмом повышения безопасности Apache2 в Ubuntu 16.04.
Содержание:
- Сценарий WWW Security Assistant (WSAS) ► Iptables
- Iptables - базовая конфигурация - сохранение и восстановление
- ModEvasive для Apache2
- ModEvasive ► WSAS ► Iptables
- ModSecurity 2.9 для Apache2
- Набор базовых правил ModSecurity OWASP 3.x
- Белый список правил ModSecurity
- Правила ModSecurity ► WSAS ► Iptables
- Файлы журналов ModSecurity и Apache
- Файлы журнала ModSecurity ► Fail2Ban ► Iptables
- ModSecurity GuardianLog ► HTTPD Guardian ► WSAS ► Iptables
- ModSecurity GuardianLog ► Пользовательский анализ HTTPD ► WSAS ► Iptables
Кроме того, скажем, всегда полезно использовать HTTPS:
Сценарий WWW Security Assistant ► Iptables
Здесь представлен сценарий www-security-assistant.bash. Это может помочь вам в обработке вредоносных IP-адресов. Скрипт имеет два режима.
Автоматический режим
Когда внешняя программа, такая как Apache mod_security, предоставляет вредоносный $IPадрес. В этом случае синтаксис, который вызывает скрипт, должен быть:
www-security-assistant.bash <ip-address> Guardian
www-security-assistant.bash <ip-address> ModSecurity
www-security-assistant.bash <ip-address> ModEvasive
www-security-assistant.bash <ip-address> a2Analyst
В этом режиме сценарий предоставляет два этапа действий, и для каждого действия он отправляет электронное письмо администратору (-ам).
Первый этап: за первые несколько «нарушений» источник $IPбудет заблокирован на период времени, равный значению $BAN_TIME. В этом режиме используется команда at.
Второй этап: когда число нарушений от определенного $IPстановится равным значению $LIMIT, этот $IPадрес будет заблокирован навсегда через Iptables и будет добавлен в $BAN_LIST.
Ручной режим
Этот режим принимает следующие параметры:
www-security-assistant.bash <ip-address> --DROP "log notes"
Создает запись в файле /var/www-security-assistant/iptables-DROP.listи генерирует правило как:
iptables -A GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address> --DROP-CLEAR "log notes"
Создает запись в файле /var/www-security-assistant/iptables-DROP-CLEAR.list, удаляет определенное правило Iptables, удаляет $IPиз истории и из $BAN_LIST:
iptables -D GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address> --ACCEPT "log notes"
Создает только запись в файл /var/www-security-assistant/iptables-ACCEPT.list.
www-security-assistant.bash <ip-address> --ACCEPT-CHAIN "log notes"
Создает запись в файле /var/www-security-assistant/iptables-ACCEPT.listи генерирует правило как:
iptables -A GUARDIAN -s $IP -j ACCEPT
зависимости
Скрипт использует iptables-save.shи iptablesцепочку GUARDIAN, объясненную в следующем разделе. Он будет создавать и поддерживать несколько файлов в пределах $WORK_DIR:
www-security-assistant.history - содержит данные для предыдущих нарушений IP.
www-security-assistant.mail - содержание последнего письма, отправленного скриптом.
iptables-ACCEPT.list; iptables-DROP.listи iptables-DROP-CLEAR.list.
Скрипт нуждается в минимальной конфигурации для отправки писем:
sudo apt install s-nail mutt mailutils postfix
sudo dpkg-reconfigure postfix # For General type: Internet Site
echo 'Test passed.' | mail -s Test-Email email@example.com
Если есть какая-либо настроенная служба HTTPS, ее сертификат TLS может использоваться в службе Postfix.
Кроме того, скрипт использует at: sudo apt install at.
Монтаж
Создайте рабочий каталог, давайте назовем его /var/www-security-assistant. Скачайте www-security-assistant.bashи сделайте его исполняемым:
sudo mkdir /var/www-security-assistant
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/www-security-assistant.bash -O /var/www-security-assistant/www-security-assistant.bash
sudo chmod +x /var/www-security-assistant/www-security-assistant.bash
Сделать www-security-assistant.bashдоступным как пользовательскую команду:
sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
Предоставить разрешение на www-dataзапуск www-security-assistant.bashбез пароля через sudo. Используйте следующую команду для безопасного создания и редактирования нового файла с дополнительным sudoersправилом:
sudo visudo -f /etc/sudoers.d/www-security-assistant
Добавьте следующую строку внутри файла - сохраните файл и выйдите:
www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
Tweak www-security-assistant.bash. Измените хотя бы значение переменной $EMAIL_TO.
Проверить
Представьте себя как $AGENTи проверьте, правильно ли работает автоматический режим:
www-security-assistant.bash 192.168.1.177 Guardian
Затем проверьте свою электронную почту, введите iptables -L GUARDIAN -n, просмотрите файлы www-security-assistant.historyи www-security-assistant.mail. Выполните указанную выше команду 5 раз и просмотрите файлы iptables-DROP.listи iptables-CURRENT.conf.
Проверьте, работает ли ручной режим - добавьте свой локальный хост в белый список:
www-security-assistant.bash 127.0.0.1 --ACCEPT "Server's localhost IP"
Затем проверьте файл iptables-ACCEPT.list.
Остальная часть этого урока - как интегрироваться www-security-assistantс вашей системой.
Iptables - базовая конфигурация - сохранение и восстановление
Базовая конфигурация
Пожалуйста, прочтите это руководство перед добавлением следующих правил.
sudo iptables -F
sudo iptables -I INPUT 1 -i lo -j ACCEPT
sudo iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# This rule may lock you out of the system!
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
Перед выполнением следующих действий откройте новое соединение SSH и попробуйте войти в свою систему, чтобы проверить, все ли работает нормально!
Сохранить и восстановить
Это может быть достигнуто с помощью пользовательских сценариев, которые будут сохранять и восстанавливать iptablesконстанту во время процесса остановки или запуска системы. (Если мы используем UFW для настройки правил Iptables, этот шаг не нужен.)
printf '#!/bin/sh\n/sbin/iptables-save > /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-save.sh
printf '#!/bin/sh\n/sbin/iptables-restore < /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-restore.sh
sudo chmod +x /var/www-security-assistant/iptables-restore.sh /var/www-security-assistant/iptables-save.sh
sudo ln -s /var/www-security-assistant/iptables-save.sh /etc/network/if-post-down.d/iptables-save
sudo ln -s /var/www-security-assistant/iptables-restore.sh /etc/network/if-pre-up.d/iptables-restore
Создать новую цепочку
Создайте новую цепочку с названием GUARDIANи вставьте ее под номером 3 в INPUTцепочку:
sudo iptables -N GUARDIAN
sudo iptables -I INPUT 3 -j GUARDIAN
Проверить
Перезагрузите систему и проверьте конфигурацию. Пожалуйста, используйте sudo systemctl reboot(не используйте параметр силы reboot -f). Когда система вернется в рабочее состояние, мы можем проверить, существует ли недавно созданная цепочка:
sudo iptables -L GUARDIAN -n
ModEvasive для Apache2
ModEvasive - это модуль уклончивых маневров для Apache, обеспечивающий уклоняющиеся действия в случае атаки HTTP DoS или DDoS или атаки методом "грубой силы". Прочитайте больше...
Монтаж
Установите и активируйте модуль:
sudo apt install libapache2-mod-evasive
sudo a2enmod evasive
Создайте каталог журналов и сделайте его доступным для www-data:
sudo mkdir -p /var/log/apache2_mod_evasive
sudo chown www-data /var/log/apache2_mod_evasive
Настройте основную конфигурацию - раскомментируйте и отредактируйте определенные директивы в файле конфигурации:
/etc/apache2/mods-enabled/evasive.conf
Перезапустите Apache: sudo systemctl restart apache2.service.
Проверить
- Откройте веб-страницу с вашего сервера и несколько раз интенсивно обновляйте окно браузера (нажмите
F5) - вы должны получить сообщение об ошибке 403 Forbidden . В каталог журнала будет сгенерирован новый файл блокировки. Этот файл должен быть удален для дальнейшего обнаружения нарушений с этого IP-адреса.
ModEvasive ► WSAS ► Iptables
Здесь мы настроим mod_evasiveобщение iptablesчерез www-security-assistant.bashсозданный в предыдущем разделе раздел.
Отредактируйте /etc/apache2/mods-available/evasive.confтаким образом:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 9
DOSSiteCount 70
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
#DOSEmailNotify your@email.foo
DOSLogDir "/var/log/apache2_mod_evasive"
DOSSystemCommand "sudo /var/www-security-assistant/www-security-assistant.bash %s 'ModEvasive' 'AutoMode' >> /var/www-security-assistant/www-security-assistant.execlog 2>&1"
</IfModule>
Создайте файл журнала и перезапустите Apache:
sudo touch /var/www-security-assistant/www-security-assistant.execlog && sudo chown www-data /var/www-security-assistant/www-security-assistant.execlog
Чтобы протестировать эту конфигурацию, мы можем смоделировать DDOS-атаку с помощью F5метода, упомянутого выше, или мы можем использовать команды as ab, hping3и т. Д.
Внимание: будьте осторожны, потому что iptablesправило, используемое в WSAS, удалит все новые соединения из источника $IP, включая ваши соединения SSH. Во время тестов хорошо иметь резервный способ подключения к серверу. Вы можете изменить это правило для работы только с портами HTTP / HTTPS.
ModSecurity 2.9 для Apache2
ModSecurity - это механизм брандмауэра для веб-приложений, который сам по себе обеспечивает очень небольшую защиту. Чтобы стать полезным, ModSecurity должен быть настроен с правилами. Чтобы пользователи могли в полной мере воспользоваться преимуществами ModSecurity, Spider Labs от Trustwave предоставляет бесплатный сертифицированный набор правил ... Подробнее ...
Монтаж
Установите и активируйте модуль:
sudo apt install libapache2-mod-security2
sudo a2enmod security2
Создать файл конфигурации:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Читайте и редактируйте /etc/modsecurity/modsecurity.confвнимательно! Добавьте или измените по крайней мере следующие директивы:
# -- Rule engine initialization ----------------------------------------------
SecRuleEngine On
# -- Debug log configuration -------------------------------------------------
SecDebugLogLevel 2
SecDebugLog "/var/log/apache2_mod_security/modsec_debug.log"
# -- Audit log configuration -------------------------------------------------
SecAuditLog "/var/log/apache2_mod_security/modsec_audit.log"
# -- Guardian log configuration -------------------------------------------------
SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
Файл /etc/apache2/mods-enabled/security2.confвключается /etc/modsecurity/modsecurity.confв конфигурацию Apache. На этом этапе security2.confбудем выглядеть так:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
</IfModule>
Создать каталог журналов:
sudo mkdir -p /var/log/apache2_mod_security
Настройка журнала ротации. Сначала создайте файл конфигурации:
sudo cp /etc/logrotate.d/apache2 /etc/logrotate.d/apache2-modsec
Затем отредактируйте новый файл следующим образом:
/var/log/apache2_mod_security/*.log { … }
Перезапустите Apache.
Проверить
Создайте дополнительный файл конфигурации /etc/modsecurity, назовите его, например z-customrules.conf, и добавьте следующее правило в качестве его содержимого:
# Directory traversal attacks
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109"
Перезапустите сервер: sudo systemctl restart apache2.service. Откройте браузер и введите https://example.com/?abc=../. Результат будет: 403 Запрещено . Проверьте файлы журнала /var/log/apache2_mod_securityдля более подробной информации.
Чтобы сделать вещи более увлекательными, поместите скрипт issues.phpв соответствующее место внутри вашего DocumentRoot(здесь я предполагаю, что это место /var/www/html):
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/appendix/var/www/html/issues.php -O /var/www/html/issues.php
Затем измените вышеприведенное правило следующим образом:
# Directory traversal attacks with redirection (or use URL instead of URI: redirect:'https://example.com/issues.php')
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109, redirect:'/issues.php'"
Перезапустите Apache, затем откройте ваш браузер и введите https://example.com/?abc=../;-) Идея заимствована из скрипта SE BotLovin.cs.
/etc/modsecurity/z-customrules.confЕще раз отредактируйте и закомментируйте (отключите) правило - это был всего лишь тестовый пример, и он описан в OWASP CRS, описанном в следующем разделе.
Вот еще один пример, где мы будем перенаправлять все wp-adminзапросы страниц, но только с определенных IP-адресов (обратите внимание chain):
# Block wp-admin access
SecRule REQUEST_URI "^/wp-admin" "id:108, log, deny, status:403, t:lowercase, chain, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatch 192.168.1.11,99.77.66.12"
Здесь у нас есть два разрушительных действия: (1) deny, status:403и (2) redirect:'/issues.php'. На самом деле нам не нужно denyдействие, потому что оно будет переопределено redirectдействием.
Набор базовых правил ModSecurity OWASP 3.x
В Ubuntu 16.04 можно установить CSR 2.x: apt install modsecurity-crs. Здесь мы установим CSR 3.x , подробные инструкции приведены в руководстве по установке ( gitобязательно).
Монтаж
Клонируйте CSR в папке /usr/share/modsecurity-crs.3:
sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
Обновите и автоматически обновите базу данных GeoIP. (БД GeoIP больше не входит в CRS. Вместо этого рекомендуется регулярно загружать ее.) Сценарий util/upgrade.pyпредоставляет эту функцию. Вы можете использовать его в cron следующим образом sudo crontab -e:
0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2>&1
Создайте файлы конфигурации:
sudo cp /usr/share/modsecurity-crs.3/crs-setup.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf{.example,}
Внимательно прочитайте и отредактируйте эти файлы! Раскомментируйте хотя бы SecGeoLookupDBдирективу:
SecGeoLookupDB util/geo-location/GeoIP.dat
Примените конфигурацию Apache. Отредактируйте /etc/apache2/mods-available/security2.confтаким образом:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
IncludeOptional /usr/share/modsecurity-crs.3/crs-setup.conf
IncludeOptional /usr/share/modsecurity-crs.3/rules/*.conf
</IfModule>
Сохраните файл и перезапустите Apache.
Белый список правил ModSecurity
Белый список правил ModSecurity может быть выполнен с помощью следующих директив ModSec, которые могут использоваться во всей системе или в конфигурации виртуального хоста, в том числе и глобально, для определенных каталогов или совпадений расположений:
SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById
Отключить mod_security2для PhpMyAdmin. Изменить /etc/phpmyadmin/apache.confтаким образом:
<Directory /usr/share/phpmyadmin>
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</Directory>
Отключить определенные правила для определенного каталога:
<Directory /var/www/html>
<IfModule security2_module>
SecRuleRemoveById 973301
</IfModule>
</Directory>
Отключить правила глобально. Для этого мы должны добавить наши директивы где-нибудь в конфигурационных файлах Apache: /etc/modsecurity/z-customrules.confэто хорошее место.
Отключите правила во всей конфигурации Apache:
SecRuleRemoveById 973301 950907
Внесите в белый список IP-адрес, чтобы он мог проходить через ModSecurity:
SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
Отключить правила в каталоге соответствия:
<Directory /var/www/mediawiki/core>
SecRuleRemoveById 973301 950907
</Directory>
Обновить действие правила по его идентификатору в соответствии с местоположением:
<LocationMatch "/index.php.*">
SecRuleUpdateActionById 973301 "pass"
SecRuleUpdateActionById 950907 "pass"
</LocationMatch>
В приведенных выше примерах мы предполагаем , что 973301и 950907являются правила идентификаторы , которые препятствуют нормальной работе наших веб - приложений. Мы можем найти правила как эти путем анализа modsec_audit.log.
Правила ModSecurity ► WSAS ► Iptables
Здесь приведены еще несколько примеров, как создавать собственные SecRules, а также как мы можем через них вызывать WWW Security Assistant Script (WSAS).
Начальная настройка
Нам нужен дополнительный скрипт запуска modsecurity-assistant.sh. Причина в том, что execдействие ModSecurity имеет слишком простой и ограниченный синтаксис.
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/modsecurity-assistant.sh -O /var/www-security-assistant/modsecurity-assistant.sh
sudo chmod +x /var/www-security-assistant/modsecurity-assistant.sh
Если вы заглянете внутрь скрипта, вы увидите несколько переменных, которые экспортируются ModSecurity. К ним относятся: $REQUEST_URI, $ARGS, $SERVER_NAME, $REMOTE_ADDR, $REMOTE_HOSTи $UNIQUE_ID. Другие переменные объясняются внутри скрипта.
Создайте собственное правило и вызывайте наши скрипты через него
Сначала давайте создадим правило, которое будет выполняться modsecurity-assistant.sh(и вызываться www-security-assistant.bash), когда URI запроса содержит слово, которое включено в наш черный список. Откройте /etc/modsecurity/z-customrules.confи добавьте следующие строки внизу:
# REQUEST_URI words blacklist
#
SecRule REQUEST_URI "@pmFromFile /var/www-security-assistant/modsecurity-uri-black.list" \
"id:150, log, t:lowercase, chain, \
drop, deny, status:403, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"setenv:REMOTE_HOST=%{REMOTE_HOST}, \
setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
REQUEST_URI- эта переменная содержит полный URI из текущего запроса. Правило должно быть более широким:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...
@pmFromFileбудет читать файл modsecurity-uri-black.list, содержащий список фраз, где каждая конкретная фраза или слово помещается в новую строку. Вы можете собирать интересные слова и фразы из файлов журнала. Если есть конкретное соответствие между REQUEST_URIнашим списком шаблонов и правилом, то будет применяться правило. Файл может быть пустым, но вы должны создать ( touch) его.
logДействие приведет к созданию записей журнала в лог - файлы для этого правила с id:150.
drop, deny(с status) и redirectдействия относятся к подрывной группе действий, они должны быть в начале правила chain(если есть цепочка). Второе действие переопределит первое, а третье переопределит второе, поэтому вы должны выбрать, какое действие вы хотите выполнить, и можете удалить остальные.
chainдействие вызовет следующее правило цепочки, обратите внимание, что второе правило не имеет id.
REMOTE_ADDR содержит IP-адрес запроса.
@ipMatchFromFileБудет ли файл, modsecurity-ip-white.listкоторый содержит белый список IP-адресов, разделенных на новых строках. Записи CIDR также приемлемы. Поскольку разрушительное действие всегда находится в главном правиле цепочки, оно будет применено, но когда определенный IP-адрес находится в этом белом списке, execдействие не будет применено. Файл может быть пустым, но вы должны создать ( touch) его.
execДействие вызовет наш внешний скрипт. Это действие не нарушает работу и будет выполнено, когда текущее правило вернет true. Когда это действие будет применено, удаленный IP будет обрабатываться через наши скрипты.
setenvэто действие экспортирует определенные внутренние переменные =%{...} как envvars, экспортированные имена могут отличаться от внутренних. Некоторые переменные должны быть экспортированы вручную, некоторые другие экспортируются автоматически - возможно, это небольшая ошибка (в некоторых случаях ручной экспорт с такими же именами, например setenv:REQUEST_URI=%{REQUEST_URI}, приведет к пустому значению экспортируемой переменной).
Проверить
Предположим, у вас нет Joomla на вашем сервере, отредактируйте файл modsecurity-uri-black.listи добавьте строку с контентом /joomla. Затем введите в своем браузере https://exemple.com/joomla. Вы должны быть перенаправлены и заблокированы через Iptables. Очистите записи sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note', добавьте свой IP modsecurity-ip-white.listи повторите упражнение. Теперь вы должны быть перенаправлены, но не заблокированы.
Соедините наши скрипты с OWASP Core Rule Set 3.x
Для этого мы обновим действие по умолчанию Правил режима аномалии (949110 и 959100). Для этого отредактируйте файл /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.confи добавьте следующие строки внизу:
# -- Anomaly Mode - Update actions by ID -----
#
SecRuleUpdateActionById 949110 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
SecRuleUpdateActionById 959100 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
# -- Anomaly Mode - Whitelist some URI and IP addresses -----
#
SecRule REQUEST_URI "^/wp-admin/admin-ajax.php*|^/index\.php\?title=.*&action=(submit|raw&ctype=text/javascript|raw&ctype=text/css)$" \
"id:'999010', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
SecRule REMOTE_ADDR "@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"id:'999020', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
Проверить
Не забудьте перезапустить (или перезагрузить) Apache, чтобы применить изменения конфигурации. Не забывайте периодически очищать записи во время тестов, иначе вы можете быть заблокированы навсегда :-)
Имитация атаки через каталог:
https://example.com/?abc=../../../ # This should be redirected and blocked
https://example.com/wp-admin/admin-ajax.php?abc=../../../ # This should pass because of the whitelist rule
Имитация атаки SQL-инъекций:
https://example.com/?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%20'1
https://example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&password=foo
Файлы журналов ModSecurity и Apache
Веб-сервер Apache можно настроить для предоставления администратору сервера важной информации о том, как он работает ... Основным способом обеспечения обратной связи с администратором является использование файлов журнала. Прочитайте больше...
ModSecurity имеет мощный механизм регистрации. В соответствии с директивой SecGuardianLogон предоставляет фид логов, специально разработанный для работы с внешними скриптами.
В настоящее время единственный инструмент , как известно, работу с протоколированием хранителя является
httpd-guardian, который является частью HTTPD инструментов проекта Apache . httpd-guardianИнструмент предназначен для защиты от атак отказа в обслуживании. Он использует blacklist toolдля взаимодействия с брандмауэром на основе iptables ..., динамически занося в черный список нарушающие IP-адреса. Прочитайте больше...
Файлы журнала ModSecurity ► Fail2Ban ► Iptables
Можно настроить Fail2Ban для анализа данных файлов журнала Apache. modsec_audit.logэто, пожалуй, лучший выбор, но посмотрите также разделы, о которых мы говорим SecGuardianLog.
Позаботьтесь о том, чтобы SecAuditLogRelevantStatusв /etc/modsecurity/modsecurity.confкомментариях. В противном случае все, кто получит страницу с ошибкой 404, будут заблокированы fail2ban.
SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"
В настоящее время Fail2Ban никак не реализован в этом проекте.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
httpd-guardian- обнаружение DoS-атак путем мониторинга запросов Apache Security, Copyright (C) 2005 Ivan Ristic - предназначен для мониторинга всех запросов веб-сервера с помощью механизма регистрации по трубопроводам. Он отслеживает количество запросов, отправленных с каждого IP-адреса ... httpd-guardian может либо выдать предупреждение, либо выполнить скрипт для блокировки IP-адреса ...
Этот сценарий можно использовать с механизмом ведения журнала Apache2 или с
ModSecurity (лучше).
Установка и настройка в текущих условиях
Скачайте httpd-guardianи сделайте его исполняемым:
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-guardian.pl -O /var/www-security-assistant/httpd-guardian.pl
sudo chmod +x /var/www-security-assistant/httpd-guardian.pl
Прочитайте строки, 98-119чтобы увидеть, как скрипт связан с нашим скриптом WSAS.
Примените следующее изменение в конфигурации Apache ( /etc/modsecurity/modsecurity.conf), затем перезапустите его:
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
Проверить
Чтобы протестировать скрипт, отключите ModEvasive ( sudo a2dismod evasiveне забудьте включить его позже) и перезапустите Apache. Тогда tailжурнал exec:
tail -F /var/www-security-assistant/www-security-assistant.execlog
А из другого экземпляра выполните DoS-атаку, например, используйте abтаким образом:
for i in {1..20}; do (ab -n 200 -c 10 https://example.com/ &); done
ModSecGuardianLog ► Пользовательский анализ ► WSAS ► Iptables
Здесь представлен простой скрипт под названием httpd-custom-analyze.bash, который не является чем-то особенным, но может быть хорошим примером. Его особенности описаны в теле скрипта.
Установка и настройка
Скачайте httpd-custom-analyze.bashи сделайте его исполняемым:
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-custom-analyze.bash -O /var/www-security-assistant/httpd-custom-analyze.bash
sudo chmod +x /var/www-security-assistant/httpd-custom-analyze.bash
Примените следующее изменение в конфигурации Apache ( /etc/modsecurity/modsecurity.conf) и перезапустите его:
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
#SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
SecGuardianLog "|/var/www-security-assistant/httpd-custom-analyze.bash"
Скрипт будет вызывать WSAS при достижении порога - прочитать строку 86и 35.
Чтобы оба httpd-сценария работали одновременно, отредактируйте modsecurity.confи передайте SecGuardianLogих обоим.
Для проведения теста следуйте советам из приведенного выше раздела.