私は現在netfilter / nftables / nftをテストしています。出発点と出発するほぼすべてのデータをドロップするルールセットを作成し、ドロップされたすべてのパケットが書き込まれるようにルールを作成しました。
いつものように、おそらくそうです。私はマシンがやろうとしている最初の作業とログで見つけたものを理解していません。
... IN= OUT=enp0s3 ARP HTYPE=37 PTYPE=0x90bd OPCODE=21
~によるとこのファイル:
- Opcode 21はMARS-Grouplist-Replyを意味します。 RFCやIANAドキュメント以外には、オンラインで聞いたこともなく、それへの参照を見つけたこともありませんが、そこには説明がありません。
- HTYPE 37 は HFI ハードウェアを表します。 Opcodeのように、私はそのようなことを聞いたことがないし、オンラインで説明が見つかりません。私はそのようなハードウェアがないと確信しています。この場合、ネットワークハードウェアはQEMUの仮想NICです。
- PTYPE 0x90bd:今日調査中にプロトコルタイプのリストを見つけましたが、残念ながらどこにいるのか覚えていません。しかし、とにかくそこには0x90bdへの言及はまったくありません。
opcode、ハードウェアタイプ、プロトコルタイプが何を意味するのか、そして問題のシステムがなぜそのようなパケットを送信しようとしているのかを説明できますか?
これは、仮想化された標準のx64 Intelハードウェアとvirtio NICを搭載した仮想マシンにデフォルトのDebian Bullseyeインストール(作成時に最新)で発生します。
答え1
これはNetfilterのARPログにあるバグです。
一つあるエラーレポートこの問題について。我々は、ARPがロギングに正しいデータを使用していないことを発見しました(ARP用のネットワーク層データではなく、リンク層ヘッダーのデータを使用していました)。 ㅏこの問題を解決するためのパッチが提供されています。数日後、カーネル5.19で:
netfilter:nf_log: ネットワークヘッダーの無効なオフセット
NFPROTO_ARP は、ネットワークオフセットで ARP ヘッダーを見つけることを期待します。
ARPの特定の場合、HTYPE =フィールドはイーサネットヘッダーの宛先MACアドレスの最初のバイトを示します。
netdev out: IN= OUT=bridge0 MACSRC=c2:76:e5:71:e1:de MACDST=36:b0:4a:e2:72:ea MACPROTO=0806 ARP HTYPE=14000 PTYPE=0x4ae2 OPCODE=49782
NFPROTO_NETDEV 送信フックもネットワーク オフセットで IP ヘッダーを見つけることを期待しています。
修正: 35b9395104d5("netfilter: 一般 ARP パケットロガーを追加")
報告者: Tom Yan
署名者: Pablo Neira Ayuso
この修正はデフォルトのカーネル5.10にバックポートされていないようです。パッチするファイルがまだ別の場所に統合されていないため、別の場所にあるか、バックポートが原因でパッチが欠落している可能性があります。
修正後(例:バニラ2017年5月19日):
ah = skb_header_pointer(skb, nhoff, sizeof(_arph), &_arph);
変更されていない場合(例:オリジナルバージョン5.10.174、パッチが適用されない限り、Debian Bullseyeを含む):
ah = skb_header_pointer(skb, 0, sizeof(_arph), &_arph);
誰かがこれについてバグレポートを提出する必要があります。その間、Bullseye-backportsカーネルを試すことができます(例:現在:6.1.12-1~bpo11+1)再び持っていないことを保証します。
現在、Bullseyeカーネル(5.10.162)でテストされています。ただARPを記録してください。
table arp t {
chain cout {
type filter hook output priority filter; policy accept;
log
}
}
HTYPE=65535
このエラーは、パッチで説明されているようにブロードキャストMACアドレスの先頭を誤って使用しているため、LANに存在しないIPアドレスにアクセスしようとしたときに記録されます。
パッケージログのカーネルに対してもlinux-image-6.1.0-0.deb11.5-amd64-unsigned
同じテストを実行する必要があります。HTYPE=1