使用docker部署蜜罐记录ssh登陆密码
今天登录服务器时发现 SSH 有持续被爆破的记录。更稳妥的处理方式不是直接动线上 OpenSSH,而是先把真实 SSH 服务迁移到其他端口,再单独放一个蜜罐容器监听 22 端口,用来观察爆破来源、用户名和弱密码尝试。
本文只讨论防御侧的日志采集与环境隔离,不涉及反向登录或进一步利用。整个流程是:先保护真实 SSH,再用 Docker 跑一个 SSH 蜜罐,最后分析采集到的日志。
本人环境centos7,ubuntu有所不同,自己根据环境可能需要更换某些环境相关参数。
主要步骤:
- 修改sshd服务端口
- 修改sshd服务默认端口
- 关闭selinux
- 修改sshd配置文件,重启ssh服务
- 部署ssh蜜罐docker
- 安装docker,启动docker服务
- 编译ssh蜜罐docker,运行蜜罐
开始前先确认
- 你还能通过新的 SSH 端口正常登录服务器
- 云安全组或防火墙已经放行新的管理端口
- 蜜罐只用于观察和记录,不要把它当成真实 SSH 服务使用
修改sshd服务端口
修改sshd服务默认端口
直接修改ssh配置文件/etc/ssh/sshd_config,找到#Port 22这一项并修改,这里改为2222
vim /etc/ssh/sshd_config
如图:

关闭selinux
编辑/etc/selinux/config关闭selinux
vim /etc/selinux/config
修改为SELINUX=disabled
重启系统
shutdown -r now
sestatus可查看selinux状态 如果显示 SELinux status: disabled 则selinux已经关闭成功
重启ssh服务
systemctl restart sshd.service
如果出现
这种错误请回到上面关闭linux
使用
netstat -nlp|grep 222
查看ssh服务启动情况
则说明sshd服务修改成功
如果你的系统还开启了云厂商安全组或 firewalld,也记得同步放行新端口,否则重启 SSH 之后可能直接把自己锁在外面。
部署ssh蜜罐docker
安装docker并启动docker
yum update -y
yum install docker -y
systemctl start docker.service
更新yum并安装运行docker
建立第一个服务器并记录信息
使用github上的droberson/ssh-honeypot的ssh蜜罐部署docker
git clone https://github.com/random-robbie/docker-ssh-honey
cd docker-ssh-honey/
docker build . -t local:ssh-honepot
docker run -itd --name ssh-honeypot -p 22:22 local:ssh-honepot
这里首先使用docker建立一个ssh蜜罐的image,然后把docker蜜罐中的22端口映射到本地22端口,前面修改自身ssh端口就是为了防止与这里蜜罐开放的端口冲突 使用命令查看本地22端口开放情况
netstat -nlp|grep 22
如何验证蜜罐是否工作正常
建议至少检查 3 件事:
- 本机 22 端口是否已经由容器接管
docker ps能否看到ssh-honeypot正常运行docker logs是否已经开始出现扫描或连接记录
例如:
docker ps
docker logs --tail 20 ssh-honeypot
接下来就是查看蜜罐获取到的用户名和密码了 第一种命令行查看
docker logs -f $(docker ps -f name=ssh-honeypot -q) | grep -v 'Error exchanging' | head -10
第二种把日志保存在日志文件中,下次再来查看有哪些有意思的东西。
docker logs -f $(docker ps -f name=ssh-honeypot -q) | grep -v 'Error exchanging' | awk '{print $6, $7, $8}' >> /root/ssh_name_pass.log
以后分析记录到的ssh爆破密码只需要处理日志文件ssh_name_pass.log了。
一天后查看ssh登陆记录

shell分析登陆ip及用到的密码
cat /root/ssh_name_pass.log|grep -v ssh- |grep -v Sess|awk '{print $1}'|sort |uniq -c ##查看登陆ip及次数
cat /root/ssh_name_pass.log |grep -v ssh-|grep -v Sess|awk '{print $3}'|sort > /root/pass.txt ###保存对方登陆ssh的密码
#cd ~ && tail pass.txt
知道了对方ip以及扫描用到的密码

这是登陆密码查看
cd ~ && tail pass.txt

常见问题
1. 改完 SSH 端口后连不上服务器
优先检查:
sshd_config是否真的生效- 安全组或防火墙是否放行新端口
- SELinux 或系统策略是否仍在拦截
2. 蜜罐容器启动了,但 22 端口没有监听
通常是端口冲突,说明真实 SSH 还在占用 22 端口,或者 Docker 端口映射失败。
3. 日志一直没有数据
先确认公网 22 端口确实对外暴露,并且容器日志命令读取的是正确容器名。
总结
到这就全部结束了,本文从ssh被人爆破开始,然后使用docker部署ssh蜜罐获取登陆到本机ssh的用户名和密码。相对与使用patch打补丁的方式来说是比较简单的方式,而且可以避免本机用户信息被记录,是在是个好方法。当然真正来说保护ssh的方式是
- 设置ssh秘钥,禁止密码登陆
- 在安全组上限制只有本机ip可以访问远程端口
当然这么安全就没有办法水这篇文章了。。。
延伸阅读
- 原文作者:春江暮客
- 原文链接:https://www.bobobk.com/613.html
- 版权声明:本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。