Вопрос или проблема
Мой 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
.
-
Частичный IP-адрес: Это упрощенный метод, который позволяет управлять доступом, указывая первые байты IP-адреса. Например, директива
Require ip 123.123.123
разрешает доступ ко всем IP-адресам, начинающимся с 123.123.123. -
Сетевая маска: Использование netmask позволяет более точно определить диапазон, включая все IP, которые укладываются в данный диапазон сети. Пример:
Require ip 123.123.123.0/255.255.255.0
. -
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.
Применение
Использование указанных выше настроек имеет широкое применение:
-
Ограничение доступа по IP: Вы можете обеспечивать безопасность важных ресурсов на сервере, разрешая доступ только определенным доменным сетям, например, внутренним сетям компании.
-
Упрощение сетевых операций: В случае постоянно изменяющегося IP, но в пределах одной подсети, вы сможете избежать блокировок, продолжая доступ к ресурсу с различных устройств или при использовании мобильных подключений.
-
Повышение безопасности: Данная практика позволяет дополнительно защитить сервер, уменьшая вероятность несанкционированного доступа извне, что особенно важно при работе с конфиденциальными данными.
Заключение
Использование технологии указания IP-диапазонов в конфигурации Apache позволяет эффективно управлять доступом к ресурсам сервера. Независимо от используемой версии Apache, вы можете настроить сервер таким образом, чтобы обеспечить как удобство работы, так и безопасность. Эти настройки подходят для разных сценариев — от защиты административных панелей до ограничения доступа для внешних пользователей. Рекомендуется тщательно протестировать конфигурации в тестовой среде перед реализацией на рабочем сервере, чтобы избежать нежелательных последствий или ошибок конфигурации.