iptables + iproute2を使用して、トラフィックをリモートスニファーにリダイレクトする

最初のスマートフォンを購入した後、人々は通常、モバイル通信のコストがわずかに増加していることに気付きます。 通常、これは所有者の知識がなくても「スマート」電話が「ネットワークに接続する」という事実によるものです。 もちろん、この問題の解決は簡単です。GPRS/ HSDPAアクセスポイントへの接続をブロックする特別なユーティリティをインストールするか、インターネットアクセスの無制限の料金を購入して忘れてください。 説明された状況に直面して、私はまず電話がWebで探しているもの、そして最も重要なこととして、それがWebに送信しているものに興味を持ちました。 後者は、特に最近のニュースに関連しています。



スマートフォンがネットワークに送信するトラフィックを表示するには、特別なプログラム- スニッファーが必要です。

電話機に簡単にインストールできる場合があります。 これは最も信頼できる方法ですが、常に利用できるとは限りません。

スマートフォンにWi-Fiがある場合は、追加のデバイスを使用できます-たとえば、Wi-Fi経由でルーターまたはスニファー付きのコンピューターに接続するか、Wi-Fi付きルーターにアクセスできない場合は、保護されていないWi-Fiネットワークに接続し、 3番目のコンピューターからのすべてのトラフィックを分析します。



最も典型的なケースを考えてみましょう-通常のWi-Fiアクセスポイント(DSLモデムまたはルーター)によって管理されるホームネットワークで、パラメーターを変更したくない場合。 ほとんどのホームアクセスポイントはLinuxを実行しており、たとえばtelnetを介して問題なくアクセスできます。

このメモでは、すべてのトラフィックをスマートフォン(またはネットワーク上の他のホスト)からLinuxコンピューターにリダイレクトして、学習中のデバイスから見えないようにする方法を説明します。



Netfilterまたはiproute2の動作については説明しません。 この情報はインターネット上で簡単に見つけることができます-メモの最後には、それについて読むことができるリンクがあります。 これらのツールをエレガントに使用する別の方法を次に示します。これにより、すべてのパワーとシンプルさを感じることができるようになります。





合計:

  1. Linux上のルーターとその上で使用可能なシェルを備えたネットワーク(たとえば、私の場合、Streamのモデム、アクセスについてはここで説明します )。 ネットワークIP:192.168.1.1。
  2. Linuxディストリビューションを搭載したコンピューター。 なぜLinuxなのか? はい、ほとんどすべてのLinuxディストリビューションにはiptablesおよびiproute2ユーティリティとtcpdumpスニファーが含まれているため、ほとんどすべてのネットワークタスクを解決できます。 ただし、スニファーはGUIで使用する方が適切です。 たとえば、Wireshark。 IPアドレス:192.168.1.2。
  3. 実際、調査対象のデバイスは、ネットワークに接続されたスマートフォンです。 IPアドレス:192.168.1.3








アクションプランは簡単です。iproute2を使用して、ルーター上に個別のルーティングテーブルを作成し、それをスマートフォンからのすべてのトラフィックに使用するルールを作成します。 テーブルでデフォルトゲートウェイ-スニファーを持つホストを示します。



#    ROUTER=192.168.1.1 SLEUTH=192.168.1.2 SUSPECT=192.168.1.3 TABLE=14 ip rule add from $SUSPECT table $TABLE priority 5 ip route add default via $SLEUTH table $TABLE
      
      







重要! 同じ優先度の2つのルールは許可されません。 最初に、同じ優先度の別のルールがあるかどうかを確認する必要があります: ip rule list







priority



小さい数値を選択することをお勧めします-値が小さいほど、優先度が高くなります。 私の最初の4人は忙しかった。

未使用のテーブル( $TABLE



)を選択できます。 テーブルが使用されているかどうかは、 ip route list table $TABLE



コマンドを使用して表示できます。



スニファーを持つホストは、調査中のすべてのトラフィックをネットワークにリダイレクトする必要があります。 NATはこれを簡単に処理できます。 さらに、このトラフィックは同じルーターを経由して簡単に宛先に送信されます。これは、IPパケットの送信者アドレスが異なるため、ルーティングテーブルに到達しないためです。



 #    ROUTER=192.168.1.1 SLEUTH=192.168.1.2 SUSPECT=192.168.1.3 sysctl -w net.ipv4.ip_forward="1" iptables -I FORWARD -s $SUSPECT -j ACCEPT iptables -I FORWARD -d $SUSPECT -j ACCEPT iptables -t nat -I POSTROUTING -s $SUSPECT -j MASQUERADE
      
      







それがすべてのようです。 コンピューターでスニファーを実行し、IPアドレス192.168.1.3でトラフィックをフィルターできます。



ただし、このようなスキームには重大な欠点があります。ルーター自体を対象としたトラフィックはスニファーに到達しません。 たとえば、DNS。 たとえば、スマートフォンが常に何かを送信している74.125.39.188(mtalk.google.com)のサーバーを特定することが重要な場合があります。 これを行うには、再度iptablesを使用します。 iptablesマニュアルのスキームから判断すると、ルーティングの結果、このトラフィックが(右ブランチに)リダイレクトされるようにするには、 PREROTING



宛先アドレスを変更する必要があります。





 #    iptables -t nat -I PREROUTING -s $SUSPECT -d $ROUTER -j DNAT --to-destination $SLEUTH
      
      







リダイレクト(FORWARDテーブル)を構成するコマンドはスキップします-結局、ルーターで通常モードで動作するはずです:)



スニファーホストで、宛先アドレスを元に戻します。



 #    iptables -t nat -I PREROUTING -s $SUSPECT -d $SLEUTH -j DNAT --to-destination $ROUTER
      
      







スニファーホストでは、トラフィックはマスカレード(MASQUERADE)に該当することに注意してください。つまり、送信元アドレスもパケットに対して変更されます。 その結果、パケットは次のスキームに従って移動する必要があります(矢印はパケットの送信者と受信者のホスト番号であり、順序は上から下です)。







ただし、コンピューターとスマートフォンが同じセグメントにあり、ルーターがネットワークブリッジとして機能する場合、このオプションは機能しません。 次に、スニファーホストのルーティングテーブルに従って、リバーストラフィックは受信者に直接送信され、受信者のOS-スマートフォン-はそれを無視する必要があります。送信者アドレスは接続が確立されたアドレスではないためです。





この状況から抜け出す方法は簡単です-これらのパケットをルーターに再度リダイレクトするには、スニッファーへのリダイレクトが行われた方法と同様です:



 #    TABLE=15 ip rule add to $SUSPECT table $TABLE priority 7 ip route add default via $ROUTER table $TABLE
      
      







この「問題のある」トラフィックを受信すると、Netfilterルーターは、状態決定メカニズム (nf_conntrackモジュール)を使用して、その中のDNATを使用して変更された接続を「認識」し、パケットレシーバーアドレスを元のアドレスに置き換えます。 次に、パケットは何も起こらなかったかのように受信者に送信されます。



スクリプトの最終バージョン:



 #    ROUTER=192.168.1.1 SLEUTH=192.168.1.2 SUSPECT=192.168.1.3 TABLE=14 ip rule add from $SUSPECT table $TABLE priority 4 ip route add default via $SLEUTH table $TABLE iptables -t nat -I PREROUTING -s $SUSPECT -d $ROUTER -j DNAT --to-destination $SLEUTH
      
      







 #    ROUTER=192.168.1.1 SLEUTH=192.168.1.2 SUSPECT=192.168.1.3 sysctl -w net.ipv4.ip_forward="1" iptables -I FORWARD -s $SUSPECT -j ACCEPT iptables -I FORWARD -d $SUSPECT -j ACCEPT iptables -t nat -I POSTROUTING -s $SUSPECT -j MASQUERADE iptables -t nat -I PREROUTING -s $SUSPECT -d $SLEUTH -j DNAT --to-destination $ROUTER TABLE=15 ip rule add to $SUSPECT table $TABLE priority 5 ip route add default via $ROUTER table $TABLE
      
      







注釈



  1. 両方のiptables、iproute2パッケージをルーターとコンピューターの両方にインストールし、netfilterと高度なルーティングサポートをカーネルに含める必要があります。 ほとんどのディストリビューションとほとんどのルーターは両方を行います。 カーネルが個別に構成されている場合、その存在を再確認することをお勧めします。
  2. ルーター、ホストスニファー、および電話は、異なるネットワークセグメントに配置できます。 主なことは、それらが接続されており、スマートフォンからのすべてのトラフィックがルーターを通過することです。
  3. このノートでは、Wi-Fiまたはイーサネット経由でインターネットにアクセスできる他のデバイスがスマートフォンとして機能します。
  4. 同意なしに個人の生活に関する機密情報および個人情報を収集および配布するために、記載された方法を使用することは違法です! (刑法第137条、第138条)
  5. アクセスポイントが許可されていない人から完全に保護されているかどうかわからない場合は、保護されたWi-Fiネットワークであっても安全ではないことに注意してください。 これが重要な場合は、暗号化をサポートするデータ転送プロトコル(HTTPS、XMPP(Jabber)など)を使用してください。
  6. もちろん、本格的なOSを搭載したコンピューターに関連するこのメソッドの適用は、tracroute(Windowsのtracert)を使用して、または単にTTLパケットの減少のために簡単に監視されます。




参照資料



  1. Linux Advanced Routing&Traffic Control HOWTO(ロシア語)
  2. iptablesチュートリアル(iptablesチュートリアル1.1.19)



All Articles