Как указать диапазон IP-адресов вместо одного IP?

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

Мой IP меняется к другому классу D, поэтому я хочу установить диапазон:

123.123.123.xxx, где сегмент xxx может быть от 0 до 255.

Сейчас Apache говорит:

<RequireAny>
    Require ip 127.0.0.1
    Require ip ::1
</RequireAny>

Сначала я предположу, что вы имеете в виду Apache 2.4, несмотря на тег “apache-2.2”, так как синтаксис, который вы указали, из версии 2.4.

Из документации Apache:

ip.address — это IP-адрес, частичный IP-адрес, пара сеть/маска или
спецификация CIDR сеть/nnn.

Я предполагаю, вы хотите разрешить /24, поскольку класс D — это адреса Multicast, и классовая адресация умерла в 90-х. Чтобы разрешить /24, вы можете использовать любое из следующих:

Require ip 123.123.123
Require ip 123.123.123.0/255.255.255.0
Require ip 123.123.123.0/24

Лично я считаю последнее менее двусмысленным, чем первое, и более читабельным, чем второе.

Вам может быть полезен этот раздел документации: http://httpd.apache.org/docs/2.4/howto/access.html#host

В Apache 2.2 и ниже, вы могли использовать:

Order deny,allow
Deny from all
Allow from 24.18    # разрешить доступ из дома
Allow from 162.12   # разрешить доступ с работы

в вашем .htaccess, непосредственно на базовом уровне (не внутри любого <directive>).

Начиная с Apache 2.4 и выше, вот вам:

<RequireAny>
    #Диапазон IPv4 на работе
    Require ip 207.100

    #Диапазон IPv4, который я обычно получаю через моего мобильного провайдера
    Require ip 29.11

    #IPv6 из дома
    Require ip 2a02:4126:2aa4::/48
</RequireAny>

(все числа вымышленные, не волнуйтесь ;-).

Я использую это уже много лет, чтобы защитить мои бэкэнд-папки от 99% потенциальных пользователей. (Очень эффективно, если вы не являетесь активным блогером на ходу. Если вы являетесь пользователем gmail: “последняя активность в аккаунте” Ссылка в самом низу — удобный способ выяснить свои собственные “IP привычки”).

Директива Require Apache используется на этапе авторизации для обеспечения того, чтобы пользователю было разрешено или отказано в доступе к ресурсу. mod_authz_host расширяет типы авторизации с помощью ip, host, forward-dns и local. Другие типы авторизации также могут быть использованы, но могут требовать добавления дополнительных модулей авторизации.

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

Начиная с версии 2.4.8, выражения поддерживаются в директивах требуемых хостов.
Require ip

Поставщик ip позволяет контролировать доступ к серверу на основе IP-адреса удалённого клиента. Когда указано Require ip ip-address, запросу разрешается доступ, если IP-адрес совпадает.

Полный IP-адрес:

Require ip 10.1.2.3
Require ip 192.168.1.104 192.168.1.205

IP-адрес хоста, которому разрешён доступ

Частичный IP-адрес:

Require ip 10.1
Require ip 10 172.20 192.168.2

Первые 1 до 3 байт IP-адреса, для ограничения по подсети.

Пара сеть/маска:

Require ip 10.1.0.0/255.255.0.0

Сеть a.b.c.d и маска w.x.y.z. Для более детализированного ограничения по подсети.

Спецификация CIDR сеть/nnn:

Require ip 10.1.0.0/16

Похоже на предыдущий случай, за исключением того, что маска состоит из nnn старших битов, равных 1.

Обратите внимание, что последние три примера выше совпадают точно с тем же набором хостов.

Адреса IPv6 и подсети IPv6 можно указать, как показано ниже:

Require ip 2001:db8::a00:20ff:fea7:ccea
Require ip 2001:db8:1:1::a
Require ip 2001:db8:2:1::/64
Require ip 2001:db8:3::/48

Примечание: Поскольку IP-адреса анализируются при запуске, выражения не оцениваются во время запроса.

Источник: https://httpd.apache.org/docs/trunk/mod/mod_authz_host.html

Отметим, что вы теперь подтвердили использование Apache 2.2, Apache 2.2 не поддерживает ни Require ip, ни <RequireAny>. Как указано в обзоре новых функций в Apache HTTP Server 2.4, “Расширенная логика авторизации теперь может быть указана с использованием директивы Require и связанных управляющих директив, таких как <RequireAll>.” Первые из этих улучшений были добавлены в Apache 2.4.

Чтобы справиться с этим в Apache 2.2, вероятно, вам придётся сделать что-то вроде:

Order allow,deny
Allow from 123.123.123    

что позволит весь указанный диапазон.

Примечание: Я оставляю это здесь, так как это может быть полезно другим; это не прямой ответ на вопрос.

Например:

Require ip 192.168.100.0/22

Работает, в то время как это:

Require ip 192.168.100.0/22 #localnetwork

Не удаётся.

Перезагрузка httpd выводит:

Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.

Таким образом, похоже, что комментарии на этой строке не допускаются.

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

Чтобы настроить Apache для разрешения диапазона IP-адресов, важно правильно понять особенности его конфигурации. Задача стоит в том, чтобы разрешить доступ для различных IP в пределах одной подсети, например, 123.123.123.xxx, где xxx может принимать значения от 0 до 255. Это часто необходимо в случае, если ваш IP-адрес меняется в пределах одной подсети или вам нужно разрешить доступ с нескольких рабочих станций в одной сети.

Теория

Apache предоставляет различные способы управления доступом на основе IP-адресов. Когда речь идет об указании диапазона IP-адресов, используются такие методы, как указание частичного IP-адреса, использование сетевой маски, и применение спецификации CIDR. В контексте версии Apache 2.4, для этих целей служит директива Require ip.

  1. Частичный IP-адрес: Это упрощенный метод, который позволяет управлять доступом, указывая первые байты IP-адреса. Например, директива Require ip 123.123.123 разрешает доступ ко всем IP-адресам, начинающимся с 123.123.123.

  2. Сетевая маска: Использование netmask позволяет более точно определить диапазон, включая все IP, которые укладываются в данный диапазон сети. Пример: Require ip 123.123.123.0/255.255.255.0.

  3. CIDR-спецификация: Это современный и часто используемый метод, который дает возможность указывать количество значимых битов в адресе сети. Для вашей ситуации это Require ip 123.123.123.0/24, что аналогично предыдущему варианту с сетевой маской.

Пример

Примеры использования данных директив в конфигурации Apache 2.4:

<RequireAny>
    Require ip 123.123.123
    # Альтернативные варианты:
    # Require ip 123.123.123.0/255.255.255.0
    # Require ip 123.123.123.0/24
</RequireAny>

Эта конфигурация позволяет доступ к ресурсам сервера для всех адресов в диапазоне от 123.123.123.0 до 123.123.123.255.

Для Apache 2.2, который не поддерживает конструкцию <RequireAny> и директиву Require ip, необходимо воспользоваться системой Order и Allow/Deny:

Order allow,deny
Allow from 123.123.123

Этот подход также позволяет доступ из указанного диапазона, даже если используется более старая версия Apache.

Применение

Использование указанных выше настроек имеет широкое применение:

  1. Ограничение доступа по IP: Вы можете обеспечивать безопасность важных ресурсов на сервере, разрешая доступ только определенным доменным сетям, например, внутренним сетям компании.

  2. Упрощение сетевых операций: В случае постоянно изменяющегося IP, но в пределах одной подсети, вы сможете избежать блокировок, продолжая доступ к ресурсу с различных устройств или при использовании мобильных подключений.

  3. Повышение безопасности: Данная практика позволяет дополнительно защитить сервер, уменьшая вероятность несанкционированного доступа извне, что особенно важно при работе с конфиденциальными данными.

Заключение

Использование технологии указания IP-диапазонов в конфигурации Apache позволяет эффективно управлять доступом к ресурсам сервера. Независимо от используемой версии Apache, вы можете настроить сервер таким образом, чтобы обеспечить как удобство работы, так и безопасность. Эти настройки подходят для разных сценариев — от защиты административных панелей до ограничения доступа для внешних пользователей. Рекомендуется тщательно протестировать конфигурации в тестовой среде перед реализацией на рабочем сервере, чтобы избежать нежелательных последствий или ошибок конфигурации.

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

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