nmap 是一个开源的网络探测和安全审核工具,它用于发现网络上的设备,检测开放的端口,确定运行在网络设备上的服务及其版本信息,以及检测潜在的安全漏洞。
通常情况下,我们只在命令行中使用 nmap 命令,而它的结果也只能保存在文本文件中,显示效果不太友好。
下面我们利用Grafana通过大屏展示nmap的结果,让老板们刮目相看,如下图:
我们准备一个全新的环境,安装nmap和Grafana,以便各位同学动手操作。
1. 测试环境
操作系统:CentOS7.6
关闭防火墙和SELinux;
配置阿里YUM源:
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.1 配置转发
配置转发后,才可以通过宿主机指定端口访问到Docker中的服务;
(1)修改配置文件
vi /etc/sysctl.conf
#文档末尾添加
net.ipv4.ip_forward = 1
(2)写入内核
sysctl -p
1.2 docker安装
yum install docker-ce docker-ce-cli docker-compose -y
启动服务:
systemctl start docker
systemctl enable docker
1.3 安装依赖包
yum install wget unzip -y
2. 使用nmap
2.1 安装nmap命令
yum install nmap -y
2.2 使用nmap命令
使用nmap命令生成扫描报告,扫描整个网段,命令如下:
nmap -sV -F --script=http-title,ssl-cert -oX port.xml 192.168.10.0/24
扫描一个网段需要的时间有点长,扫描结果大致如下:
这样的结果是不适合直接查看的。
3. 格式化Nmap结果
将nmap的扫描结果格式化到 SQLite 数据包中。
3.1 下载格式化脚本
脚本地址:
https://github.com/hackertarget/nmap-did-what/blob/master/data/nmap-to-sqlite.py
下载或者复制其内容到服务器,下载Grafana容器配置时,也会有该文件。
3.2 安装python3
脚本需要使用python3才能运行:
yum install python3
3.3 执行格式化操作
python3 nmap-to-sqlite.py port.xml
转化格式后,会生成一个.db文件。
4. 安装Grafana
使用Docker安装Grafana。
4.1 下载项目包
GitHub项目地址:
https://github.com/hackertarget/nmap-did-what
创建一个专用目录:
mkdir /grafana
cd /grafana
wget https://github.com/hackertarget/nmap-did-what/archive/refs/heads/master.zip
4.2 解压软件包
unzip master.zip
mv nmap-did-what-master/* ./
rm -rf nmap-did-what-master
4.3 拷贝文件
cp /root/nmap_results.db /grafana/data/
文件的存储位置,可以通过修改datasource.yml文件中的内容自定义:
datasource.yml自动加载db文件的位置,也可以在grafana中手动配置。
4.4 最终文件
保证要有以下文件:
4.5 快速部署
在yaml配置文件所在目录执行以下命令进行部署:
cd /grafana/grafana-docker/
docker-compose up -d
5. 访问Grafana
在浏览器中使用服务器IP:3000打开WEB界面,用户和密码都是admin:
首次登录要求修改密码,也可以跳过不修改,默认是英文显示,可以设置为中文。
查看仪表盘,默认已经配置好仪表盘:
点击该仪表盘就可以看到大屏了:
还可以看到主机所开放的端口:
6. 总结
配置使用脚本和定时任务,效果更佳。
使用cron或计划任务,定期运行Nmap并更新SQLite数据库文件,构建一个实时面板,显示当前的网络状态和运行的服务。