一个草根站长的博客 - Fail2ban
type: channel
link: https://www.zz1984.com/tag/Fail2ban/
items: Linux服务器安全加固实战：从SSH到Fail2ban的完整防护体系

Linux服务器安全加固实战：从SSH到Fail2ban的完整防护体系
type: item
date: 2026-07-12T11:05:48+08:00
description: Linux服务器安全加固实战：从SSH到Fail2ban的完整防护体系前言作为一个草根站长，服务器安全是不可忽视的生命线。我在过去十年里管理过几十台服务器，踩过无数安全方面的坑：被暴力破解SSH、网站被挂马、数据库被勒索……每次都是血泪教训。今天这篇文章，我将系统性地梳理一套经过生产环境验证的Linux服务器安全加固方案。无论你用的是阿里云、腾讯云还是Hetzner的VPS，这套方案都适用。全程只需要命令行，不需要安装任何商业软件。一、SSH加固：第一道防线SSH是服务器的大门，也是最常被攻击的目标。默认的22端口每天都会收到成百上千次暴力破解尝试。1.1 修改默认端口# 编辑SSH配置 sudo vim /etc/ssh/sshd_config # 修改 Port 22 为其他端口，比如 2222 Port 2222改完端口后不要急着重启SSH，先确保防火墙规则已经更新，否则你会被锁在外面。1.2 禁用密码登录，只用密钥这是我能给出的最重要建议：# 在本地生成密钥对 ssh-keygen -t ed25519 -C "your_server_name" # 将公钥复制到服务器 ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your_server # 在服务器上禁用密码登录 sudo vim /etc/ssh/sshd_config PasswordAuthentication no ChallengeResponseAuthentication noEd25519密钥比RSA更快更安全，是现代服务器的首选。禁用密码登录后，暴力破解就彻底失效了——没有密码可猜。1.3 限制登录用户不是每个系统用户都需要SSH登录权限：# 只允许特定用户SSH登录 AllowUsers deploy www-admin # 或只允许特定组 AllowGroups sshusers1.4 配置空闲超时# 5分钟无操作自动断开 ClientAliveInterval 300 ClientAliveCountMax 0二、防火墙配置：UFW与iptables2.1 使用UFW快速配置Ubuntu/Debian系统推荐UFW，简单直观：sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 2222/tcp # SSH新端口 sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw enable sudo ufw status verbose2.2 iptables进阶规则对于需要精细控制的场景，直接用iptables：# 限制SSH连接速率，防止暴力破解 iptables -A INPUT -p tcp --dport 2222 -m state --state NEW \ -m recent --set --name SSH iptables -A INPUT -p tcp --dport 2222 -m state --state NEW \ -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP这条规则的含义是：同一个IP在60秒内最多发起4次新的SSH连接，超过就丢弃。三、Fail2ban：自动封禁恶意IPFail2ban是每个服务器都该安装的工具。它会监控日志文件，发现异常行为（如多次登录失败）后自动在防火墙层面封禁该IP。3.1 安装与基础配置sudo apt install fail2ban -y sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local编辑/etc/fail2ban/jail.local：[DEFAULT] bantime = 3600 # 封禁1小时 findtime = 600 # 10分钟窗口 maxretry = 3 # 最多3次失败 [sshd] enabled = true port = 2222 logpath = /var/log/auth.log3.2 为Nginx添加防护[nginx-botsearch] enabled = true port = 80,443 logpath = /var/log/nginx/access.log maxretry = 2这会自动封禁那些扫描WordPress登录页、phpMyAdmin等常见漏洞的IP。四、系统加固4.1 保持系统更新# 配置自动安全更新（仅安全补丁） sudo apt install unattended…