服务器安全(三)SSH防御

0、前言

前几天 @SCH 的服务器被SSH爆破了,短短几天错误日志多了9万条,他这才意识到,SSH密码登录非常不安全。

无论用服务器作何种用途,SSH一定是“梦开始的地方”,但是随着长期使用,SSH极有可能成为服务器被入侵的突破口。

众所周知,SSH登录首先需要有目标服务器的IP端口,然后需要提供登录信息,即账号密码,或账号密钥
很多人只注意到密码登录不安全,却忽略了SSH默认账号的问题。同样,很多人只知道修改SSH端口,却不知道如何让SSH端口根本就不被扫描到。

因此,本文将从以上提到的四个方面,谈谈SSH安全的最佳实践。

1、隐藏源站IP

看到这个标题,你也许会一头雾水,域名要解析到IP才可以生效,怎样不暴露IP呢?

事实上,只需要让域名解析到源服务器以外的IP,而该中转服务器再把流量传回源服务器,这样就可以实现,这就是许多人使用的CDN

如果有备案,可以直接接入云厂商的全球CDN,如果没有的话,可以参考

服务器安全(二)内外网防御
https://blog.tsinbei.com/archives/140/

用反向代理的方法,自制一个只有单IP的CDN。

然而,这种方法有一个缺陷,暴露外网端口的服务器,IP无法隐藏,而且也需要使用SSH连接,岂不是又容易暴露SSH端口?

因此,可以使用跳板机。

2、跳板机

顾名思义,跳板机就是一台中转服务器,SSH连接先经过它,再传输到源服务器。是不是又有点像前面提到的反向代理了?

首先,需要在源服务器防火墙设置,只允许跳板机访问源服务器的SSH端口:

防火墙放行跳板机

在云服务器安全组设置也是同理。

然后,在跳板机设置端口转发:

端口转发

这里的自定义端口,要保证足够安全,例如不能用22,如果是五位数端口最好。

之后,将只能通过跳板机IP:自定义端口访问源服务器SSH。跳板机可以是之前的源站服务器,这样IP将不会暴露,如此一来,倘若对网站进行端口扫描,只能扫描到80443端口了。

宝塔面板也可以使用此方法。不过在进行端口转发时,需要注意不能和已有端口冲突,要不然原有端口就连不上了。

3、更改端口

我强烈建议在第一时间修改默认的SSH端口。而且端口位数越大,被扫描到的概率越小。其他的都是些老生常谈的了,这里不再赘述。

4、更换用户

大部分Linux发行版默认用户是root,Ubuntu是ubuntu,在Azure购买的服务器是azure,你是否认为不使用root就万无一失?大错特错,以上列举的用户名都是被扫描的重灾区,应该尽可能避免使用。

这里以root为例:

SSH登录设置

默认为yes,即不限制;
最佳建议是直接改下成no,即禁止登录;
如果非要使用root登录,务必改成without-password,即只能密钥登录;
如果有软件(如rsyncd)需要通过SSH连接,可以改成forced-commands-only,也就是只允许这些软件连接SSH并执行操作,使用SSH客户端连接将会被直接拒绝。

我的建议是,使用自定义账号,例如自己的名字的拼音,然后养成权限隔离的习惯,必要时再加sudo,这样可以杜绝90%的误操作。

如果一定要使用root操作,何不登录自己的账号之后,再执行sudo -i呢。

5、密码

密码其实也是老生常谈,但是也有一些问题需要强调。

密码的原则是短口令优于无意义长密码,口令就是一些具有实际意义的字符或单词,例如This-is-my-password!,而无意义的长密码一般就是随机字符串,例如m7Hnl0Hwb5McKxiem1dLxjlw1,看起来后者更安全,因为更复杂,然后它复杂到我们无法用脑袋记住,必须记在一个东西上,万一这个东西泄露了,这个“安全”的密码也就不再安全。

因此,建议大家取一个好用的密码,要对自己而言有意义,这样才好记;要复杂,这样才安全。例如“张三”,可以叫做:

My-teacher-is-Bilibili@Luo-Xiang~

服务器安全(三)SSH防御

https://blog.tsinbei.com/archives/1065/

文章作者
Hsukqi Lee
发布于

2023-01-16

修改于

2023-05-18

许可协议

CC BY-NC-ND 4.0

评论

昵称
邮箱
网址
暂无