Иногда появляется необходимость заблокировать какие-то странные переходы с чужого сайта на ваш сайт или, скажем, ботов, которые приходят с одного и того же ip-адреса. Для этих случаев вполне пригодны инструкции, которые могут быть записаны в файле .htaccess, речь конечно же про сервер Apache.
Итак, примеры блокировки для IPv4 по ip-адресу.
Для одного адреса:
Order Allow,Deny
Deny from 111.11.11.11
Allow from all
Для нескольких адресов:
Order Allow,Deny
Deny from 111.11.11.11
Deny from 222.22.22.22
Allow from all
Диапазон адресов:
Order Allow,Deny
Deny from 111.11.11.0/24
Allow from all
Еще один вариант для диапазона адресов:
Order Allow,Deny
Deny from 111.11.*.*
Allow from all
Примеры блокировки для IPv6
Очевидно, что вопрос блокировки в 99% случаев возникает, когда на сайт лезут боты, а делают они это в основном через IPv6, а все потому, что v4 стоит дорого. И здесь логичным выглядит решение заблокировать доступ с этих адресов. Делаем вот так:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^[0-9a-fA-F:]+$ [OR]
RewriteCond %{HTTP_HOST} ^[0-9a-fA-F:]+$
RewriteRule ^ - [F]
</IfModule>
А если надо заблокировать диапазон адресов IPv6? Приведем пример блокировки диапазона 2001:db8::/32 :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^2001:0db8(:[0-9a-fA-F]{0,4}){0,6}$
RewriteRule ^ - [F]
</RewriteCond>
</IfModule>
Здесь:
^2001:0db8 — начало диапазона, который вы хотите заблокировать.
(:[0-9a-fA-F]{0,4}){0,6} — учитывает оставшиеся 6 блоков адреса (IPv6 состоит из 8 блоков по 16 бит).
[F] — возвращает ошибку 403 (Forbidden).
У любопытных может возникнуть закономерный вопрос: не проще ли отключить доступ к сайту по IPv6 через удаление AAAA-записи в его DNS-записи? Конечно проще. Разница вот в чем: при блокировке через отключение меньше нагрузка на сервер, запросы просто не доходят до него. Настроить проще, если у вас есть доступ к DNS-зоне. Надо понимать, что вы полностью отключаете IPv6 для всех, без возможности выборочного блокирования.
Что касается блокировки через файл .htaccess, — это гибкое решение, можно настроить выборочную блокировку. Оно полезно, если вы не контролируете DNS-зону. Но, нагрузка на сервер будет выше, потому что запросы доходят до него и обрабатываются.
Заблокировать домен
Бывают такие случаи, когда смотришь в яндекс-метрику и понимаешь, что какому-то, сами знаете кому, не спится и он решил подолбиться со своего сайта на ваш. Причины могут быть разные, знаю одну контору, которая решила таким образом продвигать свои услуги для владельцев сайтов. Совершенно никчемное решение, но раздражает. Поэтому берем и блокируем следующим образом их сайт. Пусть он его адрес будет sitename.work, тогда:
RewriteEngine on
RewriteCond %{HTTP_REFERER} ^https://.*sitename\.work/ [NC]
RewriteRule ^(.*)$ – [F,L]
и больше с этого сайта к вам в гости никто не ходит.
Возможно, вам не надо устраивать "ковровую блокировку" и вы хотите заблокировать какого-то конкретного бота, для этого есть отдельные рекомендации: Блокировка ботов через .htaccess