环境:Fedora29/centos7
一、Fedora-YUM安装
安装openvas软件包及依赖。
安装redis使用定制sock进行发布订阅,从openvas8以后开始使用redis推送消息,之前用的是lua。
sqlite3是openvas的内置数据库,存储例如每一次用户扫描的id,扫描结果等等,openvas还可以支持postgresql,本文只测试sqlite3的数据库。
1 | $ sudo yum update -y |
yum安装openvas的软件包如下:
check一次
1 | openvas-check-setup --v9 |
1 | vim /etc/redis.conf |
1 | redis-server /etc/redis.conf & |
1 | openvas-check-setup --v9 |
1 | greenbone-nvt-sync |
1 | openvas-check-setup --v9 |
1 | openvassd |
1 | openvas-check-setup --v9 |
1 | rm -f /var/lib/openvas/mgr/tasks.db |
1 | greenbone-scapdata-sync |
方法二:在/var/lib/openvas/下建立两个文件夹,分别是cert-data、scap-data,然后把已经搭好的服务器上的数据copy过来,可以节省大量时间
1 | scp user@ip:/path/to/cert-data/* ./cert-data/ |
然后重建数据库:
1 | greenbone-scapdata-sync --refresh |
建立gnupg目录:
1 | mkdir -p /var/lib/openvas/openvasmd/gnupg/ |
打开openvassd
1 | openvassd |
check第五次
1 | openvas-check-setup --v9 |
1 | openvasmd --rebuild |
1 | openvasmd --create-user=admin --role=Admin |
1 | openvas-manage-certs -a |
1 | yum install gnutls-utils |
1 | gsad --listen=0.0.0.0 --port=9390 |
1 | yum install nmap |
1 | vim /etc/sysconfig/selinux |
1 | gsad --listen=0.0.0.0 --allow-header-host=openvas.cc |
1 | openssl genrsa -des3 -out openvas.key 1024 |
3650指证书有效期,建议大家填长一点。成功生成一对密钥之后,开始写nginx的配置文件。
1 | vim /etc/nginx/conf.d/openvas.conf |
nginx配置完成,但是直接启动是会报错的,因为gsad启动时会开启80端口和443端口,导致端口被占用,nginx就无法进行正常工作,于是需要在启动gsad时,加一些参数:
1 | gsad --listen=0.0.0.0 --port=9390 |
–port是指将GSA的web管理开在哪个端口上,先启动gsad,然后kill掉80和443的pid,再启动nginx,这样就可以正常启动nginx.
1 | nginx -s reload |
在host里面做一条domain-to-ip的绑定
1 | vim /etc/hosts |
访问openvas.cc,报错
根据报错,我们需要确定GSA的启动配置是否正确,查阅资料得需要在启动gsad时声明供外界访问的域名或IP,命令如下:
1 | gsad --listen=0.0.0.0 --port=9390 --allow-header-host=openvas.cc |
这样不论是本机测试,或者是局域网测试,均可以通过域名访问,需要注意的是在局域网测试时需要在本机或者路由器处,绑定openvas的IP和域名对应关系。
三、Centos-YUM安装
配置阿里源&&yum upgrade
配置atomic源, Atomic源支持Fedora,RHEL和CentOS的YUM包管理 ,相当于windows下的某软件管家一样
1 | wget -q -O - http://www.atomicorp.com/installers/atomic | sh |
安装好之后再次yum upgrade
执行完成之后开始安装openvas
1 | yum install openvas |
顺利安装完成,进行第一次检查
1 | openvas-setup |
提示需要关闭SELINUX
1 | vim /etc/sysconfig/selinux |
第二次检查
1 | openvas-setup |
启动成功,可以访问80端口进行test扫描
DEBUG问题
问题一:执行
1 | yum install openvas* |
如果上面几个仍然看不到想要的信息,那么推荐进redis里面看看,输入MONITOR,监听openvas的socket看看正在跑什么东西:
1 | redis-cli -s /var/run/redis/redis.sock |
可以看到,卡在如下界面,推测原因是正在将数据库中的东西读入redis,一般等待几分钟就会正常跑起来,
问题三:
在openvassd.log中看到如下报错
1 | lib kb:CRITICAL:2020-01-20 08h48.33 utc:14819: redis_new: cannot access redis at '/var/run/redis/redis.sock' |
但明明redis已经启动,却没有redis.sock,估计是sock地址什么的没绑定上,于是
解决方案:让它自己来!
问题四:
现象:前端启动一个任务,request之后直接变interrupted
查看gvmd.log
1 | event task:MESSAGE:2020-03-14 09h59.33 UTC:20075: Task test (83a7a580-ed5b-4378-bb59 |
查看gsad.log
1 | sd main:MESSAGE:2020-01-20 15h00.45 utc:7589: Plugin 2016/gb_disk_pulse_enterprise |
推测原因是很多nvts失效了,加载不上,于是启动更新nvt库
1 | /usr/sbin/greenbone-nvt-sync |
结果速度太慢了,难以接受,查看help里有wget选项,于是改了一下源码,给wget加上了proxy,速度很快就更新完了,然后就可以正常启动了HH。
1 | vim /usr/sbin/greenbone-nvt-sync |
最后加入crontab里每日更新即可。
问题五:nginx和gsad在80端口上的冲突
gsad进程会默认监听80和443,因此会导致nginx启动不起来,我的处理方法如下:
先关闭gsad所有进程,然后启动已经配好ssl的nginx,接着启动gsad,将开放端口放到9390,并修改配置文件,如下:
1 | vim /etc/sysconfig/gsad |
问题六:配置openvas只能通过域名访问,IP不能访问
nginx里增加如下配置,注意是增加,而不是在原有的基础上修改,不加这些配置,就无法使用ssl协议,但这样仍然有个缺点是9390对外依旧开放,暂时还没想到解决方法, 但至少IP访问被禁了。
1 | server{ |
问题六:在GSA前端操作时,点击任务开始按钮弹出“Service temporaly down”
一般排查流程为,检查gsad、gvmd、openvassd,前两个一般没有问题。第三个会出现时而卡顿的现象,关也关不掉,开也开不开,
在gvmd.log中会出现要么是“连接不到openvassd.sock”,要么是“user不能启动”
1 | md main:WARNING:2020-03-15 07h58.14 utc:23198: openvas_scanner_connect_unix: Faile |
如果尝试把三个进程都kill掉再重启还出现这种问题,最快的解决方案就是reboot。
·················debug两天
可能原因一:
启动test组正常,启动某些组就跑不动直到上面的状态,发现了一个很可能的原因,机器的硬核配置太低,某云的1核两G,如果一次置放的IP组太多,很可能导致openvassd并发数量过多卡死,于是通过调整配置再没有发现类似的情况:
启动task的时候,这里的默认配置为4和20,经过实验,建议在配置不高的机器上将这里的配置改为5和4,以上配置测试了两个200IP的task,没有出现openvassd卡死的情况.服务器内存占用也没有到警戒线.
可能原因二:
现象是gvm内存占用极多 ,通过ps -ef | grep gvmd可以看到gvmd在scaping data.