Linux firewalld 在生产环境的使用建议

发布时间 - 2026-01-28 00:00:00    点击率:
生产环境是否启用 firewalld 取决于网络策略管理主体:若已有硬件防火墙、云安全组或 eBPF/iptables 工具(如 Calico),则 firewalld 冗余且易引发冲突;仅推荐用于无集中管控的中小规模物理机/虚拟机场景。

firewalld 服务是否该在生产环境启用

生产环境是否启用 firewalld,不取决于“该不该用”,而取决于“谁在管网络策略”。如果已有专用硬件防火墙、云平台安全组(如 AWS Security Group、阿里云 ECS 安全组)或主机侧 eBPF/iptables 直接管理工具(如 Calico、Cilium),firewalld 往往是冗余层,反而增加策略冲突风险。它适合中小规模、无集中网络策略管控的物理机或虚拟机场景,尤其是管理员需频繁增删端口且不熟悉 raw iptables 规则时。

  • 不建议在 Kubernetes 节点上同时启用 firewalld 和 kube-proxy 的 iptables 模式,二者会竞争 FORWARD 链规则,导致 Pod 网络不通或 Service 访问异常
  • 若使用 cloud-init 或 Ansible 自动化部署,确保 firewalld 启动顺序早于应用服务,否则服务可能在防火墙就绪前监听成功,造成短暂暴露
  • 默认的 public zone 允许 sshdhcpv6-client,但禁止所有入向新连接——这点常被

    误认为“已锁死”,实则只是没显式放行业务端口

zone 切换与 runtime/permanent 模式的坑

firewall-cmd--runtime-to-permanent 不是“保存当前配置”,而是把当前 runtime 规则覆盖写入 permanent 配置。若你只临时加了一条端口、未 reload,又执行该命令,之前通过 firewall-offline-cmd 或手动编辑 /etc/firewalld/zones/*.xml 写死的规则就会丢失。

  • 修改 zone 建议始终用 firewall-cmd --permanent --set-default-zone=trusted + firewall-cmd --reload,避免仅 runtime 切换导致重启后回退
  • 给网卡绑定 zone 时,不要依赖 firewall-cmd --change-interface=eth0 --zone=internal,该操作仅 runtime 生效;应改用 nmcli connection modify "System eth0" firewall.zone internal(配合 NetworkManager)或在 /etc/sysconfig/network-scripts/ifcfg-eth0 中加 FIREWALL_ZONE=internal
  • firewall-cmd --list-all-zones 输出中,每个 zone 的 services: 行只显示“预定义服务”(即 /usr/lib/firewalld/services/ 下的 XML 文件),自定义端口必须看 ports: 字段,否则容易漏检

如何安全地批量开放端口而不留后门

直接 firewall-cmd --permanent --add-port=8080-8090/tcp 是高危操作:范围端口难以审计,且一旦某端口被恶意进程监听,即自动获得通行权。生产环境应坚持“最小端口+明确协议+绑定 zone”。

  • 优先用服务名而非端口号:firewall-cmd --permanent --add-service=http,因为 /usr/lib/firewalld/services/http.xml 明确定义了 80/tcp,语义清晰且防错
  • 如需开放非标端口(如 Java 应用的 8761/tcp),先建自定义服务:
    cat > /etc/firewalld/services/eureka.xml <<'EOF'
    
    Eureka Server
    
    
    EOF
    ,再 firewall-cmd --reload && firewall-cmd --permanent --add-service=eureka
  • 永远避免 --add-port=0-65535/udp 类操作;UDP 端口尤其危险,因无连接状态跟踪,firewalld 默认仅靠 timeout 控制,易被放大攻击利用

排查 connection refused 却能 ping 通的问题

ping 通只说明 ICMP 和网络层可达,connection refused 多数情况是 TCP 连接被拒绝,原因常不在 firewalld,但在排查路径上它最容易被冤枉。

  • 先确认服务真在监听:ss -tlnp | grep :8080,若无输出,问题在应用未启动或绑定错了地址(如只绑 127.0.0.1
  • 再查 firewalld 是否放行:firewall-cmd --list-portsfirewall-cmd --list-services,注意输出中的 zone 是否匹配网卡实际所属 zone(firewall-cmd --get-active-zones
  • 最后验证规则是否生效:用 firewall-cmd --direct --get-all-rules 查看是否有 direct rules 干扰,或用 iptables -t filter -L INPUT -n -v 看底层链是否含 REJECTDROP —— firewalld 的 default_zone 若设为 drop,未匹配任何 rule 的包会被静默丢弃,此时 telnet 会超时而非 refused

真正麻烦的是 multi-zone 场景下 interface 绑定漂移,比如 DHCP 重获 IP 后 NetworkManager 重载配置,导致网卡 zone 回到 default。这种问题不会报错,只会让某批请求突然失联,得盯住 journalctl -u firewalld -f 里 zone change 日志。


# linux  # java  # 防火墙  # 虚拟机  # 端口  # 工具  # 阿里云  # proxy  # kubernetes  # xml  # Filter  # public  # internal  # Interface  # default  # input  # eureka  # http  # udp  # ssh  # 自动化  # ansible  # 绑定  # 已有  # 自定义  # 而非  # 的是  # 云安  # 就会  # 硬件防火墙  # 尤其是  # 设为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  如何快速登录WAP自助建站平台?  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Android GridView 滑动条设置一直显示状态(推荐)  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  如何在建站宝盒中设置产品搜索功能?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  简历在线制作网站免费版,如何创建个人简历?  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  如何基于云服务器快速搭建个人网站?  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  微信小程序 canvas开发实例及注意事项  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  怎么用AI帮你设计一套个性化的手机App图标?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  网站制作大概多少钱一个,做一个平台网站大概多少钱?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  如何在万网主机上快速搭建网站?  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  如何生成腾讯云建站专用兑换码?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  教你用AI润色文章,让你的文字表达更专业  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  非常酷的网站设计制作软件,酷培ai教育官方网站?  如何为不同团队 ID 动态生成多个独立按钮  Laravel如何实现用户密码重置功能?(完整流程代码)  零基础网站服务器架设实战:轻量应用与域名解析配置指南  Laravel如何使用Collections进行数据处理?(实用方法示例)  如何注册花生壳免费域名并搭建个人网站?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Linux系统命令中tree命令详解  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  详解Huffman编码算法之Java实现  java获取注册ip实例  java ZXing生成二维码及条码实例分享  网站建设保证美观性,需要考虑的几点问题!  Laravel Docker环境搭建教程_Laravel Sail使用指南  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  JavaScript实现Fly Bird小游戏  Laravel如何记录自定义日志?(Log频道配置)  java中使用zxing批量生成二维码立牌