关于SSH超时断开的安全性考虑
关于ssh超时断开的安全性考虑
在做红蓝攻防,连接上服务器后,发现该资产服务器ssh连接长时间闲置不断开,这和平常用的云服务器不太一样。去了解了一下原因,主要是防火墙的原因。
通过ssh连接后,客户端和服务端长时间没响应时,在两方机器设置中均没任何限制,但在各自的防火墙,或是中转网络连接路由的防火墙中,出现了「闲置超时断开」的缺省机制!
要设置SSH超时断开时间,有以下的几种方法
方法一:修改服务器配置
修改/etc/ssh/sshd_config
文件
TCPKeepAlive yes
表示TCP保持连接不断开。默认关闭。表示默认状态下,不启用人为修改的连接空闲时长。如果我们想人为设置,使得后面的参数修改生效,则必须开启该选项,去除注释。ClientAliveInterval
参数,指定服务端向客户端请求消息的时间间隔,单位是秒,默认是0,不发送。例如,设置300表示5分钟发送一次(注意,这里是服务端主动发起),然后等待客户端响应,成功,则保持连接ClientAliveCountMax
参数,设置允许超时的次数。指服务端发出请求后客户端无响应则自动断开的最大次数。和前一个参数的乘积,即为最长保持连接的时间。重启sshd服务,使修改生效
1
2
3$ sudo /etc/init.d/ssh restart
# 或者
$ service sshd reload
简单地来说,TCP中的KeepAlive
机制通过定时发送探测包,来探测连接的对端是否存活。我们可以利用该机制,从服务端角度设置连接最大时长。
方法二:修改客户端和工具配置
从方法一可以知道,“闲置超时断开”主要是通过发送TCP探测包实现的。因此,也可以从客户端的角度出发,客户端保持对服务器的请求,即可保持来连接。有以下的几种方法。
修改客户端主机配置
1
2
3
4
5$ vim ~/.ssh/config
...
Host *
ServerAliveInterval 60
ServerAliveCountMax 3Host *
表示需要启用该规则的服务端(域名或IP)ServerAliveInterval 60
表示没60秒去给服务端发起一次请求消息ServerAliveCountMax 3
表示最大连续尝试连接次数(一般不用设置)
修改SSH工具的配置
开启工具的KeepAlive选项。
设置SSH命令连接参数
设置 -o 参数,设置与服务器的交互时间,多少时间给服务端发起一次请求。
1
$ ssh -o ServerAliveInterval=30 user@host
小结
相对来说,设置SSH超时断开,可以减少服务器资源的占用,并且一定程度上提高服务器安全性。但如果是出于使用的角度,不考虑前面提到的内容,则建议修改客户端和连接工具的配置。
Reference
[1] Linux使用ssh超时断开连接的真正原因, http://bluebiu.com/blog/linux-ssh-session-alive.html
本文主要参考该博客文章,并加上了该操作对安全性的考虑。