记一次服务器的维护.

最近因为某些不可言说的原因,我趁着农历春节优惠,用 8.88 $ / 年的价格购了一台国外服务器。

在搭好了所有环境之后,已经可以正式地部署使用了,于是我开始愉快地玩耍起来。但后来我逐渐发现,在登录服务器的时候,SSH 时 Authentication 过程相当地漫长;毕竟服务器地处遥远,我也没当回事。

直到后来服务器密码被改掉了,我才发现原来服务器被人黑了

破解密码

我一开始设置的初始密码为 12345678(当时也不知道网络上坏人竟然这么多),所以也十分容易被暴力破解。

怎么解决呢?难道就这样把自己的服务器拱手让人了吗?不,我赵铁柱是不会这么容易屈服的,于是我很快找到了解决办法。

入手点就在于服务器的提供商在后台也给我们了一系列的运维选项,以方便我们做一些服务器以外的操作,如重装系统更改 IP 等。我好不容易搭好了环境,不想就这么重装了,所以我打算通过 VNC 来解决。

VNC 是虚拟网络控制台的缩写。它是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发。VNC 是基于 UNIX 和 Linux 操作系统的免费开源软件,远程控制能力强大,高效实用,其性能可以和 Windows 和 MAC 中的任何远程控制软件媲美。

VNC 的好处在于它会完全显示服务器当前所显示的画面,就相当于是一个远程的显示器。所以通过内网的 VNC 连接到服务器,然后点击右上角的按键重启:

然后便是熟悉的启动界面,在 boot 状态下点击 esc 键,打断 GNU GRUB 引导,此时可以对启动项进行更改设置等操作。这个时候的操作 CentOS 6 和 CentOS 7 是不一样的,我是 CentOS 7,所以直接进入配置文件,设置为单用户模式,重新引导启动。

此时已经可以进入 root 用户了,然后使用 passwd 命令字改密码即可。

设置了强密码后,SSH 的速度还是很慢,正当我找不到原因时,SSH 连接服务器后系统提示我有 4000 多次失败的登录

还在搞我?

我用 lastb 命令看了一下,有两个来自江苏连云港的电信 IP 一直在试 root 密码暴力破解服务器,大量占用 22 端口的资源导致我连接过程缓慢。

禁它!

说干就干,直接通过在 /etc/hosts.deny 里面添加规则:

all:xxx.xxx.xxx

禁用了这两个 IP 访问所有用户的权限,当然也可以通过修改 /etc/hosts.allow 来设置 IP 的白名单,更加安全。在系统中 hosts.allow 的优先级会比 hosts.deny 要高。

tcp 客户端掌管着所有 IP 与服务器之间的连接。其访问配置文件的顺序是先访问 hosts.deny,然后再访问 hosts.allow,这两个文件中的 hosts.deny 和 hosts.allow 可以任意填写,不一定 hosts.deny 文件才能够写 hosts.deny 的规则。因为 hosts.allow 文件是后访问的,可覆写前面的规则,所以优先级会高。

还没结束…

封了之后,果然就没有多的登录失败的记录了,而且 SSH 时候的速度也恢复了正常。

就在这时,又多了几条来自同一个 IP 的登陆失败记录,一查发现还是江苏连云港市的 IP。真是大美江苏出人才,不到黄河心不死啊。我这样一条条 IP 禁下去也不是办法,成本太高,不如采用白名单制,只允许我的 IP 访问。因为我在家和在学校上网使用的是动态 IPv4IPv6,所以不能用,只能用我另一台服务器的固定 IP 作为中间点。

于是我在 hosts.deny 文件用 sshd:ALL:deny 规则禁止了所有的 sshd 访问,然后再 hosts.allow 文件里只允许了我的阿里云服务器(这是我唯一的一个静态 IP)进行 SSH 连接,最后再在阿里云服务器用公钥设置了免密登录

终于结束了。

至此,我就完成了所有的维护,并将服务器防火墙设到了一定的门槛,彻底地阻止了暴力破解的操作。