open vswitchを使用して作成された仮想ブリッジでポートミラーリングを設定しようとしました。
次のコマンドを使用して、Bridge deco_bridgeに次のポートを作成しました。
sudo ovs-vsctl add-port demo_bridge victim0
Bridge demo_bridge
Port "demo_bridge"
Interface demo_bridge
type: internal
Port "victim0"
Interface victim0
type: internal
Port "attacker0"
Interface attacker0
type: internal
Port "wireshark0"
Interface wireshark0
type: internal
ovs_version: "2.5.2"
VM1(attacker0に接続)がVM2(victim0に接続)を攻撃し、Attacker0 vportからWireshark0(VM3がネットワークトラフィックをキャプチャする)にすべてのトラフィックをミラーリングする必要がある簡単な実験を実行しています。ただし、ミラーリングを有効にするたびに、VM1(攻撃者VM)からVM3(Wireshark VM)をpingすることはできず、VM3でミラーリングされたトラフィックも表示されません。
以下は、ミラーリングされたポートを作成するために使用する2つのコマンドセットですが、どちらも機能しません。
sudo ovs-vsctl \
-- set Bridge demo_bridge mirrors=@m1 \
-- --id=@attacker0 get Port attacker0 \
-- --id=@wireshark0 get Port wireshark0 \
-- --id=@m1 create Mirror name=port_mirror1 select-dst-port=@attacker0 select-src-port=@attacker0 output-port=@wireshark0
//Youtubeビデオで
sudo ovs-vsctl \
-- --id=@p get port victim0 \
-- --id=@m create mirror name=mirror0 \
-- add bridge demo_bridge mirrors @m \
-- set mirror mirror0 output_port=@p
//ミラーを有効にする
sudo ovs-vsctl \
-- --id=@p get port ens3 \
-- set mirror mirror0 select_dst_port=@p \
-- set mirror mirror0 select_src_port=@p
これらのコマンドはミラーポートを生成しますが、攻撃者VM1と被害者VM2間のネットワーク接続も中断します。イメージを削除したら、すべての仮想マシンを正常にpingできます。各仮想マシン(ens3)のローカルインターフェイスには、Bridgeデモブリッジに接続されている静的IPアドレスがあります。 /etc/ネットワーク/インターフェース
auto ens3
iface ens3 inet static
address 172.168.0.3
network 172.168.0.0/27
netmask 255.255.255.0
答え1
仮想マシンのインターフェイスを受信するためにtcpdumpを使用してみましたか?
ハイパーバイザーとして何を使用しているのかわかりませんが、実行可能である必要があり、その出力でip addr
vswitchのポートを表示できる場合は、tcpdumpでそのポートをキャプチャできます。
また、 を実行すると、tcpdump -D
libpcapがキャプチャするホストが知っていることを知らせます。
たとえば、KVMをハイパーバイザーとして実行している場合は、仮想マシンに関連付けられているMACアドレスとポート名を取得できます。
# Assuming your xml files for the vms are in the default location also. cat /etc/libvirt/qemu/{{ name_of_vm }}.xml | grep -A 2 interface
この出力では、ip addr
macアドレスの最後の2桁をフィルタとして使用して出力を一致させることができます。
ip a | grep -B 1 -i {{ last_two }}
返されたインタフェースは tcpdump で使用できます。
tcpdump -ni {{ vnet_name }} -s0 -vw /var/tmp/{{ vnet_port_out }}.pcap
これにより、そのポートでフィルタリングされていないすべてのエントリがキャプチャされます。
答え2
トラフィックを正常にミラーリングしました。下記をご覧ください。 私の場合、br-intのvm1トラフィックをvm0にミラーリングし、vm0には2つのポートがあり、ある管理者は別の管理者がトラフィックをリッスンします。
vm0受信ポートは7df1c457-7732-44b2-bf15-63b0b661f1b7
vm1ポートは7eb61cc2-d059-4002-acef-b38e242ce4a5
Linuxブリッジ「qbrxxxxx」から「tapxxxx」インターフェースを取得する
brctl delif qbr7df1c457-77 tap7df1c457-77
br-intへの「tapxxxx」インタフェースの追加
ovs-vsctl add-port br-int tap7df1c457-77
br-int トラフィックを tap7df1c457-77 ポートにミラーリング
ovs-vsctl -- --id=@tap1 get port qvo7eb61cc2-d0 -- --id=@tap2 get port tap7df1c457-77 -- --id=@m create mirror name=m0 select_dst_port=@tap1 select_src_port=@tap1 output_port=@tap2 -- set bridge br-int mirrors=@m
これはqvo7eb61cc2-d0
vm1 のポートです。