テストとトレーニングの目的で、次のように中間者シナリオを設定したいと思います。
- ホストTは、「複製」するターゲットホストである。
- ホストMは仲介者であり、インターフェイスMは経由で
eth0
ネットワークeth1
に接続されています。eth0
eth1
設定のポイントは、Tが特定の要求(特にEAPoLを介した802.1X認証)に応答できることです。したがって、M は T を認証オラクルとして使用します。特に、デフォルトでは、Tはネットワークに接続し、802.1Xを介して認証されますが、Mはアクセスが拒否されます。対照的に、ユーザはMに対する管理アクセス権を有するが、Tに対するアクセス権はない。ネットワーク診断を実行するときにMがTのように見えるようにし、Tは権限が不足してネットワーク診断を実行できないようにするためのものです。
2つの可能な方法があります。
関連フレームを前後にコピーするプログラム(例:scapyを持つPythonやlibpcapを持つC)を作成します。
ebtables
と を使用しますiptables
。
ここでの質問は、簡単に言えば2つに焦点を当てています。希望の結果を得る方法は?
今まで試したこと
最初のステップはとをeth0
リンクすることですeth1
(つまり、に追加br0
)。ebtables
/ルールがなければ、iptables
Tはまるでネットワークに直接接続されているように見えます。次に、主にIPv4でTをエミュレートすることに焦点を当てているので、次のルールを設定しました。
ebtables -A FORWARD -p IPv4 -j DROP
このルールは、IPv4 トラフィックがブリッジを通過するのを防ぎます。 Tをエミュレートするには、Mがレイヤ2と3でいくつかのNATを実行する必要があります。
# interception of incoming packets for T:
ebtables -t nat -A PREROUTING -i eth0 -p IPv4 -d $TARGET_MAC_ADDR -j dnat --to-destination $MY_ETH0_MAC_ADDR
iptables -t nat -A PREROUTING -i eth0 -d $TARGET_IP4_ADDR -j DNAT --to-destination $MY_ETH0_IP4_ADDR
# spoofing of outgoing packets as coming from T:
ebtables -t nat -A POSTROUTING -o eth0 -p IPv4 -s $MY_ETH0_MAC_ADDR -j snat --to-source $TARGET_MAC_ADDR
iptables -t nat -A POSTROUTING -o eth0 -s $MY_ETH0_IP4_ADDR -j SNAT --to-source $TARGET_IP4_ADDR
私の無邪気な考えはこのようにしなければならないということでした。しかしそれは真実ではない。 Tを「接続解除」することに加えて、MはTとまったく異なる動作をします。具体的には、iptables -t nat -L -v -n
SNATルールは期待どおりに実行されますが、DNATルールは怠惰です(つまり、何が起こってもパケットがゼロ)ことを示しています。私がここで何を見逃しているのでしょうか?
ノート
質問は次のとおりです。これしかし、設定が異なります。
Ruiは、特定のプロトコルがNATを使用すると問題が発生しやすいことをコメントで指摘しました。ルータがアップストリームネットワークのホストを偽装している場合(またはコーンネットワークアドレス変換)。しかし、これはポイントではありません。この場合、TをマスクしながらMをTに偽装するためにNATを使用します。 MはTのパケットを破棄します(最初のebtablesルールを参照)。
背景
802.1X(より正確には802.1X-2010)は認証のみを提供し、その後の「トンネル」セキュリティは提供しません。 TLSハンドシェイクの結果がNULL暗号化と認証である「要求者」の証明と同じです。認証中本物ですが、認証された「セッション」がハイジャックされることがあります。
有線接続の解決策はMACsec(802.1X-2014の一部である802.1aeとも呼ばれます)です。 MACsecのワイヤレスペンダントはWPA / WPA2です。驚くべきことに、最も安価なハードウェアでもWPA2をサポートでき、MACsecをサポートする高度なスイッチはMACsecをサポートしていない高度なスイッチよりもはるかに高価です。
とりわけ、説明されたシナリオは、MACsecのない802.1Xが価値がないことを示しています。
ベストアンサー1
方法1)を試すことに同意すると、EAPOLプロキシの作成が完了しました(https://github.com/kangtastic/peapod)。必要に応じて、eth0のMACアドレスを自動的に変更して宛先と一致させることもできますが、手動で実行します。 eth0に固定IPv4アドレスを設定して接続を取得できるようです。私のプロキシはレイヤ3アイテムを処理しないので大丈夫です。とにかく、あなたの説明に基づいてあなたの状況に合うと確信しています。ほとんどの場合、Pythonで書かれた他のEAPOLエージェントもあります。
EAPOL申請者がDHCPを介してセッションを開始した後にIPv4接続を取得するためにアップストリームネットワークに「登録」する必要がある場合、アップストリームネットワークに特定のホスト名、またはクライアント識別子が必要かどうかによって状況がより複雑になります。 DHCP 要求に送信されました。最悪の場合は、TのDHCPクライアントとまったく同じオプションを送信するようにMのdhclientを設定する必要があります。迷惑ですが、十分に粘り強く努力すれば、両方とも同じように作ることができます。リクエスタのMACをeth0に複製することも役立ちます。
eb/iptablesを使用して方法2)を選択した場合 - 申し訳ありません。あまり役に立ちません。 EAPOLマルチキャストグループアドレス01-80-C2-00-00-03は802.1D互換ブリッジによって配信されないため、デフォルトでEAPOLはLinuxソフトウェアブリッジにまたがっていません。この問題の解決策は次のとおりです。
echo 8 > /sys/class/net/brX/bridge/group_fwd_mask
(なぜ8で他の値はありませんか?https://interestingtraffic.nl/2017/11/21/an-oddly-special-post-about-group_fwd_mask/)
Tはブリッジを介して認証するので、すでに知っていますが、他の人はそうではないかもしれません:)