Почему Linux не доставляет данные приложениям, когда пакеты приходят через точку доступа?

Почему Linux не доставляет данные приложениям, когда пакеты приходят через точку доступа?

Моя цель — перехват трафика с помощью MITM-прокси. Для этого я настроил свой ноутбук на размещение точки доступа Wi-Fi, подключил смартфон, запустил прокси и настроил смартфон на использование моего ноутбука в качестве прокси в этой сети Wi-Fi.

IP хоста 10.42.0.1и клиента 10.42.0.2. Прокси-сервер прослушивает порт 8080, любой интерфейс. Он отображается правильно, netstatи я могу netcatподключиться к нему с локального хоста. Телефон Android настроен на прокси-сервер через 10.42.0.1порт 8080.

С телефона я могу выполнить ping 10.42.0.1; в Wireshark я вижу входящие эхо-запросы и исходящие ответы.

Однако, когда телефон отправляет пакет TCP или UDP, система не отвечает. При прослушивании точки доступа с помощью netcat по UDP и отправке данных UDP с телефона данные не доставляются в netcat. Я вижу пакет с данными, входящий в Wireshark, но терминал остается пустым. При прослушивании по TCP я вижу в Wireshark пакет SYN, входящий с телефона, но он никогда не подтверждается (нет ответа SYN+ACK).

Точка доступа ( 10.42.0.1) явно имеет ARP и обратный маршрут или ответы ICMP echo не будут выходить. Не установлен брандмауэр хоста. Проблема сохраняется после перезагрузки.

В чем может быть проблема?

решение1

При написании вопроса я понял, что, хотя я и знал, что это не может быть брандмауэр, потому что у меня его не было установлено, и это не могут быть iptables, потому что они не сохраняются после перезагрузки, я понял, что на самом деле не проверил, были ли установлены правила iptables.

# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
DROP       all  --  anywhere             anywhere             state INVALID
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     udp  --  anywhere             anywhere             udp dpt:isakmp
ACCEPT     esp  --  anywhere             anywhere
ACCEPT     ah   --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:8528

Оказывается, что-то, вероятно, NetworkManager в своей бесконечной мудрости, решило добавить для нас некоторые правила, с радостью неожиданно предоставив нам брандмауэр.

Обходной путь — отменить некоторые правила и сбросить политику по умолчанию:

# iptables -L --line-numbers
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
2    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps
3    ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
4    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
5    DROP       all  --  anywhere             anywhere             state INVALID
# iptables -D INPUT 5
# iptables --policy INPUT ACCEPT

Я не могу найти никаких ссылок на что-либо из этого в документации NetworkManager или даже в исходном коде. Я не знаю, что это за порт 8528, который он, похоже, разрешает по умолчанию (он не зарегистрирован и нигде не упоминается), и я не могу быстро найти соответствующий код, который вызывает iptables, или найти какие-либо соответствующие настройки, чтобы остановить его от брандмауэра соединения. Возможно, NetworkManager вызывает какое-то другое программное обеспечение, которое впоследствии устанавливает это?

Связанный контент