firewalld防火墙
查看
基本服务状态
# 检查服务是否运行
sudo systemctl status firewalld
防火墙核心状态
# 查看防火墙是否运行
sudo firewall-cmd --state
详细配置状态
# 查看当前规则
sudo firewall-cmd --list-all
关闭
方法一:临时停止(重启后恢复)
# 停止服务
sudo systemctl stop firewalld
# 验证状态
sudo firewall-cmd --state # 应显示 "not running"
方法二:永久禁用
# 停止服务
sudo systemctl stop firewalld
# 禁用开机启动
sudo systemctl disable firewalld
firewalld与iptables:
firewall-cmd --reload之后,sudo iptables -L多了一条11 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited,进而导致我无法访问2183端口,是什么原因导致的,如何避免
原因分析:
- 1.firewalld 默认策略:firewalld 的默认区域(通常是 public 区域)在没有任何允许规则的情况下,会有一条默认的拒绝规则(REJECT all)。当您重新加载 firewalld 时,它会清除当前的所有 iptables 规则(包括您手动添加的规则),然后重新应用它自己的规则。
- 2.规则顺序问题:在 firewalld 加载的规则中,拒绝规则通常位于规则链的末尾,因此它会拒绝所有未被前面规则明确允许的流量。由于您没有为2183端口添加允许规则,所以该端口的流量被拒绝。
关于firewalld 默认策略(public区域):
在 firewalld 中,每个区域(zone)都有一个目标(target),它决定了如何处理未匹配任何规则的数据包。default 目标的具体行为如下:
- 1.
在 firewalld 版本 < 0.9.0:
- •
default等同于REJECT(拒绝并发送 ICMP 拒绝消息)
- •
- 2.
在 firewalld 版本 ≥ 0.9.0:
- •
default表示使用全局默认目标,即:# 查看全局默认目标 sudo firewall-cmd --get-default-target - •如果未显式设置全局默认目标,则其值为
REJECT
- •
📌 如何查看当前实际目标
# 1. 查看区域的显式目标设置
sudo firewall-cmd --zone=public --get-target
# 2. 如果输出为 'default',则检查全局默认目标
sudo firewall-cmd --get-default-target
# 3. 验证实际 iptables 规则
sudo iptables -t filter -L INPUT -v -n
# 在链尾通常会看到:
# REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
⚙️ 修改目标策略
1. 修改区域目标
# 设置为 ACCEPT(完全开放 - 危险!)
sudo firewall-cmd --zone=public --set-target=ACCEPT --permanent
# 设置为 DROP(静默丢弃)
sudo firewall-cmd --zone=public --set-target=DROP --permanent
# 恢复为默认值
sudo firewall-cmd --zone=public --set-target=default --permanent
2. 修改全局默认目标
# 设置全局默认目标为 DROP
sudo firewall-cmd --set-default-target=DROP
# 永久生效
sudo firewall-cmd --set-default-target=DROP --permanent
sudo firewall-cmd --reload
📊 目标策略效果对比表
| 目标值 | 未匹配数据包处理 | ICMP 响应 | 典型应用场景 |
|---|---|---|---|
ACCEPT |
允许通过 | 无 | 完全信任的网络 |
REJECT |
拒绝并通知 | 发送拒绝消息 | 公共网络(默认) |
DROP |
静默丢弃 | 无响应 | 高安全环境 |
default |
使用全局默认目标 | 取决于全局设置 | 继承全局策略 |

浙公网安备 33010602011771号