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
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意