Назад | Перейти на главную страницу

Директива Apache IPv4 deny блокирует адреса IPv6

редактировать Я подумал, что чрезмерное количество запрещающих строк сбивает 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:... также совпадает.

Это заставляет меня думать, что это ошибка, поскольку именно такое использование продемонстрировано в их документация.