导出 iptables 规则是合规检查的第一步,需用 iptables-save/ip6tables-save 导出完整双栈规则,保留上下文与注释;辅以 -l -v -n --line-numbers 获取可读统计视图;再通过 awk/grep 提取结构化数据用于自动化比对,并结合 auditd 实现变更溯源。

导出 iptables 规则是合规检查的第一步,只有拿到完整、可读、可比对的规则快照,才能开展策略一致性、冗余性、顺序合理性等深度审计。关键不在于“能不能导出”,而在于导出的内容是否包含上下文信息(如链名、表名、计数器、注释)、是否便于版本对比、是否覆盖 IPv4/IPv6 双栈。
用 iptables-save 导出标准格式规则
这是最权威、最兼容的导出方式,输出为机器可解析的文本,保留所有表(filter/nat/mangle/raw)和链结构,且不含执行时态干扰(比如运行中临时插入的调试规则)。
- 导出 IPv4 规则到文件:sudo iptables-save > /etc/iptables/rules.v4
- 导出 IPv6 规则到文件:sudo ip6tables-save > /etc/iptables/rules.v6
- 若只需 filter 表(最常见审计范围),可加 -t 参数:sudo iptables-save -t filter > rules-filter-only.txt
注意:该命令输出含 # 开头的自动生成注释(如 *filter、COMMIT),是标准格式的一部分,不要手动删减,否则 restore 会失败。
导出带计数器和行号的可读视图
合规检查常需确认某条规则是否真实生效(有匹配流量)、是否被上层更宽泛规则拦截(顺序问题)。此时需人工可读的带统计信息的列表:
- 查看所有链详细信息(含包/字节数、目标动作):sudo iptables -L -v -n --line-numbers
- 只看 INPUT 链并高亮 DROP/REJECT 规则:sudo iptables -L INPUT -v -n --line-numbers | grep -E "(DROP|REJECT|reject|drop)"
- 将结果保存为审计报告草稿:sudo iptables -L -v -n --line-numbers > iptables-audit-$(date +%F).txt
⚠️ 注意:-L 输出不体现 raw/mangle/nat 表内容,也不显示自定义链内部结构,仅适用于快速人工核查主过滤逻辑。
提取规则用于自动化比对与策略校验
若组织已有安全基线模板(如“禁止开放高危端口”“SSH 必须限制源 IP”),可将导出规则转为结构化数据供脚本处理:
- 用 awk 提取所有 -p tcp --dport 行并排序去重:sudo iptables-save | awk '/-p tcp.*--dport/ {print $NF}' | sort -u
- 检查是否启用日志规则(合规常要求记录拒绝行为):sudo iptables-save | grep -q ':LOG' && echo "LOG chain defined" || echo "Missing logging policy"
- 导出时加入时间戳和主机标识,方便归档追踪:echo "# $(hostname) - $(date -I) - iptables-save" | cat - audit-rules-$(date +%Y%m%d-%H%M).v4
配合 auditd 记录规则变更行为
光导出静态规则不够——合规审计还要求“谁在何时改了哪条规则”。iptables 本身不记操作日志,需依赖系统审计子系统:
- 添加审计规则监控 iptables 二进制调用:sudo auditctl -w /sbin/iptables -p x -k iptables-exec
- 查询最近 24 小时的 iptables 修改记录:sudo ausearch -k iptables-exec --start today | aureport -f -i
- 将 auditd 日志与规则快照关联,形成“变更—快照—原因”闭环证据链。











