搬瓦工VPS安全设置教程

作者:编辑部
安全设置 安全加固 防火墙
预计 20 分钟 难度:进阶

前置准备

  • 已购买搬瓦工VPS
  • 能够SSH连接到服务器
  • 具备基本Linux命令知识

我管理搬瓦工VPS这几年,平均每天服务器要接收几百次SSH暴力破解尝试。说实话这很正常,全球每天都有无数机器人在扫描公网IP。但如果你什么安全措施都不做,迟早会出事。我有个朋友的VPS用了默认密码,上线一周就被人种了挖矿程序,CPU常年100%。这篇教程我把最实用的安全加固措施整理出来,花20分钟做完这些设置,安全性能提升好几个档次。

还没有搬瓦工VPS?点击购买

安全检查清单

在开始之前,先看看你的VPS目前的安全状态。以下是我整理的安全检查清单,没做的打个叉,然后跟着教程一项一项做。

安全措施优先级难度预估时间
修改SSH端口简单2分钟
配置SSH密钥登录中等5分钟
禁用root密码登录简单1分钟
配置防火墙中等5分钟
安装Fail2ban中等5分钟
创建普通用户简单2分钟
设置自动更新简单2分钟
关闭不必要的服务简单3分钟

如果你还不会SSH连接服务器,先参考SSH连接教程完成连接。

第一步:修改SSH端口

搬瓦工的SSH端口虽然不是默认的22(随机分配的五位数),但还是建议改一下。因为机器人扫描会尝试常见端口段,换一个更不常见的端口能大幅减少被扫描的次数。

修改配置

SSH登录服务器后,编辑SSH配置文件:

vi /etc/ssh/sshd_config

找到 Port 那一行(可能前面有#注释符),改成一个你自定义的端口号。建议选10000-65535之间的数字,避开常见端口。

Port 39527

注意:先不要删掉原来的端口,先加一行新端口,两个端口同时开着。等确认新端口能用了,再回来删掉旧的。这样万一新端口配置有问题,你还能用旧端口连回来。

Port 39527
Port 原来的端口号

重启SSH服务

systemctl restart sshd

防火墙放行新端口

这一步千万别忘了,我就因为改了端口忘了放行防火墙,把自己锁在外面过。

# CentOS(firewalld)
firewall-cmd --permanent --add-port=39527/tcp
firewall-cmd --reload

# Ubuntu(ufw)
ufw allow 39527/tcp

测试新端口

打开一个新的终端窗口(不要关掉当前窗口),用新端口尝试连接:

ssh root@你的IP -p 39527

如果能连上,说明配置成功。然后回到旧会话,把sshd_config中旧端口那行删掉或注释掉,再重启sshd。

踩过一个坑:如果你怎么都连不上新端口,通过KiwiVM面板的「Root shell - interactive」网页SSH登录进去排查。这是搬瓦工的救命功能,不受端口限制。详细操作可以参考KiwiVM面板使用教程

第二步:配置SSH密钥登录并禁用密码

密码登录是最大的安全隐患,暴力破解就是冲密码来的。配置密钥登录后禁用密码认证,安全性直接提升一个等级。

生成密钥对(本地操作)

在你的本地电脑上执行:

ssh-keygen -t ed25519 -C "my-bwg-vps"

一路回车使用默认设置。

上传公钥到服务器

ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 39527 root@你的IP

输入一次密码后公钥就传上去了。

禁用密码登录

确认密钥登录正常后,编辑SSH配置:

vi /etc/ssh/sshd_config

修改以下配置项:

PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password

重启SSH服务:

systemctl restart sshd

再次强调:禁用密码登录之前,一定要先确认密钥登录没问题。开一个新窗口测试,能用密钥免密码登录了,再来禁用密码。

第三步:配置防火墙

防火墙的原则很简单:只开放你需要的端口,其他的全部关掉。

CentOS使用firewalld

# 查看当前防火墙状态
systemctl status firewalld

# 如果没有运行,启动它
systemctl start firewalld
systemctl enable firewalld

# 开放必要端口
firewall-cmd --permanent --add-port=39527/tcp  # SSH
firewall-cmd --permanent --add-port=80/tcp     # HTTP
firewall-cmd --permanent --add-port=443/tcp    # HTTPS

# 重新加载规则
firewall-cmd --reload

# 查看已开放的端口
firewall-cmd --list-ports

Ubuntu使用ufw

# 安装ufw
apt install ufw -y

# 先放行SSH端口(重要!先放行再启用)
ufw allow 39527/tcp

# 放行Web端口
ufw allow 80/tcp
ufw allow 443/tcp

# 启用防火墙
ufw enable

# 查看规则
ufw status

推荐的端口开放策略

端口协议用途是否必须
自定义SSH端口TCPSSH远程连接必须
80TCPHTTP网站访问有网站时必须
443TCPHTTPS网站访问有网站时必须
8888TCP宝塔面板用宝塔时必须
888TCPphpMyAdmin用宝塔时可选
其他端口-根据需要按需开放

我的建议:除了上面列的端口,其他全部关掉。每多开一个端口就多一个潜在的攻击面。如果你暂时不用某个服务,把对应的端口关掉。

第四步:安装Fail2ban

Fail2ban是我最推荐的安全工具之一。它会监控日志,当某个IP多次登录失败后自动把它封掉。装完之后,暴力破解尝试基本就废了。

安装

# CentOS
yum install epel-release -y
yum install fail2ban -y

# Ubuntu
apt install fail2ban -y

配置

创建本地配置文件(不要直接改主配置文件,升级后会被覆盖):

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.local

找到 [sshd] 部分,修改配置:

[sshd]
enabled = true
port = 39527
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600

配置参数说明

参数含义
enabledtrue启用该规则
port39527你的SSH端口号
maxretry5最多允许失败5次
bantime3600封禁时间3600秒(1小时)
findtime600在600秒内(10分钟)计算失败次数

翻译成人话就是:10分钟内如果某个IP连续登录失败5次,就封禁它1小时。

启动Fail2ban

systemctl start fail2ban
systemctl enable fail2ban

查看封禁状态

# 查看sshd规则的状态
fail2ban-client status sshd

# 手动解封某个IP
fail2ban-client set sshd unbanip 192.168.1.100

我实测装上Fail2ban后,一天内就封了20多个IP,效果立竿见影。

第五步:设置系统自动更新

系统漏洞是另一个常见的入侵途径。及时打补丁很重要,但每天手动更新不现实,配置自动更新省心。

CentOS配置自动更新

# 安装自动更新工具
yum install yum-cron -y

# 编辑配置
vi /etc/yum/yum-cron.conf

找到以下配置项,确保设置为:

update_cmd = security
apply_updates = yes

启动服务:

systemctl start yum-cron
systemctl enable yum-cron

Ubuntu配置自动更新

# 安装自动更新工具
apt install unattended-upgrades -y

# 配置
dpkg-reconfigure -plow unattended-upgrades

在弹出的界面选择「Yes」即可。

自动更新的注意事项

说实话自动更新也不是完全没风险——极少数情况下安全更新可能导致兼容性问题。但根据我的经验,安全更新出问题的概率远低于不更新被入侵的概率。如果你跑的是生产环境的关键业务,可以只开启安全更新,不开启全量更新。

第六步:创建普通用户

一直用root操作服务器是个坏习惯。root权限太大,一个误操作可能导致灾难。创建一个普通用户来做日常操作更安全。

创建用户并赋予sudo权限

# 创建用户
useradd -m -s /bin/bash myuser

# 设置密码
passwd myuser

# 加入sudo组
# CentOS
usermod -aG wheel myuser

# Ubuntu
usermod -aG sudo myuser

配置新用户的SSH密钥

切换到新用户:

su - myuser

创建SSH目录并添加公钥:

mkdir -p ~/.ssh
chmod 700 ~/.ssh

把你的公钥内容添加到 ~/.ssh/authorized_keys 文件中,然后设置权限:

chmod 600 ~/.ssh/authorized_keys

以后就用普通用户登录,需要管理员权限时加 sudo 前缀。

日志监控方法

安全设置做完后,定期检查日志也很重要。不需要天天看,但每周瞟一眼能及时发现异常。

常用日志检查命令

# 查看最近的登录记录
last -20

# 查看失败的登录尝试
lastb -20

# 查看当前登录的用户
who

# 查看系统安全日志(CentOS)
tail -100 /var/log/secure

# 查看系统认证日志(Ubuntu)
tail -100 /var/log/auth.log

异常信号

现象可能原因处理方法
大量陌生IP登录失败暴力破解尝试确认Fail2ban正常工作
非你操作的时间有成功登录可能已被入侵立刻改密码、检查是否有异常进程
CPU使用率异常高可能被植入挖矿程序检查进程、杀掉异常进程、重装系统
大量外发流量可能被用作攻击跳板检查网络连接、关闭异常服务

如果发现服务器确实被入侵了,最安全的做法是在KiwiVM面板直接重装系统,然后重新做安全配置。数据如果有备份还能恢复,没备份就只能认栽了。所以平时一定要做好备份工作。

安全最佳实践小结

把上面的步骤都做完之后,你的搬瓦工VPS安全性已经比90%的个人VPS要高了。再补充几个日常安全习惯:

  • 密码管理:所有密码用密码管理器保存,不要用相同密码
  • 最小权限原则:服务只给需要的最低权限,不要什么都用root跑
  • 定期审计:每月查看一次系统日志和登录记录
  • 及时更新:收到安全公告及时处理,不要拖
  • 备份习惯:安全配置做完后立刻创建一个KiwiVM快照

更多搬瓦工VPS的基础操作,可以参考新手指南。购买VPS时记得使用最新优惠码节省费用。如果遇到问题,也可以查看常见问题大全

前往搬瓦工官网购买 VPS

搬瓦工VPS安全设置常见问题

搬瓦工VPS容易被攻击吗?
任何暴露在公网上的服务器都会受到扫描和攻击尝试,这很正常。搬瓦工VPS本身没有安全问题,关键是你自己要做好安全配置。按照本教程做完SSH安全、防火墙、Fail2ban等设置后,被成功入侵的概率极低。
修改SSH端口后连不上了怎么办?
不要慌,去KiwiVM面板用Root shell - interactive网页SSH登录。检查新端口是否写对了、防火墙是否放行了新端口、sshd服务是否正常运行。最坏的情况下可以通过KiwiVM面板重装系统。
有必要装杀毒软件吗?
Linux服务器通常不需要传统杀毒软件。做好权限控制、及时更新系统、配置好防火墙和Fail2ban就足够了。如果你实在不放心,可以安装ClamAV做定期扫描,但它更多是扫描文件中的恶意代码而不是实时防护。

常见问题

搬瓦工VPS容易被攻击吗?
任何暴露在公网的服务器都会受到扫描和攻击尝试,这很正常。做好基础安全设置后,被成功入侵的概率很低。
修改SSH端口后连不上了怎么办?
在KiwiVM面板的Root shell中登录,检查新端口是否正确、防火墙是否放行了新端口。实在不行可以重装系统。
有必要装杀毒软件吗?
Linux服务器一般不需要传统杀毒软件。做好权限控制、及时更新、配置防火墙就足够了。可以装ClamAV定期扫描。
编辑部的头像

编辑部

了解更多