Apache 2.4 ограничивает URL определенными IP-адресами

Apache 2.4 ограничивает URL определенными IP-адресами

Я пытаюсь ограничить доступность определенного URL за пределами сети только для определенных IP-адресов. Когда внешний пользователь пытается получить доступ к этому URL, а не из списка IP-адресов, он должен быть перенаправлен на домашнюю страницу.

Это то, что я пробовал до сих пор, но безуспешно. Последняя часть перенаправляет всех на домашнюю страницу независимо от IP.

<Location "/secret">
#    <If "%{REMOTE_ADDR} != -ipmatch '123.123.123.123/255.255.255.255'">
#    Redirect 303 "/secret" /
#    </If>

RewriteCond "%{REMOTE_ADDR}" "!123\.123\.123\.123"
RewriteRule .* / [R,L]

LogLevel debug rewrite:trace6
</Location>

PS: URL-адрес /secret на самом деле является виртуальным URL-адресом и физически не существует на диске.

решение1

Используйте Require [ip|host|env], чтобы указать, кто имеет доступ к вашему виртуальному хосту или местоположению.

    <Directory "/docroot">
        Require ip 10.10.11.12
    </Directory>   

Когда дело доходит до перенаправления, подумайте опользовательская страница ошибки. Это гораздо более общий подход, поскольку каждый несанкционированный доступ должен вызывать ошибку 403 и, таким образом, может быть легко оценен.

Я никогда не делал этого с apache, но использую эту стратегию с nginx. Для apache должно подойти что-то вроде этого:

ErrorDocument 403 http://homepage.example.com

Пользовательские документы ошибок настраиваются с помощью директивы ErrorDocument, которая может использоваться в глобальном, виртуальном или каталоговом контексте. Она может использоваться в файлах .htaccess, если AllowOverride установлен в FileInfo. (из документации apache)

решение2

Параметры Order, Deny и Allow были заменены в Apache 2.4 на

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
</Directory>

Вы можете явно ограничить адреса, используя следующее:

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
    Require not ip 192.168.0.1
</Directory>

Точно так же верно и обратное: чтобы ограничить все и разрешить только подмножество, используйте следующее:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
</Directory>

Более подробная информация доступна наДокументация по контролю доступа Apache 2.4.

Что касается вашего вопроса (отредактировал свой собственный из-за недостатка точек для добавления комментария), вы должны иметь возможность просто установить ErrorDocument с индексом, установленным в качестве URL-пути:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
    ErrorDocument 401 /index.html
</Directory>

Надеюсь это поможет!

решение3

Для Apache 2.4 можно использовать <RequireAny>. Это можно сделать в vhost или файле .htaccess...

SetEnvIF IP xxx.xxx.xxx.xxx AllowThisIP  # Or X-Real-IP
SetEnvIF IP yyy.yyy.yyy.yyy AllowThisIP
<RequireAny>
  Require env AllowThisIP
  Require host example.com
</RequireAny>

Документация Apachehttps://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#requireany

Связанный контент