web-dev-qa-db-fra.com

Comment restreindre l'accès au site à tous les pays sauf le mien avec .htaccess?

J'ai utilisé cet outil pour télécharger la liste au format ". Htaccess allow " afin d'autoriser le trafic depuis mon pays et de restreindre tous les autres, il est toujours accessible lors de la visite d'un groupe de mandataires étrangers.

Je limite l'accès à mon serveur de développeur local où je n'ai certainement pas besoin de trafic en provenance de Chine, d'Ouganda, de Russie et d'autres pays trouvés lors de l'inspection des journaux Apache.

Apparemment, ce format ne semble pas fonctionner:

<Limit GET POST>
order deny,allow
allow from 37.18.184.0/22
allow from 37.18.188.0/22
allow from 37.19.104.0/22
allow from 37.19.108.0/22
allow from 37.35.8.0/22
allow from 37.35.12.0/22
allow from 37.35.64.0/22
allow from 37.35.68.0/22
allow from 37.77.168.0/22
allow from 37.77.172.0/22
deny from all
</Limit>
2
dzhi

Essayez avec le masque de réseau au lieu de la notation CIDR:

<Limit GET POST>
order deny,allow
allow from 37.18.184.0/255.255.252.0
...
allow from 37.77.172.0/255.255.252.0
deny from all
</Limit>

Sinon, le faire comme ça:

<Limit GET POST>
order deny,allow
allow from 37.18.184.
allow from 37.18.185.
allow from 37.18.186.
allow from 37.18.187.
...
allow from 37.77.172.
allow from 37.77.173.
allow from 37.77.174.
allow from 37.77.175.
deny from all
</Limit>
4
Mathias R. Jessen

Le meilleur moyen consiste à utiliser certains outils (ou modules) Apache-GeoIP existants

4
Lazy Badger

D'après l'information contenue dans votre question, il est difficile de dire ce qui pourrait ne pas être correct. Je suggère de commencer avec le test suivant:

  1. Ecrivez un script simple qui renvoie votre adresse IP, quelque chose comme ceci (en PHP):

    Your IP address is: <?= $SERVER['REMOTE_ADDR'] ?>
    
  2. Visitez le script à partir d'un proxy étranger et notez l'adresse indiquée. Comparez l'adresse aux lignes Allow de votre fichier .htaccess.

Les résultats de cette expérience devraient réduire un peu les possibilités:

  • Si l'adresse IP signalée ne correspond à aucune des lignes Allow, alors soit Apache n'obéit pas du tout à vos contrôles d'accès pour une raison quelconque, soit il existe une autre ligne Allow permettant à la requête de passer. .

  • Si l'adresse IP correspond à l'une des lignes Allow, mais semble être l'adresse correcte du proxy (essayez une recherche DNS inversée). ), soit votre base de données GeoIP est erronée, soit le proxy n’est pas situé là où vous le pensez.

  • Si l'adresse IP signalée pointe vers votre propre hôte Web, il peut appartenir à un proxy HTTP inversé situé devant votre serveur Web. Dans ce cas, vous devrez trouver comment extraire l’adresse IP réelle du client à partir des en-têtes de requête (par exemple, X-Forwarded-For ) fixé par le proxy.

  • Si l'adresse IP indiquée par le script est la vôtre, alors soit vous n'avez pas configuré votre navigateur de manière à utiliser le proxy après tout, soit le mandataire a (vraisemblablement) transmis votre adresse IP dans les en-têtes de la demande et votre serveur Web est configuré pour faire aveuglément confiance à ces en-têtes (ce qui est une mauvaise idée - les en-têtes de requête HTTP sont faciles à forger).

  • Si rien de ce qui précède ne tient, il se passe quelque chose d'étrange. Effectuer une recherche DNS inversée et/ou WHOIS sur l'adresse IP indiquée peut vous aider à déterminer quoi.

Ps. Vous ne voulez probablement pas utiliser <Limit> autour de vos contrôles d'accès , du moins à moins que vous ne vouliez permettre par exemple HEAD et PUT demandes de n'importe quel pays.

0
Ilmari Karonen