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