редактировать Я подумал, что чрезмерное количество запрещающих строк сбивает apache с толку, блокируя неуказанные IPv4-адреса. Но комментарий @Ladadadada заставил меня указать точную проблему. Вы можете прочитать мой старый вопрос ниже. Проблема в следующей строке:
deny from 42.1.0.0/19
блокирует адреса IPv6
2a01:4f8:120:8201::2
2a01:1e8:e100:ce::2
Как это возможно?
у меня есть действительно длинный список заблокированных IP-адресов, активированный Include
директива внутри Directory
блок.
Этот файл содержит только адреса IPv4, но мой сервер также блокирует ограниченное количество IPv6-адресов. Он не блокирует весь трафик IPv6. Если я удалю блоки, эти IPv6-адреса смогут получить доступ к серверу нормально.
Первоначально в файле блока каждый IP-блок находился в отдельной строке «запретить от». Я пробовал комбинировать каждые 40 из них, чтобы уменьшить количество правил и размер файла. Это все равно не помогло. Но когда я усек правила до 4-5 запрещающих строк, он работал, как ожидалось, и не блокировал адреса IPv6.
Это образцы журналов из журнала доступа.
2a01:4f8:120:8201::2 - - [03/Mar/2013:15:01:07 +0200] "GET /tdf/ HTTP/1.1" 403 387 "-" "MirrorBrain Probe (see http://mirrorbrain.org/probe_info)"
и из журнала ошибок
[Sun Mar 03 15:01:07 2013] [error] [client 2a01:4f8:120:8201::2] client denied by server configuration: /mirror/pub/tdf/
Как я могу перечислить большое количество запрещающих директив? Я не могу управлять брандмауэром машины, поэтому об этом не может быть и речи.
Переходя прямо к деталям, давайте конвертируем оба 42.1.0.0
и 2a01:1e8
в двоичный (вы сразу поймете, почему я выбрал только начальную часть).
0010 1010 . 0000 0001 . 000 |
42 . 1 . 0 |
0010 1010 0000 0001 : 000 | 0 0001 1110 1000
2a01 : | 1e8
|
^ cut here
Как работает уведомление CIDR, соответствует ли оно первому /X
биты. В вашем случае он будет соответствовать первому 19
, который 2a01:1e8:...
также совпадает.
Это заставляет меня думать, что это ошибка, поскольку именно такое использование продемонстрировано в их документация.