文章总结: NetGazer是一款中交互多协议蜜罐,用于诱捕针对服务器的暴力破解与入侵行为。它伪装成Ubuntu22.04服务器,支持SSH、Telnet、MySQL、PostgreSQL、Redis多协议,内置伪Shell和虚拟文件系统。提供Web控制台进行攻击统计和日志分析。部署需在隔离环境,仅用于安全研究与授权环境。 综合评分: 85 文章分类: 红队,安全运营,威胁情报,渗透测试,实战经验
NetGazer 网络凝视者 – SSH/Telnet/数据库蜜罐使用指南
原创
微慑网 微慑网
微慑网
2026年8月20日 16:05 北京
在小说阅读器读本章
去阅读
项目简介
NetGazer 是一款中交互多协议蜜罐,用于诱捕和记录针对服务器的暴力破解与入侵行为。它伪装成真实的 Ubuntu 22.04 服务器,支持 SSH、Telnet、MySQL、PostgreSQL、Redis 多协议诱捕,并内置 Web 可视化控制台。
核心特性:
SSH 服务:伪装 OpenSSH_8.9p1 Ubuntu,任意账号密码均可”登录成功”
Telnet 服务:模拟经典 login 流程
伪 Shell:40+ 命令支持(ls、cd、cat、ps、wget 等)
虚拟文件系统:内存态伪装 Ubuntu 22.04,含诱饵文件
攻击日志:JSONL + SQLite 双写,记录所有攻击行为
Web 控制台:可视化攻击统计、明细查询、用户管理
数据库蜜罐:MySQL、PostgreSQL、Redis 连接即返回认证失败
⚠️ 安全警告:仅用于安全研究与授权环境。蜜罐会吸引真实攻击者,请务必在隔离的测试/专用机器上运行,不要部署在存有敏感数据的生产服务器上。
系统要求
JDK 版本:JDK 25+(必须)
操作系统:Linux / macOS / Windows
内存:最低 512MB(被持续攻击时约需 290MB)
端口:SSH(2222)、Telnet(2323)、MySQL(3306)、PostgreSQL(5432)、Redis(6379)、Web(8080)
快速开始
1. 构建项目
克隆项目git clone https://github.com/AbnerSC/ssh-honeypot-j.gitcd ssh-honeypot-j # 构建(需要 JDK 25+)mvn package
构建成功后,产物位于:target/ssh-honeypot-j.jar(含全部依赖的可执行 jar)
2. 启动蜜罐
使用默认配置启动java -jar target/ssh-honeypot-j.jar # 指定配置文件启动java -jar target/ssh-honeypot-j.jar -c /path/to/config.yaml
生产环境推荐参数(优化内存占用):
java -XX:+UseCompactObjectHeaders -jar target/ssh-honeypot-j.jar
启动成功后会看到:
================================================ SSH/Telnet/DB 蜜罐 v1.1.2 (Java 25) 仅用于安全研究与授权环境,请勿用于非法用途================================================ 蜜罐运行中: SSH=2222, Telnet=2323, MySQL=3306, PostgreSQL=5432, Redis=6379, Web=8080, 主机名=ubuntu, 日志=logs/honeypot.jsonl, 数据库=db/database.db按 Ctrl+C 停止。
3. 测试蜜罐
SSH 连接测试ssh -p 2222 [email protected]# 密码:123456(或其他配置中的弱口令) # Telnet 连接测试telnet 127.0.0.1 2323 # 非交互式命令执行ssh -p 2222 [email protected] ”uname -a; cat /etc/passwd” # Web 控制台访问# 浏览器打开:http://127.0.0.1:8080/# 默认账号:admin / admin123(首次登录强制修改密码)
配置文件详解
配置文件 config.yaml 位于项目根目录,支持以下配置项:
伪装主机名(Shell 提示符、uname/hostname 等处展示)hostname: ubuntu # SSH 服务配置ssh: enabled: true # 是否启用 port: 2222 # 监听端口 # Telnet 服务配置telnet: enabled: true port: 2323 # MySQL 蜜罐(连接即返回认证失败)mysql: enabled: true port: 3306 # PostgreSQL 蜜罐postgresql: enabled: true port: 5432 # Redis 蜜罐redis: enabled: true port: 6379 # 日志配置log: file: logs/honeypot.jsonl # JSONL 攻击日志 db: db/database.db # SQLite 数据库(Web 控制台使用) ipdb_v4: db/ip2region_v4.xdb # IP 归属地库(IPv4) ipdb_v6: db/ip2region_v6.xdb # IP 归属地库(IPv6) # Web 控制台配置web: enabled: true port: 8080 sessionTimeoutMinutes: 30 # 登录会话超时时间 # 登录认证配置auth: maxFailures: 3 # 连续失败次数后锁定 IP windowMinutes: 5 # 失败计数窗口(分钟) lockMinutes: 60 # IP 锁定时长(分钟) credentials: # 密码本(用户名 -> 密码列表) root: [”123456”, ”toor”, ”password”, ”root123”] admin: [”admin123”, ”admin”, ”123456”] ubuntu: [”ubuntu”, ”123456”] # ... 更多账号
配置说明:
每个账号可配置多个密码,命中任意一个即视为登录成功
不配置 credentials 时使用内置默认弱口令本
IP 锁定状态缓存在内存中,进程重启后清空
Docker 部署(推荐)
1. 创建 docker-compose.yml
services: ssh-honeypot-j: image: scdm/ssh-honeypot-j:latest container_name: ssh-honeypot-j restart: always volumes: - ${PWD}/logs:/app/logs
挂载日志目录 - ${PWD}/db:/app/db # 挂载数据库目录 environment: - TZ=Asia/Shanghai # 时区设置 ports: - 22:2222 # SSH 端口 - 23:2323 # Telnet 端口 - 3306:3306 # MySQL 端口 - 5432:5432 # PostgreSQL 端口 - 6379:6379 # Redis 端口 - 127.0.0.1:11800:8080 # Web 控制台(建议仅本地访问) mem_limit: 512m # 内存限制 healthcheck: test: [”CMD”, ”curl”, ”-f”, ”http://127.0.0.1:8080”] interval: 10s timeout: 3s retries: 3 start_period: 20s
2. 启动容器
mkdir logs dbdocker compose up -d
3. 自定义配置
如需自定义配置,将 config.yaml 挂载到容器:
volumes: - ${PWD}/logs:/app/logs - ${PWD}/db:/app/db - ${PWD}/config.yaml:/app/config.yaml
4. 更新 IP 归属地库
下载最新的 ip2region 库文件放入 db/ 目录:
下载地址:https://github.com/lionsoul2014/ip2region
文件名:ip2region_v4.xdb、ip2region_v6.xdb
映射到真实端口(Linux)
如果需要让蜜罐监听标准的 22/23 端口,使用 iptables 端口转发:
先确保真实 SSH 服务已迁移到其他端口(如 1222)# 修改 /etc/ssh/sshd_config:Port 1222# systemctl restart sshd # 端口转发规则sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222sudo iptables -t nat -A PREROUTING -p tcp --dport 23 -j REDIRECT --to-port 2323 # 保存规则(Debian/Ubuntu)sudo apt install -y iptables-persistentsudo netfilter-persistent save
⚠️ 重要提示:
务必先确认真实 SSH(1222 端口)能正常登录,再执行端口转发
避免把自己锁在服务器外面
Web 控制台使用
访问方式
启动蜜罐后,浏览器访问 http://<主机IP>:8080/
首次登录
默认管理员账号:admin
默认密码:admin123
首次登录强制修改密码
功能模块
总览指标:会话数、登录尝试次数、命令数、攻击 IP 数
趋势图表:近 N 天攻击趋势(ECharts 图表)
协议分布:SSH/Telnet/MySQL/PostgreSQL/Redis 占比
Top 榜单:Top 攻击 IP、Top 用户名、Top 口令
支持五类事件的分页查询:
会话记录:所有连接会话
登录尝试:用户名/密码组合
命令记录:攻击者执行的命令
恶意下载:wget/curl 下载的 URL
IP 锁定:被锁定的攻击 IP
过滤条件:
来源 IP
用户名
协议类型
关键字
时间范围
角色:admin(全部权限)、viewer(仅查看)
操作:创建/禁用/删除账号、重置口令
安全特性
口令以 PBKDF2-HMAC-SHA256 加盐哈希存储
登录态由服务端 Session(HttpOnly Cookie)承载
连续 5 次登录失败锁定来源 IP 15 分钟
会话默认 30 分钟超时
⚠️ 安全建议:8080 端口仅对运维网段开放,不要将管理控制台直接暴露到公网。
日志分析
JSONL 日志格式
日志文件:logs/honeypot.jsonl
每行一个 JSON 事件,包含以下字段:
{ ”ts”: ”2026-08-20 10:30:45.123”, ”event”: ”auth_attempt”, ”session”: ”s1-1724155845123”, ”protocol”: ”ssh”, ”src_ip”: ”203.0.113.44”, ”username”: ”root”, ”password”: ”123456”, ”success”: ”true”, ”location”: ”中国 广东省 深圳市”}
事件类型:
session_open
:会话开始
auth_attempt
:登录尝试
command
:命令执行
download
:恶意下载
session_close
:会话结束
ip_locked
:IP 被锁定
使用 jq 分析
统计攻击 IP Top 10cat logs/honeypot.jsonl | jq -r '.src_ip' | sort | uniq -c | sort -rn | head -10 # 统计登录成功的凭证cat logs/honeypot.jsonl | jq -r 'select(.event==”auth_attempt” and .success==”true”) | ”(.username):(.password)”' | sort | uniq -c # 统计恶意下载 URLcat logs/honeypot.jsonl | jq -r 'select(.event==”download”) | .url' # 按协议统计cat logs/honeypot.jsonl | jq -r '.protocol' | sort | uniq -c | sort -rn
对接 ELK
JSONL 格式可直接导入 Elasticsearch:
使用 logstash 或 filebeat 读取input { file { path => ”/path/to/logs/honeypot.jsonl” codec => json }}
虚拟文件系统
蜜罐内置了伪装的 Ubuntu 22.04 文件系统,包含以下诱饵文件:
敏感文件
/etc/passwd
:伪造的系统用户列表
/etc/shadow
:伪造的密码哈希
/root/.my.cnf
:伪造的 MySQL 密码(Pr0d#Mysql!2024)
/root/.bash_history
:伪造的命令历史
/root/notes.txt
:伪造的待办事项(含假密码提示)
系统文件
/etc/hostname
:伪装主机名
/etc/hosts
:伪造的内网 IP
/etc/ssh/sshd_config
:伪造的 SSH 配置
/var/log/auth.log
:伪造的认证日志
/proc/cpuinfo
:伪造的 CPU 信息
/proc/meminfo
:伪造的内存信息
用户目录隔离
每个登录用户自动创建独立的 /home/ 目录
用户默认目录拒绝其他用户访问(权限检查)
攻击者的增删改操作仅影响内存,不写入真实磁盘
支持的 Shell 命令
蜜罐支持 40+ 常用 Linux 命令:
文件操作:
ls
、cd、pwd、cat、touch、mkdir、rm、cp、mv
系统信息:
whoami
、id、uname、hostname、ps、w、df、free、top
网络工具:
ifconfig
、netstat、ss、ping、wget、curl
其他:
echo
、history、su、sudo、apt、env
特殊语法支持:
命令分隔:;、&&
管道:|(取首命令)
重定向:>、>>(写入虚拟文件系统)
命令响应特性:
随机延迟:避免秒回暴露蜜罐特征
真实输出:CPU、内存、网络信息均伪造得合理
安全隔离建议
1. 网络隔离
禁止蜜罐访问内网(Docker 部署时)iptables -I FORWARD -s 172.17.0.0/16 -d 192.168.0.0/16 -j DROP
2. 资源限制
Docker 部署时设置内存限制:
mem_limit: 512m
3. 文件系统隔离
蜜罐内所有文件操作都是虚拟的,不会写入真实磁盘
攻击者上传的文件会被捕获保存,但不会执行
4. 端口暴露
蜜罐端口(22/23/3306/5432/6379)可对外暴露
Web 控制台(8080)建议仅对运维网段开放
常见问题
Q1: 启动时报错 “Unsupported class file major version 69”
原因:JDK 版本过低,需要 JDK 25+
解决:升级 JDK 到 25 或更高版本
Q2: 端口被占用
原因:22/23/3306/5432/6379/8080 端口已被其他服务占用
解决:
修改 config.yaml 中的端口配置
或停止占用端口的服务
或使用 iptables 端口转发
Q3: Web 控制台无法访问
检查:
蜜罐是否正常启动(查看控制台输出)
8080 端口是否被防火墙拦截
SQLite 数据库是否正常初始化(查看 db/database.db 是否存在)
Q4: 攻击者执行命令后无响应
原因:部分命令可能未实现或响应延迟
解决:
检查日志确认命令是否被记录
蜜罐命令响应有随机延迟(0.5-2 秒),属于正常现象
Q5: 如何更新 IP 归属地库
步骤:
下载最新的 ip2region 库:https://github.com/lionsoul2014/ip2region
将 ip2region_v4.xdb 和 ip2region_v6.xdb 放入 db/ 目录
重启蜜罐
项目信息
GitHub:https://github.com/AbnerSC/ssh-honeypot-j
许可证:Apache-2.0
语言:Java
作者:AbnerSC
已编译下载:
我用夸克网盘给你分享了「ssh-honeypot-j.jar」,点击链接或复制整段内容,打开「夸克APP」即可获取。链接:https://pan.quark.cn/s/0eab9f66314a
免责声明
本项目仅用于安全研究与授权环境。使用本工具进行未经授权的测试或攻击属于违法行为,使用者需自行承担法律责任。
请勿将本工具用于以下用途:
未经授权的攻击测试
非法入侵他人系统
收集他人敏感信息
任何违反法律法规的行为
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:微慑网 微慑网 微慑网《NetGazer 网络凝视者 – SSH/Telnet/数据库蜜罐使用指南》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论