web-dev-qa-db-ja.com

透過的なiptables TCPプロキシ

これが私の状況です。私のネットワークにはiPad、TiVo、dd-wrtルーターがあり、iPadとTiVoの間のドラフィックをスニッフィング/復号化するために使用したいマシンがあります。

IPadには、A)TiVoのIPを自動的に検出し、B)SSLを介してTiVoと通信するアプリがあります。 iPadは私のwifiネットワーク上にあり、TiVoは有線であり、パケットが私のdd-wrtルーターを通過することを保証します。 tcpdumpでそれらをスニッフィングできますが、暗号化されています。

Tcpcatcherを使用して、SSL復号化と再暗号化を使用したman-in-the-middleを試みたいと思います。透過的なhttpプロキシの場合と同じように、dd-wrtルーターでいくつかの単純なiptableルールを使用して、ipadとtivoの間を移動するパケットを転送/リダイレクト/ natできると思います。ただし、これを行うための適切なルールが見つかりませんでした。サポートが必要です。

5
arantius

Iptablesでリダイレクトを行うには、次のように実行できます。

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.1:3128

これは、プロキシサーバーへの標準のWebリダイレクトです。ルールは、tcpプロトコルポート80およびIPとポートへのDESTINATION NATTEDのeth1インターフェイスに着信するパケットのNATテーブルPREROUTINGチェーンに配置されます。

ただし、トラフィックがリダイレクトされると、エンドポイントが認識せずに元の宛先にトラフィックを戻す必要があります。私はあなたがそれをどのように達成するかを知りたいと思います。

1
Ketema

私の tun2socks プログラムを「TCPキャッチ」部分に使用できます。このプログラムは、すべての発信TCP接続をSOCKSプロキシ経由で転送する仮想TUNネットワークインターフェイスを作成します。ルーティングルール(ipルール)を追加してIpadの接続をtun2socksのTUNインターフェイスに転送すると、tun2socksはSOCKS5プロキシに転送します。SOCKSプロキシ内またはSOCKSプロキシとしてMITM攻撃を実行する方がはるかに簡単です。

このアプローチは、あなたの観点からはiptablesリダイレクトルールに似ていますが、接続の実際の宛先を把握するために特別なことをする必要はありません。SOCKS5プロトコルヘッダーに存在します。

[〜#〜] update [〜#〜]:IpadからTUNインターフェースへのパケットの取得は実際には思ったより難しいです。ルーターには、br0(Ipadがある場所)とwlan0(Tivoがある場所)をブリッジするeth0ブリッジインターフェイスがあると想定しています。私はDD-WRTにあまり詳しくないため、名前が異なる場合があることに注意してください(brctl showで確認してください)。

ここで問題となるのは、Ipad(wlan0)からTivo(eth0)へのパケットはルーティングされないが、ブリッジ(つまり、スイッチは行います)。つまり、IPルールを追加しても、少なくとも論理的には、これらのパケットはルーターを通過しないため、問題にはなりません。これを解決するには、パケットがbr0にあるTivoのMACアドレスではなく、eth0のMACアドレスに直接送信されたかのようにIpadからパケットをリダイレクトする必要があります。これにより、カーネルはそれらを着信IPパケットとして扱い、IPルールとルーティングテーブルに従ってルーティングすることができます。最後に、コマンドは次のとおりです。

ebtables -t nat -A PREROUTING -i wlan0 -p ipv4 --ip-source <ip_of_ipad> --ip-destination <ip_of_tivo> --ip-protocol TCP -j dnat --to-destination <mac_of_br0>

これにより、wlan0で受信した一致するパケットをbr0に直接リダイレクトする ebtables ルールが追加されます。これが多すぎる場合は、ここに条件を追加する必要があるかもしれません。 dnatは通常の(IP)を意味しないことに注意してくださいNAT-ebtablesでは、NATはフレームのMACアドレスを変更することを意味しますが、 IPアドレス。

DD-WRT用のtun2socksのコンパイル済みバージョンを入手できます ここ ;うまくいけば、それはあなたのデバイスで動作します。

2
Ambroz Bizjak

これを達成するための良い チュートリアル があります。基本的に、ルーターがプロキシサーバーから応答を取得する(そしてNATを元に戻す)ように、プロキシサーバーにパケットをDNATし、SNATする必要があります。 iptablesルールは次のようになります(プロキシサーバーのIPが10.0.0.10であると想定)。

iptables --table nat --append PREROUTING --in-interface eth0 --source !10.0.0.10 --protocol tcp --dport 80 --jump DNAT --to 10.0.0.10:3128
iptables --table nat --append POSTROUTING --out-interface eth0 --source 10.0.0.0/24 --destination 10.0.0.10 --jump MASQUERADE

最初のルールは、ポート80宛てのパケットをプロキシサーバーにリダイレクトし(実際にインターネット上のWebサーバーに接続する必要があるため、プロキシサーバー自体からのパケットを除く)、2番目のルールは、に送信するときにリダイレクトされたパケットの送信元アドレスを変更します。プロキシサーバー。 (FORWARDチェーンはこれらのパケットを受け入れると想定していますが、そうでない場合は、別のルールも必要です。)

1
mgorven