简介:本资源为开源蜜罐系统HFish 3.3.1的Linux平台完整部署包,面向网络安全初学者、渗透测试人员及安全运维工程师,用于构建真实可控的诱捕环境,辅助识别扫描、爆破、Web攻击等恶意行为。压缩包共139个文件,涵盖54个前端交互JS脚本、35个UI图标PNG、15个配置与规则JSON、2个核心启动脚本(sh)、2个客户端可执行程序(client.exe与setup.exe)及服务端二进制hfish,辅以SQL数据库模板、Toml主配置、MD使用说明与多份报告文档(docx),整体结构完整,开箱即用。资源大小为111.6MB,tgz格式便于Linux环境直接解压部署。已有571人学习下载,用户可直接获取预置管理员账号(admin/HFish2021)、完整UI界面、本地化IP库(ipdb)、可视化报表模块及跨平台客户端工具,显著降低蜜罐部署门槛,适合实战演练、教学演示与安全监测能力建设。
1. 开源蜜罐 HFish 3.3.1 Linux 版:不是“装个软件就完事”,而是用对配置、防住扫描、看清攻击链路的实战入口
你刚在服务器上wget下来hfish-3.3.1-linux-amd64.tar.gz,解压、chmod +x hfish、./hfish一跑——网页能打开,面板能登录,但等了两小时,面板里攻击记录还是空的。这不是 HFish 失效了,而是你漏掉了最关键的三件事:监听网卡没绑对、防火墙没放行端口、蜜罐服务没注册为系统服务。HFish 不是 Web 应用,它本质是一个主动暴露脆弱接口、被动捕获真实攻击流量的网络诱饵系统;3.3.1 是截至 2024 年中稳定度最高、兼容性最广的 LTS 版本,支持 x86_64 / ARM64 双架构,原生适配 Ubuntu 20.04+、CentOS 7.9+、Debian 11+ 等主流 Linux 发行版。它不依赖数据库,所有日志落盘为 SQLite,内存占用常年低于 80MB,特别适合部署在边缘节点、云轻量服务器、甚至树莓派 4B 这类资源受限环境。如果你的目标是:快速验证外网是否有人扫你的 SSH/HTTP/FTP,识别真实攻击 IP 的地理分布与工具指纹(如 masscan、nmap、sqlmap),或把捕获的 payload 提交到本地 YARA 规则引擎做二次分析——那 HFish 就是当前开源蜜罐里,部署门槛最低、日志结构最干净、二次开发接口最透明的选择。别被“蜜罐”二字吓住:它不需要你懂协议逆向,也不要求你写规则引擎,只要你会改 YAML、会查 netstat、会看/var/log/hfish.log,就能在 20 分钟内让第一波真实扫描流量落进你的控制台。
2. 从下载到可运行:Linux 下 HFish 3.3.1 的最小闭环部署流程
2.1 下载与校验:为什么必须核对 SHA256 而不是直接curl | bash
HFish 官方发布包托管在 GitHub Releases(项目名hfish/hfish),3.3.1 版本对应文件为hfish-3.3.1-linux-amd64.tar.gz(x86_64)或hfish-3.3.1-linux-arm64.tar.gz(ARM64)。严禁跳过校验直接执行——蜜罐程序一旦被篡改,其监听端口可能反向连接攻击者 C2,变成你服务器上的后门。正确做法是:
# 下载二进制包(以 amd64 为例) wget https://github.com/hfish/hfish/releases/download/v3.3.1/hfish-3.3.1-linux-amd64.tar.gz # 下载配套签名文件(含 SHA256 哈希值) wget https://github.com/hfish/hfish/releases/download/v3.3.1/hfish-3.3.1-linux-amd64.tar.gz.sha256 # 校验哈希(输出应为 "OK") sha256sum -c hfish-3.3.1-linux-amd64.tar.gz.sha256提示:若校验失败,请立即删除包并检查下载源是否被劫持。GitHub Release 页面底部有官方 GPG 签名,高级用户可用
gpg --verify进一步验证发布者身份(密钥 ID0x3A7E2F1C)。
校验通过后解压:
tar -zxvf hfish-3.3.1-linux-amd64.tar.gz cd hfish # 此时目录结构为: # ├── hfish # 主二进制文件(静态链接,无依赖) # ├── config.yaml # 核心配置文件 # ├── data/ # 日志、SQLite 数据库存储目录 # └── web/ # 前端静态资源2.2 首次运行前必调的 4 个 config.yaml 参数
HFish 启动完全依赖config.yaml,默认配置面向本地测试,直接运行会导致蜜罐仅监听 127.0.0.1,对外不可见。必须修改以下 4 项(其他参数可保持默认):
| 参数路径 | 默认值 | 必须改为 | 说明 |
|---|---|---|---|
server.host | "127.0.0.1" | "0.0.0.0" | 绑定所有网卡,否则外网无法访问蜜罐端口 |
server.port | 2020 | 2020(或自定义,如8080) | Web 控制台端口,需确保该端口未被占用且防火墙放行 |
service.listen | ["0.0.0.0:22", "0.0.0.0:80", "0.0.0.0:21"] | 保留,但需确认服务器实际开放端口 | 每个ip:port对应一个蜜罐服务,如0.0.0.0:22模拟 SSH 服务 |
database.path | "data/hfish.db" | 保持绝对路径或确保data/目录有写权限 | SQLite 文件路径,建议用绝对路径避免权限问题 |
修改后保存,执行:
# 赋予执行权限(首次解压后需执行) chmod +x hfish # 启动(前台运行,便于观察日志) ./hfish -c config.yaml启动成功标志:终端输出INFO[0000] HFish server started on http://0.0.0.0:2020,且http://<你的服务器IP>:2020可正常打开登录页(默认账号admin/ 密码hfish)。
2.3 用 systemd 注册为守护进程:避免 SSH 断开后服务终止
前台运行只用于调试。生产环境必须转为系统服务:
# 创建服务文件 sudo tee /etc/systemd/system/hfish.service << 'EOF' [Unit] Description=HFish Honey Pot Service After=network.target [Service] Type=simple User=root WorkingDirectory=/opt/hfish ExecStart=/opt/hfish/hfish -c /opt/hfish/config.yaml Restart=always RestartSec=10 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target EOF # 重载 systemd 配置 sudo systemctl daemon-reload # 启用开机自启 sudo systemctl enable hfish # 启动服务 sudo systemctl start hfish # 查看状态(应显示 active (running)) sudo systemctl status hfish注意:
WorkingDirectory和ExecStart中的路径必须与你实际解压路径一致。若将 HFish 放在/home/user/hfish,则需同步修改这两处。
3. 真实攻击流量进来前,必须打通的三层网络关卡
3.1 Linux 防火墙:ufw / firewalld / iptables 三选一放行策略
HFish 默认监听22(SSH)、80(HTTP)、21(FTP)等端口,这些端口若被系统防火墙拦截,扫描器根本连不上,自然无日志。不能只开 Web 控制台端口(2020),必须开蜜罐服务端口。
Ubuntu(ufw):
sudo ufw allow 22 # SSH 蜜罐 sudo ufw allow 80 # HTTP 蜜罐 sudo ufw allow 21 # FTP 蜜罐 sudo ufw allow 2020 # 控制台(可选,仅管理用) sudo ufw reloadCentOS/RHEL(firewalld):
sudo firewall-cmd --permanent --add-port=22/tcp sudo firewall-cmd --permanent --add-port=80/tcp sudo firewall-cmd --permanent --add-port=21/tcp sudo firewall-cmd --reload通用 iptables 方案(适用于无 ufw/firewalld 的精简系统):
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 2020 -j ACCEPT sudo iptables-save | sudo tee /etc/iptables/rules.v4 # Debian/Ubuntu 持久化
提示:执行后用
sudo ss -tlnp | grep ':22\|:80\|:21'验证端口是否处于LISTEN状态,且State列显示LISTEN。
3.2 云服务商安全组:比系统防火墙更优先的拦截层
即使 Linux 防火墙全开,阿里云/腾讯云/华为云等平台的安全组默认拒绝所有入方向流量。必须手动添加入方向规则:
| 协议类型 | 端口范围 | 授权对象 | 说明 |
|---|---|---|---|
| TCP | 22 | 0.0.0.0/0 | 允许任意 IP 连接 SSH 蜜罐 |
| TCP | 80 | 0.0.0.0/0 | 允许任意 IP 访问 HTTP 蜜罐 |
| TCP | 21 | 0.0.0.0/0 | 允许任意 IP 连接 FTP 蜜罐 |
| TCP | 2020 | 你的办公 IP | 仅允许你本人访问控制台,提升安全性 |
注意:安全组规则生效无需重启服务器,但修改后需等待 1~2 分钟策略同步。可在云控制台「实例详情 → 安全组」中查看实时生效状态。
3.3 网络拓扑验证:用tcpdump抓包确认流量是否抵达服务器
当以上两层都配置完毕,仍无攻击日志?可能是流量根本没到你的服务器。用tcpdump在网卡层面抓包验证:
# 监听 eth0 网卡,只抓目标端口 22/80/21 的入包 sudo tcpdump -i eth0 -nn 'tcp and (dst port 22 or dst port 80 or dst port 21)' # 执行后,用另一台机器(如手机热点下的笔记本)执行: # nmap -sS -p 22,80,21 <你的服务器IP> # 若 tcpdump 输出类似以下内容,说明流量已抵达: # 10:22:34.123456 IP 192.168.1.100.54321 > 10.0.0.5.22: Flags [S], seq 12345, win 64240, ...若tcpdump无输出,说明问题出在上游(安全组未生效、DNS 解析错误、路由不对);若有输出但 HFish 日志仍为空,则问题在 HFish 本身配置(如service.listen绑定错网卡)。
4. 避坑:HFish 3.3.1 Linux 版部署中最常踩的 5 个坑
4.1 现象:Web 控制台打不开,浏览器提示“连接被拒绝”
原因:config.yaml中server.host仍为"127.0.0.1",或 systemd 服务未读取最新配置文件。
解决:
- 检查
config.yaml第 5 行server.host是否为"0.0.0.0"; - 修改后执行
sudo systemctl restart hfish; - 用
sudo ss -tlnp | grep :2020确认进程监听的是*:2020而非127.0.0.1:2020。
4.2 现象:nmap -sV <IP>显示所有端口filtered,而非open
原因:云安全组或本地防火墙未放行对应端口,或service.listen中端口格式错误(如写成":22"缺少 IP)。
解决:
- 运行
sudo ss -tlnp | grep ':22\|:80\|:21',确认输出中State为LISTEN且Address:Port为*:22; - 检查
config.yaml中service.listen数组是否为["0.0.0.0:22", "0.0.0.0:80"],不能写成["22", "80"]; - 登录云控制台,确认安全组入方向规则已添加且状态为“启用”。
4.3 现象:控制台能看到攻击记录,但点击“详情”报错failed to get attack detail
原因:data/目录权限不足,HFish 无法写入 SQLite 数据库或日志文件。
解决:
# 假设 HFish 解压在 /opt/hfish sudo chown -R root:root /opt/hfish/data sudo chmod -R 755 /opt/hfish/data sudo systemctl restart hfish4.4 现象:部署在 NAT 网络后的服务器(如家庭宽带),外网无法访问蜜罐端口
原因:家用路由器未做端口映射(Port Forwarding),公网 IP 流量无法到达内网服务器。
解决:
- 登录路由器后台,找到「虚拟服务器」或「端口映射」设置;
- 添加规则:外部端口
22→ 内部 IP<服务器局域网IP>:22,协议 TCP; - 同样配置
80、21端口; - 使用
https://www.canyouseeme.org输入端口验证是否映射成功。
4.5 现象:HFish 启动后 CPU 占用持续 100%,top显示hfish进程占满单核
原因:config.yaml中log.level被误设为debug,且日志轮转未开启,海量 debug 日志写满磁盘 I/O。
解决:
- 将
log.level改为info(默认值); - 确保
log.maxsize(单位 MB)和log.maxbackups已设置(3.3.1 默认为100和5); - 清理旧日志:
sudo rm /opt/hfish/data/*.log*; - 重启服务。
5. 攻击日志深度利用:从“看到扫描”到“识别攻击者意图”的三步进阶
5.1 理解 HFish 日志字段含义:比“IP+时间+端口”多 5 个关键信息
HFish 的data/hfish.db是 SQLite 数据库,用sqlite3 data/hfish.db进入后执行.schema attacks可查看表结构。真正有价值的字段不止ip、time、port,还有:
| 字段名 | 示例值 | 价值说明 |
|---|---|---|
protocol | "ssh" | 区分是 SSH 暴力破解还是 HTTP 漏洞探测 |
user_agent | "sqlmap/1.7.2#stable" | 直接识别扫描工具,比 IP 更可靠(IP 可伪造,UA 很难) |
payload | "id=1 and 1=1" | 原始攻击载荷,可用于提取 SQL 注入特征、XSS 关键字 |
country | "CN" | GeoIP 归属地,配合asn字段可定位 ISP |
attack_type | "brute_force" | HFish 自动分类的攻击类型(brute_force / sql_injection / path_traversal) |
提示:用
SELECT * FROM attacks WHERE attack_type='brute_force' ORDER BY time DESC LIMIT 10;快速查看最近暴力破解记录。
5.2 用 Python 脚本自动提取高危行为:10 行代码筛出真实威胁
与其每天人工刷控制台,不如用脚本定时分析。以下脚本每 5 分钟扫描一次新记录,发现attack_type='brute_force'且count > 10(同一 IP 5 分钟内尝试超 10 次)即发邮件告警:
#!/usr/bin/env python3 # save as /opt/hfish/alert_bruteforce.py import sqlite3 import smtplib from email.mime.text import MIMEText from datetime import datetime, timedelta DB_PATH = "/opt/hfish/data/hfish.db" THRESHOLD = 10 TIME_WINDOW_MIN = 5 conn = sqlite3.connect(DB_PATH) c = conn.cursor() now = datetime.now() since = now - timedelta(minutes=TIME_WINDOW_MIN) c.execute(""" SELECT ip, COUNT(*) as cnt FROM attacks WHERE attack_type = 'brute_force' AND time > ? GROUP BY ip HAVING cnt > ? """, (since.isoformat(), THRESHOLD)) for ip, cnt in c.fetchall(): msg = MIMEText(f"检测到暴力破解:{ip} 在 {TIME_WINDOW_MIN} 分钟内尝试 {cnt} 次") msg['Subject'] = f"[HFish Alert] Brute Force from {ip}" msg['From'] = "hfish@localhost" msg['To'] = "security@yourcompany.com" # 使用本地 sendmail(需提前配置) with smtplib.SMTP('localhost') as s: s.send_message(msg) conn.close()赋予执行权限并加入 crontab:
chmod +x /opt/hfish/alert_bruteforce.py # 每 5 分钟执行一次 echo "*/5 * * * * /usr/bin/python3 /opt/hfish/alert_bruteforce.py" | sudo tee -a /var/spool/cron/crontabs/root5.3 将 HFish 日志对接 SIEM:用 Filebeat 推送到 Elasticsearch 做关联分析
HFish 本身不提供日志转发,但data/目录下有hfish.log(文本日志)和hfish.db(结构化数据)。推荐用 Filebeat 直接采集hfish.log,因其包含更完整的上下文(如完整 UA 字符串、原始请求头):
# /etc/filebeat/filebeat.yml 中添加 filebeat.inputs: - type: filestream enabled: true paths: - /opt/hfish/data/hfish.log fields: service: hfish fields_under_root: true output.elasticsearch: hosts: ["http://elasticsearch:9200"] index: "hfish-%{+yyyy.MM.dd}"在 Kibana 中创建索引模式hfish-*,即可用如下 DSL 查询高危行为:
{ "query": { "bool": { "must": [ { "match": { "attack_type": "brute_force" } }, { "range": { "@timestamp": { "gte": "now-1h" } } } ], "should": [ { "match_phrase": { "user_agent": "hydra" } }, { "match_phrase": { "user_agent": "medusa" } } ], "minimum_should_match": 1 } } }这样,你不仅能知道“谁在扫”,还能结合其他日志(如 Nginx access log、系统 auth.log)判断:同一 IP 是否先扫 SSH,再扫 Web,最后尝试爆破数据库?——这才是蜜罐存在的终极意义:把碎片化扫描行为,拼成一条完整的攻击链路图。
我坚持把 HFish 当作“网络探针”而非“玩具”,每次部署必做三件事:用tcpdump确认流量抵达、用sqlite3直接查 DB 验证日志落盘、用curl -v http://<IP>:22模拟扫描器验证服务响应。这三步做完,才敢说“蜜罐活了”。HFish 3.3.1 的价值不在多炫酷的界面,而在它把复杂网络对抗,压缩成几个 YAML 参数和一行systemctl start——让安全能力真正下沉到运维一线。希望帮到你。
本文还有配套的精品资源,点击获取