Ubuntu/Debian 安装 Nginx 后需用 iptables-persistent 持久化 80/443 端口规则,先确认 Nginx 运行并监听 0.0.0.0:80,再添加 ESTABLISHED、HTTP/HTTPS 规则并保存,同时检查 Nginx 配置未绑定 127.0.0.1 且 IPv6 规则同步保存。

Ubuntu/Debian 系统用 apt install nginx 安装后,若需通过 iptables 开放 80/443 端口,必须将规则保存为持久化配置,否则重启后失效。
确认 Nginx 已监听并运行
安装后 Nginx 默认已启用并监听 0.0.0.0:80。先验证:
- 运行
sudo systemctl status nginx确保状态为 active (running) - 执行
sudo ss -tlnp | grep ':80\|:443'查看是否监听(注意:若启用了 ufw 或 systemd-networkd,可能影响绑定) - 如端口未监听,检查
/etc/nginx/sites-enabled/default中是否有listen 80;且未被注释
添加 iptables 允许规则
默认 Ubuntu 通常使用 ufw,但若明确使用原生 iptables(如关闭了 ufw),则手动添加:
- 允许 HTTP:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT - 允许 HTTPS:
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT - 建议在上述规则前插入一条已建立连接放行规则(提高安全性):
sudo iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
保存 iptables 规则为持久化配置
iptables 规则默认不保存。在 Debian/Ubuntu 上推荐使用 iptables-persistent:
- 安装服务:
sudo apt install iptables-persistent(安装过程中会提示是否保存当前规则,选 是) - 若已安装但未保存,手动保存:
sudo netfilter-persistent save - 验证是否生效:
sudo netfilter-persistent reload后再执行sudo iptables -L -n检查规则是否存在 - 注意:该服务开机自动加载,无需额外启用(
systemctl is-enabled netfilter-persistent应返回 enabled)
检查与 Nginx 的协同性
iptables 规则仅控制网络层访问,不影响 Nginx 自身配置:
- 确保
/etc/nginx/nginx.conf中未设置listen 127.0.0.1:80这类仅本地监听——这会导致外部无法访问,即使 iptables 放行也无效 - 若使用 IPv6,还需添加对应规则:
sudo ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT,并用sudo netfilter-persistent save一并保存 - 重启 Nginx 不影响 iptables,但修改 iptables 后建议测试:
curl -I http://localhost(本机)及从另一台机器curl -I http://your-server-ip










