.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

Вопросы:

  1. Что мне добавить, чтобы [if HTTP_HOST = XXX.XXX.XXX.XX1 OR HTTP_HOST = XXX.XXX.XXX.XX2 OR HTTP_HOST = XXX.XXX.XXX .XX3] , тогда трафик немедленно блокируется?

  2. Могу ли я поместить этот новый код в начало файла .htaccess? Это сломает то, что сейчас там?

2
задан 31 May 2018 в 21:05
1 ответ

Не нужно проверять заголовок Host на конкретные IP-адреса, просто проверьте любой Host, который начинается с цифры. Например, в верхней части вашего файла .htaccess:

RewriteCond %{HTTP_HOST} ^\d
RewriteRule .* - [F]

Вам не нужен флаг L с F - это подразумевается.

Вам также не нужны дополнительные обертки. Оставьте WordPress как есть. (Хотя, строго говоря, это тоже не обязательно.)

Однако, в идеале эти типы блоков должны выполняться на уровне сервера/витуалхоста, а не в .htaccess. Настройте по умолчанию , который ловит эти нежелательные IP-запросы.

Например, предполагая, что вы используете только виртуальные хосты, основанные на именах, вы можете настроить по умолчанию VirtualHost (что должен возникать перед всеми другими виртуальными хостами) в виде:

# 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_ - это просто псевдоним для *. Как было отмечено выше, этот контейнер должен возникать перед всеми другими контейнерами в конфигурации вашего сервера. Тот факт, что он определен first, делает его "по умолчанию".

Директива ServerName должна быть определена как что-либо другое, чем реальное имя сервера в вашей системе. Ее можно опустить, но сервер будет пытаться вычислить только то, что может оказаться ненадежным.

Это не позволяет вашим реальным Виртуальным Хостам (которые обслуживают ваш сайт) иметь дело с этими другими запросами.


# отказывать во всех POST-запросах

Это кажется немного экстремальным! Удивительно, что ваш сайт все еще работает?

1
ответ дан 3 December 2019 в 12:32

Теги

Похожие вопросы