nftablesエラー:構文エラー、予期しないSaddr

nftablesエラー:構文エラー、予期しないSaddr

arp saddr ip 192.168.2.1 counter acceptNftablesファイアウォールにルールを追加したいです。以下を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バージョンが少し転がりましたね。以下はあなたの例を含む発表です。

[お知らせ] nftables 0.9.1 リリース:

こんにちは!

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 [ARPヘッダフィールド]

比較的駆逐艦バックポート'バージョン0.9.6:

ARPヘッダー表現

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 を意味します。

おすすめ記事