在Linux服务器管理中,Nginx作为高性能的Web服务器和反向代理,其安全性至关重要,防火墙作为系统安全的第一道防线,正确配置防火墙规则可以有效保护Nginx服务免受未授权访问和恶意攻击,以下将详细介绍与Nginx相关的防火墙命令,涵盖不同防火墙工具(如iptables、firewalld、ufw)的使用方法,以及常见的安全配置场景。

iptables防火墙与Nginx配置
iptables是Linux系统中传统的防火墙工具,基于内核的netfilter框架,通过规则链控制数据包的流动,在CentOS 7之前的版本或自定义内核环境中,iptables是主流选择。
查看当前iptables规则
sudo iptables -L -n -v
-L
:列出所有规则链-n
:以数字形式显示IP和端口,避免DNS解析延迟-v
:显示详细信息,如数据包和字节数
允许Nginx相关端口
Nginx默认使用80(HTTP)和443(HTTPS)端口,需明确放行:
# 允许HTTP端口 sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许HTTPS端口 sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT
:追加规则到INPUT链(入站规则)-p tcp
:指定TCP协议--dport
:目标端口-j ACCEPT
:接受数据包
限制特定IP访问
仅允许信任的IP访问Nginx服务:
sudo iptables -A INPUT -p tcp --dport 80 -s 192.168.1.100 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -s 192.168.1.100 -j ACCEPT
-s
:指定源IP地址
拒绝其他未授权访问
在放行必要端口后,默认拒绝其他对80和443端口的访问:

sudo iptables -A INPUT -p tcp --dport 80 -j DROP sudo iptables -A INPUT -p tcp --dport 443 -j DROP
保存iptables规则
不同Linux发行版的保存命令不同:
- CentOS 6/7:
sudo service iptables save
- Debian/Ubuntu:
sudo iptables-save > /etc/iptables/rules.v4
iptables规则示例表格
命令 | 功能说明 |
---|---|
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
允许HTTP流量 |
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT |
允许HTTPS流量 |
sudo iptables -A INPUT -p tcp --dport 80 -s 192.168.1.0/24 -j ACCEPT |
允许特定网段访问HTTP |
sudo iptables -A INPUT -p tcp --dport 443 -j DROP |
拒绝其他HTTPS访问 |
firewalld防火墙与Nginx配置
firewalld是CentOS 7/RHEL 7及之后版本默认的动态防火墙管理工具,支持区域(Zone)和运行时/永久规则配置。
启动并启用firewalld
sudo systemctl start firewalld sudo systemctl enable firewalld
查看firewalld状态和区域
sudo firewall-cmd --state sudo firewall-cmd --get-active-zones
放行Nginx端口
# 永久放行HTTP端口 sudo firewall-cmd --permanent --add-service=http # 永久放行HTTPS端口 sudo firewall-cmd --permanent --add-service=https # 重新加载防火墙使规则生效 sudo firewall-cmd --reload
--permanent
:表示规则永久生效,需重载后生效--add-service
:通过预定义的服务名称添加规则(http对应80端口,https对应443端口)
限制IP访问
# 添加信任IP到public区域 sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="http" accept' sudo firewall-cmd --reload
查看已添加的服务
sudo firewall-cmd --permanent --list-services
firewalld常用命令表格
命令 | 功能说明 |
---|---|
sudo firewall-cmd --permanent --add-service=http |
永久放行HTTP服务 |
sudo firewall-cmd --reload |
重载防火墙规则 |
sudo firewall-cmd --remove-service=http |
移除HTTP服务规则 |
sudo firewall-cmd --get-services |
查看所有预定义服务 |
ufw防火墙与Nginx配置
ufw(Uncomplicated Firewall)是Ubuntu/Debian系统中简单易用的防火墙工具,通过ufw
命令管理规则。
启用ufw
sudo ufw enable sudo ufw default deny incoming # 默认拒绝入站 sudo ufw default allow outgoing # 默认允许出站
放行Nginx端口
# 允许HTTP端口 sudo ufw allow 80/tcp # 允许HTTPS端口 sudo ufw allow 443/tcp # 或通过服务名称放行 sudo ufw allow 'Nginx HTTP' sudo ufw allow 'Nginx HTTPS'
限制IP访问
sudo ufw allow from 192.168.1.100 to any port 80 proto tcp sudo ufw allow from 192.168.1.100 to any port 443 proto tcp
查看ufw规则
sudo ufw status verbose
ufw规则示例表格
命令 | 功能说明 |
---|---|
sudo ufw allow 80/tcp |
允许HTTP流量 |
sudo ufw allow 'Nginx Full' |
同时放行HTTP和HTTPS |
sudo ufw deny from 192.168.1.0/24 |
拒绝特定网段访问 |
sudo ufw delete allow 80/tcp |
删除HTTP放行规则 |
高级安全配置建议
- 限制访问频率:结合
fail2ban
工具,对频繁访问Nginx的IP进行封禁。 - 隐藏Nginx版本:在
nginx.conf
中配置server_tokens off;
,避免泄露版本信息。 - 使用SSL/TLS:强制HTTPS访问,配置Let's Encrypt免费证书。
- 定期更新:保持Nginx和系统防火墙工具的版本更新,修复安全漏洞。
相关问答FAQs
问题1:如何检查防火墙是否正确放行了Nginx端口?
解答:可以通过以下命令验证:

- 使用
telnet
或nc
测试端口连通性:telnet your_server_ip 80
或nc -zv your_server_ip 443
。 - 查看防火墙日志:
sudo iptables -L -v -n
(iptables)或sudo journalctl -u firewalld
(firewalld)。 - 使用
ss
命令检查端口监听状态:sudo ss -tulnp | grep nginx
。
问题2:修改防火墙规则后,如何确保规则永久生效?
解答:不同防火墙工具的持久化方式不同:
- iptables:需手动保存规则,如CentOS中使用
service iptables save
,Debian中通过iptables-save > /etc/iptables/rules.v4
。 - firewalld:添加规则时使用
--permanent
选项,并通过firewall-cmd --reload
重载。 - ufw:规则默认永久生效,启用
ufw
后无需额外操作,若需修改规则,直接使用ufw allow/delete
命令并重启ufw
(sudo ufw disable && sudo ufw enable
)确保更新。