不能,firewall-cmd 无 --set-default-policy 参数;默认策略由 zone 的 target 属性控制,需编辑 /etc/firewalld/zones/ 对应 XML 文件(如 public.xml)添加 <target>DROP</target> 并执行 firewall-cmd --reload 生效。

firewall-cmd --set-default-policy 能直接改默认策略吗
不能。这个命令根本不存在,firewall-cmd 没有 --set-default-policy 这个参数,所有网上搜到的“设置默认策略为 drop”之类写法都是错的——执行会报 Unknown argument --set-default-policy 错误。
firewalld 的默认策略(即“对未匹配任何规则的流量如何处理”)是绑定在 zone 上的,不是全局开关。每个 zone 自己定义了 target 值,它才是实际起作用的策略入口点。
-
target="ACCEPT":相当于默认放行(危险,慎用) -
target="REJECT":拒绝并返回错误响应(如 TCP RST) -
target="DROP":静默丢弃(最常用的安全默认)
/etc/firewalld/zones/ 下的 zone 文件怎么改 target
修改默认策略,本质就是编辑你正在用的那个 zone(通常是 public)的 XML 文件,把 target 属性设成想要的值。
比如你要让 public 区域默认丢弃所有未显式允许的入站流量:
<zone> <short>Public</short> <description>For use in public areas...</description> <target>DROP</target> <service name="ssh"/> <port protocol="tcp" port="80"/> </zone>
注意三点:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 必须加
<target>DROP</target>标签,不能只改属性或写在注释里 - 该文件路径是
/etc/firewalld/zones/public.xml(如果你用的是public区域) - 改完后必须执行
firewall-cmd --reload,否则不生效
为什么改了 target 还没生效
常见原因就两个:
- 你改的是
/usr/lib/firewalld/zones/public.xml—— 这是系统自带模板,会被/etc/firewalld/zones/public.xml覆盖,改它没用 - 没运行
firewall-cmd --reload,或者 reload 后报错但没注意到(比如 XML 格式错误、标签未闭合)
验证是否生效的方法:
执行 firewall-cmd --list-all,输出第一行会显示类似 target: DROP;如果还是 target: default,说明没生效或 zone 没加载成功。
想彻底禁用 firewalld 改用 iptables 怎么办
这不是“修改默认策略”,而是换防火墙引擎。CentOS 7 允许切换,但要注意:
- 先停用 firewalld:
systemctl stop firewalld&&systemctl disable firewalld - 安装 iptables-service:
yum install iptables-services - 启动 iptables:
systemctl start iptables&&systemctl enable iptables - iptables 的默认策略在
/etc/sysconfig/iptables里,靠-P INPUT DROP这类规则控制
关键提醒:firewalld 和 iptables 不能共存,强行同时启用会导致规则冲突、网络中断。切之前务必确认你清楚 iptables 链结构和状态跟踪机制(-m state --state ESTABLISHED,RELATED -j ACCEPT 必须配对出现,否则 SSH 会断连)。

















