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