VPS 的使用、运营维护,是一门学问。做好 VPS 安全防护,需要从点滴做起;作为小白用户,购买 VPS 之后,建议做好以下设置,最大程度地保护 VPS 的安全。
1. 修改 root 密码,限制 root 登录#
1.1 修改 root 密码#
通过 SSH 工具(如 putty,Xshell 等),输入 VPS 服务商提供的 IP,端口(22),账号(root)和密码即可连接 VPS。如果确定 IP 被屏蔽,则可以联系服务商更换可用 IP(通常可以免费更换一次 IP,具体要看各服务商的规定)。
用 root 登陆 VPS 之后,输入命令:passwd,并输入要设置的密码(输入的密码不可见),即可更改初始的 root 密码。
1.2 修改 VPS 登录账户名#
修改 VPS 登录账户名,限制 root 账户登陆,用普通账户提权后连接 vps(谨慎操作)。此操作的原因在于:root 账户容易被扫描、爆破,因而修改 VPS 登录账户名,增加被爆破的难度。具体步骤如下:
1.2.1 在 root 下创建普通用户:sudo adduser (将替换为你要设置的用户名);
1.2.2 将新用户(里填的用户)添加到 sudo 组,以便获取管理员权限:sudo usermod -aG sudo
1.2.3 测试新用户名是否可以成功登录。
方式 1:输入命令 su - 即可切换到新用户环境,此时需要输入密码(刚刚修改的 root 密码);新用户登录成功后,输入 sudo 命令,即可进入新用户名管理员环境。
方式 2:在 1.2.2 步骤 root 登录设置之后,退出 root 账户的 SSH 连接,并重新以新用户名和 root 密码登录。
1.3 禁用 Root 登录#
通过新用户名连接 VPS 之后,输入命令:sudo nano /etc/ssh/sshd_config 进入编辑 SSH 配置文件;
查询并修改 “PermitRootLogin” 项为 PermitRootLogin no,保存文件并退出(ctrl+x 保存并退出);
重新启动 SSH 服务:sudo systemctl restart ssh。重启之后,VPS 便无法通过 root 用户名登录。
1.4 防止 SSH 暴力破解#
1.4.1 创建 shell 脚本
首先,输入以下命令,进入禁止 ssh 暴力破解脚本文件,
vi /usr/local/bin/secure_ssh.sh
其次,在脚本文件中写入内容:
#! /bin/bash
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.txt
for i in `cat /usr/local/bin/black.txt`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
if [ $NUM -gt 7 ];then
grep $IP /etc/hosts.deny > /dev/null
if [ $? -gt 0 ];then
echo "sshd:$IP:deny" >> /etc/hosts.deny
fi
fi
done
1.4.2 创建定时任务
首先输入 crontab -e,进入定时编辑环境,在文件中加入以下内容(定时执行防 ssh 暴力破解脚本,每 3 分钟执行一次):
*/3 * * * * sh /usr/local/bin/secure_ssh.sh
2. 进行系统更新和增删#
2.1 更新系统、必要依赖、删除不再需要的安装包#
Ubuntu/Debian 输入:
apt update -y && apt full-upgrade -y && apt autoremove -y && apt autoclean -y
CentOS/RHEL 输入:
yum update -y && yum upgrade -y && yum autoremove -y && yum clean all
2.2 一键清理垃圾#
Ubuntu/Debian 输入:
sudo apt autoremove --purge -y
sudo apt clean -y
sudo apt autoclean -y
sudo apt remove --purge $(dpkg -l | awk '/^rc/ {print $2}') -y
sudo journalctl --rotate
sudo journalctl --vacuum-time=1s
sudo journalctl --vacuum-size=50M
sudo apt remove --purge $(dpkg -l | awk '/^ii linux-(image|headers)- +/{print $2}' | grep -v $(uname -r | sed 's/-.*//') | xargs) -y
CentOS 系统输入:
sudo yum autoremove
sudo yum clean all
sudo journalctl --rotate
sudo journalctl --vacuum-time=1s
sudo journalctl --vacuum-size=50M
sudo yum remove $(rpm -qa kernel | grep -v $(uname -r))
3. 禁用 Virtio-Balloon,防止 VPS 服务商超售影响性能#
Virtio-Balloon 可以理解为 VPS 主体虚拟内存动态分配插件,但 VPS 服务商在超售之后,其他用户的 VPS 性能会受到影响。因而,我们需要查看是否有这个插件,如果有,建议禁用。
3.1 查询命令:#
lsmod | grep virtio_balloon
我的 Racknerd 启用了,如图:
Racknerd Virtio Ballon |
3.2 禁用方法有二:#
方法一:卸载 Virtio-Balloon#
对于 Racknerd,Virtio-Balloon 并非系统内置,可以通过 rmmod virtio_balloon 命令临时卸载;如果想长期生效,需要修改相关系统规则:
vi /etc/modprobe.d/blacklist.conf
写入以下内容后保存、退出:
blacklist virtio_balloon
更新系统信息:
update-initramfs -u
方法一参考这篇文章:禁用 Virtio-Balloon。
方法二:通过修改 Grub 配置禁用 Virtio-Balloon#
对于 virtio_balloon 内置的 VPS,如 Cloudcone,输入 lsmod | grep virtio_balloon 查询不到,但输入 rmmod virtio_balloon 之后,显示 virtio_balloon 为内置。此时,virtio_balloon 不是以模块的形式加载,而是直接编译到内核当中。此时,需要修改 Grub 配置。
1. 进入 Grub 配置文件:
sudo nano /etc/default/grub
2. 增加命令行:GRUB_CMDLINE_LINUX="virtio_balloon=0";或者在原来含有 GRUB_CMDLINE_LINUX 等号右边的参数最前面插入 virtio_balloon=0 并加入英文空格。
3.Ctrl+X 保存退出,输入 sudo update-grub 更新配置,输入 sudo reboot 重启系统。
经过以上设置之后,我们 VPS 的安全性就可以相对地得到提高。