iptable を使用してプロセスのデータパケットをフィルタリングし、キューに入れます。

iptable を使用してプロセスのデータパケットをフィルタリングし、キューに入れます。

libnetfilter_queueを使用してパケットを変更できるように、プロセスのパケットをキューに入れようとします。

私は--pid-owner processidプロセスのパケットをフィルタリングしてiptables -I <table or chain> <match specification> -j NFQUEUE --queue-num <queue number>キューに追加するために何を使うべきかを知っています。ところで、どのような値を使うべきかを混乱させます。「テーブルまたはチェーン」そして「一致仕様」

私は最初にiptableに触れたのでドキュメントを読みましたが、ソースと宛先に関係なくアプリケーションのパケットをキューに追加したいので、どの値を選択するかはまだわかりません。

私の問題を解決するために正しい値を選択できるように、これら2つのフィールドをよりよく理解するのに役立つ提案をいただきありがとうございます。

ベストアンサー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ユーザーと交換して root として実行します。

nsterm ns0 veth0 10.0.0 yellow

その後、10.0.0.1/24ネームスペースを入力するns010.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を選択します。

おすすめ記事