我的目标是使用 MITM 代理拦截流量。为此,我将笔记本电脑配置为承载 Wi-Fi 热点,连接智能手机,启动代理,并将智能手机配置为在此 Wi-Fi 网络上使用笔记本电脑作为代理。
主机 IP 为10.42.0.1
,客户端为10.42.0.2
。代理正在侦听端口 8080,任何接口。它正确显示在 中,netstat
我可以netcat
从 localhost 访问它。Android 手机配置为通过10.42.0.1
端口 8080 进行代理。
我可以通过电话 ping 10.42.0.1
;在 Wireshark 中,我可以看到回显请求传入,响应传出。
但是,当手机发送 TCP 或 UDP 数据包时,系统不会响应。当使用 UDP 上的 netcat 监听热点并从手机发送 UDP 数据时,数据不会传送到 netcat。我可以在 Wireshark 中看到包含数据的数据包,但终端保持空白。当在 TCP 上监听时,我可以在 Wireshark 中看到来自手机的 SYN 数据包,但从未确认(没有 SYN+ACK 响应)。
热点 ( 10.42.0.1
) 明显有 ARP,路由返回或 ICMP 回显响应不会发出。主机未安装防火墙。重启后问题仍然存在。
可能是什么问题呢?
答案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 调用了其他随后安装它的软件?