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

380
Luc

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

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

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

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

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

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

0

1 ответ на вопрос

0
Luc

При написании вопроса я понял, что, хотя я знал, что это не может быть брандмауэр, потому что я не установил его, и это не может быть 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 вызывает другое программное обеспечение, которое впоследствии устанавливает это?