使用 iptable 对进程的数据包进行过滤和排队

使用 iptable 对进程的数据包进行过滤和排队

我正在尝试对进程的数据包进行排队,以便我可以使用 libnetfilter_queue 来修改它们。

我知道我应该用来--pid-owner processid过滤进程的数据包并将iptables -I <table or chain> <match specification> -j NFQUEUE --queue-num <queue number>它们添加到队列中。但是,我很困惑我应该使用什么值“桌子或链条”“匹配规范”

因为我是 iptable 的新手,所以我已阅读文档,但仍然不确定应该选择什么值,因为我想对应用程序的数据包进行排队,无论其源和目的地如何。

我将不胜感激任何可以帮助我更好地理解这两个字段的建议,以便我可以为它们选择正确的值来解决我的问题。

答案1

我所说的“应用程序”是指“你想用它做什么”。

如果你想监视复杂的网络流量,可能有多个进程和线程,我绝对建议将其放在网络命名空间中,在主命名空间中创建一个 veth 对,然后在 veth 对上捕获用wireshark等

这是一个作为起点的脚本:

#!/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为您的用户,以 root 身份运行

nsterm ns0 veth0 10.0.0 yellow

然后你就10.0.0.1/24进入了命名空间ns010.0.0.254/24在主网络命名空间中,还有一个黄色的 xterm,你可以在其中启动 Skype、Firefox、Chrome 等程序。

在主名称空间中,您需要启用转发和伪装,例如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。

相关内容