htaccess "zamów" Deny, Allow, Deny
Chciałbym zezwolić tylko na dostęp do jednego kraju, ale wykluczyć proxy w tym kraju.
Oto co mam (skrócona wersja dla wygody)
<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>
Ale wiem, że to nie zadziała. Jak mam to zrobić? 6 answers
Aktualizacja: dla nowego apache 2.4 przejdź bezpośrednio do końca.
- pierwszą ważną kwestią jest to, że słowo kluczowe
Order
będzie miało duży wpływ na sposób użycia dyrektywAllow
iDeny
. - Po Drugie,
Deny
iAllow
dyrektywy nie są stosowane w kolejności, w jakiej zostały napisane, muszą być postrzegane jako dwa odrębne bloki (jeden dlaDeny
dyrektyw, jeden dlaAllow
). - Po trzecie, nie są one drastycznie podobne do reguł firewalla: wszystkie reguły są stosowane, Proces jest nie zatrzymuje się podczas pierwszego meczu.
Masz dwa główne tryby:
W 2007 roku, po raz pierwszy w Polsce, w Polsce i za granicą, w 2008 roku, w Polsce i za granicą, w 2009 roku, w Polsce i za granicą.]}Order Deny,Allow
- this is an allow by domyślny tryb. Opcjonalnie można określić reguły
Deny
. - Po pierwsze, reguły
Deny
odrzucają niektóre żądania. - jeśli ktoś zostanie odrzucony, możesz go odzyskać za pomocą
Allow
.
Przeformułowałbym to jako:
Rule Deny
list of Deny rules
Except
list of Allow rules
Policy Allow (when no rule fired)
W 2007 roku, po raz pierwszy w Polsce, w 2008 roku, w Polsce i na świecie, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku]}
Order Allow,Deny
- jest to tryb domyślnie odrzucający . Więc zazwyczaj określasz
Allow
Zasady. - Po pierwsze, czyjaś Prośba musi pasować do co najmniej jednej reguły
Allow
. - jeśli ktoś dopasował
Allow
, nadal możesz odrzucić je za pomocąDeny
.
W formie uproszczonej:
Rule Allow
list of Allow rules
Except
list of Deny rules
Policy Deny (when no rule fired)
Powrót do sprawy
Musisz zezwolić na listę sieci, które są sieciami krajowymi. A w tym kraju chcesz wykluczyć adresy IP niektórych proxy.
Wybrałeś tryb allow-anyone-except-this-list-or-maybe-not, więc domyślnie każdy może uzyskać dostęp do twojego serwera, z wyjątkiem adresów IP Proxy wymienionych na liście Deny
, ale jeśli zostaną odrzucone, nadal zezwalasz na krajowe sieci. To zbyt szerokie. Niedobrze.
Odwracając do order allow,deny
będziesz w trybie Odrzuć-wszystkich-z wyjątkiem-tej-listy-lub-może-nie .
Więc odrzucisz dostęp do wszystkich, ale pozwolisz sieciom krajowym, a następnie odrzucisz proxy. I oczywiście należy usunąć Deny from all
jak stwierdzili @Gerben i @ Michael Slade (ta odpowiedź wyjaśnia tylko to, co oni napisał).
The Deny from all
jest zwykle postrzegane z order deny,allow
, aby usunąć zezwolić domyślnie dostęp i dokonać prostej, czytelnej konfiguracji. Na przykład następnie określ listę dozwolonych adresów IP. Nie potrzebujesz tej reguły, a twoje pytanie jest idealnym przypadkiem trybu dostępu 3-kierunkowego(domyślna zasada, wyjątki, wyjątki od WYJĄTKÓW).
Cały schemat autoryzacji został zrefakturowany W Apache 2.4 with RequireAll, RequireAny i RequireNone dyrektywy. Zobacz na przykład ten złożony przykład logiki .
Tak więc stara dziwna logika staje się reliktem, a cytując nową dokumentację:]}Kontrola jak i w jakiej kolejności autoryzacja będzie stosowana była w przeszłości trochę tajemnicą
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-09 11:58:54
Zamiast tego użyj order allow,deny
i usuń linię deny from all
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-05 16:45:33
Zmień kod na
<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>
W ten sposób twój htaccess zaprzeczy wszystkim, z wyjątkiem tych, na które wyraźnie zezwalasz za pomocą allow from..
Proxy w zakresie allow można łatwo zastąpić dodatkową regułą deny from..
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-06 07:41:01
Nie odpowiadając bezpośrednio na pytanie OPs, ale dla osób, które znajdują to pytanie w poszukiwaniu jasności, jaka jest różnica między allow,deny
a deny,allow
:
Odczytaj przecinek jako "ale".
-
allow but deny
: biała lista z wyjątkami.
wszystko jest odrzucone, z wyjątkiem pozycji na liście Zezwól, z wyjątkiem pozycji na liście zaprzecz -
deny but allow
: Czarna lista z wyjątkami.
wszystko jest dozwolone, z wyjątkiem elementów na liście Odrzuć, z wyjątkiem elementów na liście Zezwól lista
Zezwalaj tylko na dostęp do jednego kraju, ale wyklucz proxy w tym kraju
OP potrzebował białej listy z wyjątkami, dlatego allow,deny
zamiast deny,allow
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 20:04:36
Jak zasugerował Gerben, po prostu zmień:
order deny,allow
deny from all
Do
order allow,deny
I ograniczenia będą działać tak, jak chcesz.
SZCZEGÓŁY można znaleźć w Apache ' s docs.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-09 03:19:49
Zapraszamy do zapoznania się z naszą ofertą]}
Require all granted
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-22 06:56:59