Ограничить доступ к диапазону IP-адресов
Я пытаюсь ограничить доступ к веб-ресурсу во внутренней сети компании через .htaccess
. К сожалению, подход через Allow from …
не работает для меня, и я недостаточно хорошо понимаю подсети, чтобы устранить проблему.
Мой IP-адрес (заменен первыми двумя блоками для конфиденциальности) 1.2.70.59, маска сети задана ifconfig
как 0xffff0000, т. Е. 255.255.0.0. Я использовал калькулятор IP-адресов, чтобы получить подсеть из этого.
Ответ на Переполнение стека привело меня к мысли, что должно работать следующее:
Order deny,allow
Deny from all
Allow from 1.2.0.0/255.255.0.0
Или, используя CIDR (показывает только последнюю строку):
Allow from 1.2.0.0/16
Ни то, ни другое не работает. Также не работает следующее, , как следует из ответа на этом самом сайте:
Allow from 1.2
На самом деле даже не работает следующее:
Allow from 127.0.0.1
Но это действительно работает:
Allow from localhost
Хотя я думал, что эти два понятия эквивалентны. Очевидно, что у меня есть пробел в моем понимании.
Для полнота, это результат ifconfig | grep inet[^6]
:
inet 127.0.0.1 netmask 0xff000000
inet 1.2.70.59 netmask 0xffff0000 broadcast 1.2.255.255
Что я делаю не так?
3 answers
Решение состояло в том, что я получил доступ к веб-сайту через localhost/path/to/site
, а не 1.2.70.59/path/to/site
. Как только я это изменил, это сработало.
Во-первых, вы добавляете эти директивы в файл .htaccess или в файл конфигурации? Если последнее, то вам необходимо перезапустить Apache.
Во-вторых, включен ли у вас режим mod_authz_host? В вашем httpd.conf должна быть строка типа:
LoadModule authz_host_module modules/mod_authz_host.so
Наконец, вы уверены, что это не работает? Т.е. вы тестируете правильный путь/сервер? Вы уверены, что правило перезаписи или пользовательская страница ошибок не создают впечатление, что вы получили доступ к странице, даже если вам показывают другая страница? Кроме того, что не работает? Предоставляет ли это доступ к внешним IP-адресам или запрещает доступ к внутренним IP-адресам?
Очистите журнал доступа (удалите файл), перезапустите сервер и еще раз проверьте URL-адрес; затем просмотрите журнал доступа и посмотрите, какой IP-адрес был записан и какой код ответа был дан.
Есть и другие способы сделать это (например, с помощью mod_rewrite или SetEnvIf
/Allow from env=
), но то, что вы делаете, должно сработать.
Попробуйте сделать это для файла .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