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

0 - 前言处于公网的服务器 , 好比在海上游泳 , 水底下大白鲨虎视眈眈 , 
伺机上攻 , 一口吞下 。
一般我们都要使用远程登录 。
 
1 - 文件传输不害怕 , 就来明文 ,  FTP , 用着还行 。虽然速度没那么理想 。
也可以使用 SCP , RSYNC 加密传输 。
可是 , 都用 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
连骨头渣都没留 , 
甭管什么请求 , 你这儿来的 , 我一概不收 。
当时加 , 当时就生效了 , 
那孙子再没来烦过我 。
还有一个不是当时生效的法子 , 


推荐阅读