Мне нужны правила, чтобы удалить некоторые вредоносные соединения 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:


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=../;-) Идея заимствована из сценария 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 необходимо).

Монтаж

  • Клонировать КСО в папке /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, denystatus) а также 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 дал подробный и, вероятно, очень полезный ответ, чтобы позаботиться обо всем этом самостоятельно. Хотя самостоятельное решение проблем может показаться вам приятным, это также может занять много времени.

  1. Ознакомьтесь с Cloudflare, так как они предоставляют бесплатную защиту от DDoS.
  2. Если вы в настоящее время используете только Apache, попробуйте узнать, как работает NGINX, чтобы сбалансировать вашу нагрузку. NGINX отлично подходит для балансировки нагрузки Apache, как показано здесь и здесь.
  3. Ознакомьтесь с советами Apache по безопасности в своих документах.
Другие вопросы по тегам