iptables MASQUERADE以降のパケットをフィルタリングする方法は?

iptables MASQUERADE以降のパケットをフィルタリングする方法は?

私はDebian Buster(カーネルバージョン4.19)に基づいて複数のWANルーターを構築しようとしています。複数の「LAN側」ネットワークインターフェース(例:ラン0LAN1、...ローカルエリアネットワーク中サイズ)と複数の「WAN側」インターフェース(例:ウォン0ベイ1、...のみ窒素)。発信トラフィックを偽装するために、各 WAN 側インターフェイスを次のように設定しました。

iptables -t nat -I POSTROUTING -o wan0 -j MASQUERADE
iptables -t nat -I POSTROUTING -o wan1 -j MASQUERADE
...

今私の問題は私が見つけたものです(「tshark」パケットキャプチャを使用)。一部発信パケットは迷彩を「エスケープ」し、WAN 側インターフェイスを介して送信されます。ソースIPそれはその他これはWANインターフェイスのIPです。私は握って置くことができます一部このパケットのルール

iptables -t filter -I FORWARD -m state --state INVALID -j DROP

...しかし残念ながらそうではありません。みんなそのようなパケット。 (パケットの送信元IPウォン0合格しようとしていますベイ1.)

私の質問:パケットを調べて削除する方法はありますか?後ろにMASQUERADE作戦に合格しましたか? 「nat」テーブルのPOSTROUTING接続が「iptables」でできる最後の操作であることがわかります。nftablesまたは電子BPF

ベストアンサー1

私はこれを行う方法を見つけました。TC

ここに${ifc}含まれていない送信パケットをドロップするようにインターフェイスを設定する方法は次のとおりです。${ip}ソースアドレス大地。

h_ip=$(ip_to_hex ${ip})

tc qdisc add dev ${ifc} root handle 1: htb
tc filter add dev ${ifc} parent 1: prio 1 protocol ip basic match 'not u32( u32 '${h_ip}' 0xFFFFFFFF at 12 )' action drop

どこ:

function ip_to_hex {
        IFS='.'; read -ra AD <<< "$1"; unset IFS
        printf '0x%02x%02x%02x%02x' ${AD[0]} ${AD[1]} ${AD[2]} ${AD[3]}
}

おすすめ記事