Как заблокировать нежелательные хосты в .htaccess?
Эти правила работают:
<RequireAll>
Require all granted
Require not ip 1.22.333.444
.
.
.
</RequireAll>
Эти правила не работают:
<RequireAll>
Require all granted
.
.
.
Require not host bad_host
</RequireAll>
Эти правила также не работают:
<IfModule mod_rewrite.c>
RewriteCond %{REMOTE_HOST} (163data|amazonaws|colocrossing|poneytel) [NC]
RewriteRule .* - [F,L]
</IfModule>
Я написал в файле вверху:
HostnameLookups On
Результатом было сообщение об ошибке, потому что эта команда не разрешена в
.htaccess
. Поэтому я удалил это заявление.
В Apache есть «удаленный_хост», соответствующий определенному IP. Я хочу предотвратить посещение моего сайта нежелательными хостами, такими как спамеры и т. д., которые генерируют много бесполезного трафика на моем сайте.
Что не так в приведенном выше примере кода?
1 ответ
должен быть установлен в конфигурации сервера для
REMOTE_HOST
серверная переменная, которую нужно установить. Это не может быть установлено в
.htaccess
(как вы нашли). Это
Off
по умолчанию и часто навсегда отключен на общих хостах по соображениям производительности.
Однако,
Require [not] host bad_host
не зависит от
HostnameLookups
установлен, поэтому все еще должен работать (при условии, что хост не отключил это каким-либо образом). Обратите внимание, что
bad_host
допускает частичное совпадение, сопоставление с конца и сопоставление только полных сегментов хоста. например.
ample.com
а также
foo.bar.example
не будет соответствовать
foo.bar.example.com
, но
example.com
а также
bar.example.com
будут.
Обратите внимание, что
Require [not] host
заставляет Apache выполнять «двойной обратный поиск DNS». Сначала выполняется поиск имени хоста (обратный поиск DNS) по IP-адресу клиента, а затем выполняется прямой поиск имени хоста для проверки соответствия IP-адреса. Если это не соответствует, проверка завершается неудачно.
Может быть
forward-dns
достаточно только проверки (требуется Apache 2.4.19)? Это выполняет только обратный поиск DNS для получения имени хоста. Имя хоста не проверено.
Например:
Require not forward-dns example.com