Дозволити доступ до віртуального хоста Apache лише з локальної мережі


19

У мене є веб-сторінка на сервері Linux, яким я адмініструю, працює під управлінням Apache 2.2. Цей сервер видно зовнішньому світу для деяких інших послуг.

Я хотів би налаштувати Apache так, щоб даний віртуальний хост був видно лише з внутрішньої локальної мережі, тому я можу розгорнути веб-додаток, щоб отримати зворотній зв'язок від інших людей в моїй організації. Я вважаю, що це стосується директиви Allow, але мої експерименти не йдуть добре.

Як я можу змінити свій конфігураційний файл, щоб досягти цього? Чи потрібно також змінити конфігурацію брандмауера?


Чи використовуєте ви приватну (неперекладну) IP-адресу, наприклад 10.0.0.100, або загальнодоступну (маршрутизовану) IP-адресу для свого сервера?
closetnoc

Сервер має загальнодоступну IP-адресу, і я можу підключитися до нього за межами робочої мережі - наприклад, з дому. На всіх комп'ютерах колег є локальні IP-адреси типу 10. *. *. *.
Btz

Відповіді:


12

Легко. Просто встановіть щось подібне в основній конфігурації або у віртуальній конфігурації:

<Directory /var/www/path/to/your/web/documents>

  Order Deny,Allow
  Deny from all
  Allow from 127.0.0.1 ::1
  Allow from localhost
  Allow from 192.168
  Allow from 10
  Satisfy Any

</Directory>

В <Directory></Directory>заяві в основному сказано: "Використовуйте ці правила для будь-чого в цьому каталозі. І "цим каталогом", який посилається на те, /var/www/path/to/your/web/documentsщо я вказав у цьому прикладі, але його слід змінити, щоб він відповідав локальному шляху вашого веб-сайту.

Далі в межах <Directory></Directory>області ви змінюєте поведінку Apache за замовчуванням, яке Allowвсе за замовчуванням Order Deny,Allow. Далі ви встановлюєте Deny from allвідмову в доступі від усіх. Продовження - це Allow fromзаяви, які дозволяють отримати доступ з 127.0.0.1 ::1(localhost IP-адреса), localhost(локальний хост). Ось і все стандартне. Оскільки доступ з localhostпотрібен для багатьох внутрішніх системних процесів.

Далі йде матеріал, який важливий для вас.

Allow fromДля 192.168, а також 10дозволить отримати доступ з будь-яких / всіх мережевих адрес в межах діапазону мережі, передує цими цифрами.

Отже, вказуючи, 192.168що це в основному означає, якщо користувач має таку адресу, 192.168.59.27або 192.168.1.123він зможе побачити веб-сайт.

І точно так само , використовуючи Allow fromдля 10префікса запевняє , що якщо хто - то має IP - адреса 10.0.1.2або навіть 10.90.2.3вони зможуть побачити вміст.

Практично всі внутрішні мережі у світі використовують або 192.168діапазон, або щось у цьому 10діапазоні. Нічого зовнішнього. Таким чином, використовуючи це комбо, ви досягнете своєї мети заблокувати доступ до зовнішнього світу, але дозволите доступ лише з локальної мережі.


Що Satisfy Anyробити в цьому випадку? Я нічого не знаю про все це, але коли це було в моєму сценарії, я міг отримати доступ до сторінки (я використовував <Location /path>) із зовнішньої мережі. Однак його усунення вирішило мої проблеми. Було б приємно зрозуміти, чому це було так, оскільки це було трохи стурбовано тим, що я можу отримати доступ до сторінки навіть за правилами.
liamnichols

@liamnichols Як пояснено тут : "Дозволяє запит, якщо будь-яка вимога виконана (автентифікація АБО доступ)".
JakeGould

14

Люди, які перебувають у цій відповіді, зауважте, що це специфічно для Apache 2.2.

Apache 2.4 знецінив ці директиви.

Новий спосіб - використання модуля mod_authz_hostта Requireдиректив. ( посилання )

У Apache 2.4 вам слід зробити

<Directory /var/www/ncp-web/>
  Require host localhost
  Require ip 127.0.0.1
  Require ip 192.168
  Require ip 10
</Directory>

та видаліть усі дозвольні директиви.


5

Додайте цей розділ до директиви вашого віртуального хоста:

<Location /mypathurl>
    Order deny,allow
    Deny from all
    Allow from 192.168.1.10
</Location>

Замініть свій IP-адресу вище. Це не повинно використовуватися для забезпечення фінансового рівня, БЮР.


-1

Я не знаю, як у вас налаштована мережа, однак я припускаю, що колись спробую зробити кращу відповідь.

Припустимо, у вас є невеликий офіс із з'єднанням DSL. У вас буде статична загальнодоступна IP-адреса або блок адрес, призначений вашій лінії, DSL-модем та брандмауер. Не вдаючись у деталі, як це відбувається, я перейду до важливої ​​частини.

Ви повинні використовувати NAT (переклад мережевої адреси). Це дозволяє публічним IP-адресам розміщуватись у мережі WAN (Internet) вашої мережі та використовувати приватні IP-адреси (наприклад, 10.0.0.100) у межах мережі на стороні локальної мережі. Це стандартна операційна процедура. Якщо ви розміщуєте веб-сервер у вашій мережі, ви використовуєте переадресацію портів або інший подібний механізм), щоб навести будь-який веб-трафік на ваш веб-сервер.

У цьому стандартному сценарії всі ваші внутрішні комп'ютери будуть використовувати приватні IP-адреси.

Якщо припустити, що у вас є аналогічна стандартна мережева установка, ви змінили IP-адресу свого комп'ютера з загальнодоступної IP-адреси на приватну IP-адресу. У вашій мережі може бути налаштовано DHCP, де ваш комп'ютер може запросити доступну IP-адресу. Це означає, що замість того, щоб вказати IP-адресу, ви вирішите використовувати DHCP і буде призначено IP-адресу. Якщо DHCP недоступний, вам доведеться перевірити на деяких інших комп’ютерах приватний простір IP-адреси, який може бути використаний, і вибрати IP-адресу в просторі, який не використовується. Ви можете вказати цю невикористану IP-адресу в налаштуваннях мережі. Це повинно перешкоджати погляду вашої системи в Інтернеті.


Я думав про це, але це не практичне рішення. На цій машині є сервіси, які повинні залишатися видимими зовні, і в будь-якому випадку я планую зробити веб-додаток знову видимим за кілька днів - немає сенсу робити революцію в макеті мережі лише на кілька днів. Однак над тим, над чим я можу працювати, є такі речі, як конфігурація Apache.
Бтц

Якщо у вас є брандмауер, ви можете закрити деякі порти до цієї IP-адреси.
closetnoc

Налаштування брандмауера можна використовувати, але це справді надмірно. Apache має вбудований функціонал для заборони або дозволу на основі IP-адреси та інших відповідних критеріїв. Дивіться мою відповідь для отримання більш детальної інформації.
JakeGould

Брандмауери @JakeGould не обов'язково є рішенням про надмірне знищення. Я справді дуже добре знаю Apache. Однак у більшості хороших брандмауерів є варіанти фільтрації HTTP, які допомагають без навантаження на сам сервер. Крім того, хоча Apache відмінна, це не без вини. Крім того, доступ до портів, включаючи доступ до альтернативних портів, може маніпулюватися за допомогою брандмауера, щоб деякі веб-сервіси залишалися загальнодоступними, а інші були доступні лише в межах локальної мережі.
closetnoc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.