Я использую CentOS 5.5 со стандартным Apache httpd-2.2.3.
Я включил mod_status в Расположение / статус сервера. Я хотел бы разрешить доступ к этому единственному местоположению следующим образом:
- Отрицать все
- Разрешить из подсети 192.168.16.0/24
- Запретить IP 192.168.16.100, который находится в подсети 192.168.16.0/24.
1 и 2 легко. Однако, поскольку я «Разрешить с 192.168.16.0/24», можно ли отказать с 192.168.16.100?
Я пытался добавить оператор Deny для 192.168.16.100, но он не работает. Вот соответствующий конфиг:
<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>
Или:
<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>
Однако это не препятствует доступу к этой конкретной странице, как показано в журналах доступа:
www.example.org 192.168.16.100 - - [11/Mar/2011:16:01:14 -0800] "GET /server-status HTTP/1.1" 200 9966 "-" "
Согласно руководству для mod_authz_host :
Разрешить, Запретить
Во-первых, все разрешающие директивы оцениваются; по крайней мере один должен соответствовать, или запрос отклонен. Затем оцениваются все директивы Deny. Если какие-либо совпадения, запрос отклоняется
IP-адрес соответствует директиве Deny, поэтому не следует ли отклонить запрос?
В соответствии с таблицей на странице mod_authz_host этот IP-адрес должен "совпадать как с разрешением, так и с запретом", и поэтому должно применяться правило "Окончательное совпадение элементов управления: отказано".
Матч Разрешить, Запретить результат Запретить, Разрешить результат Только совпадение Разрешить Запрос разрешен Запрос разрешен Только совпадение Запретить Запрос отклонен Запрос отклонен Нет соответствия По умолчанию для второй директивы: Запрещено По умолчанию для второй директивы: Разрешено Совпадают оба элемента «Разрешить и запретить». Элементы управления финальным матчем: Запрещено
источник
Allow from 192.168.16.0/24
. Как я понимаю из документации, любые IP-адреса запрашивающей стороны в сети 192.168.16.0/24 будут соответствовать этому утверждению Allow, запрос разрешен.Ответы:
Я не проверял, но я думаю, что вы почти у цели.
Deny from all
не нужен На самом деле это облажается, потому что все будет совпадатьall
, и поэтому будет отказано (и я думаю, что Apache пытается быть умным и делать что-то глупое). Я всегда находил в ApacheOrder
,Allow
иDeny
директивы запутанным, поэтому всегда визуализировать вещи в таблице (взято из Документов ):С вышеуказанными настройками:
источник
Я бы, вероятно, посмотрел также на добавление правил IPTables, чтобы запретить один хост на порту 80, запретить все и разрешить подсеть.
У вас не должно возникнуть проблем при настройке правила запрета с определенного адреса после того, как вы разрешите подсеть. Просто сделай это в таком порядке.
источник
Вы можете использовать php? Если это так, добавьте оператор php для выхода / перенаправления для этого конкретного IP-адреса.
Пример:
$ deny = array ("111.111.111", "222.222.222", "333.333.333");
if (in_array ($ _SERVER ['REMOTE_ADDR'], $ deny))
{header ("location: http://www.google.com/ ");
выход();
Ссылка: http://perishablepress.com/press/2007/07/03/how-to-block-ip-addresses-with-php/
источник