Мне нужны правила, чтобы удалить некоторые вредоносные соединения Apache
Я отбрасываю весь трафик на портах за исключением 80 для моего веб-сервера.
У меня есть некоторые правила, как это на iptables:
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP
Кто-то, кто еще может поделиться? Я всегда знаю, что плохие хакеры все еще обновляются, но некоторые из них всегда начинаются с одного и того же кода. Мне нужно сбросить соединение на основе некоторых критериев. Вот некоторые из журналов Apache (я удаляю ips, но каждая атака происходит от одного и того же):
Атака 1: это я не знаю, что пытаюсь сделать, но сделаю это 50 раз с того же ip
GET / HTTP/1.1 301 224 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
GET / HTTP/1.1 302 3387 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
Атака 2: попытайтесь получить информацию только о сервере.
GET / HTTP/1.1 301 224 http://myip:80/ Go-http-client/1.1
GET / HTTP/1.1 302 3228 http mywebsite Go-http-client/1.1
GET /es/ HTTP/1.1 200 40947 https mywebsite Go-http-client/1.1
Атака 3: они пытаются получить доступ к уязвимости страницы входа
GET /userlogin/login.aspx HTTP/1.1 302 186 - -
Атака 4: это попытка получить доступ к cgi по первому запросу (см. Мое первое правило iptables, чтобы удалить это)
GET /hndUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
GET /tmUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
Я очень новичок в работе с сервером, это 4 атаки только за последние 12 часов... Иметь тысячи в неделю.
2 ответа
Обновление: текущий ответ полностью обновлен.
В соответствии с этим обсуждением я создал репозиторий 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:
- Прочитайте HTTPS и общие советы по безопасности Apache
WWW Security Assistant Script ► 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
щипать
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 Запрещенное сообщение об ошибке. В каталог журнала будет сгенерирован новый файл блокировки. Этот файл должен быть удален для дальнейшего обнаружения нарушений с этого 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
метод, упомянутый выше, или мы можем использовать команды как 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=../
;-) Идея заимствована из сценария SEBotLovin.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
необходимо).
Монтаж
Клонировать КСО в папке
/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
, Причина в том, что ModSecurity's exec
действие имеет слишком простой и ограниченный синтаксис.
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
, который является частью проекта Apache httpd tools.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
как для.Для проведения теста следуйте советам из приведенного выше раздела.
Я понимаю, что pa4080 дал подробный и, вероятно, очень полезный ответ, чтобы позаботиться обо всем этом самостоятельно. Хотя самостоятельное решение проблем может показаться вам приятным, это также может занять много времени.
- Ознакомьтесь с Cloudflare, так как они предоставляют бесплатную защиту от DDoS.
- Если вы в настоящее время используете только Apache, попробуйте узнать, как работает NGINX, чтобы сбалансировать вашу нагрузку. NGINX отлично подходит для балансировки нагрузки Apache, как показано здесь и здесь.
- Ознакомьтесь с советами Apache по безопасности в своих документах.