Linux服务器系统安全加固教程

为什么刚买的服务器就要做安全加固?

云服务器默认配置下,root密码可以直接登录、SSH端口是22,这类弱配置很容易被扫描工具撞库或暴力破解。
根据经验,一台暴露公网的Linux服务器,如果不做任何加固,最快几小时内就会被尝试登录数百次
下面这套操作按顺序执行即可,每步都有命令和说明。

第一步:先更新系统,堵住已知漏洞

登录服务器后第一件事是让软件包都更新到最新版本。

# Debian/Ubuntu 系统
apt update && apt upgrade -y

# CentOS/Rocky/Alma 系统
yum update -y  或 dnf update -y

注意:更新可能重启内核或服务,建议在业务低峰期做。
更新后如果提示需要重启,用 reboot 重启一次。

第二步:配置SSH,干掉弱密码登录

SSH是服务器最大的入口,下面三步能堵住大部分攻击。

2.1 创建普通用户并赋予sudo权限

# 创建一个新用户,比如admin
adduser admin
# 设置密码(按提示输入两遍)
passwd admin
# 赋予sudo权限
usermod -aG sudo admin    # Debian/Ubuntu
usermod -aG wheel admin   # CentOS/Rocky

test一下:用 ssh admin@你的IP 登录一次,确认能正常连接。

2.2 配置SSH密钥登录(推荐,更安全)

在本地电脑生成密钥对(已生成过的跳过):

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

把公钥传上服务器:

ssh-copy-id -i ~/.ssh/id_rsa.pub admin@你的IP
# 如果没ssh-copy-id命令,手动复制也可以

之后登录就用密钥,不需要输密码了。

2.3 修改SSH配置文件,禁用root直接登录并改端口

sudo vim /etc/ssh/sshd_config

找到或添加以下三项:

Port 2222                  # 把22改成其他端口,如2222
PermitRootLogin no        # 禁止root直接登录
PasswordAuthentication no # 禁止密码登录(前提密钥已生效)

重点警告:改端口前,一定要在云服务器的安全组/防火墙里放行新端口(比如2222),否则改完自己就进不去了。

保存后重启SSH服务:

sudo systemctl restart sshd
# 或 sudo service ssh restart

现在用新端口重新登录一次:ssh -p 2222 admin@你的IP,确认能连上再退出旧会话。

第三步:安装Fail2ban,自动封禁暴力破解

Fail2ban会扫描日志,发现登录失败多次的IP直接临时封禁。

3.1 安装Fail2ban

# Debian/Ubuntu
apt install fail2ban -y

# CentOS/Rocky
yum install epel-release -y && yum install fail2ban -y

3.2 配置SSH保护

复制一份默认配置:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local

找到 [sshd] 部分,确保参数类似:

[sshd]
enabled = true
port    = 2222        # 改为你自己设定的SSH端口
bantime = 3600        # 封禁1小时(单位秒)
maxretry = 5          # 5次失败就封

启动并启用:

sudo systemctl enable fail2ban --now

验证状态:sudo fail2ban-client status sshd,可以看到已封IP列表。

第四步:配置防火墙,只开必要端口

使用iptables或firewalld(CentOS)或ufw(Ubuntu)。
这里以ufw为例,宝塔面板用户可以直接在面板安全里操作。

4.1 安装ufw(Ubuntu/Debian)

sudo apt install ufw -y
# 先允许SSH新端口,否则下面启用防火墙后自己会被踢
sudo ufw allow 2222/tcp
# 再允许其他服务,比如Web(80/443)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 然后启用防火墙
sudo ufw enable

查看规则:sudo ufw status verbose

4.2 CentOS/RHEL用firewalld

sudo firewall-cmd --zone=public --add-port=2222/tcp --permanent
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload

避坑:防火墙没开放新SSH端口时不要重启ssh或退出当前会话,否则会断连。

第五步:关闭无用服务和端口,设置密码策略

5.1 停用不需要的服务

# 查看所有监听端口
sudo ss -tlnp
# 如果发现不必要的服务(如telnet、rsh等),用systemctl stop并disable
sudo systemctl disable --now service_name

5.2 设置密码复杂度(可选)

/etc/security/pwquality.conf 中配置:

minlen = 12          # 密码最小长度12
minclass = 3         # 至少包含三类字符

或者用 chage 设置密码过期时间:

sudo chage -M 90 admin   # admin用户密码90天后过期

常见问题与避坑

Q:修改SSH端口后连不上怎么办?

别慌,使用云服务商控制台的VNC/IPMI远程登录(比如阿里云“远程连接”、腾讯云“VNC”)。
登录后把 /etc/ssh/sshd_config 里的端口改回22,重启sshd,再检查防火墙和安全组是否放行了新端口。

Q:我已经禁止密码登录了,但密钥认证不成功?

先检查本地 ~/.ssh/id_rsa 权限是否600,公钥是否追加到了服务器 ~/.ssh/authorized_keys
可以用 ssh -vvv -p 2222 admin@IP 查看详细日志。

Q:Fail2ban会不会误封自己?

设置合理的 maxretrybantime,一般5次失败封1小时较安全。
如果不小心被封了,用云控制台VNC登录后执行 sudo fail2ban-client unban IP 解封。

效果验证

  1. 测试SSH旧端口:用 ssh -p 22 admin@IP 连接,应该直接超时或拒绝连接。
  2. 测试密钥登录:用 ssh -p 2222 admin@IP 能正常进入。
  3. 测试暴力破解防护:故意连续输错几次密码,之后查看 sudo fail2ban-client status sshd,应该能看到你的测试IP被封。
  4. 检查防火墙sudo ufw statussudo firewall-cmd --list-all 确认只开放了必要端口。

以上步骤完成后,你的服务器安全等级已经比90%的默认服务器高。
如果你用的是宝塔面板,很多操作可以在面板安全页面里点选完成,但原理一样。
经常检查 /var/log/auth.log/var/log/secure,看看还有没有异常登录尝试。

分享到:
上一篇
WP网站图片压缩工具推荐:三款插件上手教程
下一篇
Docker部署k6,一条命令跑起性能测试环境
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意