.htaccess блокирует доступ, когда HTTP_HOST - IP (Безопасность)
У меня было много атак на мой сервер. Большинство начинается с сканирования уязвимостей, за которым следуют волны запросов POST.
Я скоро буду внедрять Cloudflare (WAF и DDos). Это означает, что при поиске DNS в моем домене будет показан IP-адрес Cloudflare, а не мой сервер. Таким образом, IP-адрес моего сервера будет скрыт в этом отношении.
Тем не менее, атаки по-прежнему могут проходить один за другим через все возможные IP-адреса в мире. Когда я просматриваю журналы своего сервера, я вижу, что это происходит ОЧЕНЬ МНОГО. (У меня есть 3 IP-адреса, привязанные к моему 1-му серверу, и такие же атаки происходят на XXX.XXX.XXX.XX1, затем на XXX.XXX.XXX.XX2, затем на XXX.XXX.XXX.XX3)
Мой.htaccess верхнего уровня выглядит так:
# deny all POST requests
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} POST
RewriteRule .* - [F,L]
</IfModule>
# deny unused request types
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC]
RewriteRule .* - [F,L]
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Вопросы:
Что я должен добавить, чтобы [если HTTP_HOST=XXX.XXX.XXX.XX1 ИЛИ HTTP_HOST=XXX.XXX.XXX.XX2 ИЛИ HTTP_HOST=XXX.XXX.XXX.XX3], то трафик немедленно блокировался?
Могу ли я поместить этот новый код в верхней части.htaccess? Это сломает то, что в настоящее время там?
1 ответ
Вам не нужно проверять Host
заголовок для конкретных IP-адресов, просто проверьте на любой Host
это начинается с цифры. Например, в верхней части вашего .htaccess
файл:
RewriteCond %{HTTP_HOST} ^\d
RewriteRule .* - [F]
Вам не нужно L
флаг с F
- это подразумевается.
Вам также не нужны дополнительные <IfModule mod_rewrite.c>
оберток. Просто оставьте WordPress без изменений. (Хотя это тоже не обязательно.)
Однако блоки такого типа в идеале должны выполняться на уровне сервера / vitualhost, а не в .htaccess
, Настроить по умолчанию <VirtualHost>
что ловит эти нежелательные IP-запросы.
Например, предполагая, что вы используете только виртуальные хосты на основе имен, вы можете настроить виртуальный хост по умолчанию (который должен происходить до всех других виртуальных хостов) в форме:
# Catch all other requests for non-specific hosts. eg IP address access
<VirtualHost _default_>
ServerName default.example.com
<Location />
Require all denied
</Location>
</VirtualHost>
Это ловит все запросы, которые не отображаются ни на один другой "именованный" виртуальный хост. _default_
это просто псевдоним для *
, Как отмечено выше, это <VirtualHost>
Контейнер должен появиться раньше всех других <VirtualHost>
контейнеры в конфигурации вашего сервера. Тот факт, что он определен первым, делает его "по умолчанию".
ServerName
Директива должна быть определена как что-либо кроме реального имени сервера в вашей системе. Это может быть опущено, но сервер будет только пытаться вычислить его, что может оказаться ненадежным.
Это не позволяет вашим действительным виртуальным хостам (обслуживающим ваш сайт) иметь дело с этими другими запросами.
# deny all POST requests
Это кажется немного экстремальным! Я удивлен, что ваш сайт все еще работает?