Обновление: текущий ответ полностью обновлен.
В соответствии с этим обсуждением я создал репозиторий 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
их обоим.
Для проведения теста следуйте советам из приведенного выше раздела.