从这里开始,保护云主机呀!

To protect your cloud vm

Posted by Yang on April 30, 2021

这篇文章转载自我的公众号

引言

云服务因为其强大的功能,相对低的价格和灵活的部署已经走入了很多人的工作和生活中,很多朋友也都有了自己的云服务器。像我自己就用一台CentOS的VM加一个公网地址,可以做很多事情:

  • 做个论坛
  • 搭个博客
  • 个人主页
  • 内网穿透
  • 个人网盘
  • 公众号或者小程序的服务端
  • 你懂的…

但是如果大家有一个可以从公网IP默认SSH端口登陆的服务器,大家就会知道互联网的凶残了,一旦被盯上,暴力破解啊各种乱猜啊就来了,像酱紫:

里面有大量的各种IP用各种用户名尝试登陆并失败的记录,如果我们的服务器用户名很好猜(比如test),密码又简单(比如1234qwer),那被破解就是迟早的事儿嘛。

为了不轻易交出我们服务器的控制权,我们可以做很多事情来增加潜在攻击者的破解难度。

更改默认SSH端口

SSH默认监听TCP的22端口,我们可以通过更改服务器上的SSH配置来更改SSH监听端口,这样对方就需要扫描端口才能知道我们的SSH端口。以CentOS7为“栗”,更改/etc/ssh/sshd_config文件里面的Port:

再重启SSH进程即可。

有限放通入站端口

云服务提供商必然提供入方向的端口过滤功能,所以我们可以通过配置有限制的放通可选端口,并拒绝其他端口的访问请求,像酱紫:

用HTTP默认放通80,用HTTPS默认放通443,不要留无用的端口。

增加密码强度

设置密码需要增加复杂性,大小写字母/数字/特殊符号都要有。增加密码复杂性的同时也要保证自己好记。

将登陆失败的IP拉黑

即便更改了SSH默认端口,我们会发现,依然会有各种用户名来自各种IP尝试SSH到我们的公网IP,所以最后动用杀招一棒子打死一批,那就是通过shell脚本把secure log里面的登陆失败的IP添加到/etc/hosts.deny里面去。如果大家懒得自己写,可以参考这里的脚本(来自博客园非走不可的博客):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

#!/bin/bash

LIST=""

#过滤出协议尝试连接主机的ip
LIST=$(cat /var/log/secure | grep "authentication failure" | awk '{print$14}' | sed -e 's/rhost=//g' -e 's/ /_/g' | uniq)

#Trusted Hosts
excludeList=( "192.168.30.55" )

function chkExcludeList()
{
for j in "${excludeList[@]}"; do
    if [[ "$1" == $j ]]; then
        return 10
    fi
done
return 11
}

#检查并追加到hosts.deny文件中
for i in $LIST; do
    chkExcludeList "$i"
        if [ $? != "10" ]; then
            if [ "$(grep $i /etc/hosts.deny)" = "" ]; then
                echo "ALL: $i : DENY" >> /etc/hosts.deny
            fi
        fi
done

通过crontab每几分钟运行一次这个shell脚本即可。

其他防暴力破解工具

denyhosts fail2ban是两个可以防破解的工具,我个人没有用过,不过如果大家不想用拉黑源IP的方案,可以试试fail2ban,安装简单。

结语

最后祝大家用云主机玩的开心,玩的安全!