应优先使用Lynis或Nessus Agent进行内核参数合规巡检,因其内置CIS/NIST基线规则、自动比对关键参数;若自研脚本,须聚焦高危项、统一输出格式、支持检查/修复双模式、强制备份与日志记录,并加入错误防护与超时机制。

直接用 Lynis 或 Nessus Agent 做内核参数合规巡检,比手写脚本更稳妥。它们内置 CIS/NIST 基线规则,能自动读取 /proc/sys/net/ 下的参数(如 net.ipv4.ip_forward、net.ipv4.tcp_syncookies),与标准值比对,不依赖人工记忆或临时执行 sysctl -a。
如果确实需要自研脚本,核心不是“查所有参数”,而是聚焦关键项、可验证、可闭环。
只检查高危且易被误改的内核网络参数
别扫描全部 500+ 个 net.* 参数。优先覆盖攻击面明确、等保/CIS 明确要求的项,例如:
-
net.ipv4.ip_forward = 0(防路由转发滥用) -
net.ipv4.conf.all.rp_filter = 1和net.ipv4.conf.default.rp_filter = 1(防 IP 欺骗) -
net.ipv4.tcp_syncookies = 1(防 SYN Flood) -
net.ipv4.conf.all.accept_redirects = 0(防恶意重定向) -
net.ipv4.icmp_echo_ignore_broadcasts = 1(防 Smurf 攻击)
脚本中用数组定义这些键名和期望值,逐条读取 /proc/sys/ 实际值并比对,避免调用 sysctl -n 多余开销。
检查逻辑必须带状态标识和证据输出
每项输出格式统一,含当前值、基线值、是否合规、验证命令,便于审计:
[FAIL] net.ipv4.ip_forward = 1 (should be 0) → check: cat /proc/sys/net/ipv4/ip_forward [OK] net.ipv4.tcp_syncookies = 1 → check: cat /proc/sys/net/ipv4/tcp_syncookies
不返回模糊文字,用 PASS/FAIL/WARN 三态标记(参考 CIS 脚本规范),禁止“疑似”“可能”类描述。
支持 --check 和 --fix 双模式,修复前强制备份
-
--check模式只读,输出结果并统计 FAIL 项数; -
--fix模式先备份原配置(如cp /etc/sysctl.conf /etc/sysctl.conf.bak.$(date +%s)),再用echo "net.ipv4.ip_forward = 0" >> /etc/sysctl.conf追加; - 最后执行
sysctl -p加载,并验证生效(cat /proc/sys/net/ipv4/ip_forward确认为 0); - 所有修改操作记录到日志,含时间戳、参数名、旧值、新值。
结果必须可归档、可通知、可回溯
- 输出文本报告存入
/var/log/audit/kernel-check_$(date +%Y%m%d).log; - 同时生成简明摘要发邮件或推送到钉钉机器人,仅在出现
FAIL时触发,附带修复命令一键复制; - 报告末尾列出本次检查覆盖的参数总数、合规率、高风险项详情,方便运维快速响应。
不复杂但容易忽略的是:脚本开头加 set -e 防止中间出错继续执行,所有路径用绝对路径,对 /proc/sys/ 的读取加超时(如 timeout 3 cat /proc/sys/...),避免挂起阻塞整个巡检。


















