arp saddr ip 192.168.2.1 counter accept
Nftablesファイアウォールにルールを追加したいです。以下をsudo nft -f /etc/nftables2.conf
使用して構成ファイルを読み取るとき
/etc/nftables2.conf:26:21-15: Error: syntax error, unexpected saddr
arp saddr ip 192.168.2.1 counter accept
^^^^^^
問題のテーブル:
table arp filter {
chain input {
type filter hook input priority 0; policy drop;
arp saddr ip 192.168.2.1 counter accept
}
chain output {
type filter hook input priority 0; policy accept;
}
}
私はそれを修正することはできません。最初は別のIPを試してからsaddr ether <MAC of device>
IPアドレスの代わりに同じIPアドレスを試しましたが、結果は同じでした。私は最新のRaspberry Piオペレーティングシステムでnftablesバージョン0.9.0を使用しています。誰かが私が間違っている場所を指摘できますか?少し迷子になりました。お時間をいただきありがとうございます。
答え1
あなたのルールセットが正しいです。しかし、あなたのnftablesバージョンが少し転がりましたね。以下はあなたの例を含む発表です。
こんにちは!
Netfilterプロジェクトは以下を誇りに思っています:
nftables 0.9.1
このリリースには修正と新機能が含まれており、Linuxカーネル> = 5.2で利用可能です。
[...]
たとえば、ARP 送信者と宛先 IPv4 アドレスが一致します。
table arp x { chain y { type filter hook input priority filter; policy accept; arp saddr ip 192.168.2.1 counter packets 1 bytes 46 } }
これにより、192.168.2.1 アドレスで発生する ARP パケットのルールカウンタが更新されます。
したがって、カーネル> = 5.2が必要かもしれませんが(わかりません)、nftables> = 0.9.1が必要です。
カーネルの場合:https://www.raspberrypi.org/software/operating-systems/Raspberry Piオペレーティングシステムは現在、カーネル5.10.xに付属しているように見えるので、これは議論の余地があります。
~のためnftablesバージョンですが、一般的に推奨されない、以下を試すことができます。駆逐艦バックポート更新版を入手nftables、現在0.9.6。これがRPiに適していないと判断した場合(Debian)、ソースからバックポートされたパッケージを再コンパイルする必要があります。
注:Wikiは少し遅れており、必ずしも完全に正確ではない可能性があります。もちろん、機能があれば、マニュアルページは通常より正確になります。たとえば、
バスターバージョン 0.9.0:
arp [ARPヘッダフィールド]
比較的駆逐艦バックポート'バージョン0.9.6:
arp {htype | ptype | hlen | plen | operation | saddr { ip | ether } | daddr { ip | ether }
簡単なケース(および追加の困難)に対するソリューション
本当に変えられないならnftablesこのような単純なケースでは、次のものを使用できます。元の荷重表現逆に、ARPプロトコルに精通している、このプロトコルはイーサネットおよびIPv4でのみ使用されるわけではないため、イーサネットを介した一般的なIPv4の使用で常に一定に保たれるいくつかの共通部分があります(例:hlen = 6、plen = 4)。
とにかく、私はトリックを書き、nftables 0.9.0を使用して作業ルールセットを再読み込みし、それを生のペイロードとしてマークし、10進数の出力を16進数に変換しました(ペイロードオフセットと長さを除く)。
table arp filter {
chain input {
type filter hook input priority 0; policy drop;
@nh,112,32 0xc0a80201 counter accept
}
chain output {
type filter hook input priority 0; policy accept;
}
}
ウィキペディアの次のリンクでは、簡単に読むことができます。
オフセット112(ビット単位)はオフセット14(バイト単位)です。つまり、送信者はプロトコルアドレスです
saddr ip
。長さ32ビット:IPv4アドレス長
0xc0a80201 は 192.168.2.1 を意味します。