← 返回博客
·Linkmetax 运维团队·11 分钟阅读
企业 IT 资产盘点:如何利用开源工具自动化发现内网僵尸服务器与未授权资产?
企业内网 IT 资产盘点完整方案。Nmap / Masscan / OSQuery 扫描脚本、影子 IT 发现、CMDB 建立、僵尸服务器清理实战。
IT 资产管理内网扫描影子 IT
「我们公司有多少台服务器?技术老板回答『大概 200-400 台吧』。盘点完才发现:实际 638 台,其中 110 台没业务在跑,120 台运维不知道存在。」
这种「资产黑洞」是大企业的通病——既费钱(每台云主机几百到几千一月),又是安全洞(无人维护的机器 = 黑客最爱)。这篇给一套自动化盘点方案。
一、3 类隐藏资产
类 1:僵尸服务器
- 业务下线了,服务器忘记关
- 离职员工的开发机 / 测试机
- 项目结束了,机器没归档
类 2:影子 IT
- 员工自己开的服务器(公司不知道)
- 部门私采的云资源(没走 IT)
- 历史遗留:合并 / 收购带来的未盘点
类 3:未授权服务
- 服务器上跑着没批准的服务(如开 SSH 给私人 / 装挖矿)
- 内网开放危险端口
- 弱密码 / 默认凭据
二、为什么必须盘点
财务理由
- 100 台僵尸云主机 × 500 元/月 = 5 万/月浪费
- 3 年 = 180 万
安全理由
- 无人维护 = 不打补丁 = 黑客最爱
- 一台被攻破 → 内网横向渗透
- 某客户案例:被勒索 → 入口是 2 年没人管的开发机
合规理由
- 等保 2.0 / ISO 27001 / SOC 2 都要求 IT 资产台账
- 审计时拿不出 = 不合规
三、自动化盘点 4 步法
Step 1: 全网扫描(活跃 IP / 开放端口)
Step 2: 服务识别(每个端口是什么服务)
Step 3: 资产关联(IP → 业务 → 负责人)
Step 4: 持续监控(新增 / 变化告警)
四、Step 1:全网扫描
工具 1:nmap(经典)
# 扫描整个内网 C 段
nmap -sn 10.0.0.0/16 -oG live-hosts.txt
# 扫描每台机器开放端口
nmap -p- -T4 -A 10.0.0.1 -oN host-details.txt
工具 2:masscan(极速)
比 nmap 快 100 倍,1 分钟扫完 65535 端口:
sudo masscan 10.0.0.0/16 -p1-65535 --rate 10000 -oG ports.txt
工具 3:rustscan
rustscan -a 10.0.0.0/16 -- -A -sC
内网扫描合规建议
- ⚠️ 必须得到 IT 负责人书面授权
- 扫描时段选业务低峰
- 不要扫描合作伙伴 / 客户的 IP
- 保留扫描日志
五、Step 2:服务识别
工具:nmap + 服务指纹
nmap -sV -p- 10.0.0.1
# 输出:22/tcp open ssh OpenSSH 8.9
# 3306/tcp open mysql MySQL 8.0.32
自动化报告
#!/bin/bash
# scan-report.sh
TARGETS="10.0.0.0/16"
DATE=$(date +%Y%m%d)
mkdir -p reports
masscan $TARGETS -p1-65535 --rate 5000 -oJ reports/scan-$DATE.json
# 转成 CSV 给业务
python parse_scan.py reports/scan-$DATE.json reports/scan-$DATE.csv
六、Step 3:资产关联
发现的 IP 必须关联到业务。
方法 1:与 CMDB 对账
- 公司有 CMDB?拿扫描结果对账
- 没在 CMDB 的 = 影子资产
方法 2:与云厂商账单对账
- 阿里云 / 腾讯云账单导出
- 列出所有 ECS / VPC
- 与扫描结果比对
方法 3:OSQuery 主动上报
# /etc/osquery/osquery.conf
{
"schedule": {
"system_info": {
"query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",
"interval": 3600
},
"open_ports": {
"query": "SELECT * FROM listening_ports;",
"interval": 3600
}
}
}
所有服务器装 OSQuery → 上报到中心 → 自动入 CMDB。
方法 4:DHCP / DNS 日志
- DHCP 日志:什么 MAC 拿过什么 IP
- DNS 查询:什么 IP 在解析什么域名 → 推断业务
七、Step 4:持续监控
自动化日扫描
# /etc/cron.daily/asset-scan
#!/bin/bash
TODAY=$(date +%Y%m%d)
YESTERDAY=$(date -d "yesterday" +%Y%m%d)
masscan 10.0.0.0/16 -p22,80,443,3306,5432,6379,3389 \
--rate 5000 -oJ /var/log/scan-$TODAY.json
# 对比昨天,找新增 IP
python compare_assets.py \
/var/log/scan-$YESTERDAY.json \
/var/log/scan-$TODAY.json \
--new-hosts /var/log/new-hosts-$TODAY.txt
# 有新增 → 告警
if [ -s /var/log/new-hosts-$TODAY.txt ]; then
curl -X POST https://feishu-webhook \
-d "{\"text\":\"⚠️ 内网新增主机: $(cat /var/log/new-hosts-$TODAY.txt)\"}"
fi
告警维度
- 新增主机
- 新开放端口
- 服务版本变化(可能被攻破)
- 长时间不活跃(疑似僵尸)
八、自动化扫描脚本(Linkmetax 内部用)
#!/bin/bash
# discover-assets.sh - 内网资产自动发现 + 存活探测
SUBNETS=("10.0.0.0/16" "192.168.0.0/16" "172.16.0.0/12")
OUTPUT_DIR="/var/log/asset-discovery"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$OUTPUT_DIR"
echo "===== 资产发现开始: $DATE ====="
for subnet in "${SUBNETS[@]}"; do
echo "--- 扫描 $subnet ---"
# 1. 存活探测
nmap -sn $subnet -oG "$OUTPUT_DIR/live-$DATE.gnmap"
# 2. 端口扫描(常见端口)
masscan $subnet -p21,22,23,80,443,445,1433,3306,3389,5432,6379,8080,8443,9200 \
--rate 5000 -oJ "$OUTPUT_DIR/ports-$DATE.json"
# 3. 服务指纹(针对存活主机)
grep "Up$" "$OUTPUT_DIR/live-$DATE.gnmap" | awk '{print $2}' > "$OUTPUT_DIR/live-ips-$DATE.txt"
nmap -sV -iL "$OUTPUT_DIR/live-ips-$DATE.txt" -oN "$OUTPUT_DIR/services-$DATE.txt"
done
# 汇总
LIVE_COUNT=$(cat "$OUTPUT_DIR/live-ips-"*.txt | sort -u | wc -l)
echo "===== 发现存活主机: $LIVE_COUNT ====="
# 风险标记
echo "===== 高危端口 ====="
grep -E "(445|3389|3306|6379|9200)" "$OUTPUT_DIR/services-$DATE.txt" | head -20
九、僵尸服务器清理流程
Step 1:列出候选
- 30 天 CPU 平均 < 5% → 候选
- 90 天无登录 → 候选
- 不在 CMDB → 候选
Step 2:调研归属
- 查 IP 历史(DHCP / 申请记录)
- 联系疑似业务方
- 1 周内无人认领 → 标记淘汰
Step 3:归档
- 数据备份 → S3 冷存
- 配置 / 日志归档
- 业务关停通告
Step 4:关停 / 释放
- 阿里云 / 腾讯云直接释放 ECS
- 物理机下电 + 拆零件
真实节省
某 300 人公司清理 80 台僵尸:
- 月省 4 万云费
- 减少 80 个攻击面
- IT 满意度上升
十、Pro Tips:5 个有用的命令
# 1. 查内网所有 SSH 开放的机器
nmap -p22 --open 10.0.0.0/16
# 2. 查内网所有数据库端口(高危)
nmap -p1433,3306,5432,6379,27017 --open 10.0.0.0/16
# 3. 查弱密码(针对 SSH 已知账号)
hydra -L users.txt -P weak_passwords.txt ssh://10.0.0.1
# 4. 查内网 Windows 共享
smbmap -H 10.0.0.0/24
# 5. 查内网 Web 服务(开放 80/443/8080 等)
nmap -p80,443,8080,8443 --script=http-title 10.0.0.0/16
写在最后
我们整理了 《内网资产自动化扫描与存活探测 Shell 脚本》:
- 完整版本(含上述全部功能)
- 多子网批量扫描
- 飞书 / 钉钉告警集成
- 历史趋势对比
📥 免费获取 → 联系销售取脚本 →
或了解我们的 企业 IT 安全方案,含资产盘点 + 持续监控 + 应急响应。
📥PDF 白皮书
下载《企业 IT 资产盘点:如何利用开源工具自动化发现内网僵尸服务器与未授权资产?》PDF 完整版
留下邮箱,立刻获取本文 PDF + 后续企业 AI / 软件采购干货
- ✓ 含全部图表、检查清单、参考链接
- ✓ 可用于内部分享 / 招投标资料引用
- ✓ 后续更新自动推送 · 不发垃圾邮件
