是否可以设置网络接口的配额并在需要时重置?
我的目的是如果达到配额(例如 500mb),则阻止来自 eth0 的出站网络流量。如果需要的话我也应该能够重置它(也许在一段冷却时间之后)。
答案1
iptables的quota
match 本来可以在专用的用户链中使用,以便能够轻松地重置它,但已经被破坏了很长一段时间(我不知道它是否已修复):只要有不相关规则的更新,它就会重置。打击一下这个吧
你可以使用:
quota2
从xtables 插件提供额外的iptables模块,这可能需要编译(通常是自动化的,例如在 Debian 上,安装 xtables-addons-dkms 会处理它,但会拉出整个编译套件,除非使用特殊功能,例如dkms mkbmdeb
(在其他系统上)构建 . deb 二进制版本)。它通过/proc/net/xt_quota/
(读取以获取配额,或写入以重置配额)完成一些交互。拥抱更新的技术并
quota
使用nftables。当使用在命名的有状态对象,它可以独立地(从其他类似对象中)重置。这是一个大致改编自的示例nftables 维基:nft add table inet quotahandling nft add quota inet quotahandling eth0output over 500 mbytes nft add chain inet quotahandling dropafterquota '{ type filter hook output priority 0; policy accept; }' nft add rule inet quotahandling dropafterquota oif eth0 quota name "eth0output" drop
这配额将匹配(因此继续执行降低)仅当达到定义的配额时,所有这一切都仅限于以太网0界面。
您可以通过以下方式列出配额:
# nft list quota inet quotahandling eth0output table inet quotahandling { quota eth0output { over 500 mbytes used 991177 bytes } }
并原子地列出并重置它:
nft reset quota inet quotahandling eth0output