У меня есть сервер 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>