Вопрос или проблема
Я пишу инструмент iplock, чтобы помочь мне настроить мой фаервол Linux. В основном моя текущая стратегия, так как я еще не использую IPv6 много, заключается в том, чтобы практически блокировать весь трафик IPv6 (“просто”).
Я хотел бы переключить все мои публичные службы на использование IPv6. Поэтому для этого мне в первую очередь нужен хороший план для моего фаервола.
Я знаю, что могу сопоставить адрес IPv4 в адрес IPv6 (другими словами, IPv6 включает все адреса IPv4). Вот как адрес IPv4 отображается внутри IPv6:
0000:0000:0000:0000:0000:FFFF:xxxx:xxxx
Меня интересует, обрабатывается ли такой адрес IPv6 через правила iptables
(IPv4) или ip6tables
(IPv6)? Поскольку он будет приходить через адрес IPv6, разумно было бы пропустить его через ip6tables
, но в то же время, я считаю, что он должен пройти через iptables
, так как этот специальный адрес IPv6 должен быть просто инкапсуляцией. Я не смог найти ничего подобного в iptables(8)
и ip6tables(8)
мануалах.
Я нашел комментарий здесь
Вы не можете использовать адреса, сопоставленные с IPv4 (::ffff:0:0/96), в качестве исходных или целевых адресов […]
Эти адреса просто используются для определения адреса IPv4 внутри IPv6. Оба являются отдельными протоколами, поэтому вы не можете отправлять трафик IPv4 через интерфейс IPv6.
Тем не менее, вы можете использовать NAT64 и позволить устройству только с IPv6 взаимодействовать с устройством только с IPv4. Но это совершенно другая тема.
Таким образом, ответ на вопрос: отправка пакета с адресом ::ffff:x.x.x.x
через IPv6 невозможна. Для этих адресов нет маршрутизации, поэтому они теряются. В результате нет возможности получить такие пакеты ни в iptables, ни в ip6tables.
Чтобы на 100% быть уверенным, что вы не принимаете такие недействительные пакеты, вы можете без опасений DROP
их с помощью этого правила:
ip6tables -A INPUT --source ::ffff:0:0/96 -j DROP
Но это никогда не должно происходить, поэтому, вероятно, нет необходимости перегружать ваш фаервол.
Ответ или решение
Блокировка IPv4-картированных IP-адресов в вашем IPv6 файрволе — это вопрос, который требует понимания взаимодействия между IPv4 и IPv6.
IPv4-картированные адреса представляют собой специальный формат, который позволяет данным IPv4 быть закодированными в формате IPv6. Обычно они имеют вид ::ffff:x.x.x.x
, где x.x.x.x
— это обычный IPv4-адрес. Однако важно понимать, что такие адреса служат исключительно для обозначения IPv4-адресов в рамках протокола IPv6 и не могут быть использованы для фактической передачи пакетов IPv4 через IPv6.
-
Роутинг и фильтрация:
IPv4-картированные адреса, как было указано в вашей ссылке, не могут использоваться в качестве источника или назначенного адреса в IPv6-пакетах. Пакеты с такими адресами не маршрутизируются через IPv6, и попытка отправки таких пакетов будет недопустима. Таким образом, такие пакеты никогда не будут поступать в вашip6tables
, и вы не обязаны тщательно блокировать их в вашей конфигурации. -
Фильтрация в
ip6tables
:
Несмотря на то, что блокирование таких адресов не является необходимым, вы можете добавить правило вip6tables
для явного игнорирования этих адресов. Это правило не является обязательным, но может служить дополнительной мерой предосторожности. Вы можете использовать следующую команду:ip6tables -A INPUT --source ::ffff:0:0/96 -j DROP
Это правило просто отклонит пакеты, если они каким-то образом попадут в ваш IPv6 интерфейс, однако такие ситуации крайне маловероятны.
-
Заключение:
Если вы собираетесь перейти на использование IPv6 для публичных сервисов, рекомендуется сосредоточиться на настройке основного фильтрации для IPv6 и игнорировать IPv4-картированные адреса, так как они не будут присутствовать в трафике. Тем не менее, добавление правила DROP может быть разумным шагом для большей уверенности.
В конечном итоге, делая ставку на блокировку IPv4-картированных адресов в вашем файрволе, вы можете спокойно утверждать, что это не является критически важным для корректной работы вашей системы, так как такие пакеты не должны приходить в нормальных условиях.