Używam CentOS 5.5 ze standardowym Apache httpd-2.2.3.
Mam włączone mod_status w miejscu / stan serwera. Chciałbym zezwolić na dostęp do tej jednej lokalizacji w następujący sposób:
- Odmowa od wszystkich
- Zezwalaj z podsieci 192.168.16.0/24
- Odmów z adresu IP 192.168.16.100, który znajduje się w podsieci 192.168.16.0/24.
1 i 2 są łatwe. Jednak skoro „Zezwalam na 192.168.16.0/24”, czy można odmówić z 192.168.16.100?
Próbowałem dodać instrukcję Deny dla 192.168.16.100, ale to nie działa. Oto odpowiednia konfiguracja:
<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>
Lub:
<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>
Jednak nie uniemożliwia to dostępu do tej konkretnej strony, jak pokazano w dziennikach dostępu:
www.example.org 192.168.16.100 - - [11/Mar/2011:16:01:14 -0800] "GET /server-status HTTP/1.1" 200 9966 "-" "
Zgodnie z instrukcją dla mod_authz_host :
Pozwalają zaprzeczyć
Po pierwsze, oceniane są wszystkie dyrektywy Allow; co najmniej jeden musi być zgodny lub żądanie zostanie odrzucone. Następnie oceniane są wszystkie dyrektywy Deny. Jeśli którykolwiek pasuje, żądanie jest odrzucane
Adres IP jest zgodny z dyrektywą Deny, więc czy nie należy odrzucić żądania?
Zgodnie z tabelą na stronie mod_authz_host ten adres IP powinien „Dopasować oba Zezwalaj i Odrzuć”, a zatem powinna obowiązywać reguła „Kontrola końcowego dopasowania: Odmowa”.
Dopasuj Zezwól, Odrzuć wynik Odrzuć, Zezwalaj na wynik Dopasuj Zezwól tylko Żądanie dozwolone Żądanie dozwolone Dopasowanie Odrzuć tylko Żądanie odrzucone Żądanie odrzucone Brak dopasowania Domyślnie do drugiej dyrektywy: Odmowa Domyślnie do drugiej dyrektywy: Dozwolone Dopasuj zarówno Zezwól, jak i Odrzuć kontrole dopasowania końcowego: Odmowa Kontrolki dopasowania końcowego: Dozwolone
źródło
Allow from 192.168.16.0/24
. Jak rozumiem dokumentację, każdy adres IP osoby żądającej w sieci 192.168.16.0/24 będzie pasował do tej instrukcji Allow, żądanie jest dozwolone.Odpowiedzi:
Nie testowałem, ale myślę, że już prawie jesteś.
Deny from all
nie jest potrzebne. W rzeczywistości to spieprzyło, bo wszystko do siebie pasujeall
, a tym samym zaprzeczyło (i myślę, że Apache próbuje być mądry i zrobić coś głupiego). Zawsze uważałem ApacheOrder
,Allow
iDeny
dyrektyw mylące, więc zawsze wizualizować rzeczy w tabeli (wzięte z docs ):Przy powyższych ustawieniach:
źródło
Prawdopodobnie przyjrzałbym się również dodaniu reguł IPTables w celu odmowy pojedynczego hosta na porcie 80, odmowy od wszystkich i umożliwienia podsieci.
Po zezwoleniu na podsieć nie powinieneś mieć problemu z konfiguracją reguły odmowy z określonego adresu. Po prostu zrób to w tej kolejności.
źródło
Czy umiesz używać php? Jeśli tak, dodaj instrukcję php, aby wyjść / przekierować dla tego konkretnego adresu IP
Przykład:
$ deny = tablica („111.111.111”, „222.222.222”, „333.333.333”);
if (in_array ($ _SERVER ['REMOTE_ADDR'], $ deny))
{header („location: http://www.google.com/ ”);
wyjście();
Odniesienie: http://perishablepress.com/press/2007/07/03/how-to-block-ip-addresses-with-php/
źródło