使用endlessh来保护你的ssh服务
endlessh是一个小巧的ssh沼泽程序(tarpit:一种用来延时入站连接的服务程序),它通过不断地发送随机生成的协议版本信息来达到让尝试登陆的ssh客户端卡死的目的。
安装
endlessh是一个简单的的C语言程序,整个源代码只有一个C文件.
1 | git clone https://github.com/skeeto/endlessh |
这会生成一个可执行的 endlessh
程序. 我们可以把它移动到 /sbin
目录下
1 | sudo mv endlessh /sbin |
使用
通过 -h
选项可以输出 endlessh
的使用方法
1 | [root@VM_0_8_centos endlessh]# endlessh -h |
配置文件
从 endlessh -h
的帮助信息中可以看到它可以从配置文件中读取参数信息。 endlessh
的配置文件跟 OpenSSH
的配置信息是否类似:
1 | # The port on which to listen for new SSH connections. |
修改配置文件后,我们可以通过发送 SIGHUP
信号来让 endlessh
重新读取新的配置信息
1 | kill -s SIGHUP $(pidof endlessh) |
原理
SSH登陆分三个阶段:
协议协商阶段
密钥和算法协商阶段
认证阶段
而在 协议协商阶段
中,客户端向服务端建立链接后,服务端应该向客户端发送一个报文,该在报文中包括格式为“协议版本号 次协议版本号 软件版本号”的版本标识字符串。
而 endlessh
往客户端发送的是一段不断随机生成的字符串,相当于这个报文没有穷尽,也根本无法从这个字符串中解析出有意义的版本标识.
从而使ssh客户端卡在这一步,无法进行到下一步。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 3mile的博客!
评论