防火墙规则合规性检查的核心路径是直接导出规则快照、结构化比对和变更溯源;需用iptables-save/ip6tables-save导出标准格式快照,结合-l统计视图验证生效状态,再通过awk/grep等提取结构化数据校验基线,并用auditd实现配置变更的可追溯审计。

直接导出规则快照 + 结构化比对 + 变更溯源,是检查防火墙规则合规性的核心路径。重点不在“有没有规则”,而在“规则是否准确、完整、可追溯、符合基线”。
导出完整、可审计的规则快照
用 iptables-save 和 ip6tables-save 导出机器可解析的标准格式,这是合规检查的起点:
- 导出全部 IPv4 规则(含 filter/nat/mangle/raw 表及注释):
sudo iptables-save > /etc/iptables/rules.v4 - 导出全部 IPv6 规则:
sudo ip6tables-save > /etc/iptables/rules.v6 - 如只审 filter 表(最常见):
sudo iptables-save -t filter > rules-filter.txt -
注意:输出中的
#开头行(如*filter、COMMIT)是标准语法组成部分,不可手动删除,否则无法 restore 或被解析工具误判。
生成人工可读的统计视图辅助判断
iptables -L -v -n --line-numbers 提供带包/字节计数、行号和目标动作的列表,用于验证规则是否真实生效、是否存在顺序遮蔽问题:
- 查看 INPUT 链全量详情:
sudo iptables -L INPUT -v -n --line-numbers - 快速定位拒绝类规则:
sudo iptables -L INPUT -v -n --line-numbers | grep -E "(DROP|REJECT)" - 保存为审计草稿:
sudo iptables -L -v -n --line-numbers > iptables-audit-$(date +%F).txt - 注意:该命令仅显示 filter 表主链,不包含 nat/mangle/raw 表,也不展开自定义链——适合快速核查,但不能替代 save 输出做全量比对。
提取结构化数据进行自动化合规校验
将规则转为字段明确的数据,才能对接 CIS、PCI DSS 或内部基线模板:
- 提取所有开放的 TCP 端口并去重:
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" - 确认关键端口(如 SSH)是否限制源 IP:
sudo iptables-save | grep -A2 "dport 22" | grep -q "s\|source\|src" || echo "SSH not restricted by source" - 结合 Lynis 工具自动扫描:
sudo lynis audit system --profile firewall,它会比对 CIS 基准并标注不合规项。
绑定变更行为实现可追溯审计
规则本身静态,但谁改的、何时改的、为什么改,才是合规闭环的关键:
- 用 auditd 监控防火墙配置文件变化:
sudo auditctl -w /etc/iptables/ -p wa -k iptables_config - 或监控 firewalld 配置目录:
sudo auditctl -w /etc/firewalld/ -p wa -k firewalld_config - 查变更记录:
sudo ausearch -k iptables_config | aureport -f -i - 确保 auditd 服务开机启动:
sudo systemctl enable --now auditd











