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

Как я могу запросить пароль для определенных IP-адресов и разрешить всем остальным свободный доступ с помощью Apache?

РЕШЕНО: Идея в том, что если посетитель приехал из Китая, он должен пройти базовую аутентификацию. Если у вас есть другой IP-адрес, вы можете без проблем посещать сайт (включая прокси).

//1400 rules....
SetEnvIf Remote_Addr 222.249.128.0/19 china
SetEnvIf Remote_Addr 222.249.160.0/20 china
SetEnvIf Remote_Addr 222.249.176.0/20 china
AuthType Basic
AuthName "Restricted"
AuthUserFile /www/passwd/users
Require valid-user
Order allow,deny
Allow from All
Deny from env=china
Satisfy any

Просто добавьте «разрешить от myiprange» или «разрешить от myinternalnetwork.com». «Удовлетворить любое» потребует либо действительного пользователя, либо разрешения от.

Видеть: Аутентификация, авторизация и контроль доступа

Это код, который я использую, чтобы разрешить всем пользователям, запретить пользователям из Китая и запросить пароль для тех:

AuthType Basic
AuthName "Restricted"
AuthUserFile /home/.htpasswds/.htpasswd
Require valid-user
Order Allow,Deny
Allow from all
deny from 58.14.0.0/15
....
deny from 222.249.192.0/18
satisfy any

Обычно конфигурация по умолчанию имеет неограниченный доступ для всех.

<Directory "/home/web/htdocs">
    Order allow,deny
    Allow from all
</Directory>

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

<Directory "/home/web/htdocs/restricted">
    Order Deny,Allow
    Deny from all
    Allow from 58.240.0.0/15
    Allow from 58.242.0.0/15
    Require valid-user
    Satisfy all
    AuthName "Restricted Area" 
    AuthType Basic 
    AuthUserFile /home/web/.htpasswds/.htpasswd 
    Require valid-user
</Directory>

Предостережение!

Каждый раз, когда мне кажется, что я понимаю правила работы аутентификации, мне приходится постоянно возиться с конфигурацией, пока не увижу некоторые нюансы. Используйте это только как отправную точку. Перечитайте документацию apache, в частности, по mod_auth и mod_access, уделяя особое внимание директиве Order. В этом ваш ответ.

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

--редактировать--

Тестирование вышеизложенного показывает, что зона с ограниченным доступом запрещена для всех, кроме тех, кто пользуется IP-адресом и должен обеспечивать аутентификацию.

Из вашего вопроса неясно, нужен ли пользователям с других IP-адресов неограниченный доступ к этой «ограниченной зоне» или они просто запрещены?