商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > 如何在Linux中配置具体的防火墙规则

如何在Linux中配置具体的防火墙规则

  发布于2026-08-18 阅读(0)

扫一扫,手机访问

要在firewalld中添加永久端口规则,必须先使用--permanent参数将其写入配置文件,然后再执行--reload命令加载到运行时环境中。否则,规则仅会被保存到配置文件中,但不会生效,一旦系统重启,这些规则仍会丢失。

如何在Linux中配置具体的防火墙规则

firewalld 里怎么加一条永久生效的端口规则

加完规则后,如果不执行reload操作,规则是不会生效的;而加规则时若不加上 --permanent 参数,那么一旦重启,规则就会丢失。这可是大家在使用firewalld时最容易踩到的坑啦!要知道,firewalld的临时规则和永久规则是分别独立存储的,所以必须要明确地声明进行持久化操作才行哦。

  • 先确认服务在运行:firewall-cmd --state 返回 running 才能操作
  • 开放 TCP 80 端口(永久):firewall-cmd --permanent --add-port=80/tcp
  • 开放 UDP 53 端口(永久):firewall-cmd --permanent --add-port=53/udp
  • 必须 reload 才真正加载:firewall-cmd --reload,否则规则只存配置文件里,没进内存
  • 验证是否生效:firewall-cmd --list-portsfirewall-cmd --list-all

iptables 怎么让规则重启后不消失

iptables 命令默认只改内存里的规则,系统一重启全清空。要持久化,得把当前规则导出到文件,并确保开机时自动恢复。

  • 保存当前规则到默认路径(CentOS/RHEL):iptables-sa ve > /etc/sysconfig/iptables
  • Ubuntu/Debian 系统常用:iptables-sa ve > /etc/iptables/rules.v4
  • 验证保存内容:cat /etc/sysconfig/iptables | head -n 5,确认有 *filterCOMMIT
  • 开机自动加载依赖 systemd 服务或网络启动脚本;RHEL 系统通常靠 iptables 服务(systemctl enable iptables),但注意:该服务在 firewalld 启用时会被禁用,二者不能共存
  • 别直接编辑 /etc/sysconfig/iptables 文件手动改——容易格式错、缺 COMMIT、导致 restore 失败

为什么 firewall-cmd --add-service=http 没反应

没报错但端口不通,大概率是没指定 zone,或者 zone 绑定错了网卡。firewalld 规则永远绑定到具体 zone,而不是全局生效。

  • 查当前活跃 zone:firewall-cmd --get-active-zones,看你的网卡(比如 ens33)绑在哪个 zone 下
  • 如果网卡在 public 区域,就得加:firewall-cmd --zone=public --add-service=http --permanent
  • 如果想让所有 zone 都开 http,得逐个加,firewalld 不支持“全局 service”
  • http 是预定义 service,对应 TCP 80;自定义端口不能用 --add-service,只能用 --add-port
  • 加完别忘 --reload,且 --list-all 输出里要能看到 services: http 才算成功

误删规则后怎么快速回滚

firewalld 没内置 undo,iptables 更没有。所谓“回滚”,其实是靠你提前留下的快照或备份配置。

  • 操作前先备份当前配置:firewall-cmd --list-all > /root/firewall-before-20260708.bak
  • firewalld 永久配置存在 /etc/firewalld/ 下,重点备份:/etc/firewalld/zones/public.xml(或你用的 zone 文件)
  • iptables 备份就是 iptables-sa ve 导出的文件,替换后执行 iptables-restore < /path/to/backup
  • 别指望 systemctl restart firewalld 能恢复——它只重载 --permanent 配置,不是撤销上一步操作
  • 线上环境建议用脚本封装规则变更,并带 timestamp 和 commit msg,不然真出问题时连哪条命令动了什么都难定位
实际配置里最麻烦的从来不是语法,而是 zone 绑定、permanent/reload 的配合节奏,以及忘了自己到底改的是临时还是永久配置。多看一眼 --list-all 输出里的 “permanent: yes/no” 和 “active: yes/no”,能省掉大半排查时间。
本文转载于:https://www.php.cn/faq/2998598.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注