Ответ 1
Обновление: для нового перехода apache 2.4 прямо в конец.
Ключевое слово Order, и его связь с Deny и Allow Directives - настоящий кошмар. Было бы очень интересно понять, как мы оказались с такими конфигурационными решениями, которые являются наименее неинтуитивными.
- Первым важным моментом является то, что ключевое слово Заказ будет иметь большое влияние на то, как используются Разрешить и Запретить.
- Второй момент заключается в том, что директивы Deny и Allow не применяются в том порядке, в котором они записаны, его следует рассматривать как два блока директив (один для параметра Deny, один для Allow), где применяются все строки.
- Третий момент заключается в том, что он не применяется, как правила брандмауэра, а не вообще, особенно, все правила прочитаны и процесс не останавливается в первом совпадении
Теперь у вас есть основные режимы:
Запретить-Разрешить-Разрешить-режим, или Разрешить-любой, кроме этого-списка или, возможно, не
Order Deny,Allow
- Это режим разрешить по умолчанию. Где вы дадите optionnaly список правил Deny.
- Затем проверяются правила Запретить, чтобы отклонять запросы на основе этих правил.
- Если кто-то отклоняется одним из правил Deny, вы можете вернуть его с помощью правила Разрешить.
Я бы назвал его
Policy Allow
Rule Deny
list of Deny rules
Exception
list of Allow rules
Режим "Разрешить-Разрешить-Запретить-Разрешить" или "Отклонить-все-кроме-этого-списка" или, возможно, не
Order Allow,Deny
- Это режим Запретить по умолчанию. Где вы дадите optionnaly список разрешенных правил.
- Затем проверяются правила Разрешить, а кто-то, желающий доступ, должен соответствовать хотя бы одному правилу.
- Если кто-то разрешен одним из правил Разрешения, вы все равно можете отклонить его с помощью правила Запретить.
В упрощенной форме:
Policy Deny
Rule Allow
list of Allow rules
Exception
list of Deny rules
Вернуться к вашему делу
Вам нужно разрешить список сетей, которые являются сетями страны. И в этой стране вы хотите исключить некоторые IP-адреса прокси.
Вы включили режим Allow-any-except-this-list-or-maybe-not, поэтому по умолчанию любой может получить доступ к вашему серверу, за исключением прокси IP, перечисленных в списке Запрет (и с Deny от всех вы удаляете доступ для тех, кто был установлен по умолчанию), но если они будут отвергнуты, вы все равно разрешите country Networks. Это нехорошо.
Инвертируя заказ на order allow,deny
, вы попадете в режим Reject-all-except-this-list-or-maybe-not.
Таким образом, вы отклоняете доступ ко всем, но разрешаете сетевые сети, а затем для разрешенных людей вы отклоняете прокси IP. И, конечно же, вы должны удалить Deny from all
, как указано в @Gerben и @Michael Slade (этот ответ - просто экскарация того, почему они правы).
Deny from all
обычно отображается с помощью order deny,allow
, чтобы удалить разрешение по умолчанию этого режима и сделать более упрощенную версию (более читаемую), просто используя список IP, разрешающий после этого (например). Вам не нужно это правило, и ваш случай является прекрасным случаем этого трехкратного режима доступа (политика по умолчанию, список исключений, исключения исключений).
Но ребята, которые сделали тезеты конфигурации тезисов, безусловно, безумно.
Обновление: теперь это неправда с Apache 2.4
Все секции авторизации/требований были рефакторированы в apache 2.4 с RequireAll, RequireAny и RequireNone. См., Например, этот пример сложной логики.
поэтому эта странная логика скоро станет прошлым и процитирует новую документацию:
Управление тем, как и в каком порядке будет применяться авторизация, в прошлом было загадкой