nftablesインスツルメンテーションエラー:構文エラー、予期しないSaddr、コンマ、または「}」が必要

nftablesインスツルメンテーションエラー:構文エラー、予期しないSaddr、コンマ、または「}」が必要

接続速度メーターを追加するには、次のnftableルールがあります。

nft add rule ip filter input tcp dport @rate_limit meter syn4-meter \{ ip  saddr . tcp dport timeout 5m limit rate 20/minute \} counter accept

エラーが発生します。

Error: syntax error, unexpected saddr, expecting comma or '}'
add rule ip filter input tcp dport @rate_limit ct state new meter syn4-meter { ip saddr . tcp dport timeout 5m limit rate 20/minute } counter accept
                                                                                  ^^^^^

nftables ルールセット

table ip filter {
    chain input {
        type filter hook input priority 0; policy accept;
    }
}
table inet filter {
    set rate_limit {
        type inet_service
        size 50
    }

    chain input {
        type filter hook input priority 0; policy accept;
    }
}

最初は違いがあるかどうかを確認するためにinetエラーを追加したため、成功しませんでした。ipどんなアドバイス?

ベストアンサー1

2つの質問があります。

  • 古い nftable バージョンを使用しています。

    エラーを再現できますError: syntax error, unexpected saddr, expecting comma or '}'(Debian 9のように)。メーター(nftables wiki)提案nftables>= 0.8.1とコア>= 4.3。

    アップグレードnftables。たとえば、Debian 9 では以下を使用します。バックストレッチと移植バックストレッチと移植、いいえ駆逐艦バックポート)バージョン0.9.0-1~bpo9+1、申し訳ありません。他のディストリビューションでこれを行う方法を検索する必要があります。

  • コマンドに示されているように無効なテーブルを使用する(nftables 0.9.2を使用する場合):

    # nft add rule ip filter input tcp dport @rate_limit meter syn4-meter \{ ip  saddr . tcp dport timeout 5m limit rate 20/minute \} counter accept
    Error: No such file or directory; did you mean set ‘rate_limit’ in table inet ‘filter’?
    

    実際、多くのオブジェクトは、そのオブジェクトが宣言されているテーブルに対してローカルです。だからあなたは入ることができないWebフィルタ「名前空間」とIPフィルタ「名前空間」。これは、同じIPsetがある場合はiptables+とは異なります。ipset置くどのテーブルでも使用できます。

    これはうまくいきます(十分な新しいnftableを得た後):

    nft add rule inet filter input tcp dport @rate_limit meter syn4-meter \{ ip  saddr . tcp dport timeout 5m limit rate 20/minute \} counter accept
    

    または、デバイス定義を次に移動することもできます。IPフィルタテーブル。

おすすめ記事