パケットがホットスポット経由で来た場合、Linux はなぜデータをアプリケーションに配信しないのでしょうか?

パケットがホットスポット経由で来た場合、Linux はなぜデータをアプリケーションに配信しないのでしょうか?

私の目標は、MITM プロキシを使用してトラフィックを傍受することです。これを実現するために、ラップトップを Wi-Fi ホットスポットをホストするように設定し、スマートフォンを接続してプロキシを起動し、この Wi-Fi ネットワークでラップトップをプロキシとして使用するようにスマートフォンを設定しました。

ホスト IP は10.42.0.1、クライアントはです10.42.0.2。プロキシはポート 8080、任意のインターフェースでリッスンしています。正しく表示されnetstat、localhost からアクセスできますnetcat。Android フォンは、ポート 8080 経由でプロキシするように構成されています10.42.0.1

電話からは ping を実行できます10.42.0.1。Wireshark では、エコー要求の受信と応答の送信を確認できます。

ただし、電話が TCP または UDP パケットを送信すると、システムは応答しません。UDP で netcat を使用してホットスポットをリッスンし、電話から UDP データを送信すると、データは netcat に配信されません。Wireshark でデータを含むパケットが着信しているのを確認できますが、端末は空白のままです。TCP でリッスンすると、電話から SYN パケットが着信していることを Wireshark で確認できますが、確認応答はありません (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 が他のソフトウェアを呼び出して、それが後でこれをインストールしているのかもしれません。

関連情報