CentOS7云服务器安全加固
事情的起因是这样的,前几天我像往常一样用Putty
登录公司的云服务器,突然有一行字引起了我的注意,如图:
好家伙,37次登录失败,而且是root
用户。一股凉气从心里升起,我特意查了一下这个IP。
给我整不会了,啥?腾讯云?我用的不就是腾讯云的服务器吗?我猜也许是谁买了腾讯云服务器在这干坏事呢。无心细想,赶紧加固服务器防御要紧。
开启防火墙
之前为了调试方便,把防火墙给关了,实在不是明智之举,赶紧开启防火墙:
|
|
然后添加几个在用的端口:
|
|
SSH配置
更换root密码
先了解了一下到底有多少人在暴力尝试登录root
用户:
|
|
结果如图:
好家伙,第一个IP试了七千多次。赶紧给root
换个更强的密码——长度64的包括数字、字母和符号的随机密码。
禁止root登录
虽然我们设置了一个比较健壮的root
密码,但是万一密码泄露了,后果不堪设想。我们可以通过修改SSH配置来禁用root
登录,降低root
密码泄露的风险。禁用root
用户后,我们需要创建一个新用户用来替代root
登录系统。
创建新用户
创建一个新用户xxx
:
|
|
修改xxx
用户密码,设置一个随机密码:
|
|
将xxx
加到wheel
组里,这样xxx
用户就可以通过sudo
命令提权:
|
|
一般情况下,普通用户如果知道root
用户密码,可以使用su - root
切换为root
用户。可以修改配置文件/etc/pam.d/su
,使得wheel
组的用户才可以切换为root
用户:
|
|
修改SSH配置
修改/etc/ssh/sshd_config
文件的以下配置,禁用root
用户登录且只允许xxx
用户登录系统:
|
|
然后重启SSH服务使配置生效:
|
|
这样root
用户就被禁止登录系统了,不过我们可以通过xxx
用户登录系统。
设置密钥登录
密码登录系统还是比较危险,一旦xxx
用户密码泄露,无异于root
用户泄露,使用SSH密钥登录是一个更好的方法。
生成密钥对
首先在自己的机器上生成一对密钥,不推荐使用rsa密钥对。
|
|
生成的密钥对在$HOME/.ssh
目录下,然后将公钥上传到云服务器上:
|
|
修改SSH配置
修改/etc/ssh/sshd_config
文件的以下配置,开启公钥认证并禁用密码登录:
|
|
重启SSH服务使配置生效。
其他SSH配置
下面是几个跟安全有关的配置,最好也修改一下:
|
|
IP黑名单
SSH配置修改后,的确能够很快拒绝这些尝试登录的请求。但是这些IP无休止地来登录系统也很烦,因此最好有一个黑名单机制,将重试次数较多的IP直接加入黑名单,让它们不再作妖。以下命令可以查看登录失败大于4次的IP:
|
|
将得到的IP添加到/etc/hosts.deny
文件中,就可以屏蔽这些IP。写一个脚本实现:
|
|
将脚本保存为block_ip.sh
,然后执行命令crontab -e
,设置定时任务每5分钟执行这个脚本:
|
|
fail2ban
通过脚本自动添加IP到黑名单的做法可行,不过我们也可以借助第三方工具fail2ban
来禁止IP登录。首先安装fail2ban
:
|
|
设置fail2ban
自启动:
|
|
拷贝一个配置样例作为本地配置:
|
|
修改/etc/fail2ban/jail.d/sshd.conf
文件,写入以下内容:
|
|
重启fail2ban
使配置生效:
|
|
这样fail2ban
就能够将登录SSH失败的IP加入黑名单。使用下面这个命令查看加入黑名单的IP:
|
|
至此云服务器安全加固告一段落了,后续有更好的方法再记录一下。