
1. 项目概述为什么我们需要一个“诱饵”系统在网络安全领域防守方和攻击者的信息永远是不对称的。攻击者可以无数次尝试而我们只要失守一次就可能面临数据泄露、服务中断甚至勒索的严重后果。传统的防火墙、入侵检测系统IDS就像城堡的围墙和哨兵能阻挡和发现明显的入侵但对于那些伪装成“自己人”、利用未知漏洞0day或进行低慢攻击的对手往往力不从心。这时蜜罐Honeypot的价值就凸显出来了——它本质上是一个精心布置的“诱饵”系统故意暴露一些看似有价值但实际无害的漏洞或服务吸引攻击者前来触碰。一旦攻击者与蜜罐发生交互其攻击手法、来源IP、使用的工具等信息就会被完整地记录下来为我们提供了宝贵的一手威胁情报。Hfish 正是这样一款优秀的开源蜜罐平台。它不像一些复杂的商业产品那样需要高昂的授权费用和专业的运维团队其设计理念就是“简单、易用、功能强大”。它集成了数十种常见的服务蜜罐如SSH、MySQL、Redis和Web蜜罐如OA系统、CMS后台还支持自定义蜜罐。通过一个统一的管理后台你可以清晰地看到谁在攻击你、用什么方式攻击、以及攻击的频次。对于中小型企业、个人开发者、甚至是安全研究爱好者来说部署一个Hfish就相当于在自家网络里布下了一张无形的“监控网”能让你从被动防御转向主动感知。我最初接触Hfish是因为发现服务器日志里频繁出现针对Redis和MySQL的暴力破解尝试。虽然密码足够复杂但这种持续的骚扰让人不安。部署Hfish后不仅清晰地看到了攻击源还意外地捕获了几次利用Weblogic反序列化漏洞的扫描行为这让我对自身网络暴露面的认识提升了一个维度。接下来我就带你从零开始完成一次Hfish的部署并分享一些让它真正“活”起来的配置技巧和避坑经验。2. 部署环境规划与核心组件解析在动手部署之前理清思路和规划环境至关重要。Hfish的部署非常灵活官方提供了多种方式我们需要根据自身情况选择最合适的一种。2.1 部署架构与角色理解一个完整的Hfish体系通常包含两个核心角色管理端Server和节点端Client/Agent。管理端Server这是整个蜜罐系统的大脑和指挥中心。它负责提供Web管理界面用于配置蜜罐、管理节点、查看攻击日志和仪表盘数据。所有节点收集到的信息都会汇总到这里。管理端本身不直接暴露服务通常部署在内网或一个相对安全的位置。节点端Client这些是部署在前线的“哨兵”。它们根据管理端下发的配置在本地监听指定的端口如22、3306、6379等模拟成相应的服务。当攻击者连接这些端口时节点端会模拟服务交互并记录所有流量和行为然后将日志上报给管理端。节点可以部署在云服务器、公司DMZ区、甚至是一台闲置的树莓派上。这种“中心-边缘”的架构好处很明显管理端隐蔽安全节点端可以灵活、分散地部署在各种需要监控的网络位置甚至可以用一个管理端统合成百上千个节点。2.2 部署方式选型从简单到灵活Hfish官方主要推荐以下几种部署方式我们需要根据技术栈和运维习惯来选择一键脚本部署最推荐给新手官方提供了针对Linux系统的安装脚本。这个脚本会自动检测系统环境下载最新版本的二进制文件并以后台服务的形式启动管理端和节点端默认同一台机器既是管理端也是节点。这种方式省心省力适合快速体验和单机部署。优点极其简单几乎无需手动配置五分钟内就能看到效果。缺点定制化程度较低所有组件安装在同一位置适合测试和学习。Docker部署推荐用于生产隔离这是目前非常流行且优雅的部署方式。Hfish提供了官方Docker镜像。你可以用Docker Compose一键启动包含管理端和节点端的完整服务。优点环境隔离干净不会污染宿主机升级、迁移非常方便利用Docker的网络特性可以轻松实现节点与管理端的跨主机部署。缺点需要宿主机构有Docker环境对不熟悉容器技术的人有学习成本。手动二进制部署最灵活从Github Release页面下载对应操作系统Linux/Windows的压缩包手动解压、配置和启动。这种方式给予你最大的控制权。优点可以精细控制每一个步骤适合将Hfish集成到现有的自动化运维体系如Ansible, SaltStack中或者部署在无法安装Docker的特殊环境。缺点步骤繁琐需要手动处理服务注册、日志轮转等运维问题。注意对于绝大多数想快速上手的用户我强烈建议从Docker部署开始。它不仅简单而且其“一次构建到处运行”的特性让你后续的扩展和维护成本大大降低。本指南也将以Docker部署作为主线进行详解。2.3 环境与资源准备无论选择哪种方式都需要准备一台或多台服务器。这里给出一个最小化的资源建议操作系统LinuxUbuntu 20.04/22.04 LTS, CentOS 7/8, Debian 11等。生产环境推荐使用稳定的LTS版本。CPU 内存管理端和节点端对资源消耗都很低。单机部署管理端节点端建议1核2GB内存起步。纯节点端512MB内存足矣。磁盘空间预留10GB以上空间主要用于存放日志和数据库。攻击日志的积累速度取决于你遭受攻击的频度。网络管理端需要能被所有节点端访问通常通过IP:4433端口。节点端需要在你希望监控的网络位置并确保你模拟的服务端口如22, 3306, 6379, 8080等在防火墙/安全组上是开放的。这是蜜罐生效的前提关键依赖如果使用Docker方式只需确保宿主机已安装Docker和Docker Compose。一键脚本或二进制方式通常需要systemd来管理服务。3. 基于Docker Compose的实战部署流程我们将采用Docker Compose进行部署这是兼顾了易用性和生产可用性的最佳实践。假设我们在一台全新的Ubuntu 22.04服务器上进行操作。3.1 基础环境搭建安装Docker引擎首先我们需要在服务器上安装Docker引擎和Docker Compose插件。# 1. 更新软件包索引并安装必要的依赖 sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg lsb-release # 2. 添加Docker官方GPG密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 3. 设置Docker稳定版仓库 echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 4. 安装Docker引擎包含cli、containerd和docker-compose-plugin sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # 5. 验证安装检查Docker和Compose版本 docker --version docker compose version # 6. 可选但推荐将当前用户加入docker组避免每次使用sudo sudo usermod -aG docker $USER # 执行此命令后需要退出当前终端并重新登录或者执行 newgrp docker 使组权限生效3.2 编写Docker Compose配置文件我们不直接使用docker run命令而是用docker-compose.yml文件来定义服务这样配置清晰且易于管理。在服务器上创建一个专用目录例如/opt/hfish并在此目录下创建配置文件。sudo mkdir -p /opt/hfish cd /opt/hfish sudo vim docker-compose.yml将以下内容粘贴到docker-compose.yml文件中。这个配置定义了一个同时包含管理端和节点端的服务。version: 3.8 services: # Hfish 管理端服务 server: image: imdevops/hfish:latest container_name: hfish-server restart: unless-stopped ports: - 4433:4433/tcp # 管理后台Web端口 - 4434:4434/tcp # 节点与管理端通信端口 volumes: - ./data/server:/usr/share/hfish/server - ./data/config.ini:/usr/share/hfish/config.ini command: server networks: - hfish-net # Hfish 节点端服务与管理端同机部署 client: image: imdevops/hfish:latest container_name: hfish-client restart: unless-stopped # 注意这里映射了多个蜜罐常用端口到宿主机。 # 请根据你的需要和安全策略开放/修改这些端口映射。 ports: - 22:22/tcp # SSH 蜜罐 - 23:23/tcp # Telnet 蜜罐 - 80:80/tcp # HTTP 蜜罐 (低交互) - 135:135/tcp # Windows RPC - 443:443/tcp # HTTPS 蜜罐 - 445:445/tcp # SMB 蜜罐 - 1433:1433/tcp # MSSQL 蜜罐 - 3306:3306/tcp # MySQL 蜜罐 - 3389:3389/tcp # RDP 蜜罐 - 6379:6379/tcp # Redis 蜜罐 - 8080:8080/tcp # 通用Web服务蜜罐 - 9200:9200/tcp # Elasticsearch 蜜罐 volumes: - ./data/client:/usr/share/hfish/client - ./data/config.ini:/usr/share/hfish/config.ini depends_on: - server command: client -s server networks: - hfish-net networks: hfish-net: driver: bridge关键配置解析镜像imdevops/hfish:latest是官方维护的镜像。生产环境可以考虑使用特定版本标签如imdevops/hfish:3.8.0以避免自动升级带来的意外。端口映射server服务将容器内的管理后台端口(4433)和节点通信端口(4434)映射到宿主机相同端口。务必确保服务器的防火墙/安全组允许访问4433端口用于Web登录但4434端口通常不应对外暴露。client服务这里映射了一系列常见漏洞端口到宿主机。这是蜜罐生效的关键你需要根据你的监控目标决定开放哪些端口。例如如果你的服务器没有MySQL服务那么开放3306端口就是安全的蜜罐如果宿主机本身运行着MySQL那么端口映射就会冲突。数据卷通过volumes将容器内的数据目录和配置文件挂载到宿主机的./data目录下。这样即使容器被删除日志和配置也不会丢失。网络创建了一个自定义的Docker网络hfish-net让server和client两个容器在同一个网络内可以通过服务名server直接通信这比使用IP更稳定。命令server容器运行server命令启动管理端client容器运行client -s server命令启动节点端并通过-s参数指定管理端地址为server即同一个Docker网络中的服务名。3.3 启动服务与初始化访问配置文件准备就绪后就可以启动整个Hfish服务栈了。# 确保你在 /opt/hfish 目录下 cd /opt/hfish # 使用 Docker Compose 启动服务-d 表示后台运行 sudo docker compose up -d # 查看服务运行状态 sudo docker compose ps # 查看服务日志确认没有报错 sudo docker compose logs -f server # 按 CtrlC 退出日志查看如果一切正常你会看到server和client容器都处于Up状态。现在打开你的浏览器访问https://你的服务器IP地址:4433。重要提示Hfish管理后台默认使用HTTPS但使用的是自签名证书。浏览器会提示“连接不安全”或“您的连接不是私密连接”这是正常现象。请点击“高级”-“继续前往不安全”即可进入登录页面。首次登录使用默认账号密码用户名admin密码HFish2021强烈建议在首次登录后立即在【系统管理】-【用户管理】中修改默认密码4. 核心配置详解与蜜罐策略制定登录成功后你会看到一个简洁的仪表盘。但现在还没有数据因为我们需要配置蜜罐并让节点开始工作。4.1 节点管理与状态确认点击左侧菜单【节点管理】。你应该能看到一个节点在线其“节点名称”可能是一串IDIP地址是Docker容器内部的IP如172.20.0.3。这证明节点端已经成功注册到管理端。实操心得在生产环境中当你需要部署多个节点时只需在其他机器上运行节点容器并在启动命令中修改-s参数为你的管理端对外的IP地址和端口。例如docker run -d --name hfish-node imdevops/hfish client -s http://你的管理端IP:4434。同时别忘了在新节点的docker run命令中映射你需要的蜜罐端口。4.2 服务型蜜罐配置以Redis蜜罐为例服务型蜜罐模拟的是数据库、中间件等后台服务。我们以最常被攻击的Redis为例进行配置。开启蜜罐点击左侧【服务型蜜罐】。在列表中找到“Redis”点击右侧的“编辑”图标铅笔。关键参数配置监听端口确保这里填写的端口默认6379与docker-compose.yml中client服务映射的宿主机端口一致。蜜罐类型保持“Redis”。节点勾选你上线的节点。模拟参数这是精髓所在。你可以设置一个“诱人”的密码比如root、admin123、redis或者留空。攻击者尝试爆破时使用这些弱口令会“成功连接”从而触发记录。你甚至可以在这里模拟一些数据比如添加一个键值对set flag “This_is_a_honeypot”的初始化命令。安全配置可以设置IP白名单将你自己的IP加入避免自己的正常操作被记录。保存并生效点击“保存”。管理端会立即将配置下发到节点。节点会开始在指定的端口宿主机6379上监听。现在你可以尝试用redis-cli或者任何Redis客户端去连接你服务器的IP:6379端口。你会发现可以连接甚至可以执行一些命令。回到Hfish管理后台的【攻击列表】或【仪表盘】几分钟内就能看到这次连接被清晰地记录了下来包括源IP、攻击时间、使用的账号密码如果有、执行的命令等。4.3 Web型蜜罐配置打造一个“脆弱”的登录页面Web蜜罐模拟的是存在漏洞的Web应用如OA系统、CMS后台、路由器管理页面等。Hfish内置了许多模板。选择模板点击左侧【Web型蜜罐】-【模板管理】。你可以看到很多现成的模板比如“通用OA登录页”、“路由器管理页面”、“Weblogic Console”等。选择一个点击“使用”。创建蜜罐系统会跳转到创建页面。蜜罐名称起个容易识别的名字如“仿某OA登录页”。监听端口设置为一个未被占用的端口比如8081。记住你需要在docker-compose.yml中为client服务新增一条端口映射- 8081:8081/tcp并重启client容器才能生效。模板内容系统已自动填充。你可以进一步编辑HTML让它看起来更真实比如修改标题、Logo图片的链接指向一个不存在的图避免外联风险等。账号密码设置一个“正确”的登录账号密码比如admin/admin123。当攻击者用这个密码尝试登录时会被记录为“成功攻击”。关联节点在节点列表中选择你的节点保存。配置完成后访问http://你的服务器IP:8081就能看到这个伪造的登录页面。任何对此页面的访问、登录尝试、参数探测都会被记录。注意事项Web蜜罐的仿真度是关键。过于简陋的页面可能无法吸引高级攻击者。你可以参考真实系统的登录页面用浏览器开发者工具查看其HTML和JS结构进行高仿。但切记不要直接引用真实系统的外部JS/CSS资源以免造成法律风险或成为攻击跳板。4.4 邮件蜜罐与威胁情报上报Hfish还支持邮件蜜罐吸引垃圾邮件和钓鱼邮件以及将攻击日志上报到第三方威胁情报平台如微步在线、奇安信等。邮件蜜罐你需要有一个域名并为其配置MX记录指向部署了Hfish的服务器。然后在【邮件蜜罐】中配置监听的域名。所有发送到该域名的邮件都会被Hfish接收、分析并记录发件人、主题、附件等信息。这对于捕获钓鱼邮件和垃圾邮件发送源非常有效。威胁情报上报在【系统配置】-【威胁情报】中可以配置API。将捕获到的攻击源IP、恶意文件HASH等自动上报既能贡献社区数据有时也能从平台获取到该IP的更多恶意标签信息。5. 攻击日志分析与运营实战部署和配置只是开始让蜜罐产生价值的关键在于日常的日志分析和运营。5.1 仪表盘解读一眼看清威胁态势登录后的首页仪表盘是最重要的信息汇总中心你需要关注攻击趋势图观察攻击在时间维度上的分布是持续不断还是集中在某个时段这有助于判断是自动化扫描还是针对性攻击。攻击来源TOP哪些IP攻击你最频繁点击IP可以直接查看该IP的所有攻击详情。攻击类型TOP最常被攻击的是哪个服务是SSH爆破、Redis未授权访问还是针对某个Web漏洞的探测这反映了当前流行的攻击手法。最新攻击实时滚动显示最新的攻击事件。5.2 深度分析攻击链从IP到行为当发现一个可疑IP后点击它进入详情页。这里的信息至关重要攻击详情列表展示了该IP发起的所有攻击记录包括时间、目标端口、使用的账号密码、执行的命令对于服务蜜罐或访问的URL路径对于Web蜜罐。行为模式分析爆破行为如果看到针对同一个服务如SSH在短时间内用大量不同密码尝试这是典型的暴力破解。漏洞扫描如果看到对Web蜜罐访问了/wp-login.php、/manager/html、/api/jsonws/invoke等特定路径说明攻击者在用扫描器探测常见Web漏洞。交互式攻击在Redis蜜罐中如果攻击者连接后执行了config set dir /root/.ssh和config set dbfilename authorized_keys等命令这是经典的Redis未授权访问写公钥攻击的完整链条。蜜罐完整地记录了下来。情报关联结合IP的归属地Hfish会显示以及你从其他渠道如防火墙、服务器日志获得的信息综合判断威胁等级。5.3 主动响应从监控到防御蜜罐的价值不仅是记录更在于驱动主动防御。防火墙封禁对于确认为恶意的IP最直接的措施是将其加入服务器防火墙如iptables、firewalld或云服务商安全组的黑名单进行源头阻断。安全加固分析攻击频率最高的服务。如果Redis蜜罐捕获了大量攻击那么请立刻检查内网中真实的Redis服务是否做了密码认证、是否绑定了127.0.0.1。这起到了很好的预警作用。攻击溯源谨慎操作对于高交互蜜罐需要更复杂的部署在绝对隔离和安全的法律允许范围内可以尝试对攻击者进行反向追踪或分析其攻击工具但这需要极高的专业技能和法律意识。6. 高级部署模式与生产环境考量单机部署适合学习和监控单一出口。对于企业网络我们需要更复杂的部署模式。6.1 分布式节点部署这是Hfish的核心优势。你可以在不同的网络区域部署多个节点端。DMZ区部署Web蜜罐和常见服务蜜罐模拟对外服务。办公网部署SMB、RDP等蜜罐用于检测内网横向移动。核心业务区部署数据库、中间件蜜罐用于检测最敏感区域的渗透尝试。所有节点通过加密通道将日志上报到统一的内网管理端。管理端的Web界面仅限内网访问确保控制中心的安全。部署步骤确保管理端服务器的4434端口对所有节点服务器可达。在节点服务器上使用Docker或二进制方式启动客户端启动命令指向管理端的内网IP和端口client -s http://管理端内网IP:4434。在管理端Web界面即可看到新节点上线并可以对其进行独立配置。6.2 配置持久化与备份在docker-compose.yml中我们已经通过卷挂载实现了数据持久化。./data目录下保存了所有配置和日志。定期备份应定期备份整个/opt/hfish/data目录。配置文件config.ini是核心配置文件包含了数据库连接、密钥等信息。升级时确保此文件被保留。日志轮转Docker容器默认的日志驱动可能会使日志文件无限增长。建议在docker-compose.yml中为每个服务配置日志轮转选项services: server: # ... 其他配置 ... logging: driver: json-file options: max-size: 10m max-file: 36.3 安全加固措施蜜罐本身也是系统需要被保护。管理端访问控制修改默认端口可以修改docker-compose.yml中管理端Web端口如从4433改为8443减少被扫描的概率。设置强密码必须修改默认的admin/HFish2021密码。IP白名单如果可能在管理端服务器前设置反向代理如Nginx并配置仅允许运维IP段访问/admin路径。节点端隔离蜜罐节点应部署在独立的虚拟机或容器网络中与真实业务网络进行逻辑或物理隔离防止攻击者通过蜜罐作为跳板攻击真实资产。严格控制节点容器本身的权限使用非root用户运行容器可以在Dockerfile或启动命令中指定。监控蜜罐自身为运行Hfish的服务器本身配置基础监控CPU、内存、磁盘和日志监控确保蜜罐服务稳定运行。7. 常见问题与故障排查实录在实际部署和运营中你可能会遇到以下问题。7.1 节点状态显示“离线”这是最常见的问题。检查网络连通性在节点服务器上执行curl http://管理端IP:4434/api/version。如果能返回版本信息说明网络通。如果不通检查防火墙/安全组是否放行了4434端口注意是管理端的4434端口且仅对节点开放不应对外。检查容器日志在节点服务器上执行docker logs hfish-client查看是否有连接失败的错误信息。常见错误是-s参数指定的地址格式不对应确保是http://IP:4434。检查时间同步确保管理端和所有节点服务器的时间基本同步NTP时间差异过大会导致认证失败。7.2 蜜罐端口无响应在管理端配置了蜜罐但用telnet或nc测试端口不通。确认端口映射首先检查docker-compose.yml中是否将容器端口映射到了宿主机。例如配置了Redis在容器内监听6379必须要有- 6379:6379/tcp这样的映射。检查宿主机防火墙执行sudo ufw status(Ubuntu) 或sudo firewall-cmd --list-all(CentOS)确认宿主机防火墙允许该端口访问。对于云服务器还需检查云服务商安全组的入站规则。确认蜜罐已启用在管理端Web界面确认该蜜罐服务已“开启”并且已关联到在线的节点。查看节点容器日志docker logs hfish-client可能会显示端口绑定失败的错误通常是因为宿主机该端口已被其他进程占用。7.3 攻击日志没有记录或记录不全能连上蜜罐但管理后台看不到日志。等待数据同步节点端日志上报到管理端可能有短暂延迟通常1-2分钟请稍等片刻刷新页面。检查攻击是否命中蜜罐确认你测试连接的IP和端口正是蜜罐节点所在的服务器和端口。有时可能误连到了其他服务器或本机其他服务。检查日志级别确保没有配置过于严格的过滤规则如IP白名单误将自己过滤。查看数据库如果怀疑是管理端问题可以进入server容器检查SQLite数据库位于挂载卷的server目录下但操作需要谨慎。7.4 性能与资源消耗在遭受大规模扫描时Hfish资源消耗会上升。节点端CPU/内存单个节点处理每秒数百个连接请求通常没有问题。如果遇到DDoS级别的扫描可能导致节点容器资源耗尽。可以考虑限流或者为节点容器分配更多资源。管理端磁盘攻击日志全部存储在管理端。如果长期运行且攻击频繁日志数据库会增长。需要定期检查./data/server目录的大小。Hfish自带日志清理功能可以在【系统配置】中设置保留天数。网络带宽节点端与管理端的通信量很小主要是文本日志。但节点端本身如果模拟大型文件下载在Web蜜罐中则会消耗出口带宽需注意。部署Hfish的过程就像在数字世界的黑暗中点亮一盏灯不是为了照明而是为了看清那些在暗处蠢蠢欲动的身影。它不会直接阻止攻击却能给你前所未有的可见性。从第一次看到自己的服务器每天被全球各地的IP扫描爆破的震撼到后来能从容地分析攻击模式、提前加固真实服务这种从被动到主动的转变才是安全运维最大的价值提升。刚开始不必追求大而全先在一个非核心的系统上部署一个Redis蜜罐和一个Web蜜罐坚持看一周的日志你一定会对“网络安全”这四个字有全新的、具象的理解。