雷灵模板

服务器运维小白必学:Linux下Nginx+Fail2Ban配置实战,让新手站长的博客网站防暴力破解并实现一键HTTPS证书续期

avatar

雷灵

🤖AI摘要
本文提供Linux下Nginx+Fail2Ban配置实战指南,帮助新手站长解决SSH暴力破解和HTTPS证书手动续期问题。通过Fail2Ban实时监控日志封禁攻击IP,并使用acme.sh实现Let’s Encrypt免费证书一键自动续期,确保博客网站安全。整个流程基于Ubuntu/Debian系统,操作简单,提升网站安全性。

在服务器运维领域,新手站长最怕两件事:SSH被暴力破解导致服务器沦陷,以及HTTPS证书到期后手动续期折腾半天。本文针对这些痛点,带来一套实用方案:在Linux系统下通过Nginx+Fail2Ban组合配置,既能实时监控日志并自动封禁攻击IP,又能轻松实现HTTPS证书一键自动续期。整个流程基于Ubuntu/Debian系统,适合博客、个人网站等场景,跟着操作即可让网站安全升级。

一、准备工作(5分钟搞定)

确保以下条件已满足,否则后续步骤会卡住:

  1. 一台干净的Linux服务器(推荐Ubuntu 20.04或22.04 LTS,root权限)。
  2. Nginx已安装并正常运行(若未安装,执行:sudo apt update && sudo apt install nginx -y)。
  3. 域名已通过DNS解析到服务器公网IP(A记录指向正确)。
  4. 防火墙已开放80、443端口(ufw allow 80 && ufw allow 443)。
  5. 备份现有配置:cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak(养成好习惯,避免改错后无法恢复)。
    这些准备工作完成后,就可以进入核心配置了。

    二、安装并配置Fail2Ban,彻底防住暴力破解

    Fail2Ban通过扫描日志文件,自动检测多次失败登录尝试(如SSH爆破),并将恶意IP加入防火墙黑名单。新手最常用的就是保护SSH服务。

    步骤1:安装Fail2Ban

    在终端执行以下命令:

    sudo apt update
    sudo apt install fail2ban -y

    安装完成后,检查状态:

    sudo systemctl status fail2ban

    看到active (running)就成功了。

    步骤2:创建本地配置文件(避免升级覆盖)

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

    用nano编辑(或vim):

    sudo nano /etc/fail2ban/jail.local

    找到[sshd]段落,修改为:

    [sshd]
    enabled = true
    port = ssh
    filter = sshd
    logpath = /var/log/auth.log
    maxretry = 5
    bantime = 1d
    findtime = 10m
    • maxretry=5:失败5次就封禁。
    • bantime=1d:封禁1天(可改成7d更严格)。
    • findtime=10m:在10分钟内统计失败次数。
      保存退出(Ctrl+O → Enter → Ctrl+X)。

      步骤3:重启并启用Fail2Ban

      sudo systemctl restart fail2ban
      sudo systemctl enable fail2ban

      查看防护状态:

      sudo fail2ban-client status sshd

      如果有IP被ban,可手动解封:

      sudo fail2ban-client set sshd unbanip 恶意IP

      这样,99%的SSH暴力破解攻击就被挡住了。Fail2Ban还能监控Nginx日志,后续结合Nginx限流更强。

      三、Nginx安全加固 + 一键HTTPS证书续期(核心实战)

      单纯的HTTP网站容易被抓包,HTTPS是必须的。我们用acme.sh(轻量级、无依赖)实现Let’s Encrypt免费证书申请,并设置自动续期,完全一键。

      步骤1:安装acme.sh

      执行一键安装脚本(替换成你的邮箱):

      curl https://get.acme.sh | sh -s email=你的邮箱@example.com

      安装后,source环境变量:

      source ~/.bashrc

      步骤2:用Nginx模式申请证书(最简单)

      确保Nginx正在监听80端口(HTTP),然后运行:

      acme.sh --issue --nginx -d 你的域名.com -d www.你的域名.com
    • --nginx:自动使用Nginx临时配置申请,无需手动改80端口。
    • 支持多域名(-d重复添加)。
      过程会自动验证DNS或HTTP,成功后证书存放在~/.acme.sh/你的域名.com/目录。

      步骤3:自动安装证书到Nginx并设置reload

      执行:

      acme.sh --install-cert -d 你的域名.com \
      --key-file /etc/nginx/ssl/你的域名.com.key \
      --fullchain-file /etc/nginx/ssl/你的域名.com.fullchain.pem \
      --reloadcmd "systemctl reload nginx"

      (先创建目录:mkdir -p /etc/nginx/ssl)

      步骤4:修改Nginx配置文件启用HTTPS

      编辑站点配置文件(通常是/etc/nginx/sites-available/default):

      sudo nano /etc/nginx/sites-available/default

      替换为以下完整配置(已包含HTTP强制跳转HTTPS + 基础安全):

      server {
      listen 80;
      server_name 你的域名.com www.你的域名.com;
      return 301 https://$server_name$request_uri;  # 自动跳转HTTPS
      }
      server {
      listen 443 ssl http2;
      server_name 你的域名.com www.你的域名.com;
      ssl_certificate /etc/nginx/ssl/你的域名.com.fullchain.pem;
      ssl_certificate_key /etc/nginx/ssl/你的域名.com.key;
      # 基础安全设置
      ssl_protocols TLSv1.2 TLSv1.3;
      ssl_ciphers HIGH:!aNULL:!MD5;
      # 结合Fail2Ban的限流(防爬虫/爆破)
      limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;
      location / {
      limit_req zone=login burst=5 nodelay;
      root /var/www/html;  # 你的博客目录
      index index.html;
      }
      location ~ /\.ht {
      deny all;
      }
      }

      测试配置是否正确:

      sudo nginx -t

      重载Nginx:

      sudo systemctl reload nginx

      访问https://你的域名.com,看到绿色小锁即成功。

      步骤5:实现真正的一键自动续期

      acme.sh安装时已自动添加crontab,每天检查证书(到期前30天自动续期),无需手动干预。验证命令:

      acme.sh --renew -d 你的域名.com --force

      以后每次续期只需这一条命令测试即可,真正解放双手。

      四、测试验证 + 常见避坑指南

  6. Fail2Ban测试:故意用错误密码SSH登录几次,执行sudo fail2ban-client status sshd,看IP是否被ban。
  7. HTTPS测试:用浏览器或curl -I https://你的域名.com,确认200 OK且证书有效。
  8. 常见问题解决:
    • 证书申请失败:检查80端口是否被占用,或域名解析延迟。
    • Fail2Ban不生效:确认日志路径正确(auth.log),重启服务。
    • Nginx 502错误:权限问题,执行chown -R www-data:www-data /var/www/html。
    • 服务器重启后失效:确保两个服务都设为开机自启(systemctl enable)。
  9. 进阶建议:定期更新系统(apt upgrade),开启UFW防火墙,只允许必要端口;若博客用WordPress,可再加Fail2Ban的wordpress-filter进一步防护登录接口。
    通过这套Nginx+Fail2Ban+acme.sh组合,新手站长就能把服务器安全提升一个档次。暴力破解基本绝迹,HTTPS证书续期再也不用操心。建议先在测试服务器练手,再上线生产环境。实际操作中遇到问题,欢迎在评论区留言讨论,一起让博客运维更轻松。
黔ICP备2022004976号
powered by 雷灵模板