web-dev-qa-db-ja.com

KVM promiscインターフェースIDSのブリッジ

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

何が足りないのですか?

2
batflaps

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を使用した代替手段が含まれている。

1
Michael Hampton

おかげで、私はそれを次のような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 / これが他の誰かに役立つことを願っています。すべてのピースをボルトで固定する方法を理解するのは難しいです。

1
batflaps