我的 CentOS 服务器,是怎么被一步步废掉的

0 - 前言

处于公网的服务器,好比在海上游泳,水底下大白鲨虎视眈眈,

伺机上攻,一口吞下。

一般我们都要使用远程登录。


1 - 文件传输

不害怕,就来明文, FTP,用着还行。虽然速度没那么理想。

也可以使用 SCPRSYNC 加密传输。

可是,都用 SSL 了,为什么不用 SSH 登录操作呢?

于是,SSH 服务也就打开了。


2 - SSH

默认root 是不允许访问的。可是系统管理员太懒了,sudo

敲来敲去,

文件权限翻来覆去,烦人不烦人。于是

PermitRootLogin yes

好了,每次登录服务器都要输

ssh -p 22 root@romte_host

还要输入密码,太凌乱了。


3 - 公钥、私钥

于是,个人电脑上

ssh-keygen -t rsa

创建公钥私钥,使用

ssh-copy-id -p 22 root@remote_host,

把公钥拷贝到远程主机。

这下方便多了,再次使用

ssh -p 22 root@romte_host

登录,不用输!密!码!

瞬间清洁了不少。


4 - 端口!端口!

服务器上好多旧系统的任务,

不能全部重写吧。

万一改错哪个地方,

不是得卷铺盖滚回寨子里去?

所以,端口 22 坚决不改。


5 - 来自世界各地的问候

有时候,登到服务器,

systemctl status sshd

看到服务无间断运行了128天,心里无比高兴。

可是列出来的几行红色字体,

总是那么烦人,不过应该没事儿,应该没事儿。


6 - 日志里的端倪

学习了一些 systemd 的知识,

知道这老兄有个二进制日志工具

journalctl

尝试着打印一下日志:

journalctl --unit="sshd" --since="-1 day"

这筛选条件,是不是高端多了,

特别是那个 “-1 day”,

有没有一种敲代码的感觉。

乌泱泱一大片,间隔 1-2 秒,

就有一条类似

Failed password for user root ……

红色字体,分外扎眼。

好像我的服务被攻击了。


我的 CentOS 服务器,是怎么被一步步废掉的


7 - 找出元凶

于是拼命在网上搜索关键词找答案,

有了下面这样的筛选项,

让我看到攻击源来自哪里。

journalctl --unit="sshd" --since="-30 minutes"

接着管道符,筛选字段。

注意,journalctl 不提供 grep 相似的正则选项,

非不能也,不为也。

awk '/Failed/{print $(NF-3)}'

倒数第三个字段就是那个试图攻击服务器的IP。

接着管道符,排序,筛选统计。

sort | uniq -c

注意,一定是先排序,后统计去重,

不能反过来,无效的哦。

接着管道符,筛选出来明显输错次数多的IP记录。

awk '{if($1 >= 3){print$2;}}'

于是,我们通过上述几条命令,

成功筛选出了,在过去30分钟内,

至少输错过3次密码的 IP 列表。

此处应有掌声。bravo


我的 CentOS 服务器,是怎么被一步步废掉的


把 IP 关进小黑屋

找到不正常 IP 之后,

该把这些不法分子关进小黑屋了。

直接生效的,iptables 把丫的封了。

iptables -I INPUT -s 8.8.8.8 -j DROP

连骨头渣都没留,

甭管什么请求,你这儿来的,我一概不收。

当时加,当时就生效了,

那孙子再没来烦过我。

还有一个不是当时生效的法子,

写入 /etc/hosts.deny

可是得

systemctl restart sshd

麻烦,

不能起到即时防护的作用

有闲工夫的,可以试试。

简单加一条

sshd:8.8.8.8

就搞定了。


我的 CentOS 服务器,是怎么被一步步废掉的


写在最后

够了吗?

上面的是最好的解决方案吗?

显然不是。

那什么才是更好的:

  1. SSH 默认端口太危险,立马换掉;
  2. PermitRootLogin = no 坚决执行;
  3. 使用检测脚本,crontab 内调度运行,实时封禁;
  4. 使用专业工具如 Fail2Ban 进行防控。

结尾附上一首四言:

时常查看,

管好权限,

精准防控,

有备无患!

我是@程序员小助手 ,持续为你分享编程与程序员成长相关的内容,欢迎关注~~


分享到:


相關文章: