개방형 vswitch 브리지에 포트 미러링 만들기

개방형 vswitch 브리지에 포트 미러링 만들기

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)을 핑할 수 없으며 VM3에서 미러링된 트래픽도 볼 수 없습니다.

다음은 미러링된 포트를 생성하는 데 사용하는 두 가지 명령 세트이지만 둘 다 작동하지 않습니다.

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 -Dlibpcap이 캡처할 호스트에서 알고 있는 내용을 알려줄 것입니다.

예를 들어 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 주소의 마지막 두 자리를 필터로 사용하여 출력을 일치시킬 수 있습니다.

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에는 두 개의 포트가 있으며 한 관리자는 다른 관리자가 트래픽을 수신합니다.

vm0 수신 포트는7df1c457-7732-44b2-bf15-63b0b661f1b7

vm1 포트는7eb61cc2-d059-4002-acef-b38e242ce4a5

  1. Linux 브리지 "qbrxxxxx"에서 "tapxxxx" 인터페이스 가져오기

    brctl delif qbr7df1c457-77 tap7df1c457-77
    
  2. br-int에 "tapxxxx" 인터페이스 추가

    ovs-vsctl add-port br-int tap7df1c457-77
    
  3. 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-d0vm1의 포트입니다.

관련 정보