![如何根据 nftables 中的时间以不同方式过滤数据包?](https://linux22.com/image/163912/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%20nftables%20%E4%B8%AD%E7%9A%84%E6%97%B6%E9%97%B4%E4%BB%A5%E4%B8%8D%E5%90%8C%E6%96%B9%E5%BC%8F%E8%BF%87%E6%BB%A4%E6%95%B0%E6%8D%AE%E5%8C%85%EF%BC%9F.png)
例如,我想在 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
}
}