Блокировка доступа с определённого сайта / бан по Referer

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

if ($http_referer ~* "example\.com") {
return 403;
}

Рассматриваем по порядку. if — это условие «если». $http_referer — это реферер, сайт, с которого выполняется переход. «example\.com» — это адрес блокируемого сайта, здесь example — это имя домена, а .com — доменная зона. Return 403 возвращает браузеру, перешедшему с сайта example.com страницу ошибки 403 — доступ запрещён.

Этот код нужно добавить в секцию server конфига и перезагрузить этот конфиг командой.

service nginx reload

Данное действие запретит переходы с сайта example.com на ваш сайт.

Для блокировки запросов на основе HTTP-заголовка реферера можно использовать модуль ngx_http_referer

Пример конфигурации сервера в NGINX, который блокирует запросы с определенных рефереров:

server {
listen 80;
server_name example.com;

# разрешаем доступ всем IP-адресам, кроме указанных в блоке deny
allow all;
deny 1.2.3.4;

# блокируем запросы со следующих рефереров
# можно использовать регулярные выражения
if ($http_referer ~ (spam-site\.com|another-spam\.com)) {
return 403;
}

# обработка запросов
location / {
# … дальнейшая конфигурация
}
}

В данном примере происходит блокировка IP-адреса 1.2.3.4 и запросов со спам-сайтов spam-site.com и another-spam.com. Вместо конкретных доменов можно использовать регулярные выражения для более гибкой конфигурации.

Однако, следует учитывать, что использование модуля ngx_http_referer может быть неэффективным, так как HTTP-заголовки могут быть поддельными. Также не рекомендуется использовать блокировку через инструкцию if в конфигурации NGINX из-за возможности некорректной обработки запросов. Безопаснее использовать блокировку через специализированные модули или программное обеспечение.

Оцените статью
Добавить комментарий