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

.htaccess: разрешить все подключения из локальной сети, но требуется вход для внешних

NB: это не дубликат, так как отмеченное сообщение касается более старых версий apache. Я пробовал решения в этом потоке, а также тот, который должен работать в более поздних версиях, безуспешно.

Есть несколько вопросов и ответов, которые касаются отдельных частей этого, но я не нашел точно такой ситуации.

У меня есть веб-сайт, к которому я хочу быть открытым из моей сети 10.0.0.0. Но при доступе к нему через внешний адрес, перенаправленный в маршрутизаторе, я хочу, чтобы .htaccess требовал входа в систему.

Я знаю, как запрашивать пароль для всех подключений, и у меня есть идея разрешить / запретить определенный адрес или IP. Но я хочу, чтобы ВСЕ IP-адреса, которые не находятся в локальной сети, нуждались в логине / пароле.

Обновление: Apache2 версии 2.2.22

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

AuthName "Authenticate"
AuthType Basic
AuthUserFile "/home/frank/.htpassword"
Require valid-user
Order allow,deny
Allow from 10.0.0.44
Satisfy All

С указанным выше файлом .htaccess доступ через внешний адрес запрещен, точка. Нет запроса на вход. С определенного локального IP-адреса (.44) я получаю приглашение на вход.

AuthName "Authenticate"
AuthType Basic
AuthUserFile "/home/frank/.htpassword"
Require valid-user
Order allow,deny
Allow from 10.0.0.0/8
Satisfy All

С вышесказанным, как внешние, так и внутренние соединения запрашиваются с логином.

Попытка сузить проблему:

Это не работает: (разрешены как внешний, так и LAN-адреса)

Order Deny,Allow
Deny from all
Allow from 10.0.0.0/8

Это работает: (внешний адрес получает отказ в доступе, а локальная сеть - нет)

Order Deny,Allow
Deny from all
Allow from 10.0.0.44

ОБНОВИТЬ: Я упустил что-то фундаментальное?

Когда я пробую это:

Order Deny,Allow
Deny from all

Отказано все, как из локальной сети, так и по внешнему адресу.

Однако, когда я пытаюсь это сделать:

Order Deny,Allow
Allow from 127.0.0.1

Разрешено все, как из локальной сети, так и с внешнего адреса.

Проблема в том, как я пытаюсь получить доступ с вечного адреса? Сервер имен домена mydomain.no указывает на маршрутизатор. Я перенаправил домен mydomain.no на виртуальные серверы маршрутизатора. Трафик через порт 80 направляется на сервер, на котором выполняется установка apache2. Я хочу, чтобы весь трафик, приходящий через адрес mydomain.no (и любые другие домены, перенаправленные на тот же сервер), требовал пароля. Для трафика из локальной сети пароль не требуется.

Я предполагаю, что вы используете Apache 2.4, для Apache 2.2 синтаксис другой.

Вы можете добавить несколько Require директивы:

AuthName "Authenticate"
AuthType Basic
AuthUserFile "/var/www/html/.htpasswd"
<RequireAny>
   Require valid-user
   Require ip 10.0.0
</RequireAny>

Технически вам даже не нужен <RequireAny>, apache будет использовать его неявно, когда его нет, но я считаю, что так легче читать.

Эквивалент для apache 2.2:

AuthName "Authenticate"
AuthType Basic
AuthUserFile "/var/www/html/.htpasswd"
Require valid-user
Order allow,deny
Allow from 10.0.0
Satisfy any

Удален мой собственный ответ, поскольку он был неправильным и, возможно, сбивал с толку других, задающих тот же вопрос.