Linux服务器安全加固实战：从SSH到Fail2ban的完整防护体系
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-upgrades sudo dpkg-reconfigure unattended-upgrades4.2 禁用不必要的服务# 查看所有监听端口 ss -tlnp # 关闭不需要的服务 sudo systemctl disable --now avahi-daemon sudo systemctl disable --now cups4.3 配置内核参数在/etc/sysctl.conf中添加：# 防止SYN洪水攻击 net.ipv4.tcp_syncookies = 1 # 忽略ICMP广播 net.ipv4.icmp_echo_ignore_broadcasts = 1 # 记录异常包 net.ipv4.conf.all.log_martians = 1五、日志监控与告警安全不是一次性配置完就万事大吉的。你需要持续的监控。5.1 使用logwatch汇总日志sudo apt install logwatch # 每日邮件报告 sudo logwatch --detail High --mailto admin@yourdomain.com --range today5.2 关键文件完整性检查# 安装AIDE sudo apt install aide sudo aideinit # 定期检查 sudo aide.wrapper --check六、最小权限原则6.1 不要用root运行服务每个Web应用、数据库都应该有自己专用的系统用户：sudo useradd -r -s /bin/false mysql sudo useradd -r -s /bin/false www-data6.2 文件权限审计# 查找可写目录 find /var/www -type d -perm -o+w # 修复不当权限 find /var/www -type f -exec chmod 644 {} \; find /var/www -type d -exec chmod 755 {} \;结语安全是一个持续的过程，不是一次性的配置。上面这些措施是我在一台服务器上线后24小时内必须完成的基线操作。它们不需要额外花钱，只需要你花一两个小时认真配置一次。我曾在凌晨三点被PagerDuty叫醒处理入侵事件，那种感觉真的不想再经历第二次。希望这篇文章能帮你少走一些弯路。记住安全领域的黄金法则：你不需要跑得比熊快，只需要跑得比其他人快。 大多数攻击者都是扫描整个IP段的自动化脚本，只要你的服务器比隔壁的难攻破，他们就会去找下一个目标。