Eth0にマップされたbr0ブリッジを提供するKVM仮想化サーバーがあります。テストしているIDS仮想マシンのbr2へのブリッジとしてeth2を追加したいのですが、ゲストOS br2とeth2のどちらも有効なインターフェイスとして表示されません。eth2でtcpdumpを実行し、パケットが表示されていることを確認できるので、有効なソースがあり、そのインターフェイスにはifconfig eth2 promisc up
を使用したPROMISCオプションがあります。これが私の/です。 etc/network/interfacesファイル:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 1.2.3.4
netmask 255.255.255.0
gateway 1.2.3.1
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
auto eth2
iface eth2 inet manual
auto br2
iface br2 inet static
up ifconfig br2 promisc up
down ifconfig br2 promisc down
bridge_ports eth2
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
何が足りないのですか?
Linuxブリッジは、基本的なレイヤー2スイッチです。接続されているインターフェイスにトラフィックを送信するには、トラフィックがそのインターフェイスに適している必要があります(つまり、宛先MACアドレスはそのポートを介して到達可能です)。
多くの場合、レイヤ2スイッチには、スイッチを通過するすべてのトラフィックを指定されたポートに転送するポートミラーリング機能がありますが、Linuxブリッジにはそのような機能はありません。
ただし、Linuxのトラフィック制御(tc)を使用して偽造することはできます。これは、suricataを実行しているKVM仮想マシンにトラフィックを転送するために行います。この方法の制限は、単一の物理ポートでのみトラフィックをミラーリングできることです。
このスクリプトでは、MONITOR_PORT
は監視対象のポートであり、物理ポートである必要があります。MIRROR_PORT
は、トラフィックの送信先のインターフェイス(仮想ポートまたはブリッジの場合があります)です。 )。この方法では、監視対象のポートを無差別モードにする必要はありません。また、ミラーポートを監視対象ポートにブリッジする必要はありません。
私の場合、ホストにはブリッジbr0があり、eno1にブリッジされており、すべての仮想マシンに仮想NICがあります。このVM用にホストオンリー仮想ネットワーク(virbr2として)を作成し、通常のNICに加えて、このネットワークのスリカタNICに2番目のVMを追加し、それへのトラフィック。
[error@hypervisor ~]$ cat /etc/rc.d/rc.local
#!/bin/bash
# Mirror all packets from one port to another (for suricata)
MONITOR_PORT=eno1
MIRROR_PORT=virbr2
# Ingress
tc qdisc add dev $MONITOR_PORT ingress
tc filter add dev $MONITOR_PORT parent ffff: protocol all u32 match u8 0 0 action mirred egress mirror dev $MIRROR_PORT
# Egress
tc qdisc add dev $MONITOR_PORT handle 1: root prio
tc filter add dev $MONITOR_PORT parent 1: protocol all u32 match u8 0 0 action mirred egress mirror dev $MIRROR_PORT
これは自分で作成したものではないことに注意してください。私は恥知らずにそれを Linuxブリッジを使用したポートミラーリング から取り除いた。これには、その仕組みの詳細な説明と、はるかに柔軟な(そしてはるかに複雑な)OpenvSwitchを使用した代替手段が含まれている。
おかげで、私はそれを次のようなbrctlで(おそらく)より単純な方法を使用して動作させることができました:
auto eth1
iface eth1 inet manual
#Alienvault OSIM Interface
auto br1
iface br1 inet manual
address 0.0.0.0
bridge_ports eth1
bridge_stp off
その後
ifup eth1
次に、次のようなパケットをキャプチャしているかどうかを確認します。
tcpdump -i br1
あなたは次のようなものをたくさん手に入れるべきです:
14:46:53.507328 IP 192.168.20.130.53866 > ipv4_1.cxl0.c154.sea001.ix.nflxvideo.net.https: Flags [.], ack 2897, win 5611, options [nop,nop,TS val 3160018074 ecr 2918482309,nop,nop,sack 1 {28961:46337}], length 0
14:46:53.507402 IP ipv4_1.cxl0.c154.sea001.ix.nflxvideo.net.https > 192.168.20.130.53866: Flags [.], seq 56473:57921, ack 0, win 2050, options [nop,nop,TS val 2918482612 ecr 3160018052], length 1448
ページやページが非常に速く通過するように、これは良いことです。次に、次のようにブリッジを追加します。
brctl setageing br1 0
brctl setfd br1 0
次に、VMを起動し、2番目を追加しますNIC of>共有デバイス名を指定します> br1。おそらくVMを再起動する必要がありますが、ログインしますVMに移動すると、eth1の2番目のNICが表示されます。これは、ミラーインターフェイスにブリッジされ、パケットの確認を開始できます。まだ確認していません。複数のセンサーに同じデータを参照させたい場合に、vswitchでミラーパケットを複数のインターフェイスにコピーする方法を理解したので、それが私の次の問題です。brctlconfigを再起動し続けるには、次の手順を実行します。
cd /etc/network/if-up.d
touch br1-mirror
chmod +x br1-mirror
vi br1-mirror
#!/bin/bash
if [ "$IFACE" = br1 ]; then
brctl setageing br1 0
brctl setfd br3 0
fi
こことこの男も助けてくれる狂った小道具、とても役に立ちました http://www.ryanhallman.com/kvm-configure-mirrored-ports-traffic-to-be-visible-in-guest-snort / これが他の誰かに役立つことを願っています。すべてのピースをボルトで固定する方法を理解するのは難しいです。