iptable을 사용하여 프로세스의 데이터 패킷을 필터링하고 대기열에 넣습니다.

iptable을 사용하여 프로세스의 데이터 패킷을 필터링하고 대기열에 넣습니다.

libnetfilter_queue를 사용하여 패킷을 수정할 수 있도록 프로세스의 패킷을 대기열에 넣으려고 합니다.

나는 --pid-owner processid프로세스의 패킷을 필터링하고 iptables -I <table or chain> <match specification> -j NFQUEUE --queue-num <queue number>대기열에 추가하기 위해 무엇을 사용해야 하는지 알고 있습니다. 그런데 어떤 값을 사용해야 할지 헷갈립니다."테이블 또는 체인"그리고"일치 사양".

저는 iptable을 처음 접했기 때문에 문서를 읽었지만 원본과 대상에 관계없이 응용 프로그램에 대한 패킷을 대기열에 추가하고 싶기 때문에 어떤 값을 선택해야 할지 여전히 확신하지 못합니다.

내 문제를 해결하기 위해 올바른 값을 선택할 수 있도록 이 두 필드를 더 잘 이해하는 데 도움이 되는 제안을 주시면 감사하겠습니다.

답변1

"응용 프로그램"이란 "그것으로 무엇을 하고 싶은가"를 의미합니다.

여러 프로세스와 스레드가 포함된 복잡한 네트워크 트래픽을 모니터링하려면 이를 네트워크 네임스페이스에 배치하고 기본 네임스페이스에 veth 쌍을 만든 다음 Wireshark 등을 사용하여 veth 쌍을 캡처하는 것이 좋습니다.

시작점으로 사용되는 스크립트는 다음과 같습니다.

#!/bin/bash

# Setup network namespace with veth pair, start xterm in it

# nsterm ns0 veth0 10.0.0 yellow 24

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

NS=${1:-ns0}
DEV=${2:-veth0}
DEV_A=${DEV}a
DEV_B=${DEV}b
ADDR=${3-:10.0.0}
ADDR_A=${ADDR}.254
ADDR_B=${ADDR}.1
MASK=${5:-24}
COL=${4:-yellow}

# echo ns=$NS dev=$DEV col=$COL mask=$MASK

ip netns add $NS
ip link add $DEV_A type veth peer name $DEV_B netns $NS
ip addr add $ADDR_A/$MASK dev $DEV_A
ip link set ${DEV}a up
ip netns exec $NS ip addr add $ADDR_B/$MASK dev $DEV_B
ip netns exec $NS ip link set ${DEV}b up
ip netns exec $NS ip route add default via $ADDR_A dev $DEV_B
ip netns exec $NS su -c "xterm -bg $COL &" USERNAME

USERNAME사용자로 교체하고 루트로 실행하십시오.

nsterm ns0 veth0 10.0.0 yellow

그런 다음 10.0.0.1/24네임스페이스를 입력 ns0하면 10.0.0.254/24기본 네트워크 네임스페이스에 Skype, Firefox, Chrome 등을 실행할 수 있는 노란색 xterm도 있습니다.

기본 네임스페이스에서는 전달 및 가장을 활성화해야 합니다. 예를 들면 다음과 같습니다 wlan0.

echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

그런 다음 tcpdump -i veth0a, 또는 Wireshark를 선택합니다.

관련 정보