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_ADMIN
Linux の機能により、カウンターの読み取りが可能になるようです。
たとえば、次のようにして非ルートユーザーのシェルを起動します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
正常に実行されます。
ただし、ファイアウォール ルールの変更、新しいカウンターの追加、既存のカウンターの削除など、他の操作も実行できます。