Как запретить работу server-status Apache из виртуальных хостов?

Вопрос или проблема

У меня есть Apache с включенным mod_status и стандартной конфигурацией

<IfModule mod_status.c>
        <Location /server-status>
                SetHandler server-status
        </Location>
</IfModule>

Я хочу разрешить доступ пользователям только через основное имя сервера, а не со всех настроенных виртуальных хостов.

http://mainservername/server-status #работает, и я хочу оставить это так
http://virtualhost1/server-status #работает, и я этого не хочу
http://virtualhost2/server-status #работает, и я этого не хочу

Есть ли способ включить модуль только для основного сервера или ограничить его для стандартного виртуального хоста?

Ответ или решение

Для решения вашей задачи, связанной с ограничением доступа к статусу сервера Apache через директиву server-status, следует воспользоваться настройками Location и VirtualHost. Цель состоит в том, чтобы разрешить доступ к server-status только с основного серверного имени и предотвратить доступ с других виртуальных хостов.

Теория

Когда вы включаете модуль mod_status в Apache, он предоставляет ценную информацию о работе вашего сервера, включая статистику производительности, текущие соединения и многое другое. При использовании конфигурации <Location /server-status>, вы устанавливаете обработчик для этой информации, что позволяет получить доступ к ней через указанный путь.

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

Пример

Вот пример типичной конфигурации для ограничения доступа к server-status только с основного серверного имени.

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

    Для начала убедитесь, что <Location /server-status> указан только в основном конфигурационном файле вашего основного виртуального хоста. Таким образом, другие виртуальные хосты не будут наследовать эту настройку. Обычно это файл конфигурации <VirtualHost *:80> или <VirtualHost *:443> в зависимости от используемых портов.

    <VirtualHost *:80>
       ServerName mainservername
       DocumentRoot /path/to/your/document/root
    
       <IfModule mod_status.c>
           <Location /server-status>
               SetHandler server-status
               Require host mainservername
               # Вы также можете ограничить доступ по IP
               # Require ip 192.168.1.0/24
           </Location>
       </IfModule>
    </VirtualHost>

    В этом случае директива Require host mainservername гарантирует, что только запросы, содержащие имя хоста mainservername, будут иметь доступ к server-status.

  2. Виртуальные хосты без доступа к server-status:

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

    <VirtualHost *:80>
       ServerName virtualhost1
       DocumentRoot /path/to/virtualhost1/document/root
    
       # Без указания конфигурации Location для server-status
    </VirtualHost>
    
    <VirtualHost *:80>
       ServerName virtualhost2
       DocumentRoot /path/to/virtualhost2/document/root
    
       # Без указания конфигурации Location для server-status
    </VirtualHost>

Применение

Теперь, после внедрения этой конфигурации, вы обеспечите доступ к информации о статусе сервера, позволяя его только с основного серверного имени. Использование директивы Require host ограничивает доступ, основанный на имени хоста, что делает эту настройку надежной и эффективной для вашей ситуации. Если у вас есть дополнительные IP-адреса, которые должны иметь доступ, можно комбинировать Require host и Require ip для более гранулярной настройки доступа.

Не забудьте перезапустить сервер Apache после изменения конфигурации, чтобы изменения вступили в силу:

sudo apachectl restart

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

Оцените материал
Добавить комментарий

Капча загружается...