Мне нужны правила отбросить некоторое злонамеренное соединение Apache

Я отбрасываю весь трафик в портах за исключением 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 часов... Имейте тысячи в неделю.

10
задан 10 June 2017 в 09:20

2 ответа

Обновление: Текущий ответ полностью обновлен.

Согласно это обсуждение Я создал GitHub репозиторий с именем WWW Security Assistant . Существует ветка под названием ask_ubuntu , посвященная этому ответу. Все ссылки, ранее доступные здесь , удалены из-за ограничения количества символов - они доступны на GitHub.

Здесь просматривается несколько способов, задействованных в полном механизме, как увеличить Безопасность Apache2 в Ubuntu 16.04.

Оглавление:

  • Скрипт помощника по безопасности WWW (WSAS) ► Iptables
  • Iptables - Базовая конфигурация - Сохранение и восстановление
  • ModEvasive для Apache2
  • ModEvasive ► WSAS ► Iptables
  • ModSecurity 2.9 для Apache2
  • ModSecurity OWASP Core Rule Set 3.x
  • Белый список правил ModSecurity
  • Правила ModSecurity ► WSAS ► Iptables
  • Файлы журнала ModSecurity и Apache
  • Файлы журнала ModSecurity ► Fail2Ban ► Iptables
  • ModSecurity ► HTTPD Guardian ► WSAS ► Iptables
  • ModSecurity GuardianLog ► Пользовательский анализ HTTPD ► WSAS ► Iptables

Вдобавок скажем, что всегда полезно использовать HTTPS:


Скрипт WWW Security Assistant ► Iptables

Здесь представлен скрипт www-security-assistant.bash . Это может помочь вам в обработке вредоносных IP-адресов. У сценария есть два режима:

Автоматический режим

Когда внешняя программа, такая как Apache mod_security , предоставляет вредоносный адрес $ IP . В этом случае синтаксис, вызывающий сценарий, должен быть следующим:

www-security-assistant.bash <ip-address> Guardian
www-security-assistant.bash <ip-address> ModSecurity
www-security-assistant.bash <ip-address> ModEvasive
www-security-assistant.bash <ip-address> a2Analyst

В этом режиме сценарий предоставляет два этапа действий , и для каждого действия он отправляет электронное письмо администратору. (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 в вашу систему.


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 уклончивый
     
  • Создать каталог журналов и сделать его доступным для www-data :

     sudo mkdir -p / var / log / apache2_mod_evasive
    sudo chown www-data / var / log / apache2_mod_evasive
     
  • Настройте базовую конфигурацию - раскомментируйте и отредактируйте определенные директивы в файле конфигурации:

     / etc / apache2 / mods-enabled / evasive.conf
     
  • Перезапустите Apache: sudo systemctl restart apache2.service .

Проверка

  • Откройте веб-страницу со своего сервера и несколько раз интенсивно обновите окно браузера (нажмите F5 ) - вы должны получить сообщение об ошибке 403 Forbidden . В каталоге журнала будет создан новый файл блокировки. Этот файл следует удалить для дальнейшего обнаружения нарушений с этого IP-адреса.


ModEvasive ► WSAS ► Iptables

Здесь мы настроим mod_evasive для взаимодействия с iptables через ] www-security-assistant.bash , созданный в разделе выше.

  • Отредактируйте /etc/apache2/mods-available/evasive.conf следующим образом:

     
      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 2.9 для Apache2

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 .


ModSecurity OWASP Core Rule Set 3.x

В Ubuntu 16.04 вы можете установить CSR 2.x: apt install modsecurity-crs . Здесь мы установим CSR 3.x , подробные инструкции приведены в руководстве по установке (требуется git ).

Установка

  • Клонировать CSR в папке /usr/share/modsecurity-crs.3 :

     sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs / usr / share / modsecurity-crs.  3
     
  • Обновление и автоматическое обновление базы данных GeoIP. (База данных GeoIP больше не входит в состав CRS. Вместо этого рекомендуется загружать ее регулярно.) Сценарий util / upgrade.py обеспечивает эту функциональность. Вы можете использовать его в cron следующим образом - sudo crontab -e :

     0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs  --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2> & 1
     
  • Создайте файлы конфигурации:

     sudo cp /usr/share/modsecurity-crs.3/crs-setup.conf{.example,}
    sudo cp /usr/share/modsecurity-crs.3/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf{.example,}
    sudo cp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf{.example,}
     

    Внимательно прочтите и отредактируйте эти файлы! Раскомментируйте как минимум директиву SecGeoLookupDB :

     SecGeoLookupDB util / geo-location / GeoIP.dat
     
  • Примените конфигурацию Apache. Отредактируйте /etc/apache2/mods-available/security2.conf следующим образом:

     
      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

Внесение правил 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 .


ModSecurity Rules ► WSAS ► Iptables

Здесь приведены еще несколько примеров того, как создавать собственные 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 --DROP-CLEAR 'some note' , добавьте свой IP в modsecurity-ip-white.list и повторить упражнение. Теперь вы должны быть перенаправлены, но не заблокированы.

Соедините наши скрипты с OWASP Core Rule Set 3.x

Для этого мы обновим действие по умолчанию 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


ModSecurity и файлы журнала Apache

Веб-сервер Apache может быть настроен для предоставления серверу администратору важная информация о том, как он работает ... Основной способ обратной связи с администратором - через использование файлов журнала. Подробнее ...

ModSecurity имеет мощный механизм регистрации. В соответствии с директивой SecGuardianLog он предоставляет канал журнала, специально разработанный для работы с внешними скриптами.

В настоящее время единственный известный инструмент, работающий с журналированием хранителя , - это httpd-guardian , который является частью инструментов Apache httpd проект . httpd-средство защиты предназначено для защиты от атаки отказа в обслуживании. Он использует инструмент черного списка для взаимодействовать с межсетевым экраном на основе 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 Иван Ристич - предназначен для отслеживать все запросы веб-сервера с помощью конвейерного механизма ведения журнала. Он отслеживает количество запросов, отправленных с каждого 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"

Проверить -up

Чтобы проверить сценарий, отключите 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


ModSecGuardianLog ► Пользовательский анализ ► WSAS ► Iptables

Здесь представлен простой сценарий с именем 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 в оба.

  • Чтобы выполнить тест, следуйте советам из раздел выше.

18
ответ дан 23 November 2019 в 04:23

Я понимаю, что pa4080 дал подробный и, вероятно, очень полезный ответ, чтобы разобраться со всем этим самостоятельно. Хотя самостоятельное решение проблем может показаться приятным, это также может занять много времени .

  1. Ознакомьтесь с Cloudflare , поскольку они обеспечивают бесплатную защиту от DDoS-атак.
  2. Если в настоящее время вы используете только Apache, подумайте о том, чтобы узнать, как работает NGINX для балансировки нагрузки. NGINX отлично подходит для балансировки нагрузки Apache, как показано здесь и здесь .
  3. Просмотрите советы Apache по безопасности в их документации .
1
ответ дан 23 November 2019 в 04:23

Другие вопросы по тегам:

Похожие вопросы: