插件窝 干货文章 如何使用Masscan、Nmap、ELK做内网资产收集

如何使用Masscan、Nmap、ELK做内网资产收集

扫描 Masscan port Logstash 126    来源:    2025-04-21

使用Masscan、Nmap和ELK进行内网资产收集的完整方案

方案概述

本方案结合Masscan的快速扫描能力、Nmap的深度探测功能以及ELK(Elasticsearch, Logstash, Kibana)的数据分析和可视化能力,构建一个完整的内网资产收集与分析系统。

1. 工具准备

所需工具

  • Masscan: 超快速端口扫描工具
  • Nmap: 功能强大的网络探测和安全审计工具
  • ELK Stack:
    • Elasticsearch: 分布式搜索和分析引擎
    • Logstash: 数据处理管道工具
    • Kibana: 数据可视化平台

2. 实施步骤

2.1 使用Masscan进行快速扫描

# 安装Masscan
sudo apt-get install masscan

# 扫描整个内网(假设内网为192.168.1.0/24)
sudo masscan 192.168.1.0/24 -p1-65535 --rate 100000 -oJ masscan_results.json

参数说明: - -p1-65535: 扫描所有端口 - --rate 100000: 设置每秒发送100,000个数据包 - -oJ: 输出JSON格式结果

2.2 使用Nmap进行深度探测

# 安装Nmap
sudo apt-get install nmap

# 从Masscan结果中提取IP和端口进行深度扫描
cat masscan_results.json | jq -r '.[] | .ip + " " + (.ports[] | .port | tostring)' | \
while read ip port; do
  nmap -sV -sC -p $port -oX nmap_${ip}_${port}.xml $ip
done

参数说明: - -sV: 服务版本探测 - -sC: 使用默认脚本扫描 - -oX: 输出XML格式结果

2.3 配置ELK环境

2.3.1 安装ELK Stack

# 安装Java
sudo apt-get install openjdk-11-jdk

# 安装Elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-amd64.deb
sudo dpkg -i elasticsearch-7.10.2-amd64.deb

# 安装Logstash
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.10.2.deb
sudo dpkg -i logstash-7.10.2.deb

# 安装Kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-amd64.deb
sudo dpkg -i kibana-7.10.2-amd64.deb

2.3.2 配置Logstash处理扫描数据

创建Logstash配置文件 /etc/logstash/conf.d/nmap.conf:

input {
  file {
    path => "/path/to/nmap_results/*.xml"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    codec => multiline {
      pattern => "^<nmaprun"
      negate => "true"
      what => "previous"
    }
  }
}

filter {
  xml {
    source => "message"
    store_xml => false
    xpath => [
      "/nmaprun/host/address/@addr", "host_ip",
      "/nmaprun/host/ports/port/@portid", "port_id",
      "/nmaprun/host/ports/port/state/@state", "port_state",
      "/nmaprun/host/ports/port/service/@name", "service_name",
      "/nmaprun/host/ports/port/service/@product", "service_product",
      "/nmaprun/host/ports/port/service/@version", "service_version"
    ]
  }

  mutate {
    split => { "host_ip" => "," }
    split => { "port_id" => "," }
    split => { "port_state" => "," }
    split => { "service_name" => "," }
    split => { "service_product" => "," }
    split => { "service_version" => "," }
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "nmap_scan_results"
  }
}

2.4 启动ELK服务

# 启动Elasticsearch
sudo systemctl start elasticsearch

# 启动Logstash
sudo systemctl start logstash

# 启动Kibana
sudo systemctl start kibana

2.5 在Kibana中可视化数据

  1. 访问Kibana: http://localhost:5601
  2. 创建索引模式: "nmap_scan_results"
  3. 创建可视化仪表板:
    • 资产分布图
    • 开放端口统计
    • 服务版本分布
    • 漏洞风险热图

3. 自动化脚本

可以创建自动化脚本定期执行扫描和分析:

#!/bin/bash

# 1. 使用Masscan扫描
echo "[+] Starting Masscan scan..."
sudo masscan 192.168.1.0/24 -p1-65535 --rate 100000 -oJ masscan_results.json

# 2. 使用Nmap深度扫描
echo "[+] Starting Nmap deep scan..."
cat masscan_results.json | jq -r '.[] | .ip + " " + (.ports[] | .port | tostring)' | \
while read ip port; do
  echo "Scanning $ip on port $port..."
  nmap -sV -sC -p $port -oX nmap_results/nmap_${ip}_${port}.xml $ip
done

# 3. 导入数据到ELK
echo "[+] Importing data to ELK..."
sudo systemctl restart logstash

echo "[+] Scan completed! Access Kibana at http://localhost:5601"

4. 安全与合规注意事项

  1. 获取授权: 确保获得合法授权后再进行内网扫描
  2. 扫描强度: 控制扫描速率,避免影响正常业务
  3. 数据安全: 妥善保管扫描结果,防止敏感信息泄露
  4. 合规性: 遵守公司政策和相关法律法规

5. 高级优化建议

  1. 分布式扫描: 在多台机器上并行执行扫描任务
  2. 定期扫描: 设置定时任务(cron job)进行定期资产发现
  3. 资产变化告警: 在Kibana中设置告警,当发现新资产时通知
  4. 漏洞关联: 将扫描结果与漏洞数据库关联,自动评估风险

通过这套方案,您可以全面掌握内网资产情况,及时发现潜在风险,并为安全决策提供数据支持。