J'essaie de restreindre l'accès d'une ressource Web à l'intranet d'une entreprise via .htaccess
. Malheureusement, l’approche via Allow from …
ne fonctionne pas pour moi et je ne comprends pas assez bien les sous-réseaux pour résoudre le problème.
Mon adresse IP est (remplace les deux premiers blocs pour la confidentialité) 1.2.70.59, le masque de réseau est donné par ifconfig
sous la forme 0xffff0000, c’est-à-dire 255.255.0.0. J'ai utilisé un calculateur d'adresse IP pour obtenir le sous-réseau.
ne réponse sur Stack Overflow m'a amené à croire que ce qui suit devrait fonctionner:
Order deny,allow
Deny from all
Allow from 1.2.0.0/255.255.0.0
Ou, en utilisant CIDR (affichant uniquement la dernière ligne):
Allow from 1.2.0.0/16
Ni fonctionne. Ce qui suit ne fonctionne pas non plus, comme l’implique la réponse sur ce site même :
Allow from 1.2
En fait, même pas les œuvres suivantes:
Allow from 127.0.0.1
Mais cela ne fonctionne :
Allow from localhost
Bien que je pensais que ces deux soient équivalents. Clairement, j'ai une lacune dans ma compréhension.
Pour être complet, voici le résultat de ifconfig | grep inet[^6]
:
inet 127.0.0.1 netmask 0xff000000
inet 1.2.70.59 netmask 0xffff0000 broadcast 1.2.255.255
Qu'est-ce que je fais mal?
La solution est que j'ai accédé au site Web via localhost/path/to/site
plutôt que 1.2.70.59/path/to/site
. Une fois que j'ai changé ça, ça a fonctionné.
Tout d’abord, ajoutez-vous ces directives dans un fichier .htaccess ou un fichier de configuration? Dans ce dernier cas, vous devez redémarrer Apache.
Deuxièmement, mod_authz_Host est-il activé? Dans votre httpd.conf, il devrait y avoir une ligne comme:
LoadModule authz_Host_module modules/mod_authz_Host.so
Enfin, êtes-vous sûr que cela ne fonctionne pas? C'est à dire. testez-vous le bon chemin/serveur? Êtes-vous certain qu'une règle de réécriture ou une page d'erreur personnalisée ne donne pas l'impression que vous avez accès à la page, même si une autre page vous est affichée? Aussi, qu'est-ce qui ne fonctionne pas? Donne-t-il accès à des adresses IP externes ou refuse-t-il l'accès à des adresses IP internes?
Effacez votre journal d'accès (supprimez le fichier), redémarrez le serveur et testez à nouveau l'URL. Ensuite, consultez le journal des accès pour voir quelle adresse IP a été enregistrée et quel code de réponse a été donné.
Il existe d'autres moyens de le faire (par exemple, via mod_rewrite ou SetEnvIf
/Allow from env=
), mais ce que vous faites devrait fonctionner.
Essayez ceci pour le fichier .htaccess:
order allow,deny
#partial ip addresses blocking
deny from 192.168
deny from 219
#full ip addresses blocking
deny from 64.120.232.114
deny from 64.120.141.34
allow from all