返回首页

OpenVAS免费替代方案:本地搭建企业级漏洞扫描平台全指南

企业每年在漏洞扫描工具上的投入是惊人的。 Professional 年费约 $3,990,Tenable.io 按资产计费,100个资产年费超过 $5,000。对于中小企业和独立安全团队来说,这笔费用完全可以省掉—— Vulnerability (GVM) + 是完全免费且功能对等的方案。

定价对比

项目 Nessus Professional Tenable.io Greenbone/OpenVAS
年费 $3,990 $5,000+(100资产) 免费
漏洞库 190,000+ 190,000+ 110,000+(社区版)
扫描引擎 闭源 闭源 开源
报告导出 PDF/CSV/HTML 全格式 PDF/CSV/XML
资产管理 有限 完整 完整
支持 有限 完整 完整(GMP协议)

Greenbone 社区版的漏洞库虽然比商业版少,但覆盖了99%的常见漏洞,且每日自动更新。

架构说明

GVM 由以下组件构成:

  • gvmd: 主守护进程,管理扫描任务、用户、配置
  • openvas-scanner: 实际执行漏洞扫描的引擎
  • gsad: Web管理界面(Greenbone Assistant)
  • ospd-openvas: scanner与gvmd之间的通信桥梁
  • PostgreSQL: 存储扫描结果和配置
  • Redis: 缓存和消息队列

完整安装步骤(Ubuntu 22.04/24.04)

方式一:Docker一键部署(推荐)

# 安装Docker
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker

# 拉取官方镜像
docker pull greenbone/gvm:latest

# 创建数据目录
mkdir -p /opt/gvm-/{data-sockets,var-lib,,gnupg}

# 启动容器
docker run -d \
  --name gvm \
  -p 8080:8080 \
  -p 5432:5432 \
  -v /opt/gvm-data/var-lib:/var/lib/gvm \
  -v /opt/gvm-data/data-sockets:/run/ospd \
  -v /opt/gvm-data/ssh:/etc/ssh \
  -v /opt/gvm-data/gnupg:/etc/gnupg \
  greenbone/gvm:latest

# 等待初始化完成(首次需要下载漏洞库,约10-20分钟)
docker logs -f gvm

# 访问 https://localhost:8080
# 默认账号: admin / admin

方式二:源码编译安装(生产环境推荐)

# 系统准备
  && apt  -y
apt install -y \
  gcc cmake pkg-config \
  libglib2.0-dev libgnutls28-dev libpq-dev \
  libssh-dev libxml2-dev libical-dev libgcrypt20-dev \
  libgpgme-dev libhiredis-dev libradcli-dev \
  libksba-dev libsnmp-dev libnet1-dev \
  libpopt-dev libldap2-dev \
  redis-server postgresql postgresql-contrib \
  python3 python3-pip python3-dev python3-setuptools \
  python3-psutil python3-gmpy2 python3-lxml \
  xmlstarlet texlive-fonts-recommended texlive-latex-extra \
  wget curl git nmap nsis zip unzip

# 创建gvm用户
useradd -r -M -U -d /opt/gvm -s /usr/sbin/nologin gvm

# 配置PostgreSQL
sudo -u postgres createuser gvm
sudo -u postgres createdb -O gvm gvmd
sudo -u postgres psql -c "ALTER USER gvm WITH SUPERUSER;"

# 配置Redis
cat > /etc/redis/redis-openvas.conf << 'EOF'
port 0
unixsocket /run/redis-openvas/redis.sock
unixsocketperm 770
loglevel notice
databases 128
maxmemory 512mb
maxmemory-policy allkeys-lru
save ""
EOF

mkdir -p /run/redis-openvas
chown redis:gvm /run/redis-openvas
usermod -aG gvm redis

# 编译安装各组件(按顺序)
export INSTALL_PREFIX=/usr/local
export SOURCE_DIR=/opt/gvm-source
mkdir -p $SOURCE_DIR

# 1. GVM-libs
cd $SOURCE_DIR
wget https://github.com/greenbone/gvm-libs/archive/refs/tags/v22.7.0.tar.gz
tar xzf v22.7.0.tar.gz && cd gvm-libs-22.7.0
cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
  -DSYSCONFDIR=/etc -DLOCALSTATEDIR=/var
make -j$(nproc) && make install

# 2. OpenVAS Scanner
cd $SOURCE_DIR
wget https://github.com/greenbone/openvas-scanner/archive/refs/tags/v22.7.1.tar.gz
tar xzf v22.7.1.tar.gz && cd openvas-scanner-22.7.1
cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
  -DSYSCONFDIR=/etc -DLOCALSTATEDIR=/var
make -j$(nproc) && make install

# 3. OSPD-OpenVAS
cd $SOURCE_DIR
wget https://github.com/greenbone/ospd-openvas/archive/refs/tags/v22.6.0.tar.gz
tar xzf v22.6.0.tar.gz && cd ospd-openvas-22.6.0
pip3 install . --prefix=$INSTALL_PREFIX --break--packages

# 4. gvmd
cd $SOURCE_DIR
wget https://github.com/greenbone/gvmd/archive/refs/tags/v23.0.0.tar.gz
tar xzf v23.0.0.tar.gz && cd gvmd-23.0.0
cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
  -DSYSCONFDIR=/etc -DLOCALSTATEDIR=/var
make -j$(nproc) && make install

# 5. GSA (Web UI)
cd $SOURCE_DIR
wget https://github.com/greenbone/gsa/archive/refs/tags/v23.0.0.tar.gz
tar xzf v23.0.0.tar.gz && cd gsa-23.0.0
cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
  -DSYSCONFDIR=/etc -DLOCALSTATEDIR=/var
make -j$(nproc) && make install

# 6. 下载漏洞库(Feed同步)
greenbone-feed-sync --type GVMD_DATA
greenbone-feed-sync --type SCAP
greenbone-feed-sync --type CERT
# 首次同步约30分钟,后续增量更新

# 创建Systemd服务
cat > /etc/systemd/system/gvmd.service << 'EOF'
[Unit]
Description=Greenbone Vulnerability Manager
After=postgresql.service redis-server.service

[Service]
Type=forking
User=gvm
Group=gvm
ExecStart=/usr/local/sbin/gvmd --osp-vt-update=/run/ospd/ospd-openvas.sock
Restart=always

[Install]
WantedBy=multi-user.target
EOF

cat > /etc/systemd/system/openvas-scanner.service << 'EOF'
[Unit]
Description=OpenVAS Scanner
After=redis-server.service

[Service]
Type=simple
User=gvm
Group=gvm
ExecStart=/usr/local/bin/ospd-openvas \
  --config /etc/ospd/ospd-openvas.conf \
  --log-file /var/log/gvm/ospd-openvas.log \
  --unix-socket /run/ospd/ospd-openvas.sock
Restart=always

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now gvmd openvas-scanner

配置详解

创建管理员用户

# 创建超级管理员
gvmd --create-user=admin --password=admin123 --role=Super
# 或修改密码
gvmd --user=admin ---password=admin123

# 获取管理员UUID(后续配置需要)
gvmd --get-users --verbose | grep admin

配置扫描目标

# 通过GMP协议命令行操作
# 创建目标
gvm- --gmp-username admin --gmp-password admin123 \
  socket --socketpath /run/gvmd/gvmd.sock \
  --xml "<create_target><name>Production Network</name><hosts>192.168.1.0/24</hosts></create_target>"

# 创建扫描任务
TARGET_ID="<从上面命令返回获取>"
gvm-cli --gmp-username admin --gmp-password admin123 \
  socket --socketpath /run/gvmd/gvmd.sock \
  --xml "<create_task><name>Full Scan</name><target id='$TARGET_ID'/></create_task>"

Web界面操作流程

  1. 浏览器访问 https://localhost:8080(自签名证书,确认例外)
  2. 用 admin 账号登录
  3. Configuration → Targets → 新建目标,填写IP范围、端口列表、SSH凭证
  4. Scans → Tasks → 新建任务,选择目标和扫描策略
  5. Full and 是最常用的策略,覆盖95%的漏洞检测
  6. 点击开始按钮启动扫描

实战案例:扫描内网服务器

场景:扫描DMZ区Web服务器集群

# 创建专用扫描配置(只扫描Web相关端口)
gvm-cli --gmp-username admin --gmp-password admin123 \
  socket --socketpath /run/gvmd/gvmd.sock \
  --xml '<create_target>
    <name>DMZ Web Servers</name>
    <hosts>10.0.2.10,10.0.2.11,10.0.2.12</hosts>
    <port_list id="33d0cd82-57c6-11e1-8ed1-406186ea4fc5"/>
  </create_target>'

# 使用"Full and Fast Ultimate"策略(策略ID可以通过Web UI获取)
# 启动扫描任务

# 查看扫描进度
gvm-cli --gmp-username admin --gmp-password admin123 \
  socket --socketpath /run/gvmd/gvmd.sock \
  --xml "<get_tasks/>" | grep -oP 'progress="[^"]*"'

# 扫描完成后导出报告
gvm-cli --gmp-username admin --gmp-password admin123 \
  socket --socketpath /run/gvmd/gvmd.sock \
  --xml '<get_reports report_id="REPORT_ID" format_id="c402cc3e-b531-11e1-9163-406186ea4fc5"/>' \
  > /tmp/scan_report.pdf

自动化定期扫描脚本

cat > /opt/gvm-auto-scan.sh << 'SCRIPT'
#!/bin/bash
GMP_USER="admin"
GMP_PASS="admin123"
SOCKET="/run/gvmd/gvmd.sock"
TARGET_ID="target-uuid-here"

# 启动扫描
TASK_ID=$(gvm-cli --gmp-username $GMP_USER --gmp-password $GMP_PASS \
  socket --socketpath $SOCKET \
  --xml "<create_task><name>Auto-$(date +%Y%m%d)</name><target id='$TARGET_ID'/></create_task>" \
  | grep -oP 'id="[^"]*"' | head -1 | tr -d 'id="')

# 等待完成
while true; do
  STATUS=$(gvm-cli --gmp-username $GMP_USER --gmp-password $GMP_PASS \
    socket --socketpath $SOCKET \
    --xml "<get_tasks task_id='$TASK_ID'/>" | grep -oP 'status="[^"]*"' | head -1)
  echo "$(date): Status=$STATUS"
  [[ "$STATUS" == "status=\"Done\"" ]] && break
  sleep 60
done

# 导出CSV报告
REPORT_ID=$(gvm-cli --gmp-username $GMP_USER --gmp-password $GMP_PASS \
  socket --socketpath $SOCKET \
  --xml "<get_tasks task_id='$TASK_ID'/>" | grep -oP 'report id="[^"]*"' | head -1)

echo "Scan complete. Report: $REPORT_ID"
SCRIPT

chmod +x /opt/gvm-auto-scan.sh
# 加入crontab每周日2点执行
echo "0 2 * * 0 /opt/gvm-auto-scan.sh >> /var/log/gvm-scan.log 2>&1" | crontab -

性能调优

# /etc/openvas/openvas.conf 优化
cat >> /etc/openvas/openvas.conf << 'EOF'
max_hosts=30
max_checks=10
network_timeout=5
plugins_timeout=320
safe_checks=yes
optimize_test=yes
non_simult_ports=139, 445
EOF

# PostgreSQL优化
cat >> /etc/postgresql/14/main/postgresql.conf << 'EOF'
shared_buffers=512MB
work_mem=16MB
maintenance_work_mem=256MB
effective_cache_size=1536MB
EOF

systemctl restart postgresql

功能对比表

功能 Nessus Pro Greenbone/OpenVAS
覆盖 99.9% 95%+
扫描速度 中等(可调优)
Web界面 简洁 功能丰富
API REST GMP/XML over Socket
凭证扫描 支持 支持
合规扫描 PCI-DSS/HIPAA等 基础支持
报告定制 灵活 灵活(XSLT模板)
资产管理 内置 内置
告警通知 邮件/Webhook 邮件/SCP/SMB
多用户 支持 支持(RBAC)
价格 $3,990/年 免费

常见问题

Q: OpenVAS扫描结果误报率高怎么办? A: 在扫描配置中启用"Safe Checks",并使用凭证扫描(authenticated scan)可以大幅降低误报。

Q: 如何扫描外网资产? A: 在防火墙上开放Scanner到目标的端口,或部署远程Sensor。GVM支持多Sensor架构。

Q: 漏洞库更新频率? A: 社区Feed每日更新。商业Feed(Greenbone购买)更新更及时且覆盖面更广,但社区版足以应对99%的场景。

对于一个年预算有限的安全团队来说,OpenVAS + GVM 的组合完全能满足漏洞管理需求。唯一的成本是服务器资源和运维人员的学习时间。把省下的 $4,000 拿去加固基础设施,比买扫描工具更实在。

评论