关于SSH超时断开的安全性考虑

关于ssh超时断开的安全性考虑

在做红蓝攻防,连接上服务器后,发现该资产服务器ssh连接长时间闲置不断开,这和平常用的云服务器不太一样。去了解了一下原因,主要是防火墙的原因。

通过ssh连接后,客户端和服务端长时间没响应时,在两方机器设置中均没任何限制,但在各自的防火墙,或是中转网络连接路由的防火墙中,出现了「闲置超时断开」的缺省机制!

http://bluebiu.com/blog/linux-ssh-session-alive.html

要设置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 3

    Host * 表示需要启用该规则的服务端(域名或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

本文主要参考该博客文章,并加上了该操作对安全性的考虑。