首页 > 精选知识 >

问 linux 关闭防火墙端口 firewalld 与 iptables 实操详解

2026-11-08 22:38:56
最佳答案

答

linux 关闭防火墙端口,主流分为两种场景,一种是 firewalld 体系下移除已经放行的端口规则,另一种是传统 iptables 体系删除放行规则,并不是直接把整个防火墙全部关掉,很多新手会混淆关闭单个端口和停用整个防火墙服务,生产环境优先推荐单独关闭指定端口,不建议直接停用防火墙,否则会把主机暴露在公网增加安全风险。linux 防火墙本质是内核 netfilter 框架,规则负责控制进出主机的数据包,之前添加的放行端口规则会长期保存在规则集里面,就算服务重启,永久规则依旧生效,所以只删除临时规则,重启之后端口又会重新开放,这也是经常踩坑的点。学习 linux 关闭防火墙端口,要先确认当前系统使用的是 firewalld 还是 iptables,centos7 之后默认 firewalld,老版本 centos6 默认 iptables,还要区分临时规则和永久规则,掌握查询规则删除规则重载保存规则整套流程,同时理解云服务器还要额外检查云平台安全组,系统防火墙关闭端口之后,安全组仍然拦截的话端口还是不通,下面分模块深度讲解。

一 确认防火墙类型与服务状态

执行 linux 关闭防火墙端口之前,第一步必须确认系统当前启用的防火墙服务,避免操作工具不对,规则修改无效。

系统版本默认防火墙查看服务命令
centos7 8 9 rhelfirewalldsystemctl status firewalld
centos6iptablesservice iptables status
ubuntu debianufw 或者 iptablessystemctl status ufw

实操步骤,第一步终端执行 systemctl status firewalld,如果服务是 active 运行状态,就说明是 firewalld,第二步如果 firewalld 没有运行,再检查 iptables 规则是否存在,第三步确认之后,再执行对应的 linux 关闭防火墙端口操作。

二 firewalld 关闭指定端口

firewalld 使用 zone 区域概念,不同区域有独立规则,默认一般是 public 区域,添加放行端口的时候如果指定了其他 zone,关闭的时候也要在同一个 zone 操作,否则找不到规则。

命令作用
firewall cmd list all查看全部放行端口和规则
firewall cmd remove port 端口号 tcp临时移除 tcp 端口
firewall cmd permanent remove port 端口号 tcp永久移除 tcp 端口
firewall cmd reload重载防火墙,让永久规则生效

实操步骤,第一步执行 firewall cmd list all,查询当前已经放行的端口,确认目标端口和协议是 tcp 还是 udp,第二步如果只需要临时关闭,执行 firewall cmd remove port 8080 tcp,重启防火墙之后规则会恢复,第三步如果需要永久关闭,加上 permanent 参数执行永久移除命令,第四步执行 firewall cmd reload 重载规则,第五步再次执行 list all 验证端口已经从放行列表消失。

深度说明,firewalld 的 permanent 规则默认不会立刻生效,必须 reload 或者重启 firewalld 服务才会加载,很多新手只执行 permanent 删除,忘记 reload,还以为端口没有关闭成功。如果之前是通过服务名称放行,不是端口号放行,就需要使用 remove service 的方式关闭,和端口放行是两套规则。

三 iptables 关闭指定端口

传统 iptables 是命令行直接操作内核规则,规则分为临时内存规则和保存后的永久规则,centos6 体系需要保存规则,重启之后才不会丢失。

命令作用
iptables L n列出全部 iptables 规则
iptables L n line numbers带行号列出规则
iptables D INPUT 行号根据行号删除 INPUT 链放行端口规则

实操步骤,第一步执行 iptables L n line numbers,找到放行目标端口对应的那一条规则,记下行号,第二步执行 iptables D INPUT 行号删除这条规则,第三步如果是 centos6,执行 service iptables save 把修改保存到配置文件,第四步再次执行 iptables L n 确认规则已经删除。

深度说明,iptables 删除规则有两种方式,一种按行号删除,一种匹配规则内容删除,按行号删除的时候,删除前面一行之后,后面行号会自动变化,所以不能一次性连续删除多行,要重新查询行号,否则容易删错规则。

四 ufw 关闭指定端口

ubuntu debian 很多系统使用 ufw,属于 iptables 上层简易管理工具,同样可以完成 linux 关闭防火墙端口操作。

命令作用
ufw status numbered带行号查看放行规则
ufw delete 行号删除对应放行端口规则
ufw delete allow 端口 /tcp按规则内容删除放行端口

实操步骤,第一步执行 ufw status numbered 查看规则,第二步选择按行号或者按端口规则删除,第三步执行 ufw status 确认端口不再放行。

五 常见误区和补充要点

1 区分关闭防火墙端口和停止防火墙服务,systemctl stop firewalld 是停用整个防火墙,所有端口全部放行,安全风险很高,不推荐作为常规方案

2 云服务器额外安全组,就算系统里面 linux 关闭防火墙端口完成,云厂商安全组如果仍然拦截,外部依旧无法访问,需要登录云控制台同步修改安全组

3 协议要匹配,端口分 tcp 和 udp,关闭的时候协议选错,原来的放行规则仍然保留

4 端口关闭之后,如果业务本身服务还在监听端口,只是防火墙不再放行,本机内部依旧可以访问这个端口,外部访问会被拦截

5 规则重载之后一定要二次校验,确认规则真的移除,避免因为 zone 不对,删除的是别的区域规则

【常见问题】

问题 1 linux 关闭防火墙端口使用 firewalld 加 permanent 之后为什么还是能访问

回答 1 linux 关闭防火墙端口执行 permanent 删除之后,永久规则默认不会立即生效,必须执行 firewall cmd reload 重载防火墙,重载完成之后规则才会真正加载,如果没有重载,原来的放行规则还在内存里面,外部依旧可以访问端口。

问题 2 linux 关闭防火墙端口,查询的时候 public 区域找不到端口规则怎么办

回答 1 linux 关闭防火墙端口的时候,如果 public 区域查不到目标端口,说明当初放行端口的时候是添加到其他 zone 区域,需要切换对应的 zone 参数查询,在对应的 zone 里面执行移除命令,否则无法完成 linux 关闭防火墙端口操作。

问题 3 linux 关闭防火墙端口,iptables 按行号删除规则为什么删错

回答 1 linux 关闭防火墙端口使用 iptables 按行号删除的时候,删除一条规则之后,后续所有规则行号会自动向前移位,如果没有重新查询行号继续删除下一条,就会选错行号删除错误规则,每次删除之后都要重新执行带行号查询命令。

问题 4 linux 关闭防火墙端口之后本机还能访问端口是不是操作失败

回答 1 linux 关闭防火墙端口只是防火墙不再放行外部数据包,业务服务本身仍然监听这个端口,本机回环访问不受防火墙拦截,所以本机可以正常访问不代表 linux 关闭防火墙端口操作失败,要从外部主机测试连通性来验证。

【免责申明】

本文介绍 linux 关闭防火墙端口相关内容仅作为技术学习参考,防火墙规则调整会改变主机网络访问策略,错误删除规则可能影响业务正常访问,也不要随意停用整机防火墙造成安全隐患,生产环境操作前确认业务影响范围,本文不对误操作带来的业务中断安全风险承担责任。