一开始玩VPS的时候其实只是为了能做个正向代理,所以搭好环境后就去上网冲浪了,对安全的问题一直没有过多的关注。但是最近上服务器检查情况时,看到了一些奇怪的提示,才让我开始真正的重视起来。
Last failed login: Wed Aug 19 19:34:58 CST 2020 from 120.53.243.163 on ssh:notty
There were 63 failed login attempts since the last successful login.
系统的提示其实已经很直白了,有个IP一直在尝试用ssh登录我的服务器。一开始还以为我只是个例,结果搜了下发现很多人的服务器都遇到过这种情况。这其实是攻击者去批量扫描,扫到开放的端口就开始跑字典进行暴力破解的后果。要是你正好不是用密钥去登录,而且设置的是弱口令的话,那么恭喜你,你的服务器大概率会被攻破变成肉鸡。
那何为肉鸡呢?简单来说就是可以被别人远程控制的计算机。别人不仅可以收集你机器上的信息,还可以在你机器上跑挖矿脚本,甚至在你不知情的情况下对其他的机器进行DDOS攻击等等……这危害可是相当巨大的,所以我们要采取一些适当的防范措施。
外部防火墙拦截
这应该是最简单实用的方法了,不需要敲命令去设计firewall规则,直接在主机商的控制台就能完成操作。大部分的主机商默认会为服务器配置外部防火墙(有的商家也叫安全组策略,两者是一样的东西),添加规则完全在图形化界面上,这里不展开叙述
自带防火墙配置规则
有的主机商可能没有配备外部防火墙,这时我们就需要配置机器本身的防火墙用作防御。以CentOS 8为例,先确认防火墙状态 systemctl status firewalld
,如果没开启,可以先用 systemctl start firewalld
命令开启。想要限制IP访问某个端口,可以用
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=8.8.8.8 service name=ssh reject'
其中address换成你要ban的IP,service name=ssh
可以换成 port protocol=tcp port=22
这种形式,如果是设置只接受某个IP的访问,则把最后的reject换成accept即可。
修改默认的SSH端口
因为22号端口是被扫描的重灾区,所以我们索性换个端口进行ssh登录。修改 /etc/ssh/sshd_config
这个文件,找到 #Port 22
,去掉注释,改成高位端口(不过建议先保留22号端口,然后在下面另起一行写入你想要的端口号,测试过可以登录了,再删掉22号端口也不迟)。改完后wq保存,然后 systemctl restart sshd.service
重启ssh服务,再 systemctl status sshd.service
检查一下配置是否生效。别忘了在firewall开放一下对应的端口O ~
禁用root登录
无论是Windows还是Linux系统,为了安全,我们最好习惯去使用低权限账户。因为管理员账户的权限太大了,可以随意修改系统设置。举个不太准确的例子,假如你下载了一个带毒的软件,不巧的是,你正好是以管理员的身份运行它,那么这个病毒就被赋予了管理员的权限,就可以对你的系统大肆破坏了。更极端一点的情况,它甚至可以把你的杀毒软件给干掉。另外用管理员账户进行操作时,如果出现了误操作,那么带来的损失可能会相当巨大。除非你真的非常清楚你在干什么,否则不要轻易使用root账户。另外Linux提供了 su
和 sudo
命令,方便你在权限不足的情况下使用命令。
禁用root登录很简单,和上面修改ssh端口类似,在 /etc/ssh/sshd_config
这个文件,找到 PermitRootLogin yes
这一行,把yes改为no即可,然后重启一下ssh服务保存更改。另外可以把这个文件的写入权限拿掉,以保障安全。这时你再尝试用root账户登录,就算密码正确,也会被服务器拒绝连接。
启用sudo命令
有时用普通用户进行操作时,可能会遇到权限不足的情况,这时再切换到root用户就显得比较麻烦。不过Linux提供了sudo这个方案,可以解决这个问题。先切回管理员身份 su -
,然后修改 /etc/sudoers
这个文件,加入内容如下
root ALL=(ALL) ALL #这行是原本配置,下面两行为新加入
user ALL=(ALL) ALL
%usergroup ALL=(ALL) ALL
# 其中user为你想使用sudo的用户名,usergroup则是用户组,即组内的用户皆可使用sudo,这个大家按需添加即可。
sudo默认获得权限时间为五分钟,即五分钟后再用就需要重新输入password了。不过你也可以修改时间,或者改成不输入密码使用,不过我认为这样的话安全性就大打折扣了。
总结
这些配置主要能防范一些恶意爆破,但并非滴水不漏,因为天底下没有毫无破绽的系统。所以如果你的连接设备比较固定,我更推荐你使用密钥去连接。而且过度的防御,只会让你使用机器的时候更加地麻烦,毕竟安全和便利很难兼得嘛🙃
喜欢折腾的朋友可以用Fail2ban配置更严密的规则,不过这里篇幅有限,改天再开一期单独讲吧!其实是想再水一期……
总的来说,就是除了需要的端口,其他的尽量不要开放。对开放了的端口,最好防火墙配置一下规则,过滤掉一些恶意请求。暂时先想到这么多,后面再补充吧 ~