Linux firewalld 防火墙小白速查手册|端口放行/启停/排错一站式命令大全
Linux firewalld 防火墙小白速查手册端口放行/启停/排错一站式命令大全前言很多刚接触 Linux 的新手在部署网站或项目时明明程序已经跑起来了外网却死活访问不了90% 都是因为防火墙端口没放行。本文整理了firewalld全套高频运维命令按场景分类不用死记硬背复杂参数复制即用新手随用随查。适用系统CentOS 7 / RHEL 7 / Fedora / Rocky Linux / AlmaLinux 等自带 firewalld 防火墙的系统。一、防火墙基础启停控制服务开关1. 启动防火墙# 临时启动重启服务器后失效servicefirewalld start# 标准 systemd 写法推荐systemctl start firewalld2. 重启防火墙注意重启服务 ≠ 重载规则。restart会中断现有连接日常修改规则请用--reload。servicefirewalld restart# 推荐写法systemctl restart firewalld3. 停止防火墙关闭防护servicefirewalld stop systemctl stop firewalld安全提醒不建议直接关闭防火墙更不要在生产环境长期停用否则服务器暴露所有端口极易被入侵。4. 设置开机自启 / 禁用开机自启# 开机自动开启防火墙推荐systemctlenablefirewalld# 禁止开机启动有安全风险不推荐systemctl disable firewalld5. 查看防火墙当前运行状态systemctl status firewalld输出active (running)表示已开启输出inactive (dead)表示已关闭若显示failed或报错需排查配置文件或依赖。二、查看防火墙现有规则排错第一站当外网访问不通第一件事就是看防火墙放了哪些端口。1. 完整打印所有放行端口、服务、区域规则firewall-cmd --list-all输出示例public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh dhcpv6-client ports: 80/tcp 443/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:你可以直观看到开放端口、允许的服务、默认区域、绑定网卡等是排错的第一命令。2. 只查看已放行的端口列表firewall-cmd --list-ports3. 只查看已放行的服务如 http、https、ssh 等firewall-cmd --list-services三、端口管理放行/关闭/查询端口最最常用核心知识点--permanent表示永久生效不加的话重启防火墙或服务器后配置丢失。所有加了--permanent的操作必须执行firewall-cmd --reload才会真正生效。1. 查询某个端口是否已放行格式firewall-cmd --query-port端口/协议# 查询 8080/tcp 是否开放firewall-cmd --query-port8080/tcp返回yes已放行返回no未放行。2. 永久放行一个或多个端口# 放行 80 端口HTTPfirewall-cmd--permanent--add-port80/tcp# 放行 3306 端口MySQLfirewall-cmd--permanent--add-port3306/tcp# 放行 UDP 端口如 DNS 53firewall-cmd--permanent--add-port53/udp3. 一次性放行一段连续端口# 放行 10000-20000 之间所有 TCP 端口firewall-cmd--permanent--add-port10000-20000/tcp适用于被动模式 FTP、视频会议等需要大量连续端口的服务。4. 永久关闭已放行的端口删除规则# 关闭 8080 端口访问firewall-cmd--permanent--remove-port8080/tcp5. 临时放行端口测试用重启失效无需 reload仅当前会话生效服务器重启或手动--reload后失效适合临时调试firewall-cmd --add-port9000/tcp6. 重载防火墙配置修改永久规则后必执行firewall-cmd--reload该命令只重新加载规则不会中断现有连接比restart更安全。四、进阶直接放行系统预设服务不用记端口号Linux 已经内置了常用服务的配置文件你可以直接放行“服务名”无需手动输入端口更加方便。永久放行常用服务# 放行 HTTP 网站服务端口 80firewall-cmd--permanent--add-servicehttp# 放行 HTTPS 加密网站端口 443firewall-cmd--permanent--add-servicehttps# 放行 SSH 远程连接端口 22firewall-cmd--permanent--add-servicessh# 重载生效firewall-cmd--reload删除已放行的服务firewall-cmd--permanent--remove-servicehttp firewall-cmd--reload查看系统支持哪些预设服务名firewall-cmd --get-services输出包含http、https、mysql、redis等几十种。五、高级运维仅允许指定 IP 访问安全加固生产环境中数据库、管理后台等敏感端口绝不能对全世界开放。可通过“富规则”rich rule限制只有特定 IP 才能访问。1. 仅允许 192.168.1.100 访问 3306 端口firewall-cmd--permanent--add-rich-rulerule familyipv4 source address192.168.1.100 port protocoltcp port3306 acceptfirewall-cmd--reload2. 同时允许多个 IP 或网段# 允许多个不连续 IP需分别添加firewall-cmd--permanent--add-rich-rulerule familyipv4 source address192.168.1.100 port protocoltcp port3306 acceptfirewall-cmd--permanent--add-rich-rulerule familyipv4 source address192.168.1.101 port protocoltcp port3306 accept# 允许整个网段如 10.0.0.0/24firewall-cmd--permanent--add-rich-rulerule familyipv4 source address10.0.0.0/24 port protocoltcp port22 accept3. 删除指定 IP 的放行规则把--add-rich-rule改成--remove-rich-rule即可规则内容必须完全一致firewall-cmd--permanent--remove-rich-rulerule familyipv4 source address192.168.1.100 port protocoltcp port3306 acceptfirewall-cmd--reload4. 查看当前所有富规则firewall-cmd --list-rich-rules六、区域zone管理速览firewalld 通过“区域”来区分不同网络环境的信任级别。默认工作在public区域。查看当前激活的区域firewall-cmd --get-active-zones查看指定区域的详细规则firewall-cmd--zonepublic --list-all将网卡接口分配到指定区域# 将 ens33 网卡绑定到 trusted 区域该区域默认允许所有流量firewall-cmd--permanent--zonetrusted --change-interfaceens33⚠️谨慎使用 trusted 区域该区域放行所有连接一般只用于内部测试。七、核心参数通俗解释参数说明firewall-cmdfirewalld 防火墙的命令行管理工具--permanent永久标记不加此参数所有配置都是临时的服务器重启后消失加上后才写入配置文件永久保存--add-port添加放行端口格式端口/协议tcp 或 udp网站/数据库一般用 tcp--remove-port移除已放行端口关闭该端口的访问--add-service放行一个系统预定义的服务如 http、https、ssh--reload重载防火墙配置修改永久规则后必须执行让新端口立刻生效不会中断现有连接--list-all列出当前区域的所有规则排错第一步八、新手排错流程外网访问不通按这个顺序查检查防火墙是否开启systemctl status firewalld查看当前已放行规则firewall-cmd --list-all查询目标端口状态firewall-cmd --query-port你的端口/tcp如果返回no则添加永久端口并重载firewall-cmd--permanent--add-port你的端口/tcp firewall-cmd--reload检查云服务器安全组阿里云 / 腾讯云 / 华为云等云平台在系统外部还有一层虚拟防火墙必须同时在安全组中放行相同端口否则外网依然不通。确认应用监听的 IP 地址确保服务监听的地址是0.0.0.0或本机网卡 IP而不是127.0.0.1否则外网无法访问。九、避坑提醒不要随便关闭防火墙。直接systemctl stop firewalld会暴露所有端口增加被暴力破解和入侵的风险。正确做法是按需放行指定端口。严格区分 TCP 和 UDP 协议。网站、数据库、SSH 都是TCPDNS、流媒体、游戏服务才用 UDP。放行时协议写错也会导致不通。云服务器双重防火墙。即使系统内 firewalld 放行了端口仍需去云厂商控制台的安全组/防火墙处开放对应端口两层都要配置。永久规则必须 reload。所有带--permanent的操作如果不执行firewall-cmd --reload等于什么都没改。可以用--list-all验证是否生效。测试规则时先用临时放行。不确定是否需要长期开放时先用不带--permanent的命令测试确认无误后再永久添加。附录一高频端口速查表端口协议常见用途22TCPSSH 远程连接80TCPHTTP 网站443TCPHTTPS 加密网站3306TCPMySQL / MariaDB 数据库5432TCPPostgreSQL 数据库6379TCPRedis 缓存27017TCPMongoDB 数据库8080TCPJava Web 应用、Nginx 代理、Jenkins8443TCPTomcat HTTPS、管理后台9000TCPPHP-FPM、内部服务调试附录二常用操作速查卡片任务命令启动防火墙systemctl start firewalld永久放行端口firewall-cmd --permanent --add-port8080/tcp firewall-cmd --reload永久关闭端口firewall-cmd --permanent --remove-port8080/tcp firewall-cmd --reload临时放行测试firewall-cmd --add-port8080/tcp查看全部规则firewall-cmd --list-all仅允许某 IP 访问添加rich rule并指定source address放行 HTTP/HTTPSfirewall-cmd --permanent --add-service{http,https} --reload总结Firewalld 不可怕掌握查规则 → 添端口 → 重载三步走就能解决绝大多数部署访问问题。收藏本文以后每次部署直接对着敲命令即可