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

두 가지 질문이 있습니다.

  • 너무 오래된 nftable 버전을 사용하고 있습니다.

    오류를 재현할 수 있습니다 Error: syntax error, unexpected saddr, expecting comma or '}'(Debian 9에서와 같이).미터(nftables 위키)제안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’?
    

    실제로 많은 개체가 해당 개체가 선언된 테이블에 대해 로컬입니다. 그러니 넌 들어갈 수 없어웹 필터"네임스페이스" 및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 필터테이블.

관련 정보