Назад | Перейти на главную страницу

Как отбросить все запросы с помощью mod_security

У меня есть сервер apache2 с несколькими включенными на нем сайтами, в том числе по умолчанию (000default). Сервер по умолчанию перехватывает множество спам-запросов, которые ничего не делают, а только потребляют полосу пропускания и заполняют файл журнала.

Какой была бы минимальная конфигурация виртуального хоста, которая отбрасывала бы все запросы, попадающие на сайт по умолчанию?

Это то, что я использовал до сих пор, используя mod_security, но, похоже, он ничего не делает, а отвечает 403 на все запросы:

<VirtualHost *:80>
    ServerName default.only
    SecRuleEngine On
    SecAction "drop,phase:1"
</VirtualHost>

В mod_security действие deny выдаст ответ 403, тогда как drop немедленно закроет соединение. Из руководства:

падение

Описание: Немедленно инициируйте действие «закрытия соединения», чтобы разорвать TCP-соединение, отправив пакет FIN.

Группа действий: Разрушительный

Пример: В следующем примере запускается сбор IP-адресов для отслеживания попыток базовой проверки подлинности. Если клиент превысит порог, превышающий 25 попыток за 2 минуты, последующие соединения будут ОТКЛЮЧЕНЫ.

SecAction initcol:ip=%{REMOTE_ADDR},nolog
SecRule ARGS:login "!^$" \
    nolog,phase:1,setvar:ip.auth_attempt=+1,deprecatevar:ip.auth_attempt=20/120
SecRule IP:AUTH_ATTEMPT "@gt 25" \
    log,drop,phase:1,msg:'Possible Brute Force Attack"

Заметка

Это действие чрезвычайно полезно при ответе на атаки грубой силы и отказа в обслуживании, поскольку в обоих случаях вы хотите минимизировать как полосу пропускания сети, так и данные, возвращаемые клиенту. Это действие вызывает появление в журнале сообщения об ошибке «(9) Неверный дескриптор файла: core_output_filter: запись данных в сеть»

Apache должен каким-то образом обрабатывать запросы, он не может их просто игнорировать. Отвечая с 403 Forbidden настолько близко, насколько это возможно.

Мне удалось исправить это с помощью следующей конфигурации:

<VirtualHost *:80>
    ServerName default.only

    SecRuleEngine On
    SecRule REMOTE_ADDR "^\d" drop,phase:1
</VirtualHost>

У меня это работает с libapache2-mod-security2 v2.8.0:

<VirtualHost *:80>
  ServerName 1.2.3.4

  CustomLog /dev/null combined

  # https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual
  SecRuleEngine On
  SecAction id:1,phase:1,nolog,drop
</VirtualHost>