opened image

Как ограничить доступ к сайту по IP через .htaccess

 

Ограничение доступа к сайту по IP-адресам — это один из базовых, но надёжных способов защитить определённые разделы сайта или ограничить доступ нежелательным пользователям. Такая задача может понадобиться в различных ситуациях: от защиты административной части до временной блокировки отдельных IP-адресов.

Данный механизм работает на уровне веб-сервера Apache и позволяет управлять доступом к сайту без необходимости использовать внешние файерволы. Все правила прописываются в файле .htaccess, который обрабатывается сервером при каждом обращении к сайту.

 

 

Зачем фильтровать IP на уровне Apache

 

  • Быстрое реагирование. Файл .htaccess читается «на лету», поэтому изменения применяются без перезапуска сервера.

  • Точная настройка. Можно разрешать или запрещать целые каталоги, отдельные файлы либо типы файлов.

  • Дополнительная защита. Хорошо сочетается с файерволами, Fail2ban, VPN и WAF.

 

Любая синтаксическая ошибка в .htaccess приведёт к 500 Internal Server Error. Всегда тестируйте правила на стенде или делайте бэкап файла.

 

 

Apache 2.2: директивы Order / Allow / Deny

 

(В Apache 2.4 эти директивы работают только при включённом режиме совместимости.)

 

2.1 Блокировка отдельных IP


 
Order Allow,Deny Allow from all Deny from 192.0.2.10 Deny from 203.0.113.0

 

2.2 Доступ только из «белого списка»


 
Order Deny,Allow Deny from all Allow from 192.0.2.50 Allow from 198.51.100.12

 

 

2.3 Сети в формате CIDR

 

 

Order Allow,Deny Allow from all Deny from 198.51.100.0/24 # целая сеть Deny from 2001:db8:1234::/48 # IPv6

 

2.4 Ограничение каталога (пример wp-admin)

 

Разместите .htaccess внутри папки wp-admin:


 
Order Deny,Allow Deny from all Allow from 192.0.2.100

 

2.5 Защита одного файла


 
<Files ".env"> Order Deny,Allow Deny from all </Files>

 

Разрешить доступ только с нужного IP — добавьте Allow:


 
<Files ".env"> Order Deny,Allow Deny from all Allow from 192.0.2.10 </Files>

 

2.6 Фильтр по типам файлов


 

 

<FilesMatch "\.(png|gif)$"> Order Deny,Allow Deny from all # Allow from 192.0.2.30 # ← раскомментируйте при необходимости </FilesMatch>

 

 

Apache 2.4: директива Require

 

 

В новых версиях используется модель доступа mod_authz_core.

 

3.1 Блокируем конкретные IP


 
Require all granted Require not ip 192.0.2.10 198.51.100.0/24

 

 

3.2 Доступ только своим адресам


 
Require ip 192.0.2.50 198.51.100.12 Require not all

 

 

3.3 Комбинированные правила


 
<RequireAll> Require method GET POST # только просмотр и формы Require ip 192.0.2.0/24 </RequireAll>

 


 

Когда трафик идёт через nginx → Apache

 

Установите mod_remoteip (или старый mod_rpaf).

 

В apache2.conf пропишите:


 
RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy 127.0.0.1

 

 

В nginx передавайте реальный IP:


 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

 

Без этих настроек Apache будет видеть лишь 127.0.0.1, и правила .htaccess не сработают.

 

 

Общие рекомендации

 

  • Для Apache 2.2 используйте Order / Allow / Deny или включите режим совместимости в 2.4.

  • На Apache 2.4 предпочтительнее директива Require.

  • Проверяйте конфигурацию командой apachectl configtest перед публикацией.

  • На связке nginx → Apache убедитесь, что настроены заголовки и модуль mod_remoteip.

 

IP-фильтрация на уровне .htaccess — быстрый способ укрепить безопасность сайта, особенно когда нет доступа к фаерволу или нужно оперативно заблокировать нежелательные запросы. Используйте её вместе с другими средствами — двухфакторной аутентификацией, VPN, Fail2ban — и ваш веб-ресурс станет заметно устойчивее к несанкционированным попыткам доступа.