2026年最新Linux服务器安全加固指南——从零保护你的云服务器
服务器部署上线后,第一件事不是配置业务,而是安全加固。
一、SSH安全配置
sed -i 's/#Port 22/Port 22822/' /etc/ssh/sshd_config
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd
二、防火墙配置
#ubuntu系统配置如下:
ufw enable
ufw allow 22822/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw default deny incoming
#红帽系统配置如下:
systemctl start firewalld
systemctl enable firewalld.service
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
三、Fail2Ban防暴力破解
#ubuntu类系统
apt install fail2ban
systemctl enable fail2ban
systemctl start fail2ban
#红帽类系统
dnf install fail2ban
systemctl start fail2ban
systemctl enable fail2ban
四、Fail2Ban配置实例
1. 备份原始配置:为了防止操作失误,可以先备份一下默认配置文件
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak
2. 创建并配置jail.local
这是整个配置过程的核心。jail.local 文件会覆盖 jail.conf 中的设置,是你进行自定义的地方。
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
-
编辑文件:使用你熟悉的编辑器打开这个文件,例如
vim
sudo vim /etc/fail2ban/jail.local
-
理解并修改关键参数:配置文件主要分为
[DEFAULT](全局)和各个服务的[服务名](特定)区块。你需要根据下面的说明来修改。
| 参数 | 作用 | CentOS 9 推荐值 | 说明 |
| bantime | IP 被封禁的时长 | 1h 或 3600 | 常用单位有 m (分钟), h (小时), d (天)。 |
| findtime | 检测失败尝试的时间窗口 | 10m 或 600 | maxretry 次失败必须发生在该时间段内。 |
| maxretry | 触发封禁的失败尝试次数 | 5 | 在 findtime 时间内失败 5 次则触发封禁。 |
| banaction | 【重要】 执行封禁的动作 | firewallcmd-ipset | 这行必须修改,这是 CentOS 9 配合 firewalld 的正确设置。 |
| ignoreip | 永不封禁的 IP 白名单 | 127.0.0.1/8 ::1 | 强烈建议将你自己的公网IP或公司网络IP段加在这里,避免误封。多个IP用空格隔开。 |
| backend | 系统日志的读取方式 | systemd | CentOS 9 及多数新版 Linux 使用此方式,效率更高。 |
-
服务级设置 (以 SSH 为例),这里是你要保护的具体服务,比如 SSH。你需要找到
[sshd]这部分,并进行配置。
| 参数 | 作用 | 推荐设置 | 说明 |
| enabled | 是否启用此服务的防护 | TRUE | 这是开启防护的总开关。 |
| port | 服务监听的端口 | ssh | 如果你修改了 SSH 的默认端口(比如 2222),请将 ssh 改为你的端口号。 |
| logpath | 该服务的日志文件路径 | %(sshd_log)s | 这是一个变量,会自动指向正确的 SSH 日志文件。 |
| maxretry | 针对 SSH 的失败次数 | 3 | 对 SSH 可以设置更严格一些,比如尝试3次就封禁。 |
-
配置示例 (
jail.local文件内容)
为了方便你理解,这里提供一个基础的配置示例,你可以参考这个格式进行修改:
sudo vim /etc/fail2ban/jail.local
3.第三步:应用配置并验证
完成配置文件的修改后,你需要重启服务并检查一切是否正常运行。
-
重启 Fail2ban 服务:
sudo systemctl restart fail2ban
-
检查服务运行状态:
sudo systemctl status fail2ban
如果看到 active (running) 字样,表示服务启动成功。
-
验证防护 (Jail) 是否生效:
sudo fail2ban-client status
输出中应该会列出你刚配置的 sshd,说明它已经被成功加载了。
💡 日常管理命令
| 目的 | 命令 |
| 查看某服务 (如 sshd) 的详细封禁信息 | sudo fail2ban-client status sshd |
| 手动解封一个IP | sudo fail2ban-client set sshd unbanip <IP地址> |
| 修改配置后重载服务 | sudo systemctl restart fail2ban |
| 查看 Fail2ban 自身日志 | sudo journalctl -u fail2ban -n 50 或 tail -f /var/log/fail2ban.log |
📌 特别提醒
关于 jail.d/ 目录:除了使用一个大的 jail.local 文件,你也可以在 /etc/fail2ban/jail.d/ 目录下创建独立的 .conf 文件来分别管理不同服务的配置,这在配置很多服务时更清晰。
不要遗漏 EPEL 仓库:在 CentOS 9 上安装 Fail2ban 之前,必须先安装并启用 EPEL 仓库,否则默认的软件源里没有它。
保护关键服务:除了 SSH,Fail2ban 还可以为 Nginx、Apache、Postfix 等服务提供保护,你可以在 jail.local 中找到对应的 [nginx-http-auth] 等区块,将它们 enabled = true 即可
💡 资源下载分类有全套脚本,免费获取。