麒麟V10及之后默认用firewalld,确认方法是:先运行sudo systemctl status firewalld,若显示active(running)则为firewalld管理;否则执行sudo iptables -L -n | head -5,若输出含KSC_PUBLIC_INPUT等非标准链,则为麒麟自研iptables封装层。

怎么确认当前用的是 firewalld 还是 iptables?
麒麟 V10 及之后版本默认启用 firewalld,但部分定制版或旧环境可能回退到 iptables 直接管理。直接查服务状态最可靠:sudo systemctl status firewalld —— 若显示 active (running),说明 firewalld 正在管;sudo iptables -L -n | head -5 —— 若输出规则(尤其看到 KSC_PUBLIC_INPUT 等非标准链),大概率是麒麟自研的 iptables 封装层在起作用。
容易踩的坑:
• 不要只看 which firewall-cmd 或 rpm -q firewalld,装了不等于在运行;
• systemctl is-active iptables 在麒麟上基本无效,因为原生 iptables-services 包通常未安装;
• 某些政企定制版会禁用 firewalld、改用 KySec 或 KSC 防火墙模块,此时 iptables -L KSC_PUBLIC_INPUT -n -v 才是真实入口。
firewalld 默认规则在哪查?怎么看 public 区域开了哪些端口?
firewalld 的“默认规则”本质是区域(zone)的预设策略,不是一堆显式 -j ACCEPT 条目。查 public 区域的开放情况,用这两条命令就够了:firewall-cmd --list-all —— 查当前运行时配置(含服务、端口、富规则);firewall-cmd --list-all-zones —— 查所有 zone 的完整定义,重点看 public 下的 services: 和 ports: 行。
常见错误现象:
• firewall-cmd --list-ports 返回空,不代表没开服务——比如 ssh 是通过 services 开放的,不是靠端口;
• --list-all 显示 icmp-block-inversion: no,意味着默认 *允许* ICMP(包括 ping),除非你手动加了 --add-icmp-block;
• 如果 firewall-cmd --get-default-zone 返回 work 或 home,那 public 的规则根本没生效,得先确认网卡绑对了 zone。
为什么 iptables -L 看不到 firewalld 加的规则?
因为 firewalld 底层确实用 iptables/netfilter,但它把规则写在 filter 表的 FORWARD_IN_ZONES、INPUT_ZONES 等动态链里,而不是直接塞进 INPUT 主链。直接跑 iptables -L INPUT -n,你只会看到几条跳转语句,真正的逻辑藏在子链中。
实操建议:
• 调试时别硬啃 iptables -L 全输出,优先用 firewall-cmd 命令查;
• 需要底层验证?用 iptables -t filter -S INPUT 看跳转目标,再查对应子链,比如 iptables -t filter -S IN_public;
• 混用风险高:手动用 iptables -A INPUT 加规则,firewalld 重启后大概率被清掉——它只认自己管理的链。
麒麟系统里 ping 不通,到底该动哪一层?
先分清是防火墙拦了,还是其他环节断了。快速定位:
• ping 127.0.0.1 成功 → 本机协议栈正常;
• ping <本机局域网IP> 失败 → 很可能是 INPUT 链丢 ICMP;
• firewall-cmd --query-icmp-block=echo-request 返回 no,说明 firewalld 没屏蔽 ping;
• 但如果返回 yes,就执行 firewall-cmd --remove-icmp-block=echo-request --permanent && firewall-cmd --reload。
容易被忽略的点:
• 某些麒麟安全加固版(如 KySec)会在内核层拦截 ICMP,此时 firewall-cmd 无效,得查 sysctl net.ipv4.icmp_echo_ignore_all;
• 如果用的是 KSC 防火墙(非 firewalld),必须走 iptables -I KSC_PUBLIC_INPUT -p icmp --icmp-type echo-request -j ACCEPT,firewall-cmd 完全不搭界;
• firewalld 的 ICMP 控制是全局的,不能按 IP 或网段精细放行 ping —— 要这种粒度,只能切回 iptables 模式。















