iptables はバイト計算によってポートトラフィックを別のポートに転送します。

iptables はバイト計算によってポートトラフィックを別のポートに転送します。

質問

'redirect'あるポートから別のポートへのトラフィックが必要です。ただし、そのポートを介して通信するときに使用されるINPUTANDバイト数を計算できるはずです。OUTPUT

半分理解しました

iptables -t nat -A PREROUTING -p udp --dport 50000 -j REDIRECT --to-port 3478

ソリューションはすべてのトラフィックをここにあるすべてのエントリ50000にリダイレクトするのに問題はありませんが、ポートを通過するトラフィック3478はカウントできません。これは重要な質問です。INPUT & OUTPUT50000

現在の設定

firewall-cmd --zone=public --add-port=50000/udp;
iptables -I INPUT -p udp --dport 50000;
iptables -I OUTPUT -p udp --sport 50000;

INPUTこの設定を使用して、どれだけのANDデータが使用されているかを計算しますOUTPUTが、これがそうでない場合にのみ機能します'redirected'

流れ?

Packet -> 50000(adds bytes to INPUT) -> 3478;
Packet <- 50000(adds bytes to OUTPUT) <- 3478

より良い方法がある場合は、iptables提案を受け取ります。

答え1

以下が必要です。

# Tag UDP packets of the "connection" with mark 50000
iptables -t mangle -A PREROUTING -p udp --dport 50000 -j CONNMARK --set-mark 50000

# Make the port redirection
iptables -t nat -A PREROUTING -p udp --dport 50000 -j REDIRECT --to-port 3478

# Count the bytes with mark 50000
iptables -m connmark -t mangle -A OUTPUT -p udp --sport 3478 --mark 50000

iptables -t mangle -nvLこれにより、次のようになります。

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    4   132 CONNMARK   udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:50000 CONNMARK set 0xc350
...
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    2    66            udp  --  *      *       0.0.0.0/0            0.0.0.0/0            connmark match  0xc350 udp spt:3478

説明する:

  • 実際のパケットにUDPソースポート50000ネットワークキャプチャが表示されていても、ポート-j REDIRECT50000の接続に出るすべてのパケットは一致します--sport 3478が、一致しないため、ポート50000から出るパケットを一致させるルールを作成することはできません。--sport 50000これがバグか予想される動作かわかりません(iptables 1.8.2(nf_tables)でテスト)
  • この問題を解決するには、次のものを使用できます。CONNMARKターゲットPREROUTING側で、任意の32ビット整数で接続内のすべてのパケットにタグを付け、同じタグを次のものと組み合わせます。コマックモジュール出力側に。

関連情報