iptables должен сделать источник NAT на недопустимых пакетах TCP?

Я споткнулся специфическую проблему:

Я настроил сервер OpenVPN на Ubuntu 16.04, в моей домашней сети, для включения моего телефона на базе Android, и Debian основывал ноутбук для отправки всего интернет-трафика через мою домашнюю сеть. С этой целью я настроил правило ПОДМЕНЫ iptables имитировать исходный IP-адрес моих клиентов OpenVPN tun0 туннельные интерфейсы. Я все работы очень хорошо с точки зрения конечного пользователя. Однако мой маршрутизатор/брандмауэр иногда жалуется на "марсианский источник" пакеты, имея исходный IP-адрес tun0 интерфейса моего клиента - в этом случае телефон на базе Android. Я был озадачен об этих сообщениях и задался вопросом, могли ли они изложить угрозу безопасности - вряд ли, так как марсианские пакеты обычно отбрасываются в маршрутизаторах. Но любопытство toook и я исследовал его далее. Короче говоря, это - то, что я нашел:

  1. То, когда Вы выключаете телефон (только экран), это - клиент OpenVPN, делает мягкий выход, который повреждает некоторые соединения TCP по tun0 туннельному интерфейсу к серверу OpenVPN.

  2. Когда Вы поворачиваетесь по телефону снова, соединение OpenVPN перезапущено автоматически. Когда это происходит, брандмауэр Ubuntu обычно обнаруживает много недопустимых пакетов от телефона до интернет-IP-адресов - например, google.com. Эти сообщения являются пакетами TCP типа RST/ACK, FIN/ACK и RST, и большинство из них недопустимо в смысле iptables отслеживания соединения брандмауэра.

  3. Теперь к озадачивающей части: iptables брандмауэр счастливо направляет эти недопустимые пакеты вперед к серверам Ubuntu, исходящим интерфейс Ethernet к маршрутизатору, где они приводят к марсианским предупреждениям пакета источника, но их адреса источника IP являются исходным телефоном на базе Android tun0 интерфейсные IP-адреса, НЕ серверы Ubuntu, исходящие IP-адрес. Все ненедопустимые пакеты получают корректный источник MAAQUERADE обработка NAT.

Выше заключений были основаны на использовании wireshark для получения трафика и iptables статистики следующего правила получить недопустимые пакеты во вперед цепочка.

Мне удалось отбросить эти пакеты с помощью следующего правила:

-A FORWARD -s xxx.xxx.169.0/24 -o p2p1 -p tcp -m state --state INVALID -j DROP

После введения этого правила там больше не марсиане в маршрутизаторе, и wireshark больше не видят пакеты на Ubuntu, исходящей интерфейс Ethernet с исходным адресом с телефона.

Я должен упомянуть, что во время тестирования, телефон не был подключен к домашней LAN через WiFi, таким образом, весь трафик является протоколом OpenVPN UDP, который проходит мой домашний маршрутизатор/брандмауэр к серверу OpenVPN на сервере Ubuntu.

Я надеюсь, что кто-то знает, соответствует ли описанное поведение дизайну Linux netfilter/iptables, или действительно ли это - ошибка? Я подозреваю, что проблема так или иначе связана с iptables отслеживанием соединения, где поврежденные соединения TCP потеряли свои записи отслеживания соединения в iptables, которые в свою очередь так или иначе предотвращают источник логика NAT правила MASQUERAD сделать, это - вещь.

Я был бы счастлив и следующие, что кто-то мог предложить более глубокое понимание на этом и возможно также мог прокомментировать какие-либо аспекты безопасности - оно может быть использовано так или иначе?

2
задан 28 March 2019 в 18:02

1 ответ

Ваш анализ полон и завершен. Очень хорошо сделанный. Я прошел то же расследование 8 лет назад.

Это не ошибка, даже при том, что это продолжает сообщаться как ошибка. Из моих примечаний в то время:

Механизм NAT просто не может знать, что сделать с Недопустимым пакетом, таким образом, он передается без преобразования адресов. Таким образом, такие пакеты должны быть определены и отброшены. Это требование невероятно НЕ очевидно в большей части документации.

Также см. этот отчет об ошибках, особенно комментарий 11.

Я не знаю ни о каких конкретных проблемах безопасности с этим. Я знаю, что некоторый ISPs может быть нарушен с non-routable отправляемыми пакетами. В моем наборе правила iptables у меня есть много правил, в дополнение к НЕДОПУСТИМЫМ проверкам, гарантировать, чтобы пакеты никогда не оставляли мою LAN с non-routable источником или целевым дюйм/с (т.е. 192.168. X.X, 10. X.X.X, 172.16. X.X...)

Спустя 2.5 года после реализации правила, как Вы имеете:

-A FORWARD -s xxx.xxx.169.0/24 -o p2p1 -p tcp -m state --state INVALID -j DROP

Был случай не пакета NAT'd, сбегающего из моей причины LAN.The, был плохо сформированный пакет ICMP со смартфона (что-то, что никогда не должно происходить, но сделало. Это была поддельная продолжительность заголовка). Таким образом, спецификация протокола была отброшена:

-A FORWARD -s xxx.xxx.169.0/24 -o p2p1 -m state --state INVALID -j DROP
0
ответ дан 2 December 2019 в 06:24

Другие вопросы по тегам:

Похожие вопросы: