wake-up-neo.net

htaccess "order" Ablehnen, Zulassen, Ablehnen

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?

33
Gaia

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.

  • Der erste wichtige Punkt ist, dass das Schlüsselwort Order einen großen Einfluss auf die Verwendung der Anweisungen Allow und Deny hat.
  • Zweitens werden die Anweisungen 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 ).
  • Drittens sind sie drastisch anders als Firewall-Regeln: Alle Regeln werden angewendet, der Prozess wird nicht gestoppt beim ersten Spiel ausgeführt.

Sie haben zwei Hauptmodi:

Der Order-Deny-Allow-Modus , oder Erlaube-jedem-außer-dieser-Liste-oder-vielleicht-nicht

Order Deny,Allow
  • Dies ist ein Standard Modus. Optional geben Sie Deny Regeln an.
  • Erstens lehnen die Regeln Deny einige Anforderungen ab.
  • Wenn jemand abgelehnt wird, können Sie ihn mit einem 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)

Der Order-Allow-Deny-Modus , oder Alle ablehnen, außer dieser Liste oder vielleicht nicht

Order Allow,Deny
  • Dies ist standardmäßig ein Verweigern Modus. Daher geben Sie normalerweise Allow Regeln an.
  • Erstens muss eine Anfrage mindestens einer Allow Regel entsprechen.
  • Wenn jemand mit einem 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)

Zurück zu deinem Fall

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.

All dies ist mit Apache 2.4 veraltet

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

122
regilero

Ä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.

3
Gillian Lo Wong

Verwenden Sie stattdessen einfach order allow,deny und entfernen Sie die deny from all-Zeile.

3
Gerben

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 .

1
Michael Slade

In Apache2, Linux-Konfiguration

Benötigen Sie alle gewährt

0
Deepa MG

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.
    Alles wird abgelehnt, mit Ausnahme der Elemente in der Zulassungsliste, mit Ausnahme der Elemente in der Ablehnungsliste
  • deny but allow: Schwarze Liste mit Ausnahmen.
    Alles ist erlaubt, außer Elemente in der Ablehnungsliste, außer Elemente in der Zulassungsliste

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

0
Felk