Назад | Перейти на главную страницу

Отказ в доступе к сайту через htaccess на основе http-заголовка

Я целую вечность пытался заставить это работать, и я не могу понять это. Я пытаюсь заблокировать доступ к сайту из ряда стран на основе заголовка CF-IPCountry, добавленного CloudFlare. Я подумал, что htaccess - подходящий способ сделать это.

Мы запускаем LiteSpeed ​​4.2.4 поверх DirectAdmin для панели управления.

Проблема в том, что правило htaccess ничего не делает.

Вот правило, которое мы пробовали:

SetEnvIf CF-IPCountry AU UnwantedCountry=1
Order allow,deny
Deny from env=UnwantedCountry
Allow from all

Это вообще не имеет значения, соединения все равно принимаются. Чтобы проверить, что правило хотя бы обрабатывается, я изменил Разрешить со всех на Запретить со всех, и в соединениях было отказано. Таким образом, это проблема с переменной.

Вот соответствующие заголовки, которые входят в запрос.

Connection: Keep-Alive 
Accept-Encoding: gzip 
CF-Connecting-IP: xx.xx.xx.xx
CF-IPCountry: AU 
X-Forwarded-For: xx.xx.xx.xx.xx
CF-RAY: c9062956e2d04b6 
X-Forwarded-Proto: http 
CF-Visitor: {"scheme":"http"} 
Zone-Name: xx.com.au

Надеюсь, кто-нибудь сможет мне помочь, это слишком долго сводило меня с ума.

Спасибо

Обновить

Теперь я включил перезапись журнала, добавив RewriteLogLevel 9 к виртуальному хосту.

Первоначально я провел тест со всеми моими другими правилами htaccess, которые довольно обширны для этого сайта, я мог видеть, что различные совпадения регистрируются, поэтому я знаю, что ведение журнала работает правильно.

Я разделил свой htaccess до костей, чтобы проверить этот случай, поэтому в моем htaccess было следующее:

SetEnvIf CF-IPCountry AU UnwantedCountry=1
Order allow,deny
Deny from env=UnwantedCountry
Allow from all

Благодаря этому в моем htaccess вообще нет вывода журнала, что говорит мне, что он просто не соответствует правилам, которые я предполагаю. Я еще раз проверил, что в заголовках присутствует «CF-IPCountry: AU».

В качестве альтернативы использованию SetEnvIf вы могли бы сделать это с RewriteRule также.

RewriteCond %{HTTP:CF-IPCountry} ^(AU|SE)$
RewriteRule ^ - [F,L]

Это заблокировало бы пользователей AU и SE.