是否可以为网络接口设置配额?

是否可以为网络接口设置配额?

是否可以设置网络接口的配额并在需要时重置?

我的目的是如果达到配额(例如 500mb),则阻止来自 eth0 的出站网络流量。如果需要的话我也应该能够重置它(也许在一段冷却时间之后)。

答案1

iptablesquotamatch 本来可以在专用的用户链中使用,以便能够轻松地重置它,但已经被破坏了很长一段时间(我不知道它是否已修复):只要有不相关规则的更新,它就会重置。打击一下这个吧

你可以使用:

  • quota2xtables 插件提供额外的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
    

相关内容