Linux 服务器裸奔?这 5 个安全加固动作救过我的命
引言:一次惊心动魄的"被盗"经历
上周,朋友老张找我求助。他在阿里云买的入门级服务器,账单突然显示费用暴涨 10 倍。
"我就放了个个人博客,平时也没几个人访问啊,怎么一个月花了 5000 块?"
我帮他查了一下服务器日志,瞬间就明白了:
他的服务器被人当成了"肉鸡",在疯狂挖矿。
• CPU 一直 100% 运行
• 网络流量异常(外传数据)
• SSH 登录日志显示,每天有上万次暴力破解尝试
• 有人用 root + 123456 成功登录
老张的账号密码,还是第一次建服务器时系统自动生成的,他从来没改过。
这还不是最惨的。
更惨的是,服务器上存着他公司的一些测试数据,虽然不是核心机密,但泄露出去也够麻烦的。
帮他清理完服务器、加固完安全后,我问他:"你为什么不早点做安全配置?"
他说:"我以为云厂商都帮我搞好了啊。"
这是一个巨大的误区。
一、你的 Linux 服务器可能正在"裸奔"
说实话,老张的经历不是个例。
我见过太多人,买了云服务器就像买了辆共享单车:
• 车锁都不锁(SSH 端口敞开)
• 钥匙插车上(密码是 123456)
• 车随便停(防火墙没开)
• 甚至有人把车借给别人(给了陌生人 SSH 权限)
结果是什么?
• 挖矿:你的服务器变成别人的矿机,电费你来付
• DDOS 攻击:你的服务器被用来攻击别人,最后被封 IP
• 数据泄露:你的文件、数据库、密钥全部外泄
• 勒索软件:你的数据被加密,对方要钱才给你恢复
最可怕的是什么?
很多时候,你根本不知道自己被黑了。
直到账单爆炸、客户投诉、或者警察找上门,你才意识到出事了。
今天这篇文章,就是教你如何 5 分钟内,给你的 Linux 服务器穿上一套"防弹衣"。
不需要你是安全专家,不需要懂太多技术,照着做就行。
二、动作一:SSH 密钥登录,禁用密码(最重要!)
这是最最重要的一步,没有之一。
2.1 为什么密码登录不安全?
传统的密码登录,有这些致命弱点:
• 弱密码:123456、password、root123,一猜一个准
• 暴力破解:黑客用字典自动尝试,每天试几万次
• 键盘记录:你的电脑中毒,密码被记录
• 重复使用:你在多个网站用同一个密码,一个网站泄露,全部遭�
2.2 SSH 密钥是什么?
SSH 密钥登录,原理是这样的:
你本地电脑生成一对密钥:
• 私钥:你留着,绝对不能给别人(像家里的钥匙)
• 公钥:放在服务器上(像锁芯)
登录流程:
1. 你用私钥"签名"登录请求
2. 服务器用公钥验证签名
3. 如果匹配,允许登录
关键点:
• 私钥永远不会传输到网络上(只传输签名)
• 即使黑客监听网络,也拿不到私钥
• 私钥可以设置密码,双重保护
安全性提升了无数倍。
2.3 实操步骤(保姆级教程)
Step 1:生成 SSH 密钥对
在你本地电脑(不是服务器)执行:
ssh-keygen -t ed25519 -C "你的邮箱@example.com"参数说明:
• -t ed25519:使用 Ed25519 算法(推荐,比 RSA 更安全更快)
• -C:备注,方便识别(你的邮箱)
交互过程:
Enter file in which to save the key (/root/.ssh/id_ed25519):
[直接回车,使用默认路径]
Enter passphrase (empty for no passphrase):
[输入密码,推荐设置]
Enter same passphrase again:
[再次输入密码]生成的文件:
• ~/.ssh/id_ed25519:私钥(妥善保管)
• ~/.ssh/id_ed25519.pub:公钥(要放到服务器)
Step 2:上传公钥到服务器
方法 1:自动上传(最简单)
输入一次密码,公钥自动上传完成。
方法 2:手动上传
如果 ssh-copy-id 不可用:
cat ~/.ssh/id_ed25519.pub | ssh root@你的服务器IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"Step 3:测试密钥登录
如果成功:直接登录,不再需要密码(或者只需要私钥密码)
Step 4:禁用密码登录
登录服务器后,编辑 SSH 配置:
找到并修改以下配置:
# 禁用密码认证
PasswordAuthentication no
# 禁用空密码
PermitEmptyPasswords no
# 启用密钥认证(确保是 yes)
PubkeyAuthentication yes重启 SSH 服务:
⚠️ 注意:
• 修改前务必先测试密钥登录成功
• 确保能登录,再禁用密码
• 否则你可能把自己锁在服务器外面
效果:
• 暴力破解彻底失效(没有密码可破解)
• 只有拥有私钥的人才能登录
• 即使黑客知道服务器 IP 和用户名,也进不来
三、动作二:修改 SSH 默认端口(22)
3.1 为什么要改端口?
SSH 默认端口是 22,全世界的 SSH 都用这个端口。
黑客的扫描脚本,会自动扫描所有 IP 的 22 端口,然后暴力破解。
如果你改成其他端口(比如 22222):
• 扫描脚本会跳过你(默认只扫 22 端口)
• 暴力破解的难度大幅提升
• 日志清爽很多(没有大量失败记录)
3.2 实操步骤
Step 1:选择一个新端口
建议:10000-65535 之间的随机数
比如:22222、38942、51820
避免:常见服务端口(80、443、3306、6379)
Step 2:修改 SSH 配置
找到这一行:
改成:
Step 3:重启 SSH 服务
Step 4:更新防火墙规则
如果你的服务器启用了防火墙,记得开放新端口:
# Ubuntu/Debian (ufw)
ufw allow 22222/tcp
ufw delete allow 22/tcp
ufw reload
# CentOS/RHEL (firewalld)
firewall-cmd --permanent --add-port=22222/tcp
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reloadStep 5:测试新端口登录
ssh -p 22222 root@你的服务器IP⚠️ 注意:
• 云服务商的安全组规则也要同步更新
• 修改前确保你能用新端口登录
• 可以保留 22 端口一段时间,确认没问题再关闭
效果:
• 减少 99% 的自动化扫描
• SSH 日志清爽很多
• 提升一层安全
四、动作三:安装 fail2ban(防暴力破解)
4.1 fail2ban 是什么?
fail2ban 是一个"看门狗"程序:
• 监控系统日志(SSH、Nginx、MySQL 等)
• 发现异常行为(比如同一 IP 10 次密码错误)
• 自动封禁 IP(用防火墙规则)
• 一段时间后自动解封
效果:
• 暴力破解 3 次 → IP 被封 1 小时
• 黑客换个 IP → 再试 3 次 → 再被封
• 成本大幅提升,黑客放弃
4.2 安装步骤
Ubuntu/Debian
apt update
apt install fail2ban -yCentOS/RHEL
yum install epel-release -y
yum install fail2ban -y4.3 配置 fail2ban
创建本地配置文件(不要直接改主配置):
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vim /etc/fail2ban/jail.local基本配置:
[DEFAULT]
# 封禁时间(秒)
bantime = 3600
# 发现时间窗口(秒),10 分钟内失败 5 次
findtime = 600
# 失败次数
maxretry = 5
[sshd]
enabled = true
port = ssh
# 如果改了 SSH 端口,这里改成实际端口
# port = 22222启动 fail2ban:
systemctl enable fail2ban
systemctl start fail2ban查看状态:
fail2ban-client status sshd输出示例:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 15
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 2
|- Total banned: 8
`- Banned IP list: 192.168.1.100 10.0.0.504.4 手动解封 IP
如果你误封了自己:
fail2ban-client set sshd unbanip 你的IP效果:
• 自动封禁暴力破解 IP
• 日志清爽,服务器负载降低
• 让黑客知难而退
五、动作四:配置防火墙(ufw/firewalld)
5.1 为什么需要防火墙?
防火墙的作用:决定哪些流量能进入服务器
默认策略:拒绝所有,只允许必要的
比喻:
• 服务器 = 你的房子
• 防火墙 = 大门和门锁
• 开放端口 = 开窗户(只开需要的)
5.2 ufw(Ubuntu/Debian 推荐)
ufw(Uncomplicated Firewall)是最简单的防火墙工具。
安装
基本配置
# 1. 设置默认策略(拒绝所有入站,允许所有出站)
ufw default deny incoming
ufw default allow outgoing
# 2. 允许 SSH(如果改了端口,这里要对应)
ufw allow 22/tcp
# ufw allow 22222/tcp
# 3. 允许 HTTP/HTTPS(如果你有 Web 服务)
ufw allow 80/tcp
ufw allow 443/tcp
# 4. 启用防火墙
ufw enable
# 5. 查看状态
ufw status verbose输出示例:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere删除规则
5.3 firewalld(CentOS/RHEL 默认)
firewalld 是更强大的防火墙工具,支持区域(zone)概念。
基本配置
# 1. 启动 firewalld
systemctl start firewalld
systemctl enable firewalld
# 2. 查看当前区域
firewall-cmd --get-active-zones
# 3. 允许 SSH
firewall-cmd --permanent --add-service=ssh
# firewall-cmd --permanent --add-port=22222/tcp
# 4. 允许 HTTP/HTTPS
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# 5. 重载配置
firewall-cmd --reload
# 6. 查看规则
firewall-cmd --list-all效果:
• 只开放必要的端口
• 阻止未授权的访问
• 降低被攻击面
六、动作五:开启自动安全更新
6.1 为什么需要自动更新?
Linux 系统和软件经常发布安全补丁:
• 修复漏洞(比如 OpenSSH 远程代码执行)
• 修复 bug(比如 Nginx 内存泄漏)
• 提升性能(比如新版内核)
手动更新的问题:
• 经常忘记
• 怕更新出问题不敢更新
• 不知道有安全更新
自动更新的好处:
• 及时修补已知漏洞
• 降低被攻击风险
• 省心省力
6.2 Ubuntu/Debian 配置
安装无人值守更新包
apt install unattended-upgrades -y配置自动更新
vim /etc/apt/apt.conf.d/50unattended-upgrades基本配置:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
// "${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};
# 自动删除旧内核
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
# 自动清理依赖包
Unattended-Upgrade::Remove-Unused-Dependencies "true";
# 自动重启(如果需要,谨慎开启)
Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::Automatic-Reboot-Time "02:00";启用自动更新
vim /etc/apt/apt.conf.d/20auto-upgrades内容:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";启动服务:
systemctl restart unattended-upgrades查看日志
cat /var/log/unattended-upgrades/unattended-upgrades.log6.3 CentOS/RHEL 配置
安装 dnf-automatic
yum install dnf-automatic -y启用自动更新
systemctl enable --now dnf-automatic.timer查看状态:
systemctl status dnf-automatic.timer6.4 注意事项
⚠️ 自动更新有风险:
• 可能导致服务不兼容
• 可能需要重启
• 建议先在测试环境验证
✅ 推荐做法:
• 只自动安装安全更新(security)
• 稳定版更新(updates)手动安装
• 定期检查更新日志
• 重要服务器更新前做备份
效果:
• 及时修补安全漏洞
• 降低被攻击风险
• 省心省力
七、额外推荐:安全体检工具
做完以上 5 个动作,你的服务器已经比 90% 的服务器安全了。
如果你想更进一步,可以用这些工具做深度体检:
7.1 Lynis(安全审计)
功能:全面扫描系统安全配置
安装:
apt install lynis -y
# yum install lynis -y使用:
输出:详细的安全建议和评分
7.2 rkhunter(Rootkit 检测)
功能:检测系统是否被植入 Rootkit
安装:
使用:
7.3 ssh-audit(SSH 配置检测)
功能:检测 SSH 配置的安全性
使用(在线工具):
访问 https://www.ssh-audit.com/
使用(命令行):
pip install ssh-audit
ssh-audit localhost
八、总结:安全不是一次性的事
今天讲的这 5 个动作:
1. SSH 密钥登录 → 防止暴力破解
2. 修改默认端口 → 减少自动化扫描
3. 安装 fail2ban → 自动封禁攻击者
4. 配置防火墙 → 关闭不必要的门
5. 开启自动更新 → 及时修补漏洞
只需要 30 分钟,你的服务器安全等级就能提升 10 倍。
但记住:
安全不是一次性的工作,而是持续的过程。
建议:
• 每月检查一次日志(/var/log/auth.log)
• 每季度做一次安全审计(lynis)
• 定期备份重要数据
• 关注安全新闻(比如 OpenSSH 重大漏洞)
最后说一句:
服务器被黑不是"会不会"的问题,而是"什么时候"的问题。
与其等着出事,不如现在就动手加固。
【下期预告】
下一篇文章,我会详细拆解"Linux 服务器被黑后的应急响应流程",教你如何:
• 发现被黑的迹象
• 隔离受损服务器
• 分析攻击路径
• 清理后门和木马
• 恢复服务和数据
如果觉得这篇文章有帮助,记得点赞、收藏、转发~
【互动话题】
你的服务器被黑过吗?在评论区分享你的经历,或者问问题,我会逐一回复~