conntrack を使用して、不明な MAC アドレスからの着信 iptables 要求をマーク 99 でマークするにはどうすればよいですか

conntrack を使用して、不明な MAC アドレスからの着信 iptables 要求をマーク 99 でマークするにはどうすればよいですか

私は何年もの間、問題なく iptables ルールを実行してきましたが、次の方法ですべての信頼できる MAC のアクセスを許可した後、

/sbin/iptables -A INPUT -m mac --mac-source $MAC -j ACCEPT
/sbin/iptables -A FORWARD -m mac --mac-source $MAC -j ACCEPT

次のような他の MAC アドレスをマークしようとしています:

/sbin/iptables -A PREROUTING -t mangle -i $INT_DEV -p tcp --dport 80 -j MARK --set-mark 99

しかし、今そのアドレスを読み取ろうとすると、
conntrack -L | grep "src=10.1.1.234"
未知の10.1.1.234フリーローダーがどこにも見当たりません...
それでも、iptablesでフリーローダーをログインページに誘導し続けたいのですが、

/sbin/iptables -t filter -A FORWARD -m mark --mark 99 -j DROP```  
And obviously it doesn't work because I can't even see it from my conntrack listing.  
What am I doing wrong here..?

答え1

違いはパケットマーク、別名マークファイアウォールマークまたはマーク、そしてconntrackエントリマーク、別名ctmark接続マークまたはコネマーク: 前者はパケットのスクバフ後者はconntrack エントリ明確なiptables マット-チェスそしてタール-取得両方について、方法を含めパケットのマークを接続エントリに渡すまたは接続エントリからパケットまで

ここではこのマークを使う必要はありません接続トラックこの場合、はconntrack -L単にドロップされたパケットを表示する適切なツールではありません (最後の段落を参照)。iptables-nftバリアントを使用する場合、デバッグの目的でマークされたパケットを確認する最も簡単な方法は ( を使用するだけでは-j LOGパケットのマークがログに追加されます)、それらをトレースし、 を使用してxtables-monitor --traceその運命を表示することです (iptables-legacyはこれをカーネル ログに送信し、簡単にログがいっぱいになる可能性があります。また、ネットワーク名前空間ではうまく動作しません。これは、-legacy と -nft バリアント間のまれな非互換性の変更です)。

考えられる例を 1 つ挙げます。

iptables -A PREROUTING -t mangle -i $INT_DEV -p tcp --dport 80 -j MARK --set-mark 99
iptables -A PREROUTING -t mangle -m mark --mark 99 -j TRACE

[...]

iptables -A FORWARD -m mark --mark 99 -j DROP

-j TRACEとの間のすべてのマークされたパケットの詳細な運命-j DROP(または、-j ACCEPTこれらの選択された少数のパケットに対するすべてのそれ以降の処理) は、次のように非常に冗長に追跡できます。

xtables-monitor --trace

冗長性を制限するには、次のようにルールを変更して、新しいフローを開始するパケットのみをトレースできますTRACE

iptables -A PREROUTING -t mangle -m mark --mark 99 -m conntrack --ctstate NEW -j TRACE

さらに、このようなフローの最初のパケットは、接続トラックエントリ(マークがなくても)は、通常、イベントモードで表示されますconntrack -E -p tcp --dport 80。しかし、このパケットがドロップされると、暫定的なconntrackエントリは決して表示されません。確認済みそして、イベントは で利用できなくなりますconntrack。 コマンドでは非表示になりますがconntrack、ドロップされる前は を使用したルール内では表示されます-m conntrack --ctproto tcp --ctorigdstport 80。それ以降の再試行は、パケットがドロップされたなどの理由で確認されない暫定エントリを作成する最初のパケットになります。

したがって、conntrack最初のパケットがドロップされなかったフローを表示する場合にのみ使用できます。それ以外の場合は、利用可能なフローはありません。

関連情報