服务器防火墙开启后如何放行 Let's Encrypt 续签验证端口?

文章导读
服务器防火墙开启后,若要使用 Let's Encrypt HTTP-01 方式续签证书,必须放行入站 TCP 80 端口。若使用 DNS-01 验证方式,则无需开放任何入站端口,但需配置 DNS API 权限。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

服务器防火墙开启后,若要使用 Let's Encrypt HTTP-01 方式续签证书,必须放行入站 TCP 80 端口。若使用 DNS-01 验证方式,则无需开放任何入站端口,但需配置 DNS API 权限。

先说结论:默认情况下需开放 TCP 80 端口供验证请求通过,除非改用 DNS 验证模式。

  • 先确认:检查当前使用的证书验证方式是 HTTP-01 还是 DNS-01。
  • 先处理:在操作系统防火墙及云厂商安全组中同时放行 80 端口。
  • 再验证:执行 certbot renew `--dry-run` 确认续签流程无障碍。

命令速用版

根据常见防火墙工具,直接执行以下命令放行 80 端口:

UFW (Ubuntu/Debian):

sudo ufw allow 80/tcp
sudo ufw reload

Firewalld (CentOS/RHEL):

sudo firewall-cmd `--permanent` `--add-port`=80/tcp
sudo firewall-cmd `--reload`

iptables:

sudo iptables -I INPUT -p tcp `--dport` 80 -j ACCEPT

若使用云服务器,还需在控制台安全组规则中添加入站允许 TCP 80。

为什么会这样

Let's Encrypt 签发证书依赖 ACME 协议验证域名控制权,HTTP-01 挑战要求认证服务器能公开访问域名的 80 端口特定路径。

认证机构会向 http://yourdomain/.well-known/acme-challenge/ 发起请求,若防火墙拦截该入站流量,验证将失败导致续签中断。DNS-01 挑战通过修改 DNS TXT 记录验证,不依赖服务器入站端口,但需要 DNS 服务商 API 支持。

分步处理

步骤 1:确认防火墙状态

使用 sudo ufw statussudo firewall-cmd `--state` 查看防火墙是否运行。若云服务商安全组独立于系统防火墙,需登录云平台控制台检查。

步骤 2:添加放行规则

根据上述命令速用版执行对应命令。注意规则需作用于 INPUT 链或入站方向。若服务器启用 IPv6,确保同时放行 IPv6 的 80 端口。

步骤 3:检查 Web 服务监听

服务器防火墙开启后如何放行 Let's Encrypt 续签验证端口?

验证本地 Web 服务器(Nginx/Apache)是否监听 80 端口。执行 sudo netstat -tlnp | grep :80sudo ss -tlnp | grep :80。若未监听,Certbot standalone 模式可临时占用端口,但需停止现有 Web 服务。

步骤 4:执行续签测试

运行 sudo certbot renew `--dry-run`。该命令模拟续签流程,不会改变现有证书有效期,但会完整走一遍验证逻辑。

怎么验证是否生效

外部连通性测试:

在本地电脑或非服务器网络环境下,执行 curl -I http://yourdomain/.well-known/acme-challenge/test。若返回 404 而非连接超时或拒绝连接,说明端口已通且 Web 服务正常。

续签日志检查:

查看 Certbot 日志 /var/log/letsencrypt/letsencrypt.log。若看到 SUCCESSCongratulations 字样,表示验证通过。若出现 Connection refusedTimeout,则防火墙仍未放行。

常见坑

云安全组优先级更高: 操作系统防火墙放行后,若云平台安全组未开放 80 端口,外部请求仍会被拦截。两者需同时配置。

Web 服务器配置冲突: 若 Nginx/Apache 配置了强制跳转 HTTPS,需确保 HTTP-01 验证路径不被跳转。Certbot 通常会自动处理,但手动配置 rewrite 规则时需注意排除 /.well-known/acme-challenge/

IPv6 遗漏: 双栈网络环境下,若仅放行 IPv4 的 80 端口,认证机构可能通过 IPv6 发起验证导致失败。建议同时放行 IPv6 入站 80 端口。

常见问题

必须开放 443 端口才能续签吗?

不需要。HTTP-01 验证仅依赖 80 端口,443 端口用于 HTTPS 服务运行,不参与验证过程。

续签完成后可以关闭 80 端口吗?

不建议。证书有效期通常为 90 天,自动续签脚本会在到期前尝试连接 80 端口,关闭会导致后续续签失败。

无法开放 80 端口有什么替代方案?

使用 DNS-01 验证方式。需配置 Certbot 插件对接 DNS 服务商 API,通过添加 TXT 记录完成验证,无需开放服务器入站端口。

参考来源

  • Let's Encrypt, "Challenge Types", letsencrypt.org/docs/challenge-types/
  • Let's Encrypt, "FAQ", letsencrypt.org/docs/faq/
  • Certbot, "Instructions", certbot.eff.org/instructions