如何将Nginx防火墙状态设为active及解决netfilter防火墙inactive问题
嘿,咱们一个个来解决你的防火墙问题:
1. 如何将Nginx相关的防火墙状态改为"active"?
首先得明确你说的是两种情况之一:要么是firewalld服务本身处于停止状态,要么是firewalld已经在运行,但没启用Nginx对应的防火墙规则。下面分别给出操作步骤:
情况1:firewalld服务本身处于inactive状态
先检查firewalld的当前状态:
systemctl status firewalld
如果输出显示inactive,执行以下命令启动服务并设置开机自启:
sudo systemctl start firewalld sudo systemctl enable firewalld
再次执行状态检查命令,就能看到服务变为active了。
情况2:firewalld已运行,但Nginx的防火墙规则未启用
如果firewalld本身已经是active,但你需要允许Nginx的HTTP/HTTPS流量通过防火墙(也就是让Nginx相关的规则处于活跃状态),执行以下命令:
# 允许HTTP(80端口)流量 sudo firewall-cmd --add-service=http --permanent # 若需要HTTPS(443端口),额外执行这条 sudo firewall-cmd --add-service=https --permanent # 重新加载规则使修改生效 sudo firewall-cmd --reload
验证规则是否生效:
firewall-cmd --list-services
如果输出里能看到http或https,就说明Nginx相关的防火墙规则已经处于活跃状态了。
2. 如何让netfilter防火墙处于活跃状态?
首先要澄清一个关键点:netfilter是Linux内核自带的包过滤框架,本身没有"active/inactive"的状态——它是内核的一部分,只要内核加载了相关模块,它就一直在后台运行。你看到的"inactive"大概率是指基于netfilter的前端管理工具(比如iptables、firewalld)处于停止状态。
下面分两种常见场景处理:
场景A:使用iptables作为netfilter的前端管理工具
先检查iptables服务的状态:
systemctl status iptables
如果显示inactive,执行以下命令启动服务并设置开机自启:
sudo systemctl start iptables sudo systemctl enable iptables
之后可以用iptables -L命令查看当前规则,确认netfilter的规则已经生效(iptables是直接操作netfilter的工具)。
场景B:使用firewalld作为前端(CentOS/RHEL 7+ 系统更常见)
如果是firewalld服务处于inactive,参考第一个问题里的情况1启动firewalld即可——firewalld是netfilter的高级管理工具,它运行后就会通过netfilter处理流量规则。
另外,如果你是通过nfstat之类的工具看到"inactive",可能是内核没有加载netfilter相关模块?可以先检查模块是否加载:
lsmod | grep netfilter
如果没有输出,尝试手动加载核心模块:
sudo modprobe ip_tables sudo modprobe ip6_tables
加载完成后再次执行lsmod | grep netfilter,就能看到相关模块,此时netfilter就处于活跃工作状态了。
内容的提问来源于stack exchange,提问作者Caesar

