三种蜜罐搭建实战:Pentbox、Defnet与Cowrie配置与避坑指南
发布时间:2026/10/30 7:01:10 锦皓数字建站

简介这份文档面向网络安全初学者与渗透测试爱好者围绕 Defnet、Pentbox、Cowrie 三种蜜罐工具讲解从环境准备到实际部署使用的完整流程帮助读者理解蜜罐的诱捕原理并动手搭建可用的实验环境。资源包内共 1 个 docx 文件约 7.96MB以图文步骤形式记录了 Pentbox 在 Kali 下的下载解压与端口监听配置、Defnet 虚拟 Telnet 服务的伪装参数设置与监视以及 Cowrie 的依赖安装、虚拟环境配置和 SSH 端口修改等关键环节便于对照复现。目前已有 3083 人学习下载适合作为课程实验、安全演练或自学蜜罐技术的参考材料读者可从中获得三种工具的部署思路、参数配置要点与常见依赖报错的处理方向快速搭建起可观测攻击行为的蜜罐环境。1. 三种蜜罐搭建实录从 Pentbox 到 Cowrie把攻击流量引进来很多人对蜜罐的印象还停留在“装个软件就完事”真到动手才发现端口冲突、依赖缺失、日志权限、伪装真实性每一步都能让人卡半天。这份资源把 Pentbox、Defnet、Cowrie 三种蜜罐的搭建与使用串在一起覆盖了从低交互到中等交互的典型形态Pentbox 用 Ruby 写、面向 GNU/Linux也能跑在装了 Ruby 的 Windows 和 MacOS 上适合快速起一个端口监听Defnet 偏图形化能虚拟 Web、FTP、SMTP、Finger、POP3、Telnet 服务适合做伪装真实度的演示Cowrie 是中等交互的 SSH 蜜罐能拿到攻击者暴力破解用的字典、输入的命令以及上传下载的恶意文件。适合做安全实验、教学演示、内网诱捕验证的从业者也适合想理解蜜罐到底怎么“骗人”的新手照着复现。2. PentboxRuby 蜜罐的快速起停与手动配置Pentbox 的定位很明确——把渗透测试里一些流程化的动作打包成一个套件蜜罐只是其中一个模块。它用 Ruby 编写面向 GNU/Linux同时也支持 Windows、MacOS 和其它任何装好 Ruby 的系统。在这份资源里Pentbox 的演示环境是 Kali Linux整个流程从下载、解压到启动都是命令行完成适合拿来做一个最小可用的端口监听实验。2.1 下载、解压与启动入口资源里给出的下载方式是在终端里直接拉取 pentbox-1.8 的压缩包然后解压、进目录、执行主脚本。这套动作看起来简单但目录结构和执行权限是两个容易翻车的点先把命令走一遍。# 下载 pentbox-1.8 压缩包 wget https://sourceforge.net/projects/pentbox18realised/files/latest/download/pentbox-1.8.tar.gz # 解压到当前目录 tar -zxvf pentbox-1.8.tar.gz # 进入解压后的目录 cd pentbox-1.8/ # 查看目录内容确认主脚本存在 ls # 执行主脚本进入交互菜单 ./pentbox.rb这几条命令里tar -zxvf的z表示走 gzip 解压x是解包v输出过程f指定文件名顺序不要写错。执行./pentbox.rb时如果提示权限不足说明脚本没有可执行位补一个chmod x pentbox.rb再跑。进入菜单后按资源里的路径走输入 2 选择 Network Tools再选 3 进入 Honeypot。到这里会出现两个分支一个是快速自动配置一个是手动配置下面分开说。2.2 快速自动配置80 端口一键监听快速自动配置Fast Auto Configuration做的事情很直接——自动把端口设为 80 并开始监听不需要你再填任何参数。选完之后终端会打印HONEYPOT ACTIVATED ON PORT 80这时候用浏览器访问本机 IP比如http://192.168.44.130页面上会返回一个 Access denied 的报错。这个报错不是故障而是蜜罐故意返回的响应同时终端里会跟着出现INTRUSION ATTEMPT DETECTED表示这次访问已经被记录。这里有个细节值得注意80 端口在多数 Linux 发行版上属于特权端口普通用户直接监听会失败。资源里的操作是在 root 下完成的如果你用普通用户跑要么切到 root要么改用 8080 这类高位端口。另外浏览器访问时用的 IP 必须是你当前机器的真实地址用ip addr或ifconfig确认别照抄示例里的地址。快速模式适合验证“蜜罐能不能起来”不适合做长期观察因为它不落盘日志终端一关记录就没了。2.3 手动配置端口、错误信息、日志与蜂鸣报警手动配置Manual Configuration才是这份资源里 Pentbox 的真正重点。选进去之后会依次提示你输入开放端口、显示的错误信息、是否保存 log 文件并设置文件名、是否开启蜂鸣警告。这几个参数决定了蜜罐的“样子”和“留痕方式”逐个说清楚。端口这一项资源里演示了 23、21、22、443 等几个常见端口telnet 23 端口测试时 penTBox 能正常监听到请求。选端口的原则是挑那些攻击者习惯扫的端口比如 21 对应 FTP、22 对应 SSH、23 对应 Telnet、443 对应 HTTPS这样被扫到的概率更高。错误信息这一项决定访问者看到什么填得越像真实服务越不容易被一眼识破。日志文件名建议带上日期或端口方便后续区分不同蜜罐实例的记录。蜂鸣警告开启后检测到网络活动时会有声音提示做现场演示时比较直观但长期跑建议关掉不然会被吵到。配置完成后 penTBox 开始监听资源里用 telnet 测试 23 端口终端能看到监听记录。同样的方式可以换到 21、22、443penTBox 都能起到监听作用。这里要提醒一句Pentbox 属于低交互蜜罐它只负责监听和记录连接行为不会给攻击者一个可交互的 shell所以别指望从它身上拿到攻击者的完整操作链。它的价值在于“发现有人在扫”而不是“陪攻击者玩下去”。3. Defnet图形化伪装与 Telnet 诱捕的完整链路Defnet 和 Pentbox 的路子不一样它走的是图形化路线重点在“伪装真实度”。资源里的实验目标是远程 telnet 连接服务器利用 Defnet 设置蜜罐并进行监视。整个流程在物理机上打开 Defnet点 HoneyPot 按钮进入设置可以虚拟 Web、FTP、SMTP、Finger、POP3、Telnet 这几类服务。这一章按“配什么、怎么配、怎么看”三层展开。3.1 虚拟 Telnet 服务与账号设置实验里先虚拟一个 Telnet Server用户名设为 root密码设为 123456。这个账号密码是给攻击者“登录”用的不是真实系统的凭据所以可以设得简单一点目的是让攻击者觉得登录成功了从而继续操作。设置对话框里除了账号密码右下角还有一个 Advanced 入口点进去是 Telnet Server 的高级设置项包括伪装驱动器盘符Drive、卷标volume、目录创建时间和目录名、剩余磁盘空间Free space in bytes、MAC 地址、网卡类型等。这些参数看着琐碎但它们决定了虚拟出来的系统像不像真的。比如剩余磁盘空间填一个不合理的值攻击者df一下就会起疑MAC 地址和网卡类型对不上也会露馅。资源里把这些项都列了出来说明作者意识到“伪装”不是随便填个 banner 就完事。实际配置时建议先想清楚你要伪装成什么系统——Windows 还是 Linux桌面版还是服务器版——然后让盘符、卷标、目录时间、磁盘空间、MAC 前缀这些信息互相自洽。3.2 监听、连接与过程记录设置完成后在第一个对话框按 Monitore 按钮开始监听。资源里的网络环境是物理机 IP 为 192.168.44.1虚拟机 IP 为 192.168.44.132然后在命令行里执行telnet 192.168.44.1发起连接。连接成功后输入蜜罐的用户名和密码Defnet 的 Monitore 窗口会记录整个过程有用户连接到蜜罐、输入用户名和密码、连接超时、登录成功这些状态都能看到。# 在物理机命令行查看本机 IP确认监听地址 ipconfig # 从虚拟机侧发起 telnet 连接目标为物理机 IP telnet 192.168.44.1ipconfig是 Windows 下的命令资源里的物理机是 Windows 环境所以用它确认地址如果你在 Linux 侧操作换成ip addr。telnet 连接建立后输入预设的 root / 123456Monitore 里会依次出现连接、认证、超时、成功的记录。这里的关键不是“登录成功”本身而是整个交互过程被完整留痕——攻击者以为自己在登录一台真实服务器实际上每一步都在被观察。Defnet 的局限也在这里它虚拟的服务类型有限交互深度也有限适合做演示和基础诱捕不适合承载复杂的攻击链分析。4. Cowrie中等交互 SSH 蜜罐的依赖、端口与转发Cowrie 是三种里交互程度最高的一个它是一个中等交互的 SSH 蜜罐装在 Linux 上能获取攻击者用于暴力破解的字典、输入的命令以及上传或下载的恶意文件。攻击者上传恶意文件后执行操作均会失败所以对蜜罐本身来说比较安全。这份资源里的 Cowrie 搭建全程在 Kali Linux 上完成步骤比较长坑也集中下面按安装、配置、转发、启动四段拆开。4.1 用户、依赖与虚拟环境第一步是添加一个非 root 用户 honey设置密码然后安装 Python 相关包和 virtualenv。资源里给的包列表包括 python-twisted、python-crypto、python-pyasn1、python-gmpy2、python-mysqldb、python-zope.interface这些是 Cowrie 运行的基础依赖。# 添加非 root 用户 honey-r 表示系统用户-m 建家目录-s 指定 shell useradd -r -m -s /bin/bash honey # 设置 honey 用户密码资源里为方便设为 123456 passwd honey # 安装 Cowrie 需要的 Python 相关包 apt-get install -y python-twisted python-crypto python-pyasn1 \ python-gmpy2 python-mysqldb python-zope.interface # 安装 virtualenv用于隔离 Python 环境 apt-get install virtualenvuseradd的三个参数各有含义-r建的是系统用户-m同时创建家目录-s指定登录 shell。用非 root 用户跑蜜罐是安全习惯万一蜜罐被攻破攻击者拿到的也不是 root。依赖安装用-y免交互适合脚本化。这里要注意不同发行版的包名可能略有差异资源里是 Kali 环境下的写法换到别的系统上如果某个包找不到先用apt-cache search确认实际包名再装。4.2 拉取源码与 Python 虚拟环境配置接下来把 Cowrie 拉到/opt下进目录建虚拟环境激活后安装 twisted、cryptography、pyopenssl、gmpy2。资源里明确记录了这一步会报错需要补装 python-cffi、libffi-dev、libssl-dev、libgmp-dev、libmpfr-dev、libmpc-dev 这些依赖装完再重跑上一步的 pip 安装。# 进入 /opt 并拉取 Cowrie 源码 cd /opt git clone http://github.com/micheloosterhof/cowrie # 进入源码目录创建并激活 Python 虚拟环境 cd /opt/cowrie virtualenv env source env/bin/activate # 在虚拟环境中安装依赖这一步可能因缺少系统库而报错 pip install twisted cryptography pyopenssl gmpy2 # 补装编译相关依赖后重试 apt-get install -y python-cffi libffi-dev libssl-dev apt-get install -y libgmp-dev libmpfr-dev libmpc-dev pip install twisted cryptography pyopenssl gmpy2virtualenv env在当前目录下建了一个叫 env 的隔离环境source env/bin/activate激活后后续 pip 安装都落在这个环境里不会污染系统 Python。报错的原因是 cryptography 和 gmpy2 这类包需要编译而编译又依赖 libffi、libssl、libgmp 这些开发库缺一个就卡住。资源里把报错和补装步骤都写出来了这是很实在的经验——很多人卡在这一步不是因为命令写错而是不知道缺的是系统库而不是 Python 包。4.3 权限、配置文件与端口调整虚拟环境配好后要把/opt/cowrie的拥有者改成 honey然后复制配置文件、改 umask、改监听端口。资源里的操作是chown -R honey:honey /opt/cowriecp cowrie.cfg.dist cowrie.cfg建立配置文件再把 start.sh 里的umask 0077改成umask 0022最后把 cowrie.cfg 里的listen_port改成 63333。# 把 Cowrie 目录的拥有者改为 honey 用户 chown -R honey:honey /opt/cowrie # 复制默认配置作为实际配置 cp cowrie.cfg.dist cowrie.cfg # 修改启动脚本中的 umask从 0077 改为 0022 cd /opt/cowrie vim start.sh # 将 -- umask 0077 改为 -- umask 0022 # 修改蜜罐 SSH 监听端口默认 2222改为 63333 vim cowrie.cfg # 将 listen_port 的值改为listen_port 63333umask 从 0077 改成 0022 是为了让日志文件对同组用户可读方便后续分析如果保持 0077日志只有 honey 自己能看排查时会多一层麻烦。端口改成 63333 的理由资源里写得很清楚——高于 60000 的端口能避开 nmap 默认的端口扫描范围减少被直接扫到的概率。这个思路值得记住蜜罐不是越显眼越好而是要“在该被找到的地方被找到”真实 SSH 走 22蜜罐走高位端口靠转发把流量引过来。4.4 iptables 转发与真实 SSH 端口迁移端口转发是 Cowrie 这套方案里最关键的一环。资源里的做法是用 iptables 把公网访问 22 端口的请求重定向到蜜罐端口同时把真实 SSH 的端口改到 62225避免和蜜罐抢 22。# 将访问 22 端口的 TCP 请求重定向到蜜罐端口 62223 iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 62223 # 修改真实 SSH 服务端口为 62225 vim /etc/ssh/sshd_config # 将 Port 改为 62225 # 重启 SSH 服务使配置生效 service ssh restart-t nat指定 nat 表-A PREROUTING在路由前链追加规则-p tcp --dport 22匹配目标 22 端口-j REDIRECT --to-port 62223把流量重定向到本地 62223。这里要注意资源里蜜罐监听端口写的是 63333转发目标写的是 62223两处数字不一致实际配置时必须让--to-port和 cowrie.cfg 里的listen_port保持一致否则流量转过去没人接。真实 SSH 改到 62225 之后你自己登录要用ssh -p 62225别忘了这一步不然会把自己关在门外。4.5 启动蜜罐与日志观察切换到 honey 用户进/opt/cowrie执行bin/cowrie start。资源里记录启动时会报缺依赖补装 configparser、service_identity、pycrypto、tftpy 后启动成功。启动后用另一个终端确认本机 IP再用 SSH 连接蜜罐端口连接成功后会提示蜜罐的信息cowrie.log 和 cowrie.json 里会留下记录。# 切换到 honey 用户操作 su honey # 进入 Cowrie 目录并启动蜜罐 cd /opt/cowrie bin/cowrie start # 若报缺依赖补装后重试 pip install configparser service_identity pycrypto tftpy bin/cowrie start启动后资源里用 xshell 连接已知的蜜罐端口 2222登录成功并看到蜜罐提示信息cowrie.log 记录了登录过程cowrie.json 里是结构化记录。资源里还做了一个有意思的验证——在蜜罐环境里 ping 百度返回的是蜜罐信息cowrie.log 里也能看到这次反馈。这说明蜜罐对攻击者可见的环境做了隔离攻击者以为自己在操作一台真实主机实际上看到的是被构造出来的表象。cowrie.json 适合做后续的自动化分析cowrie.log 适合人眼快速过一遍两个都留着排查时互相印证。5. 避坑与排查三类蜜罐的常见翻车点三种蜜罐跑下来翻车点其实有共性也有各自的特有坑。这一章按“现象 → 原因 → 解决”整理五条都是复现过程中容易撞上的。5.1 Pentbox 启动无反应或端口监听失败现象执行./pentbox.rb后菜单能进但选完快速配置终端没有出现HONEYPOT ACTIVATED ON PORT 80浏览器访问也没有 Access denied。原因通常是 80 端口已被占用或者当前用户没有绑定特权端口的权限。解决先用ss -lntp | grep :80确认 80 是否被占被占就换端口或停掉占用进程普通用户跑就切 root或者改用手动配置选一个 1024 以上的端口。5.2 Defnet 虚拟服务被一眼识破现象telnet 连上 Defnet 后攻击者侧或测试侧很快发现磁盘空间、MAC 地址、目录时间对不上交互没继续。原因Advanced 里的伪装参数没有互相自洽比如盘符是 Windows 风格但 MAC 前缀是别的厂商或者剩余磁盘空间填了一个不可能的值。解决先定好要伪装的目标系统再让 Drive、volume、目录创建时间、Free space、MAC、网卡类型这几项围绕同一个系统画像填宁可保守也不要夸张。5.3 Cowrie 虚拟环境安装依赖反复报错现象pip install twisted cryptography pyopenssl gmpy2执行到一半报编译错误补装 Python 包也不管用。原因cryptography 和 gmpy2 需要编译编译依赖的是系统级开发库不是 Python 包。解决按资源里的顺序补python-cffi libffi-dev libssl-dev和libgmp-dev libmpfr-dev libmpc-dev装完再重跑 pip如果还报错看报错里缺的头文件属于哪个库对症补装。5.4 iptables 转发后连不上蜜罐现象iptables 规则加了真实 SSH 也改端口了但外部连 22 端口没有落到蜜罐上。原因--to-port的目标端口和 cowrie.cfg 里的listen_port不一致或者蜜罐根本没启动。解决先bin/cowrie status确认蜜罐在跑再核对iptables -t nat -L PREROUTING -n -v里的转发目标和配置文件里的端口是否一致资源里 63333 和 62223 的写法就是典型的不一致陷阱。5.5 日志文件读不到或权限不足现象蜜罐跑起来了但 cowrie.log 或 pentbox 的 log 文件打不开提示 permission denied。原因umask 没改或者文件拥有者和当前分析用户不一致。解决按资源里的做法把 start.sh 的 umask 从 0077 改成 0022确认/opt/cowrie的拥有者是 honey分析时用 honey 用户或同组用户读取Pentbox 手动配置时如果选了保存 log也要确认当前用户对目标目录有写权限。6. 进阶验证用日志和端口行为判断蜜罐是否真的在工作蜜罐搭起来只是第一步能不能判断它“真的在骗人”才是关键。我一般不看启动成功的提示而是从三个角度做验证端口行为、日志内容、交互深度。端口行为上用ss -lntp确认监听端口和预期一致再用另一台机器发起连接看连接是否被接受、返回的 banner 是否符合伪装设定。日志内容上Pentbox 看终端输出和 log 文件里有没有记录源 IP 和访问时间Defnet 看 Monitore 窗口的状态流转是否完整Cowrie 看 cowrie.log 和 cowrie.json 是否同时落盘、字段是否对得上。交互深度上Cowrie 可以试着走一遍登录、执行命令、上传文件的流程确认命令被记录、文件被执行失败这说明中等交互的边界在起作用。验证项PentboxDefnetCowrie监听确认ss -lntp看端口Monitore 窗口状态bin/cowrie status连接记录终端输出 log 文件Monitore 过程记录cowrie.log / cowrie.json交互深度仅连接与响应虚拟服务登录交互命令、字典、文件上传典型误判80 端口被占伪装参数不自洽转发端口与监听端口不一致这张表不是让你背而是排查时按行对一遍哪一行对不上就往那个方向查。还有一个习惯值得养成每次改完配置先在本机用最小代价验证一遍再放到实验网络里跑。比如 Cowrie 改完端口先ssh -p 63333 honey本机IP看能不能连上连上了再动 iptablesPentbox 改完端口先浏览器访问一次看返回再去 telnet。这样出问题时变量少定位快。从那以后我每次搭蜜罐都强制走一遍“端口—日志—交互”这三步验证不看到日志里真的落下一条记录就不算搭完。希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。