Мені потрібні правила, щоб відмовитись від шкідливого з'єднання Apache


10

Я скидаю весь трафік на порти, крім 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 годин ... Є тисячі на тиждень.


Я не бачу конкретного зразка в цих HTTP-запитах. Звідки ти знаєш, що вони зловмисні? Я не розумію, чого ви намагаєтеся досягти тут. Чи можете ви відредагувати своє запитання, щоб уточнити? Дякую.
Девід Фоерстер

Привіт, Девіде. Колись я відкривав порти на зразок ftp, я отримував журнал від грубої сили, коли за 24 години я бачу, що fail2ban запустив більше 100 ips на iptables. Я закриваю всі порти, окрім 80. Зараз я намагаюся зробити такі правила, як fail2ban, але для apache.
Хав'єр Пальмеро

2
Чи знаєте ви про mod_security та mod_evasive для Apache?
pa4080

так, у вас є правила ділитися? або де його знайти? Я блокую ips з blocklist.de
Хав'єр Пальмеро

Я записав майже все, що знаю про безпеку Apache2.
pa4080

Відповіді:


18

Оновлення: Поточна відповідь повністю оновлена.

Відповідно до цієї дискусії я створив сховище GitHub під назвою Помічник з безпеки WWW . ask_ubuntuЦя галузь, яка називається , присвячена цій відповіді. Усі посилання, раніше доступні тут , видаляються через обмеження кількості символів - вони доступні на GitHub.

Ось декілька способів перегляду, які задіяні в повному механізмі, як підвищити безпеку Apache2 в Ubuntu 16.04.

Зміст:

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

Крім того, скажімо, що завжди добре використовувати HTTPS:


Сценарій асистента з безпеки WWW ► 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 поза коробкою, 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! Додайте або змініть принаймні такі директиви:

    # -- 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 може бути здійснено за допомогою наступних директив 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>
    
  • Оновіть дію правила за його ідентифікатором у межах матчу Location:

    <LocationMatch "/index.php.*">
        SecRuleUpdateActionById 973301 "pass"
        SecRuleUpdateActionById 950907 "pass"
    </LocationMatch>
    

У наведених вище прикладах ми припускаємо, що це 973301і 950907є ідентифікатори правил, які перешкоджають нормальній роботі наших веб-додатків. Ми можемо знайти такі правила як за допомогою аналізу modsec_audit.log.


Правила безпеки ModS ► WSAS ► Iptables

Тут наведено ще кілька прикладів, як створити користувацькі SecRules, а також як ми можемо викликати через них сценарій помічника безпеки WW WWW.

Початкова настройка

Нам потрібен додатковий сценарій запуску - modsecurity-assistant.sh. Причина в тому, що execдія ModSecurity має занадто простий і обмежений синтаксис.

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дії викликатиме наш зовнішній сценарій. Ця дія не є руйнівною і буде виконуватися, коли поточне правило повернеться в істинне значення. Якщо ця дія застосовується, віддалений 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і повторіть вправу. Тепер ви повинні бути переспрямовані, але не заблоковані.

Підключіть наші сценарії з набором правил 3.x для основного правила OWASP

Для цього ми оновимо дію за замовчуванням Правил режиму аномалії (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, який є частиною HTTPD інструментів проекту Apache . 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 Іван 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журнал виконання:

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їх обом.

  • Щоб виконати тест, дотримуйтесь порад з наведеного вище розділу.


Будь ласка, не часто редагуйте свою публікацію. Постійне редагування вашої публікації багато разів на день продовжує наштовхуватися на головну сторінку, а також створює шум для нас модераторів. Замість цього, розглянути питання розробки вашого контенту на іншій сторінці або в текстовому редакторі , а потім редагувати його в масовому порядку , а не по окремо редагування деталі в (Це повідомлення заблоковане в протягом години обмеження по швидкості редагування даних робиться тут тимчасово).
Томас Уорд

1
Дякую за зауваження, @ThomasWard. Я буду пам'ятати про це! Хіба не гарна ідея мати щось на зразок пісочниці на сторінці Користувачі поруч із редагуванням профілю та налаштувань ?
pa4080

1
Це було запропоновано, і я вважаю відхиленим. Я б запропонував вам внести зміни без збереження і зберегти копію свого питання як є у текстовому файлі на вашій системі, потім ви можете це відредагувати, скопіювати його назад, коли ви хочете редагувати публікацію, а потім виправлення для розмітки тощо. Крім того, всі підкреслення ... ускладнюють читання речей. Спробуйте просто видалити ці розділи. (Історія редагування збереже дані)
Thomas Ward

Смішно, що Stack Exchange не дозволяє не стикатися з правками на головній сторінці
Franck Dernoncourt

1

Я усвідомлюю, що pa4080 дав детальну і, ймовірно, дуже корисну відповідь, щоб зайнятися цим усім самостійно. Якщо самостійно піклуватися про проблеми, ви можете почувати себе добре, це також може зайняти багато часу .

  1. Ознайомтеся з Cloudflare, оскільки вони надають безкоштовний захист DDoS.
  2. Якщо ви зараз використовуєте лише Apache, подумайте, як NGINX працює, щоб збалансувати ваше навантаження. NGINX чудово підходить для балансування навантаження Apache, як показано тут і тут .
  3. Перегляньте поради Apache щодо безпеки своїх документів .
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.