链首插入应急阻断策略需先查首条规则handle再position插入,或空链时add rule;必须确保链为带hook的基链,禁用jump/goto,推荐加counter和comment。

nft insert 用于在链中指定位置插入规则,若要实现“链首插入应急阻断策略”,核心是把一条高优先级的 drop 或 reject 规则放在链最前面,确保它最先匹配、立即生效,绕过后续放行规则。
明确插入位置和语法结构
nftables 不支持类似 iptables 的 -I(insert)编号式插入,而是通过 handle 定位。要在链首插入,需先查出链中第一条规则的 handle,再在其前插入;若链为空,则直接 add rule 即可视为“首条”。实际操作分两步:
- 用
nft list chain inet filter input -n查看带 handle 编号的规则列表(-n 显示数字 handle) - 若存在 handle 为 10 的第一条规则,执行:
nft insert rule inet filter input position 10 drop comment "EMERGENCY BLOCK ALL" - 若链为空,
nft add rule inet filter input counter drop comment "EMERGENCY BLOCK ALL"即为事实上的链首
确保策略真正“首执行”的关键细节
仅靠 insert 不足以保证万无一失,还需注意三点:
- 链本身必须已存在且为基链(base chain),例如
input链需带 hook、type、priority,否则规则无法挂载到网络路径上 - 避免使用
jump或goto跳转到其他链——应急策略必须直击主链,防止被跳过 - 建议搭配
counter和comment,便于快速验证命中数和识别用途:counter drop comment "20260519-emergency-src-192.168.10.5"
典型应急场景:按源 IP 瞬时封禁
比如发现某个 IP(192.168.10.5)正在暴力扫描 SSH,需秒级阻断:
- 先确认当前 input 链 handle 情况:
nft list chain inet filter input -n | head -5 - 假设返回首条规则 handle 是 12,则运行:
nft insert rule inet filter input position 12 ip saddr 192.168.10.5 drop comment "BLOCK BRUTE FORCE" - 验证是否生效:
nft list chain inet filter input -a(-a 显示 handle)并检查计数器是否增长
撤回应急策略的操作方式
插入的规则有唯一 handle,删除时不依赖内容,只认 handle:
- 查 handle:
nft list chain inet filter input -a | grep -A1 "BLOCK BRUTE FORCE" - 删规则(假设 handle 是 11):
nft delete rule inet filter input handle 11 - 不推荐用 flush 清空整条链——会误删其他必要规则











