nftables 通过命名 set 的 timeout 机制实现自动回收的临时运维权限:创建带超时的地址集,规则长期存在,IP 元素自动过期删除,配合日志审计与默认 drop 策略保障安全。

用 nftables 的 timeout 机制实现临时运维绿色通道,关键是把“可过期的 IP 权限”从规则本身剥离,转而交给命名 set 中的元素来承载。规则长期存在,IP 元素自动消失,无需人工干预清理。
创建支持超时的命名地址集
timeout 功能只对命名 set 生效,且必须显式声明超时能力:
- 执行命令创建 IPv4 地址集:nft add set inet filter temp_admin_ips { type ipv4_addr; timeout 15m; }
- 推荐使用 inet 协议族,兼顾未来 IPv6 扩展;若仅需 IPv4,可用 ip,但不建议
- 超时单位支持 s(秒)、m(分)、h(小时)、d(天),例如 timeout 30s 或 timeout 2h
在 INPUT 链中引用该集合放行
添加一条静态规则,匹配命中集合的源 IP 即放行:
- 命令示例:nft add rule inet filter input ip saddr @temp_admin_ips accept
- 这条规则永不超时,但其中每个 IP 元素独立倒计时;超时后自动从集合中移除,后续流量按默认策略(如 drop)处理
- 如需限制端口范围,可在 accept 后追加条件,例如:tcp dport { 22, 8080 }
动态添加带时效的运维 IP
运维人员只需执行一条命令即可开通权限,系统自动回收:
- 单个添加:nft add element inet filter temp_admin_ips { 203.0.113.45 timeout 10m }
- 批量添加(逗号分隔):nft add element inet filter temp_admin_ips { 203.0.113.45 timeout 10m, 2001:db8::1 timeout 20m }
- 查看当前有效条目及剩余时间:nft list set inet filter temp_admin_ips
- 如需提前撤销,执行删除命令:nft delete element inet filter temp_admin_ips { 203.0.113.45 }
配套加固与审计建议
仅靠 timeout 不足以满足企业安全合规要求,应叠加以下实践:
- 所有添加操作通过封装脚本执行,并写入 syslog,记录操作人、IP、生效时长、时间戳
- 结合 SSH 源地址验证或双因素认证,避免仅靠 IP 放行带来的风险
- 设置链默认策略为 drop,确保未命中集合的流量被明确拒绝
- 定期检查集合内容,确认无异常残留;可配合 cron 扫描超时异常条目并告警

















