如何根据 nftables 中的时间以不同方式过滤数据包?

如何根据 nftables 中的时间以不同方式过滤数据包?

例如,我想在 00:00 到 04:00 之间阻止某些流量。这在nftables中可能吗?

(显然,我可以设置一个 cron 作业来更改这些时间的配置 - 但我想知道是否有 nftables“本机”方式来实现此目的。)

答案1

最近有一些补丁可以做到这一点,但它们尚未在任何版本中提供。

以下是相关补丁(但它们是系列的一部分,它们可能不足以单独应用)。

linux内核:
[v5,2/2] netfilter: nft_meta: 支持时间匹配

libnftnl(用户态低级 nftables 库):
[libnftnl,v2,1/2] expr: 元: 让 NFT_META_TIME_{NS,DAY,HOUR} 已知

nftables(用户态命令):
[nft,2/4] 元:引入新条件“时间”、“天”和“小时”

一些用法示例:

  time < "2019-06-06 17:00" drop;
  time < "2019-06-06 17:20:20" drop;
  time < 12341234 drop;
  day "Saturday" drop;
  day 6 drop;
  hour >= 17:00 drop;
  hour >= "17:00:01" drop;
  hour >= 63000 drop;

[...]
我们交换一定范围内的左右值,以正确处理跨日时间范围(例如 23:15-03:22)。

虽然内核补丁是在2019年8月17日提交的,但它必须经过nf-下一个,网络下一个并且是合并为 5.4-rc1 于2019年9月18日。内核 5.4 可能会在几周内发布。

因此,根据上面的示例,虽然我还无法测试它,但这可能是一种在 00:00 和 04:00 之间删除与本地邮件服务器的传入连接的方法,一旦使用内核 5.4、libnftnl 1.1.5 运行?和 nftables 0.9.3?:

#!/usr/sbin/nft -f

table inet filter {
    chain input {
        type filter hook input priority 0; policy accept;
        tcp dport 25 hour 00:00-04:00 drop
    }
}

相关内容