Apache 2.4 обмежує URL-адресу для певних IP-адрес


14

Я намагаюся обмежити певну 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-адреса насправді є віртуальною URL-адресою і фізично не існує на диску.


якщо заяви коментуються? Увімкнути перезапис - RewriteEngine On?
користувач9517

Заява <If> - це одна версія, яку я спробував. Директива RewriteEngine On оголошена раніше. Ось чому вона переспрямовує всіх
Денис Рендлер

1
Я думаю, ви повинні відмітити позначку вибраної відповіді, оскільки вона не відповідає дійсності для Apache 2.4, як ви просили (вона дає неправильну інформацію людям, які проходять повз)
Erenor Paz

Відповіді:


4

Використовуйте Order, Denyі allowвказати , хто має доступ до віртуального хосту або місця перебування.

<VirtualHost *:80>
    ServerName example.net
    DocumentRoot /docroot

    <Directory "/docroot">
        Order Deny,Allow
        Deny from all
        Allow from 10.10.10.10
        Allow from 10.10.11.0/24
    </Directory>   
</VirtualHost>

Що стосується перенаправлення, подумайте про власну сторінку помилок . Це набагато загальніше, тому що кожен несанкціонований доступ повинен спровокувати помилку 403 і, таким чином, його можна легко оцінити.

Я ніколи цього не робив з apache, але використовую цю стратегію з nginx. Для апаша щось таке слід зробити:

ErrorDocument 403 http://homepage.example.com

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


2
Це схоже на набір конфігурації Apache httpd 2.2. Чи все ще буде працювати з 2.4?
користувач9517

Принаймні ErrorDocumentчастина - з 2,4 документа. Я не використовую Apache, так як Nginx навколо, але передбачається , що Order, Denyі Allowвсе ще навколо в апач 2,4
ansi_lumen

Дякую, але я не допомагаю. Я забув згадати, але я оновив питання, / таємна URL-адреса насправді є віртуальною URL-адресою і фізично не існує на диску. Сам URL - це перезапис з index.php, тому я використав директиву <Розташування>.
Денис Рендлер

4
Цей синтаксис застарілий у апачі 2.4
Лука Регеллін

1
Чому це прийнята відповідь? Це для Apache 2.2 не 2.4, як випливає з питання ... Це не спрацює.
Джеремі

23

Параметри "Порядок", "Заборонити" та "Дозволити" були замінені в 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>

Сподіваюся, це допомагає!


Дякую, @Linztm! Але це частково вирішує мою проблему. Я не хочу лише блокувати користувача, але й перенаправляти його на головну сторінку.
Денис Рендлер

Здається, це працює з директивою ErrorDocument, лише якщо я надаю повну URL-адресу, включаючи домен та протокол. Я буду досліджувати далі. Дякую.
Денис Рендлер

Я знайшов щонайменше один випадок, коли вам потрібно використовувати allowхоча і застарілий, але Require 127.0.0.1 все ж дозволяти доступ за зовнішньою адресою з локальної машини, де як дозволяють синтаксиси дозволяють лише з 127 адреси.
Олексій Мартьянов

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.