Linuxfirewalld常见问题_firewalld实战解析

6次阅读

firewalld问题多因服务未运行、端口未永久添加且未重载、云安全组未配置或未用服务名开放。需先启动并设开机自启,永久添加端口后重载,同步配置云安全组,优先使用预定义服务如http/https

Linuxfirewalld常见问题_firewalld实战解析

linux系统里firewalld出问题,八成不是命令写错,而是漏掉了关键前提或混淆了两层控制逻辑。真正卡住人的,往往是“明明端口加了,还是连不上”这类现象。下面直击高频痛点,不绕弯子。

先确认防火墙服务在运行

很多问题根源就在这里:firewalld根本没启动。

  • 执行 systemctl status firewalld,看到 active (running) 才算正常;如果显示 inactive (dead)failed,后续所有端口操作都无效
  • 启动服务:sudo systemctl start firewalld
  • 设为开机自启(生产环境必须):sudo systemctl enable firewalld
  • 若启动失败,常见原因包括:iptables/ufw正在运行(需先停用并禁用)、SELinux策略拦截(可临时用 setenforce 0 测试)、配置文件损坏(可从 /usr/lib/firewalld/ 恢复默认)

端口开放必须带 –permanent 并重载

只执行 firewall-cmd –add-port=8080/tcp 是临时生效,重启服务器或重载规则后就消失。

  • 永久添加端口:sudo firewall-cmd –zone=public –add-port=8080/tcp –permanent
  • 立即应用变更:sudo firewall-cmd –reload(这一步不能省)
  • 验证是否成功:sudo firewall-cmd –zone=public –list-ports,应看到刚加的端口
  • 注意:–zone=public 是多数云服务器的默认区域,如不确定当前区域,先查 firewall-cmd –get-default-zone

别忘了云平台的安全组这一关

firewalld只是第二道门,第一道是云服务商的安全组(如阿里云、腾讯云控制台里的“安全组规则”)。

  • 即使 firewalld 完全关闭,如果安全组没放行对应端口,外网请求在到达服务器网卡前就被丢弃
  • 务必登录云控制台,在实例绑定的安全组中添加入方向规则:协议 TCP、端口范围(如 80 或 3306)、源地址(如 0.0.0.0/0 或指定IP段)
  • 流量能通 = 安全组允许 firewalld 允许,二者缺一不可

用服务名代替端口更稳妥

比如开放 Web 服务,推荐用预定义服务而非直接开 80 端口,避免遗漏关联模块。

  • 启用 HTTP 服务:sudo firewall-cmd –zone=public –add-service=http –permanent
  • 启用 HTTPS:sudo firewall-cmd –zone=public –add-service=https –permanent
  • 这些服务定义包含端口、协议及所需内核模块(如 nf_conntrack_http),比手动开端口更完整
  • 自定义服务(如 redismongodb)可新建 xml 文件到 /etc/firewalld/services/,再执行 firewall-cmd –reload-services
text=ZqhQzanResources