Ich verwende CentOS 5.5 mit dem aktuellen Apache httpd-2.2.3.
Ich habe mod_status unter Location / Server-Status aktiviert . Ich möchte den Zugriff auf diesen einzelnen Standort auf folgende Weise zulassen:
- Abgelehnt von allen
- Zulassen aus dem Subnetz 192.168.16.0/24
- Ablehnen von einer IP-Adresse 192.168.16.100, die sich im Subnetz 192.168.16.0/24 befindet.
1 & 2 sind einfach. Ist es jedoch möglich, seit "Zulassen von 192.168.16.0/24" von 192.168.16.100 zu verweigern?
Ich habe versucht, eine Deny-Anweisung für 192.168.16.100 hinzuzufügen, aber sie funktioniert nicht. Hier ist die relevante Konfiguration:
<Location /server-status>
SetHandler server-status
Order Allow,Deny
Deny from all
Deny from 192.168.16.100 # This does not deny access from 192.168.16.100
Allow from 192.168.16.0/24
</Location>
Oder:
<Location /server-status>
SetHandler server-status
Order Allow,Deny
Deny from all
Deny from 192.168.16.100 # This does not deny access from 192.168.16.100
Allow from 192.168.16.0/24
</Location>
Dies verhindert jedoch nicht den Zugriff auf diese bestimmte Seite, wie in den Zugriffsprotokollen gezeigt:
www.example.org 192.168.16.100 - - [11/Mar/2011:16:01:14 -0800] "GET /server-status HTTP/1.1" 200 9966 "-" "
Nach dem Handbuch für mod_authz_host :
Zulassen, Ablehnen
Zunächst werden alle Zulassungsanweisungen ausgewertet. Mindestens eine muss übereinstimmen, sonst wird die Anfrage abgelehnt. Als nächstes werden alle Verweigerungsanweisungen ausgewertet. Wenn Übereinstimmungen vorliegen, wird die Anforderung abgelehnt
Die IP-Adresse entspricht der Ablehnungsrichtlinie. Sollte die Anfrage nicht abgelehnt werden?
Gemäß der Tabelle auf der Seite "mod_authz_host" sollte diese IP-Adresse mit "Zulassen und Verweigern" übereinstimmen, und daher sollte die Regel "Letzte Übereinstimmungskontrolle: Verweigert" gelten.
Match Allow, Deny Ergebnis Deny, Allow Ergebnis Treffer Nur erlauben Anfrage erlaubt Anfrage erlaubt Übereinstimmung Nur ablehnen Anfrage abgelehnt Anfrage abgelehnt Keine Übereinstimmung Standard für zweite Anweisung: Verweigert Standard für zweite Anweisung: Zulässig Erlaube und verweigere die Kontrolle der endgültigen Übereinstimmung: Verweigerte die Kontrolle der endgültigen Übereinstimmung: Erlaubt
quelle
Allow from 192.168.16.0/24
. Soweit ich die Dokumentation verstehe, stimmen alle Requestor-IPs im 192.168.16.0/24-Netzwerk mit dieser Allow-Anweisung überein. Die Anfrage ist zulässig.Antworten:
Ich habe nicht getestet, aber ich denke, Sie sind fast da.
Deny from all
wird nicht benötigt. In der Tat wird es vermasseln, weil alles zusammenpassen wirdall
, und damit bestritten (und ich denke, Apache versucht, klug zu sein und etwas Dummes zu tun). Ich habe immer gefunden , ApacheOrder
,Allow
undDeny
Richtlinien verwirrend, so dass immer visualisieren Dinge in einer Tabelle (entnommen aus der Dokumentation ):Mit den obigen Einstellungen:
quelle
Ich würde wahrscheinlich auch IPTables-Regeln hinzufügen, um den einzelnen Host auf Port 80 zu verweigern, von allen zu verweigern und das Subnetz zuzulassen.
Sie sollten kein Problem damit haben, eine Verweigerungsregel von einer bestimmten Adresse aus einzurichten, nachdem Sie das Subnetz zugelassen haben. Mach es einfach in dieser Reihenfolge.
quelle
Kannst du PHP benutzen? Wenn ja, fügen Sie eine PHP-Anweisung hinzu, um diese eine bestimmte IP-Adresse zu verlassen / umzuleiten
Beispiel:
$ deny = array ("111.111.111", "222.222.222", "333.333.333");
if (in_array ($ _SERVER ['REMOTE_ADDR'], $ deny))
{header ("location: http://www.google.com/ ");
Ausfahrt();
Referenz: http://perishablepress.com/press/2007/07/03/how-to-block-ip-addresses-with-php/
quelle