Я отбрасываю весь трафик в портах за исключением 80 для моего веб-сервера.
У меня есть некоторые правила как это на iptables:
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP
Кто-то, у кого есть больше, может совместно использовать? Я всегда знаю плохих хакеров, все еще обновляющих, но некоторые из них всегда начинают с того же кода. Я должен Отбросить соединение на основе некоторых критериев. Вот некоторый журнал Apache (я удаляю дюйм/с, но каждое нападение прибывает из того же):
Нападение 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 часов... Имейте тысячи в неделю.
Обновление: Текущий ответ полностью обновлен.
Согласно это обсуждение Я создал GitHub репозиторий с именем WWW Security Assistant . Существует ветка под названием
ask_ubuntu
, посвященная этому ответу. Все ссылки, ранее доступные здесь , удалены из-за ограничения количества символов - они доступны на GitHub.
Здесь просматривается несколько способов, задействованных в полном механизме, как увеличить Безопасность Apache2 в Ubuntu 16.04.
Оглавление:
Вдобавок скажем, что всегда полезно использовать HTTPS:
Здесь представлен скрипт 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
В этом режиме сценарий предоставляет два этапа действий , и для каждого действия он отправляет электронное письмо администратору. (s).
Первый этап: для первых нескольких «нарушений» источник $ IP
будет забанен на период времени , равный значение $ BAN_TIME
. В этом режиме используется команда на
.
Второй этап: когда количество нарушений с определенного $ IP
становится равным значению $ LIMIT
, этот адрес $ IP
будет навсегда заблокирован через Iptables и будет добавлен в $ BAN_LIST
.
Этот режим допускает следующее параметры:
www-security-assistant.bash
- DROP «заметки журнала»
Создает запись в файле / var / www-security-assistant / iptables- DROP.list
и генерирует правило как:
iptables -A GUARDIAN -s $ IP -j DROP
www-security-assistant.bash
- DROP-CLEAR «заметки журнала»
Создает запись в файле / var / www-security-assistant / iptables- DROP-CLEAR.list
, удалить определенное правило Iptables, удалить $ IP
из истории и из $ BAN_LIST
:
iptables -D GUARDIAN -s $ IP -j DROP
www-security-assistant.bash
- ПРИНЯТЬ "заметки журнала"
Создает только запись в файле /var/www-security-assistant/iptables-ACCEPT.list
.
www-security- Assistant.bash
- ACCEPT-CHAIN "заметки журнала"
Создает запись в файле /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.
Кроме того, сценарий использует в
: sudo apt install в
.
Создайте рабочий каталог, позвольте позвонить это / 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- помощник
Добавьте в файл следующую строку - сохраните файл и выйдите:
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 Хранитель
Затем проверьте свою электронную почту, введите iptables -L GUARDIAN -n
, просмотрите файлы www-security-assistant.history
и www-security-assistant. почта
. Выполните указанную выше команду 5 раз и просмотрите файлы iptables-DROP.list
и iptables-CURRENT.conf
.
Проверьте, правильно ли работает ручной РЕЖИМ - добавьте свой локальный хост в Белый список:
www-security-assistant.bash 127.0.0.1 - ПРИНЯТЬ "IP-адрес локального хоста сервера"
Затем проверьте файл iptables-ACCEPT.list
.
Остальная часть этого руководства посвящена тому, как интегрировать
www-security-assistant
в вашу систему.
Пожалуйста, прочтите это руководство перед добавлением следующих правил.
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 - это модуль обходных маневров для Apache. уклончивые действия в случае HTTP DoS или DDoS атаки или перебора силовая атака. Подробнее ...
Установите и включите модуль:
sudo apt install libapache2-mod-evasive
sudo a2enmod уклончивый
Создать каталог журналов и сделать его доступным для 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-адреса. Здесь мы настроим mod_evasive
для взаимодействия с iptables
через ] www-security-assistant.bash
, созданный в разделе выше.
Отредактируйте /etc/apache2/mods-available/evasive.conf
следующим образом:
DOSHashTableSize 3097
DOSPageCount 9
DOSSiteCount 70
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
#DOSEmailNotify (скрыто)
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"
Создайте файл журнала и перезапустите Apache:
sudo touch /var/www-security-assistant/www-security-assistant.execlog && sudo chown www-data / var / www-security-assistant / www-security- помощник. execlog
Чтобы проверить эту конфигурацию, мы можем смоделировать DDOS-атаку с помощью метода F5
, упомянутого выше, или мы можем использовать команды как ab
, hping3
и т. Д. .
Внимание: Будьте осторожны, потому что правило iptables
, используемое в WSAS, отбрасывает все новые соединения из источника $ IP
, включая ваши SSH-соединения. Хорошо иметь резервный способ подключения к серверу во время тестов. Вы можете изменить это правило, чтобы оно работало только с портами HTTP / HTTPS.
ModSecurity - это механизм межсетевого экрана веб-приложений, который обеспечивает очень небольшая защита сама по себе. Чтобы стать полезным, ModSecurity должен быть настроен с помощью правил. Чтобы пользователи могли полностью Преимущество ModSecurity из коробки, Trustwave's Spider Labs предоставление бесплатного сертифицированного набора правил ... Подробнее ...
Установите и включите модуль:
sudo apt install libapache2-mod-security2
sudo a2enmod security2
Создать файл конфигурации:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Прочитайте и отредактируйте /etc/modsecurity/modsecurity.conf
внимательно! Добавьте или измените как минимум следующие директивы:
# - Инициализация механизма правил -------------------------------- --------------
SecRuleEngine включен
# - Конфигурация журнала отладки -------------------------------------------- -----
SecDebugLogLevel 2
SecDebugLog "/var/log/apache2_mod_security/modsec_debug.log"
# - Конфигурация журнала аудита -------------------------------------------- -----
SecAuditLog "/var/log/apache2_mod_security/modsec_audit.log"
# - Конфигурация журнала Guardian -------------------------------------------- -----
SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
Файл /etc/apache2/mods-enabled/security2.conf
включает /etc/modsecurity/modsecurity.conf
в конфигурацию Apache. На этом этапе security2.conf
должен выглядеть так:
SecDataDir / var / cache / modsecurity
IncludeOptional /etc/modsecurity/*.conf
Создать каталог журналов:
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
, и добавьте следующее правило в качестве его содержания:
# Атаки обхода каталога
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
Затем измените указанное выше правило следующим образом:
# Атаки на обход каталога с перенаправлением (или используйте URL вместо URI:перенаправление: '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, описанным в следующем section.
Вот еще один пример, в котором мы перенаправляем все запросы страницы wp-admin
, кроме них, с определенных IP-адресов (обратите внимание на цепочку
):
# Блокировать доступ wp-admin
SecRule REQUEST_URI "^ / wp-admin" "id: 108, log, deny, status: 403, t: нижний регистр, цепочка, перенаправление: '/ issues.php'"
SecRule REMOTE_ADDR "! @IpMatch 192.168.1.11,99.77.66.12"
Здесь у нас есть два разрушительных действия: (1) запретить, статус: 403
и (2) перенаправление: '/ issues.php'
. На самом деле нам не нужно действие deny
, потому что оно будет отменено действием redirect
.
В 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
следующим образом:
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
Сохраните файл и перезапустите Apache.
Внесение правил 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" "этап: 1, nolog, allow, ctl: ruleEngine = Off, ctl: auditEngine = Off"
Отключить правила в соответствии с каталогом:
SecRuleRemoveById 973301 950907
Обновить действие правила по его идентификатору в соответствии с местоположением:
SecRuleUpdateActionById 973301 "пройти"
SecRuleUpdateActionById 950907 "пройти"
В приведенных выше примерах мы предполагаем, что 973301
и 950907
- это идентификаторы правил, которые мешают нормальной работе наших веб-приложений. Мы можем найти такие правила, проанализировав modsec_audit.log
.
Здесь приведены еще несколько примеров того, как создавать собственные SecRules, а также как мы можем вызывать WWW Сценарий помощника по безопасности (WSAS) через них.
Нам нужен дополнительный сценарий запуска - modsecurity-assistant.sh
. Причина в том, что действие ModSecurity 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
создаст записи журнала в файлах журнала для этого правила с идентификатором : 150
.
drop
, deny
(со статусом
) и redirect
действия относятся к разрушительной группе действий, они должны быть в начале цепочки правил
(если есть цепочка). Второе действие переопределит первое, а третье переопределит второе, поэтому вы должны выбрать, что вы хотите выполнить, и можете удалить остальные.
цепочка
действие вызовет следующее правило цепочки, обратите внимание, что второе правило не имеет 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
, добавьте свой IP в modsecurity-ip-white.list
и повторить упражнение. Теперь вы должны быть перенаправлены, но не заблокированы.
Для этого мы обновим действие по умолчанию Anomaly Mode Rules (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
Веб-сервер Apache может быть настроен для предоставления серверу администратору важная информация о том, как он работает ... Основной способ обратной связи с администратором - через использование файлов журнала. Подробнее ...
ModSecurity имеет мощный механизм регистрации. В соответствии с директивой SecGuardianLog
он предоставляет канал журнала, специально разработанный для работы с внешними скриптами.
В настоящее время единственный известный инструмент, работающий с журналированием хранителя , - это
httpd-guardian
, который является частью инструментов Apache httpd проект .httpd-средство защиты
предназначено для защиты от атаки отказа в обслуживании. Он использует инструмент черного спискадля взаимодействовать с межсетевым экраном на основе iptables, динамически заносить в черный список оскорбительные IP-адреса. Подробнее ...
Можно настроить Fail2Ban для анализа данных файлов журнала Apache. modsec_audit.log
, вероятно, лучший выбор, но см. Также разделы, в которых мы говорим о SecGuardianLog
.
Позаботьтесь, , что SecAuditLogRelevantStatus
в /etc/modsecurity/modsecurity.conf
прокомментирован. В противном случае каждый, кто получает страницу с ошибкой 404, будет заблокирован fail2ban.
SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"
В настоящее время Fail2Ban никак не реализован в этом проекте.
httpd-guardian
- обнаруживать DoS-атаки путем мониторинга запросов Apache Security, Copyright (C) 2005 Иван Ристич - предназначен для отслеживать все запросы веб-сервера с помощью конвейерного механизма ведения журнала. Он отслеживает количество запросов, отправленных с каждого 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 -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
Здесь представлен простой сценарий с именем httpd-custom-analysis.bash
, который не является чем-то особенным, но может быть хорошим примером. Его функции описаны в теле сценария.
Загрузите httpd-custom-analysis.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
. . 12384] Чтобы оба сценария httpd-
работали одновременно, отредактируйте modsecurity.conf
и направьте SecGuardianLog
в оба.
Чтобы выполнить тест, следуйте советам из раздел выше.
Я понимаю, что pa4080 дал подробный и, вероятно, очень полезный ответ, чтобы разобраться со всем этим самостоятельно. Хотя самостоятельное решение проблем может показаться приятным, это также может занять много времени .