Ich möchte nur einem Land den Zugang gewähren, aber in diesem Land Vollmachten ausschließen.
Das habe ich (verkürzte Version)
<Limit GET POST>
order deny,allow
deny from all
allow from 139.82.0.0/16
allow from 143.54.0.0/16
allow from 186.192.0.0/11
allow from 186.224.0.0/11
.
deny from 186.201.27.66
deny from 186.201.196.1
deny from 186.214.51.231
deny from 186.237.225.26
</Limit>
Aber ich weiß, dass das nicht funktioniert. Wie mache ich das?
Update: für den neuen Apache 2.4 direkt ans Ende springen.
Das Schlüsselwort Order und seine Beziehung zu den Anweisungen Deny
und Allow
ist ein wahrer Albtraum. Es wäre sehr interessant zu verstehen, wie wir zu einer solchen Lösung gekommen sind, gelinde gesagt, zu einer nicht intuitiven.
Order
einen großen Einfluss auf die Verwendung der Anweisungen Allow
und Deny
hat.Deny
und Allow
nicht in der Reihenfolge angewendet, in der sie geschrieben wurden. Sie müssen als zwei separate Blöcke betrachtet werden (einer für die Anweisungen Deny
, einer für Allow
).Sie haben zwei Hauptmodi:
Order Deny,Allow
Deny
Regeln an.Deny
einige Anforderungen ab.Allow
zurückerhalten.Ich würde es umformulieren als:
Rule Deny
list of Deny rules
Except
list of Allow rules
Policy Allow (when no rule fired)
Order Allow,Deny
Allow
Regeln an.Allow
Regel entsprechen.Allow
übereinstimmt, können Sie ihn dennoch mit einem Deny
ablehnen.In der vereinfachten Form:
Rule Allow
list of Allow rules
Except
list of Deny rules
Policy Deny (when no rule fired)
Sie müssen eine Liste der Netzwerke zulassen, bei denen es sich um länderspezifische Netzwerke handelt. Und in diesem Land möchten Sie die IP-Adressen einiger Proxys ausschließen.
Sie haben den Modus Zulassen-für-jeden-außer-diese-Liste-oder-vielleicht-nicht gewählt, sodass dies standardmäßig für jeden möglich ist Greifen Sie auf Ihren Server zu, mit Ausnahme der in der Liste Deny
aufgeführten IP-Adressen der Proxys. Wenn diese jedoch abgelehnt werden, erlauben Sie immer noch die Ländernetzwerke. Das ist zu breit. Nicht gut.
Wenn Sie zu order allow,deny
invertieren, befinden Sie sich im Modus Alle ablehnen, außer dieser Liste oder vielleicht nicht . Sie lehnen also den Zugriff auf alle Personen ab, lassen jedoch die Ländernetzwerke zu und lehnen dann die Proxys ab. Und natürlich müssen Sie den Deny from all
entfernen, wie von @Gerben und @Michael Slade angegeben (diese Antwort erklärt nur, was sie geschrieben haben).
Der Deny from all
wird normalerweise mit order deny,allow
angezeigt, um den Standardzugriff zu entfernen und eine einfache, lesbare Konfiguration vorzunehmen. Geben Sie anschließend beispielsweise eine Liste der zulässigen IP-Adressen an. Sie benötigen diese Regel nicht und Ihre Frage ist der perfekte Fall für einen 3-Wege-Zugriffsmodus (Standardrichtlinie, Ausnahmen, Ausnahmen zu Ausnahmen).
Aber die Leute, die diese Einstellungen entworfen haben, sind mit Sicherheit verrückt.
Das gesamte Berechtigungsschema wurde überarbeitet in Apache 2.4 mit den Anweisungen RequireAll , RequireAny und RequireNone . Siehe zum Beispiel dieses komplexe Logikbeispiel .
So wird die alte seltsame Order
Logik zu einem Relikt, und um die neue Dokumentation zu zitieren:
Es war in der Vergangenheit ein Rätsel, wie und in welcher Reihenfolge die Autorisierung angewendet wird
Ändern Sie Ihren Code in
<Limit GET POST>
deny from all
allow from 139.82.0.0/16
allow from 143.54.0.0/16
allow from 186.192.0.0/11
allow from 186.224.0.0/11
</Limit>
Auf diese Weise verweigert Ihr Zugriff alle außer denjenigen, die Sie ausdrücklich mit allow from..
zulassen.
Ein Proxy innerhalb des zulässigen Bereichs kann leicht mit einer zusätzlichen deny from..
-Regel überschrieben werden.
Verwenden Sie stattdessen einfach order allow,deny
und entfernen Sie die deny from all
-Zeile.
Wie Gerben vorgeschlagen hat, ändern Sie einfach:
order deny,allow
deny from all
zu
order allow,deny
Und die Einschränkungen funktionieren so, wie Sie es wünschen.
Details finden Sie in Apaches Docs .
In Apache2, Linux-Konfiguration
Benötigen Sie alle gewährt
OPs-Frage nicht direkt beantworten, sondern für die Personen, die diese Frage auf der Suche nach Klarheit finden, was der Unterschied zwischen allow,deny
und deny,allow
ist
Lesen Sie das Komma als "aber".
allow but deny
: Whitelist mit Ausnahmen. deny but allow
: Schwarze Liste mit Ausnahmen. erlauben Sie nur einem Land den Zugang, schließen Sie jedoch Stimmrechtsvertreter innerhalb dieses Landes aus
OP benötigte eine Whitelist mit Ausnahmen, daher allow,deny
anstelle von deny,allow