Разрешение доступа к виртуальному хосту Apache только из локальной сети

19

У меня есть веб-страница на сервере Linux, который я администрирую, на котором работает Apache 2.2. Этот сервер виден внешнему миру для некоторых других служб.

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

Как я могу изменить свой конфигурационный файл для достижения этого? Должен ли я также изменить конфигурацию брандмауэра?

БТЗ
источник
Используете ли вы для своего сервера частный (не маршрутизируемый) IP-адрес, например 10.0.0.100, или публичный (маршрутизируемый) IP-адрес?
closetnoc
Сервер имеет общедоступный IP-адрес, и я могу подключиться к нему из-за пределов рабочей сети - например, из дома. Все компьютеры коллег имеют локальные IP-адреса типа 10. *. *. *.
Бц

Ответы:

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из запрета доступа от всех. Follwing - это Allow fromоператоры, которые разрешают доступ с 127.0.0.1 ::1(локальный IP-адрес), localhost(сам локальный хост ). Это все стандартные вещи. Поскольку доступ из localhostнеобходим для многих внутренних системных процессов.

Далее следует то, что важно для вас.

Параметр Allow fromfor, 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диапазоне. Ничего внешнего. Таким образом, использование этой комбинации позволит достичь цели по блокированию доступа к внешнему миру, но разрешит доступ только из вашей локальной сети.

JakeGould
источник
Что 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>

и удалите все разрешающие директивы.

nachoparker
источник
5

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

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

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

Хлоя
источник
-1

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

Предположим, у вас есть небольшой офис с DSL-соединением. У вас будет статический общедоступный IP-адрес или блок адресов, назначенных вашей линии, модем DSL и брандмауэр. Не вдаваясь в детали того, как это происходит, я перейду к важной части.

Вы должны использовать NAT (трансляция сетевых адресов). Это позволяет общедоступным IP-адресам находиться на стороне WAN (Интернет) вашей сети и использовать частные IP-адреса (например, 10.0.0.100) в сети на стороне LAN. Это стандартная процедура работы. Если вы размещаете веб-сервер в своей сети, то вы будете использовать переадресацию портов или другой аналогичный механизм) для направления любого веб-трафика на ваш веб-сервер.

В этом стандартном сценарии все ваши внутренние компьютеры будут использовать частные IP-адреса.

Предполагая, что у вас есть аналогичные стандартные настройки сети, вы изменили бы IP-адрес вашего компьютера с общедоступного IP-адреса на частный IP-адрес. Ваша сеть может иметь настройку DHCP, где ваш компьютер может запросить доступный IP-адрес. Это означает, что вместо указания IP-адреса вы выбираете использовать DHCP, и IP-адрес будет назначен. Если DHCP недоступен, вам придется проверить на некоторых других компьютерах частное пространство IP-адресов, которое можно использовать, и выбрать IP-адрес в пространстве, которое не используется. Вы можете указать этот неиспользуемый IP-адрес в настройках сети. Это должно помешать вашей системе быть замеченной в Интернете.

closetnoc
источник
Я думал об этом, но это не практическое решение. На этом компьютере есть службы, которые должны оставаться видимыми снаружи, и в любом случае я планирую сделать веб-приложение снова видимым через несколько дней - нет смысла революционизировать структуру сети всего за несколько дней. Однако я могу работать над настройками Apache.
Бц
Если у вас есть брандмауэр, вы можете закрыть некоторые порты для этого IP-адреса.
closetnoc
Можно использовать настройки брандмауэра, но это действительно излишне. Apache имеет встроенную функциональность для запрета или разрешения на основе IP-адреса и других связанных критериев. Смотрите мой ответ для более подробной информации.
JakeGould
@JakeGould Брандмауэры не обязательно являются решением проблемы избыточного количества ресурсов. Я действительно хорошо знаю Apache. Однако в большинстве хороших брандмауэров есть опции фильтрации HTTP, которые помогают без нагрузки на сам сервер. Кроме того, хотя Apache превосходен, он не без ошибок. Кроме того, доступами к портам, включая альтернативные доступы к портам, можно управлять с помощью брандмауэра, поэтому некоторые веб-службы остаются открытыми, а другие доступны только в локальной сети.
closetnoc