引言:你的服务器可能正在“裸奔”
很多朋友在入手一台云服务器后,第一件事就是急着部署应用、搭建网站。但往往忽略了一个最致命的问题:安全。尤其是刚接触Linux的新手,可能连默认的root密码都没改,就暴露在公网之下了。这不是危言耸听,我们曾见过太多因为端口暴露、弱口令被暴力破解导致服务器被“挖矿”的案例。今天,笔者就以亲身踩坑经历,带你系统梳理一下Linux服务器安全加固的必备步骤,并重点讲透UFW防火墙的配置与避坑点。
第一步:基础安全加固,别让黑客“长驱直入”
在配置防火墙之前,我们得先把系统本身的门锁好。这几步是基石,缺一不可。
1. 更换SSH默认端口
22端口是SSH服务的默认端口,也是扫描器最喜欢的“靶子”。将其改为一个高位端口(如10022、2222等),能瞬间过滤掉90%以上的自动攻击脚本。
# 编辑SSH配置文件
sudo vim /etc/ssh/sshd_config
# 找到 #Port 22 这一行,去掉注释,将22改为你想要的端口,例如:
Port 2222
# 保存退出后重启服务
sudo systemctl restart sshd
⚠️ 注意:修改后,请务必先在另一个终端窗口测试新端口是否能连接成功,确认无误后再关闭旧会话,避免把自己锁在外面。
2. 禁用root直接登录
root账户权限太高,直接暴露在外风险极大。我们应当创建一个普通用户,并赋予其sudo权限,日常操作使用这个用户。
# 创建一个新用户(比如admin)
sudo adduser admin
# 将用户加入sudo组
sudo usermod -aG sudo admin
# 编辑SSH配置
sudo vim /etc/ssh/sshd_config
# 找到 PermitRootLogin,确保其值为 no
PermitRootLogin no
# 重启SSH服务
sudo systemctl restart sshd
3. 配置密钥登录,禁用密码登录
这是目前最安全的远程登录方式。密码登录容易被暴力破解,而密钥对几乎无法被暴力枚举。
# 在本地电脑生成密钥对(如果还没有)
ssh-keygen -t rsa -b 4096
# 将公钥复制到服务器(使用你的新用户)
ssh-copy-id admin@你的服务器IP -p 你的新端口
# 登录服务器,再次编辑SSH配置,关闭密码登录
sudo vim /etc/ssh/sshd_config
# 找到 PasswordAuthentication,确保其值为 no
PasswordAuthentication no
# 重启服务
sudo systemctl restart sshd
第二步:UFW防火墙——简单但不简单的“守门员”
系统基础加固完成后,我们就要请出主角——UFW(Uncomplicated Firewall)。它是iptables的前端封装,操作极其简单,但如果不了解其底层逻辑,也很容易踩坑。
1. 安装与启用UFW
# Debian/Ubuntu系统通常自带,如果没有则安装
sudo apt update
sudo apt install ufw -y
# 查看UFW状态
sudo ufw status verbose
# 初始状态应为 inactive
2. 配置默认策略:先拒绝,后放行
安全的基本原则是“最小权限”。我们应当先设置默认策略为拒绝所有入站流量,然后只放行需要的端口。
# 设置默认策略:拒绝所有入站,允许所有出站
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 放行SSH端口(注意:这里必须放行你修改后的新端口,否则你会立刻被踢下线!)
sudo ufw allow 2222/tcp
# 放行Web服务端口(如果搭建了网站)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 启用UFW
sudo ufw enable
# 再次查看状态
sudo ufw status numbered
🚨 避坑指南:在启用UFW之前,千万要先放行你的SSH端口!否则一旦启用,默认的拒绝策略会立刻切断你的当前连接,导致你无法再远程管理服务器。这是新手最容易犯的错误。
3. 管理规则:增、删、改
随着业务变化,你可能需要添加或删除规则。学会使用规则编号操作非常重要。
# 添加一条规则(放行某个端口)
sudo ufw allow 3000/tcp
# 查看规则列表及编号
sudo ufw status numbered
# 删除指定编号的规则(例如删除编号为2的规则)
sudo ufw delete 2
# 或者直接通过规则内容删除
sudo ufw delete allow 3000/tcp
4. 针对特定IP的访问控制
有时我们希望只允许特定IP访问某个端口(比如数据库端口3306只允许内网或特定IP访问)。
# 只允许IP 192.168.1.100 访问端口3306
sudo ufw allow from 192.168.1.100 to any port 3306
# 拒绝某个IP的所有访问
sudo ufw deny from 恶意IP地址
# 允许某个IP段访问SSH端口
sudo ufw allow from 192.168.1.0/24 to any port 2222
5. 日志与调试
如果发现服务无法访问,不要慌,先看日志。
# 开启UFW日志
sudo ufw logging on
# 查看日志
sudo tail -f /var/log/ufw.log
日志会清晰记录哪些连接被拒绝,帮助你快速定位问题。
第三步:进阶安全加固,筑牢最后一道防线
1. 安装Fail2ban,应对暴力破解
即使我们禁用了密码登录,但SSH服务本身仍然可能被扫描。Fail2ban可以监控日志,当发现某个IP在短时间内多次登录失败时,自动将其加入UFW黑名单。
# 安装Fail2ban
sudo apt install fail2ban -y
# 创建本地配置文件
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 编辑配置,设置SSH的监控
sudo vim /etc/fail2ban/jail.local
# 在 [sshd] 部分,确保 enabled = true,并设置 findtime、maxretry、bantime 等参数
# 例如:在5分钟内失败3次,封禁1小时
# 重启Fail2ban
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
配合我们之前做过的腾讯云4核4G轻量服务器真实跑分:性能到底够不够用?我们实测给你看,你会发现一台性能足够的服务器,再搭配上这种基础安全策略,才能安心地跑业务。
2. 保持系统更新
很多安全漏洞都是通过系统更新修复的。养成定期更新系统的习惯。
sudo apt update && sudo apt upgrade -y
3. 使用云服务商的安全组
除了服务器内部的UFW,云服务商提供的“安全组”或“防火墙”功能,是服务器外部的第一道屏障。两者配合使用,效果最佳。建议在云平台的安全组中,只放行必要的端口(如你的新SSH端口、80、443),并将来源IP限制得尽可能小(比如只允许你家里的公网IP访问SSH)。
避坑总结:这些“雷区”千万别碰
- 雷区一: 启用UFW前忘记放行SSH端口。结果:自己被锁在门外。
- 雷区二: 修改SSH端口后,忘记更新UFW规则。结果:同上。
- 雷区三: 为了省事,直接使用
ufw allow 22/tcp并保持root密码登录。结果:服务器成为肉鸡。 - 雷区四: 认为云平台安全组和UFW是二选一。结果:多一层防护就是多一份安心,两者是互补关系。
- 雷区五: 对UFW规则增删改查后,忘记执行
ufw reload或重启。结果:新规则未生效。
结语:安全是1,性能是后面的0
服务器安全加固是一个系统工程,但以上步骤已经可以帮你挡住绝大多数“脚本小子”的攻击。当你把这些基础工作做扎实后,再去部署复杂的应用,比如尝试用AI工具搭建智能应用(可以参考我们之前发布的从零到一:我用这些AI开发工具,三天搭了一个能用的智能应用),才能真正做到后顾无忧。记住,安全是1,性能、功能都是后面的0。没有安全,一切归零。