CVE漏洞定期自动扫描服务器巡检脚本制作教程

很多站长和运维人员都会有这样的需求:定期检查服务器是否存在已知CVE漏洞,但每次手动扫描既繁琐又容易遗忘。
本文教你编写一个简单的Shell脚本,配合crontab定时任务,实现CVE漏洞定期自动扫描并记录结果。
整个过程完全免费,使用Nmap的漏洞检测脚本即可完成,零基础也能跟着操作。

第一步:安装Nmap和漏洞检测脚本

Nmap本身不包含全部CVE检测脚本,需要额外安装nmap-vulscan或使用内置的--script vuln参数。
推荐安装nmap-vulscan,覆盖CVE更全。

Debian/Ubuntu系统

sudo apt update
sudo apt install nmap
sudo git clone https://github.com/scipag/vulscan /usr/share/nmap/scripts/vulscan

CentOS/RHEL系统

sudo yum install nmap
sudo git clone https://github.com/scipag/vulscan /usr/share/nmap/scripts/vulscan

安装后在终端执行 nmap --script-updatedb 更新漏洞指纹库。
验证安装是否成功:

nmap -sV --script vulscan localhost | head -20

如果出现漏洞扫描结果相关的输出,说明工具就绪。

第二步:编写自动扫描脚本

创建一个shell脚本文件,比如cve_scan.sh,内容分三部分:扫描目标、结果存储、清理旧日志。

#!/bin/bash
# CVE漏洞定期自动扫描脚本 - 请按实际修改

# 扫描目标:可以是IP或域名,多个用空格分隔
TARGETS="your.server.ip 127.0.0.1"

# 结果存放目录
OUTPUT_DIR="/var/log/cve_scans"
mkdir -p "$OUTPUT_DIR"

# 生成日期标签
DATE_TAG=$(date +%Y%m%d_%H%M%S)
OUTPUT_FILE="$OUTPUT_DIR/scan_$DATE_TAG.txt"

# 执行扫描(仅常见端口,可通过参数调整)
nmap -sV --script vulscan -p 80,443,22,3306,21,8080 $TARGETS > "$OUTPUT_FILE" 2>&1

# 清理超过30天的旧日志
find "$OUTPUT_DIR" -name "scan_*.txt" -mtime +30 -delete

echo "扫描完成,结果保存在 $OUTPUT_FILE"

保存后执行 chmod +x cve_scan.sh 赋予执行权限。
可以先手动运行一次测试:

./cve_scan.sh

确认没有报错,并检查生成的日志文件内容是否包含类似 CVE- 的信息。

第三步:设置crontab定时任务

使用crontab -e编辑当前用户的计划任务,添加以下行实现每周日凌晨3点自动扫描:

0 3 * * 0 /path/to/cve_scan.sh
  • 0 3 * * 0 表示每周日凌晨3点
  • 路径建议写绝对路径,例如 /home/admin/cve_scan.sh

添加后检查格式:crontab -l 应显示刚才添加的行。
重启cron服务(sudo systemctl restart cron 或 sudo systemctl restart crond)。

避坑指南:四个常见问题

  1. 扫描时间过长:如果扫描全网端口,单台服务器也可能耗时数小时。建议只扫描Web常用端口(80,443等),或使用 -T4 提高速度。在脚本中调整 -p 参数即可。
  2. 权限不足:Nmap扫描需要root权限才能发送原始包。如果使用普通用户,要么用sudo执行(脚本前加sudo),要么将用户加入nmap组(不推荐)。建议直接以root身份执行任务或设置sudo免密。
  3. 脚本路径错误:crontab中的命令路径必须用绝对路径,否则可能找不到脚本。
  4. 结果文件过大:长时间积累会占用磁盘,脚本中已包含 -mtime +30 -delete 自动清理30天前的记录,可根据需求调整天数。

效果验证:如何确认扫描正常

  • 执行 crontab -l 确认任务存在。
  • 等待计划时间或手动执行脚本,检查 /var/log/cve_scans/ 下是否生成以 scan_ 开头的文件。
  • 打开最新日志文件,搜索 CVE- 关键字,确认出现漏洞条目。
  • 如果需要接收邮件通知,可以在脚本末尾添加 mail -s "CVE扫描结果" admin@example.com < "$OUTPUT_FILE"(需安装mailutils)。

常见问题解答

Q:扫描结果没有发现任何CVE漏洞,是配置错了吗?
A:新系统或经过加固的服务器确实可能无明显漏洞。可以先扫描一个已知有风险的IP(比如测试靶机)验证工具本身是否正常工作。

Q:扫描过程中卡住很久怎么办?
A:通常是因为Nmap正在处理慢速端口。可以按下Ctrl+C终止,然后调整脚本中的 --host-timeout 600s 限制每个主机最多扫描10分钟。

Q:不想用Nmap,有更轻量的方案吗?
A:也可以使用 dism(Debian)或 yum security updates 检查系统补丁,但无法覆盖应用层的CVE。建议将本脚本作为定期安全巡检的补充。

如果你正在搭建自己的CVE漏洞自动扫描巡检系统,建议先在小规模环境测试本脚本,确认扫描策略和输出格式符合需求后再部署到生产服务器。
根据实际节点数量调整定时频率和端口范围,避免因扫描压力影响业务。
遇到其他问题欢迎留言交流。

分享到:
上一篇
Ollama离线模型包无网络住宅主机部署
下一篇
swap分区一键扩容脚本缓解频繁OOM报错
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意