Ubuntu 22.04+/Debian 12+ 中 Nginx 默认不配置防火墙规则,需手动通过 nftables 放行 80/443 端口:确认 nftables 激活后,在 /etc/nftables.conf 的 inet filter input 链中添加 tcp dport {80, 443} ct state new accept 并重载规则。

Ubuntu 22.04+ 或 Debian 12+ 系统中,Nginx 通过 apt 安装后默认不自动配置防火墙规则;nftables 作为 systemd 默认启用的新一代防火墙,需手动添加放行规则,否则 Nginx 的 80/443 端口会被拦截,导致无法访问。
确认 nftables 已启用并运行
Debian/Ubuntu 新系统通常已默认启用 nftables(替代 iptables),但需验证:
- 执行
sudo systemctl status nftables,看到 active (exited) 表示服务已加载规则并运行 - 若显示 inactive (dead),运行
sudo systemctl enable --now nftables启用 - 检查当前规则:运行
sudo nft list ruleset,若输出为空,说明尚未配置任何规则
为 Nginx 添加基础 HTTP/HTTPS 放行规则
Nginx 默认监听 80(HTTP)和 443(HTTPS),需在 nftables 中显式允许入站连接。推荐写入系统级配置文件(避免重启丢失):
- 编辑主配置:
sudo nano /etc/nftables.conf - 在
inet filter input链的合适位置(通常在ct state established,related accept之后、drop之前)插入两行:
tcp dport { 80, 443 } ct state new accept
保存后重载规则:sudo nft -f /etc/nftables.conf。无需重启服务,立即生效。
可选:按接口或来源限制更安全
若只允许公网访问(如云服务器),可限定入口网卡;若仅内网测试,可限制 IP 段:
- 仅允许 eth0 接口的 80/443:
iifname "eth0" tcp dport { 80, 443 } ct state new accept - 仅允许 192.168.1.0/24 访问:
ip saddr 192.168.1.0/24 tcp dport { 80, 443 } ct state new accept - 注意顺序:这类限制规则必须放在通用放行规则之前,否则会被提前匹配的宽泛规则覆盖
验证与排错
配置后务必验证实际连通性:
- 本地测试:
curl -I http://localhost应返回HTTP/1.1 200 OK - 远程测试:从另一台机器执行
telnet your-server-ip 80,能成功连接表示端口开放 - 若仍失败,检查 Nginx 是否运行:
sudo systemctl status nginx;再检查 nftables 是否误加了drop规则在前面 - 临时清空所有规则调试:
sudo nft flush ruleset(测试完记得恢复)


















