nftables를 사용하여 포트 범위의 모든 UDP 트래픽을 복사하는 방법

nftables를 사용하여 포트 범위의 모든 UDP 트래픽을 복사하는 방법

여러 소스 간의 대기 시간을 측정하기 위해 포트 8000-8900/udp의 모든 트래픽을 다른 포트 범위 또는 다른 가상 장치에 복사하려고 합니다.

iptablesTEE 옵션이 있다는 것을 알고 있지만 제가 찾은 예는 저에게 적합하지 않습니다.

답변1

당신은 그것을 사용할 수 있습니다데몬 로거, Sourcefire 창립자 Martin Roesch가 개발한 도구입니다. 기본적으로 이 도구는 패킷을 복사할 수 있는 소프트 TAP을 생성합니다. 귀하의 경우 중요한 스위치는 -i스니핑 입력 인터페이스와 -o패킷이 뱉어지는 출력 인터페이스입니다.

루프백을 사용하고 싶지 않다면 더미 인터페이스를 만들 수 있습니다. 특히 분석을 위해 패킷 캡처를 오염시키지 않으려는 경우 권장되는 방법입니다. 이 예에서는 이라는 가상 인터페이스를 만들고 dummy0IP 주소를 할당 하겠습니다 192.168.1.150/24.

$ sudo modprobe dummy
$ sudo sh -c 'echo "dummy" >> /etc/modules'
$ sudo sh -c 'echo "
auto dummy0
iface dummy0 inet static
address 192.168.1.150
netmask 255.255.255.0" >> /etc/network/interfaces'

daemonlogger그런 다음 물리적 인터페이스가 다음과 같다고 가정하고 이제 실행할 수 있습니다.eth0

$ sudo daemonlogger -i eth0 -o dummy0

인용하다:https://talosintelligence.com/daemon

답변2

해결책은 패킷을 복사할 다른 대상 주소를 만드는 것입니다.

sudo ip addr add 10.0.0.1/24 dev lo

이 예에서는 무한 패킷 루프를 방지하기 위해 루프백이 아닌 인터페이스의 포트 8000~8100에서 UDP 패킷을 일치시킵니다. 패킷이 복사되어 10.0.0.1로 라우팅된 인터페이스로 전달됩니다. 이 시점에서는 패킷이 수정되지 않았으며 여전히 원래 소스 및 대상 주소를 유지합니다.

그런 다음 루프백 인터페이스의 모든 패킷을 개별적으로 필터링하고 대상 IP 주소를 자체적으로 설정하여 디버깅 도구가 10.0.0.1:8000-8100을 수신하고 패킷을 수신할 수 있도록 합니다.

#!/usr/sbin/nft -f

table ip mangle {
    chain prerouting {
        type filter hook prerouting priority mangle; policy accept;
        iifname != lo udp dport 8000-8100 dup to 10.0.0.1 device lo notrack
    }

    chain input {
        type filter hook input priority mangle; policy accept;
        iifname lo udp dport 8000-8100 ip daddr set 10.0.0.1 notrack
    }
}

패킷을 모니터링하는 명령의 예:nc -v -k -u -l 10.0.0.1 8000

청소하려면 실행하세요.

sudo ip addr delete 10.0.0.1/24 dev lo
sudo nft flush ruleset

스크린샷에서 호스트 192.168.1.50은 192.168.1.2:8000으로 패킷을 보내고 패킷이 복제되었습니다. 192.168.1.2:8000의 애플리케이션이 보낸 사람에게 응답했습니다. Wireshark는 업데이트된 대상 주소를 표시하지 않습니다.

Wireshark 로그

관련 정보