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를 선택합니다.