在SSH登录前添加奇怪的Banner

背景

拥有自己服务器/VPS的小伙伴们一定都遇到过这种情况:如果使用的是密码登录,那么一段时间后就会有大量的扫描器来尝试爆破你的服务器,如果你使用的是弱口令,很抱歉,你的服务器可能没了…

当然了,为了安全起见,很多小伙伴都是选择密钥认证,或者用iptablesdrop掉不可信的来源,自己再使用跳板机登录。不过呢,还是有人像我一样懒,犯愁密钥管理,就使用密码认证(虽然我现在也用一台跳板机统一管理),自然成为了爆破的目标。

面对上万甚至十几万的爆破请求,我们可以简单粗暴的使用fail2ban来自动屏蔽登录失败次数过多的IP,这也是老生常谈的了,今天来分享一个更有意思的技巧。

SSH登录时添加Banner

什么是Banner?Banner就是横幅,像欢迎标语一样,或者提示一些信息。

注意:我们这里说的是sshd中的banner指令,它的作用是在用户登录前显示信息,而非平常见到的登录后显示的信息(/etc/motd是shell提供的)

指定sshd的Banner

打开sshd的配置文件,/etc/ssh/sshd_config

可以找到Banner指令,然后去掉它的注释,随意指定一个文件路径。(没有的话就自己加上吧)

创建这个文件,修改成你喜欢的内容

然后重启一下sshd,systemctl restart sshd,大功告成,就是这么简单

奇怪的操作

文章开头提到了爆破的问题,它们的原理其实很简单,首先扫描全网的端口(使用masscan这种基于syn握手的无状态扫描器可以非常快),然后筛选出使用ssh协议的端口(将ssh端口从22改为其他并没有太大作用,老老实实fail2ban吧),之后跑弱口令字典爆破。

那么,它们怎么知道登录是否成功了呢?我们登录时如果输错密码,服务器便会返回Access denied,扫描器就是通过检测服务器返回的信息来判断是否登录成功的。

很有趣,大部分的爆破工具实现的并不是那么”聪明”,假如我们在它们登录前抢先发送Access denied,大多数不太聪明的工具就会立即判断失败。怎么在登录前发送信息?就是利用banner。

我在banner中加入了Access denied字样,顺便送了扫描器两只🐴,之后便再也没被爆破过。

注意

此方法只是骗过那些实现不太好的bot,如果我来写一个爆破工具,一定会考虑到这种情况的。所以大家还是尽量使用密钥认证,或者使用fail2ban来禁止恶意登录。

Azure99

底层码农,休闲音游玩家,偶尔写写代码

看看这些?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注