搬瓦工VPS安全设置教程
前置准备
- 已购买搬瓦工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端口 | TCP | SSH远程连接 | 必须 |
| 80 | TCP | HTTP网站访问 | 有网站时必须 |
| 443 | TCP | HTTPS网站访问 | 有网站时必须 |
| 8888 | TCP | 宝塔面板 | 用宝塔时必须 |
| 888 | TCP | phpMyAdmin | 用宝塔时可选 |
| 其他端口 | - | 根据需要 | 按需开放 |
我的建议:除了上面列的端口,其他全部关掉。每多开一个端口就多一个潜在的攻击面。如果你暂时不用某个服务,把对应的端口关掉。
第四步:安装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
配置参数说明
| 参数 | 值 | 含义 |
|---|---|---|
| enabled | true | 启用该规则 |
| port | 39527 | 你的SSH端口号 |
| maxretry | 5 | 最多允许失败5次 |
| bantime | 3600 | 封禁时间3600秒(1小时) |
| findtime | 600 | 在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容易被攻击吗?
修改SSH端口后连不上了怎么办?
有必要装杀毒软件吗?
常见问题
- 搬瓦工VPS容易被攻击吗?
- 任何暴露在公网的服务器都会受到扫描和攻击尝试,这很正常。做好基础安全设置后,被成功入侵的概率很低。
- 修改SSH端口后连不上了怎么办?
- 在KiwiVM面板的Root shell中登录,检查新端口是否正确、防火墙是否放行了新端口。实在不行可以重装系统。
- 有必要装杀毒软件吗?
- Linux服务器一般不需要传统杀毒软件。做好权限控制、及时更新、配置防火墙就足够了。可以装ClamAV定期扫描。
编辑部
了解更多