Ограничение доступа по IP к сайту под Cloudflare

Нам всем очень часто приходится ограничивать доступ к каким-то сайтам или определенным разделам этих сайтов по IP адресам посетителей. Это позволяет защититься от всяческих ботов, флуда и просто нежелательных посещений из определенных регионов мира. Кроме того, такой ограничительный метод является неотъемлемой частью защиты веб сайтов от взлома. Например, так защищают index.php и любые другие критические файлы в папке /wp-admin владельцы сайтов на CMS WordPress. Повторюсь, что защита очень простая в реализации, но достаточно эффективная, и включается она при добавлении следующих строк в ваш файл .htaccess, который должен находится внутри папки /wp-admin (не в корне сайта, а именно в нужной нам папке):

<Files index.php>
order deny,allow
allow from 23.192.72.101
deny from all
</Files>

В данном примере, доступ к index.php получит только тот посетитель, чей IP адрес 23.192.72.101. Больше никто на сможет зайти в панель управления вашим сайтом. Даже товарищ майор, которому известны ваш логин и пароль для входа в админку WordPress вашего сайта не сможет попасть туда со своего милицейского компьютера.

И вот тут возникает проблема, если DNS сайта настроены на сервера сервиса Cloudflare. Дело в том, что ваш сервер не видит IP-адрес клиента напрямую, он видит его IP-адрес в Cloudflare. Реальный IP адрес посетителя содержится в переменной окружения $_SERVER CF-Connecting-IP. Соответственно нам просто нужно воспользоваться правилом SetEnvIf для установки своей собственной переменной на основе CF-Connecting-IP (использовать значение CF-Connecting-IP напрямую не получится) и ссылки на полученный env в правиле Allow. Соответственно, наш .htaccess будет выглядеть следующим образом:

SetEnvIF CF-Connecting-IP "23.192.72.101" YourBossIP
<Files index.php>
order deny,allow
allow from 23.192.72.101
allow from env=YourBossIP
deny from all
</Files>

В принципе, строка “allow from 23.192.72.101” больше не нужна, но я ее оставил на тот случай, если вы решите отказаться от услуг Cloudflare и вернетесь к DNS-ам регистратора вашего домена.

Liked Liked
No Comments