Обновление: для нового apache 2.4 перейти непосредственно к концу.
Ключевое слово Order и его связь с директивами Deny
и Allow
настоящий кошмар.Было бы очень интересно понять, каким образом мы получили такое решение, по меньшей мере, неинтуитивное.
- Первый важный момент заключается в том, что ключевое слово
Order
окажет большое влияние.о том, как используются директивы Allow
и Deny
. - Во-вторых, директивы
Deny
и Allow
не применяются в том порядке, в котором они написаны, они должны рассматриваться как два отдельных блока (одиндля директив Deny
, одна для Allow
). - В-третьих, они совершенно не похожи на правила брандмауэра: применяются все правила, процесс не останавливается при первом совпадении.
У вас есть два основных режима:
Режим Запретить-запретить-разрешить или Разрешить всем, кроме этого-списка-или, может быть, нет
Order Deny,Allow
- Это режим по умолчанию .При желании вы можете указать
Deny
правила. - Во-первых, правила
Deny
отклоняют некоторые запросы. - Если кто-то отклоняется, вы можете вернуть его с помощью
Allow
.
Я бы перефразировал его как:
Rule Deny
list of Deny rules
Except
list of Allow rules
Policy Allow (when no rule fired)
Режим Порядок-Разрешить-Запретить или Отклонить всех, кроме этого-списка-или-maybe-not
Order Allow,Deny
- Это режим отклонение по умолчанию .Таким образом, вы обычно указываете
Allow
правила. - Во-первых, чей-то запрос должен соответствовать хотя бы одному правилу
Allow
. - Если кто-то соответствует
Allow
, вы все равно можете отклонить его с помощьюDeny
.
В упрощенном виде:
Rule Allow
list of Allow rules
Except
list of Deny rules
Policy Deny (when no rule fired)
Вернуться к вашему делу
Вам необходимо разрешить список сетей, являющихся сетями страны,А в этой стране вы хотите исключить IP-адреса некоторых прокси-серверов.
Вы выбрали режим allow-somebody-кроме-этого-списка-или-возможно-не , поэтому по умолчанию любой может получить доступ к вашему серверу, кроме IP-адресов прокси, перечисленных в списке Deny
, но если они будут отклонены, вы по-прежнему разрешите сети страны.Это слишком широко.Не хорошо.
Обратившись к order allow,deny
, вы перейдете в режим отклонить всех, кроме этого-списка-или-возможно-не .Таким образом, вы отклоните доступ ко всем, но разрешите сети страны, а затем отклоните прокси.И, конечно же, вы должны удалить Deny from all
, как заявлено @Gerben и @Michael Slade (этот ответ только объясняет, что они написали).
Обычно Deny from all
видно с order deny,allow
, чтобы удалить разрешить по умолчанию доступ и сделать простую, удобочитаемую конфигурацию.Например, укажите список разрешенных IP-адресов после этого.Вам не нужно это правило, и ваш вопрос - идеальный случай трехстороннего режима доступа (политика по умолчанию, исключения, исключения из исключений).
Но парни, которые разработали эти настройки, безусловно, безумны.
Все это устарело в Apache 2.4
Вся схема авторизации была реорганизована в Apache 2.4 с RequireAll , RequireAny и RequireNone директивы.См., Например, этот сложный логический пример .
Таким образом, старая странная логика Order
становится реликвией, и процитируем новую документацию:
Управление тем, каки в каком порядке будет применяться авторизация, в прошлом было немного загадкой