nftables は非ルートユーザーとしてカウンターを読み取ります

nftables は非ルートユーザーとしてカウンターを読み取ります

nftables を使用してファイアウォール ルールをいくつか設定しました。それらには、監視したいトラフィックの種類に応じたデータ カウンターが含まれています。

さて、アプリケーションでこれらのカウンターを読み取れるようにしたいのですが、理想的にはlibnftnl、非ルート ユーザーとして実行しています。ただし、初期テストでは、nft非ルート ユーザーとして nftables カウンターを読み取ることができないことが示されています。

ルートとして:

$ nft list counter my_table my_counter
table ip my_table {
    counter my_counter {
        packets 123 bytes 12345
    }
}

非ルートの場合:

$ nft list counter my_table my_counter
Error: No such file or directory
list counter my_table my_counter
             ^^^^^^^^

非ルートユーザーとしてnftablesカウンターを読む方法はありますか?Linuxの機能設定されていますか?

答え1

より制限された設定が必要な場合は、sudo を使用するとよいでしょう。単一のコマンドのみを許可するルールを設定できます。

craig_mcqueen ALL = NOPASSWD: /usr/sbin/nft リストカウンタ my_table my_counter

答え2

CAP_NET_ADMINLinux の機能により、カウンターの読み取りが可能になるようです。

たとえば、次のようにして非ルートユーザーのシェルを起動しますCAP_NET_ADMIN

capsh --caps="cap_net_admin+eip cap_setpcap,cap_setuid,cap_setgid+ep" --keep=1 --user=myuser --addamb=cap_net_admin -- -c "sh"

そのシェルから、/usr/sbin/nft list counter my_table my_counter正常に実行されます。

ただし、ファイアウォール ルールの変更、新しいカウンターの追加、既存のカウンターの削除など、他の操作も実行できます。

関連情報