必须先启用防火墙服务再永久添加端口规则并重载:firewalld需用--permanent参数添加端口后执行--reload;ufw启用后allow命令即生效;kylin-firewall需add-rule后apply-rules。

您在麒麟系统终端中需要开放某个端口供外部访问,但执行命令后服务仍无法连通,这通常是因为只启用了防火墙服务却未添加入站端口规则,或规则仅临时生效未永久保存。
确认防火墙后端并启用服务
先判断当前系统默认使用哪个防火墙后端:运行 sudo systemctl status firewalld,若显示 active (running) 则用 firewalld;若提示 not found,再运行 sudo ufw status verbose,看到 Status: inactive 说明未启用 ufw;最后运行 sudo kylin-firewall -g,若返回 firewall_status: disabled 表示原生工具也未激活。多数麒麟V10桌面版默认启用 firewalld,优先按此路径操作。
若 firewalld 处于 inactive 状态,执行:sudo systemctl start firewalld && sudo systemctl enable firewalld。这一步必须完成,否则后续所有端口命令都将报错“not running”。
用 firewall-cmd 永久开放 TCP/UDP 端口
firewalld 的端口规则分“运行时”和“永久”两层,只加 --add-port 不带 --permanent 参数的规则会在 reload 或重启后消失,务必避免。
第一步:查看当前默认区域与已有端口
执行 sudo firewall-cmd --list-all,记下输出中的 zone 名称(通常是 public)和 ports 行内容。
第二步:永久添加 TCP 端口(例如开放 Web 服务端口 8080)sudo firewall-cmd --permanent --add-port=8080/tcp
第三步:永久添加 UDP 端口(如需支持 DNS 查询)sudo firewall-cmd --permanent --add-port=53/udp。注意:UDP 协议不可省略 /udp,写成 53/tcp 会导致规则无效且无报错提示。
第四步:重载配置使永久规则立即生效sudo firewall-cmd --reload。这是关键动作,漏掉则端口依然被拦截。
第五步:验证端口是否成功加入规则sudo firewall-cmd --query-port=8080/tcp 返回 yes 即表示已放行。
用 ufw 快速开放端口(适用于预装版本)
部分麒麟V10 SP1及后续桌面版预装 ufw,其规则默认持久化,启用即生效,无需 reload。
方法一:启用 ufw 并设默认拒绝入站
先运行 sudo ufw enable,输入 y 确认;再执行 sudo ufw default deny incoming,建立最小权限基线。
方法二:直接开放指定端口sudo ufw allow 3306/tcp —— 允许 MySQL 默认端口;sudo ufw allow 22 —— 允许 SSH(ufw 会自动识别为 tcp)。
方法三:删除错误添加的规则sudo ufw delete allow 3306/tcp。执行后会二次确认,输入 y 才真正移除。
用 kylin-firewall 添加带源限制的端口规则
该方式适用于需审计留痕或限定访问来源的场景,比如只允许公司内网访问管理端口。
执行:sudo kylin-firewall --add-rule "allow tcp in port 8443 from 10.0.0.0/8"。
这条命令将创建一条仅允 10.0.0.0/8 网段访问 TCP 8443 端口的入站规则,并立即持久化到 KYSEC 安全子系统中。
添加后运行 sudo kylin-firewall --list-rules,检查输出中是否包含该规则条目。若未出现,说明语法有误或权限不足。
最后执行 sudo kylin-firewall --apply-rules,强制将内存中规则同步到底层过滤链。【不执行此步规则不会实际生效】











