Я отбрасываю весь трафик на портах за исключением 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 часов ... Иметь тысячи в неделю.
Ответы:
Вот несколько рассмотренных способов, связанных с полным механизмом повышения безопасности Apache2 в Ubuntu 16.04.
Содержание:
Кроме того, скажем, всегда полезно использовать HTTPS:
Сценарий WWW Security Assistant ► Iptables
Здесь представлен сценарий
www-security-assistant.bash
. Это может помочь вам в обработке вредоносных IP-адресов. Скрипт имеет два режима.Автоматический режим
Когда внешняя программа, такая как Apache
mod_security
, предоставляет вредоносный$IP
адрес. В этом случае синтаксис, который вызывает скрипт, должен быть:В этом режиме сценарий предоставляет два этапа действий, и для каждого действия он отправляет электронное письмо администратору (-ам).
Первый этап: за первые несколько «нарушений» источник
$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
и генерирует правило как:www-security-assistant.bash <ip-address>
--DROP-CLEAR "log notes"
Создает запись в файле
/var/www-security-assistant/iptables-DROP-CLEAR.list
, удаляет определенное правило Iptables, удаляет$IP
из истории и из$BAN_LIST
: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-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
.Скрипт нуждается в минимальной конфигурации для отправки писем:
Если есть какая-либо настроенная служба HTTPS, ее сертификат TLS может использоваться в службе Postfix.
Кроме того, скрипт использует
at
:sudo apt install at
.Монтаж
Создайте рабочий каталог, давайте назовем его
/var/www-security-assistant
. Скачайтеwww-security-assistant.bash
и сделайте его исполняемым:Сделать
www-security-assistant.bash
доступным как пользовательскую команду:Предоставить разрешение на
www-data
запускwww-security-assistant.bash
без пароля черезsudo
. Используйте следующую команду для безопасного создания и редактирования нового файла с дополнительнымsudoers
правилом:Добавьте следующую строку внутри файла - сохраните файл и выйдите:
Tweak
www-security-assistant.bash
. Измените хотя бы значение переменной$EMAIL_TO
.Проверить
Представьте себя как
$AGENT
и проверьте, правильно ли работает автоматический режим:Затем проверьте свою электронную почту, введите
iptables -L GUARDIAN -n
, просмотрите файлыwww-security-assistant.history
иwww-security-assistant.mail
. Выполните указанную выше команду 5 раз и просмотрите файлыiptables-DROP.list
иiptables-CURRENT.conf
.Проверьте, работает ли ручной режим - добавьте свой локальный хост в белый список:
Затем проверьте файл
iptables-ACCEPT.list
.Iptables - базовая конфигурация - сохранение и восстановление
Базовая конфигурация
Пожалуйста, прочтите это руководство перед добавлением следующих правил.
Перед выполнением следующих действий откройте новое соединение SSH и попробуйте войти в свою систему, чтобы проверить, все ли работает нормально!
Сохранить и восстановить
Это может быть достигнуто с помощью пользовательских сценариев, которые будут сохранять и восстанавливать
iptables
константу во время процесса остановки или запуска системы. (Если мы используем UFW для настройки правил Iptables, этот шаг не нужен.)Создать новую цепочку
Создайте новую цепочку с названием
GUARDIAN
и вставьте ее под номером 3 вINPUT
цепочку:Проверить
Перезагрузите систему и проверьте конфигурацию. Пожалуйста, используйте
sudo systemctl reboot
(не используйте параметр силыreboot -f
). Когда система вернется в рабочее состояние, мы можем проверить, существует ли недавно созданная цепочка:ModEvasive для Apache2
Монтаж
Установите и активируйте модуль:
Создайте каталог журналов и сделайте его доступным для
www-data
:Настройте основную конфигурацию - раскомментируйте и отредактируйте определенные директивы в файле конфигурации:
Перезапустите 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
таким образом:Создайте файл журнала и перезапустите Apache:
Чтобы протестировать эту конфигурацию, мы можем смоделировать DDOS-атаку с помощью
F5
метода, упомянутого выше, или мы можем использовать команды asab
,hping3
и т. Д.Внимание: будьте осторожны, потому что
iptables
правило, используемое в WSAS, удалит все новые соединения из источника$IP
, включая ваши соединения SSH. Во время тестов хорошо иметь резервный способ подключения к серверу. Вы можете изменить это правило для работы только с портами HTTP / HTTPS.ModSecurity 2.9 для Apache2
Монтаж
Установите и активируйте модуль:
Создать файл конфигурации:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Читайте и редактируйте
/etc/modsecurity/modsecurity.conf
внимательно! Добавьте или измените по крайней мере следующие директивы:Файл
/etc/apache2/mods-enabled/security2.conf
включается/etc/modsecurity/modsecurity.conf
в конфигурацию Apache. На этом этапеsecurity2.conf
будем выглядеть так:Создать каталог журналов:
Настройка журнала ротации. Сначала создайте файл конфигурации:
Затем отредактируйте новый файл следующим образом:
Перезапустите Apache.
Проверить
Создайте дополнительный файл конфигурации
/etc/modsecurity
, назовите его, напримерz-customrules.conf
, и добавьте следующее правило в качестве его содержимого:Перезапустите сервер:
sudo systemctl restart apache2.service
. Откройте браузер и введитеhttps://example.com/?abc=../
. Результат будет: 403 Запрещено . Проверьте файлы журнала/var/log/apache2_mod_security
для более подробной информации.Чтобы сделать вещи более увлекательными, поместите скрипт
issues.php
в соответствующее место внутри вашегоDocumentRoot
(здесь я предполагаю, что это место/var/www/html
):Затем измените вышеприведенное правило следующим образом:
Перезапустите Apache, затем откройте ваш браузер и введите
https://example.com/?abc=../
;-) Идея заимствована из скрипта SEBotLovin.cs
./etc/modsecurity/z-customrules.conf
Еще раз отредактируйте и закомментируйте (отключите) правило - это был всего лишь тестовый пример, и он описан в OWASP CRS, описанном в следующем разделе.Вот еще один пример, где мы будем перенаправлять все
wp-admin
запросы страниц, но только с определенных IP-адресов (обратите вниманиеchain
):Здесь у нас есть два разрушительных действия: (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
:Обновите и автоматически обновите базу данных GeoIP. (БД GeoIP больше не входит в CRS. Вместо этого рекомендуется регулярно загружать ее.) Сценарий
util/upgrade.py
предоставляет эту функцию. Вы можете использовать его в cron следующим образомsudo crontab -e
:Создайте файлы конфигурации:
Внимательно прочитайте и отредактируйте эти файлы! Раскомментируйте хотя бы
SecGeoLookupDB
директиву:Примените конфигурацию Apache. Отредактируйте
/etc/apache2/mods-available/security2.conf
таким образом:Сохраните файл и перезапустите Apache.
Белый список правил ModSecurity
Белый список правил ModSecurity может быть выполнен с помощью следующих директив ModSec, которые могут использоваться во всей системе или в конфигурации виртуального хоста, в том числе и глобально, для определенных каталогов или совпадений расположений:
Отключить
mod_security2
для PhpMyAdmin. Изменить/etc/phpmyadmin/apache.conf
таким образом:Отключить определенные правила для определенного каталога:
Отключить правила глобально. Для этого мы должны добавить наши директивы где-нибудь в конфигурационных файлах Apache:
/etc/modsecurity/z-customrules.conf
это хорошее место.Отключите правила во всей конфигурации Apache:
Внесите в белый список IP-адрес, чтобы он мог проходить через ModSecurity:
Отключить правила в каталоге соответствия:
Обновить действие правила по его идентификатору в соответствии с местоположением:
В приведенных выше примерах мы предполагаем , что
973301
и950907
являются правила идентификаторы , которые препятствуют нормальной работе наших веб - приложений. Мы можем найти правила как эти путем анализаmodsec_audit.log
.Правила ModSecurity ► WSAS ► Iptables
Здесь приведены еще несколько примеров, как создавать собственные SecRules, а также как мы можем через них вызывать WWW Security Assistant Script (WSAS).
Начальная настройка
Нам нужен дополнительный скрипт запуска
modsecurity-assistant.sh
. Причина в том, чтоexec
действие ModSecurity имеет слишком простой и ограниченный синтаксис.Если вы заглянете внутрь скрипта, вы увидите несколько переменных, которые экспортируются 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
- эта переменная содержит полный 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'
, добавьте свой IPmodsecurity-ip-white.list
и повторите упражнение. Теперь вы должны быть перенаправлены, но не заблокированы.Соедините наши скрипты с OWASP Core Rule Set 3.x
Для этого мы обновим действие по умолчанию Правил режима аномалии (949110 и 959100). Для этого отредактируйте файл
/usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
и добавьте следующие строки внизу:Проверить
Не забудьте перезапустить (или перезагрузить) Apache, чтобы применить изменения конфигурации. Не забывайте периодически очищать записи во время тестов, иначе вы можете быть заблокированы навсегда :-)
Имитация атаки через каталог:
Имитация атаки SQL-инъекций:
Файлы журналов ModSecurity и Apache
ModSecurity имеет мощный механизм регистрации. В соответствии с директивой
SecGuardianLog
он предоставляет фид логов, специально разработанный для работы с внешними скриптами.Файлы журнала ModSecurity ► Fail2Ban ► Iptables
Можно настроить Fail2Ban для анализа данных файлов журнала Apache.
modsec_audit.log
это, пожалуй, лучший выбор, но посмотрите также разделы, о которых мы говоримSecGuardianLog
.Позаботьтесь о том, чтобы
SecAuditLogRelevantStatus
в/etc/modsecurity/modsecurity.conf
комментариях. В противном случае все, кто получит страницу с ошибкой 404, будут заблокированы fail2ban.В настоящее время Fail2Ban никак не реализован в этом проекте.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
Установка и настройка в текущих условиях
Скачайте
httpd-guardian
и сделайте его исполняемым:Прочитайте строки,
98-119
чтобы увидеть, как скрипт связан с нашим скриптом WSAS.Примените следующее изменение в конфигурации Apache (
/etc/modsecurity/modsecurity.conf
), затем перезапустите его:Проверить
Чтобы протестировать скрипт, отключите ModEvasive (
sudo a2dismod evasive
не забудьте включить его позже) и перезапустите Apache. Тогдаtail
журнал exec:А из другого экземпляра выполните DoS-атаку, например, используйте
ab
таким образом:ModSecGuardianLog ► Пользовательский анализ ► WSAS ► Iptables
Здесь представлен простой скрипт под названием
httpd-custom-analyze.bash
, который не является чем-то особенным, но может быть хорошим примером. Его особенности описаны в теле скрипта.Установка и настройка
Скачайте
httpd-custom-analyze.bash
и сделайте его исполняемым:Примените следующее изменение в конфигурации Apache (
/etc/modsecurity/modsecurity.conf
) и перезапустите его:Скрипт будет вызывать WSAS при достижении порога - прочитать строку
86
и35
.Чтобы оба
httpd-
сценария работали одновременно, отредактируйтеmodsecurity.conf
и передайтеSecGuardianLog
их обоим.Для проведения теста следуйте советам из приведенного выше раздела.
источник
Я понимаю, что pa4080 дал подробный и, вероятно, очень полезный ответ, чтобы позаботиться обо всем этом самостоятельно. Хотя самостоятельное решение проблем может показаться вам приятным, это также может занять много времени .
источник