CentOS防火墙设置与端口开放的完整指南(2025最新版)

在现代服务器运维中,CentOS 作为企业级Linux发行版的代表,被广泛应用于Web服务器、数据库服务和云主机部署。而防火墙配置是保障系统安全的第一道防线。本文将为你详细讲解 CentOS系统中防火墙设置与端口开放的完整方法,涵盖 firewalld 的核心操作、常见问题排查以及最佳实践,助你轻松掌握服务器安全配置。

CentOS防火墙设置与端口开放的完整指南(2025最新版)


CentOS防火墙工具简介:firewalld vs iptables

CentOS 7 开始,系统默认使用 firewalld 作为防火墙管理工具,取代了传统的 iptables。两者的主要区别如下:

特性firewalldiptables
配置方式动态、区域化管理静态规则链
规则热更新支持(无需重启服务)需要重启或重载
用户友好性高(命令简洁)较低(需熟悉规则语法)
推荐使用✅ CentOS 7+ 推荐旧版本或特殊场景

建议:新项目一律使用 firewalld,操作更简单且不易出错。


firewalld 基础操作:检查与启动

在配置端口前,首先要确保防火墙服务正常运行。

1. 查看防火墙状态

systemctl status firewalld
  • 若显示 active (running),表示已启动。

  • 若未运行,使用以下命令启动并设置开机自启:

sudo systemctl start firewalld
sudo systemctl enable firewalld

2. 检查 firewalld 是否运行(命令行方式)

firewall-cmd --state

返回 running 表示服务正常。


查询当前防火墙开放端口

在修改规则前,建议先查看当前配置。

1. 查看当前活动区域

firewall-cmd --get-active-zones

通常为 public 区域。

2. 查看指定区域的详细规则

firewall-cmd --zone=public --list-all

输出示例:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: ssh dhcp-client http https
  ports: 8080/tcp 3306/tcp
  ...

3. 查看已开放的端口和服务

# 查看所有开放端口
firewall-cmd --list-ports

# 查看所有开放服务
firewall-cmd --list-services

开放端口:临时 vs 永久配置

1. 临时开放端口(重启后失效)

适用于测试环境或临时调试。

# 开放TCP 8080端口
firewall-cmd --zone=public --add-port=8080/tcp

# 开放UDP 53端口(如DNS服务)
firewall-cmd --zone=public --add-port=53/udp

2. 永久开放端口(推荐生产环境使用)

使用 --permanent 参数确保规则在重启后依然生效。

# 永久开放TCP 80和443端口(HTTP/HTTPS)
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent

# 重新加载防火墙使永久规则生效
firewall-cmd --reload

⚠️ 注意--permanent 参数必须配合 --reload 才能生效。


开放服务而非端口(更安全的做法)

firewalld 内置了许多常见服务的预定义规则,推荐优先使用服务名。

# 开放HTTP服务(自动映射到80端口)
firewall-cmd --zone=public --add-service=http --permanent

# 开放HTTPS服务
firewall-cmd --zone=public --add-service=https --permanent

# 开放SSH服务(建议保留)
firewall-cmd --zone=public --add-service=ssh --permanent

# 重新加载
firewall-cmd --reload

优点:无需记忆端口号,且服务规则更完整(如支持IPv6、ICMP等)。


高级配置技巧

1. 基于IP地址限制访问(白名单)

仅允许特定IP访问某个端口:

firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="8080" accept'
firewall-cmd --reload

2. 为特定网卡绑定规则

firewall-cmd --zone=public --add-port=8080/tcp --interface=eth0 --permanent
firewall-cmd --reload

删除端口或服务

若需关闭已开放的端口或服务:

# 删除端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent

# 删除服务
firewall-cmd --zone=public --remove-service=http --permanent

# 重新加载
firewall-cmd --reload

常见问题与排查

❌ 问题1:端口已开放但无法访问?

请按顺序排查:

  1. 服务是否启动?

    netstat -tulnp | grep 8080
  2. 云服务器安全组是否放行?

    • 阿里云、腾讯云、AWS等需在控制台同步开放端口。

  3. SELinux 是否阻止?

    getenforce

    若为 Enforcing,可临时设为 Permissive 测试:

    setenforce 0

❌ 问题2:提示 “FirewallD is not running”

运行以下命令启动服务:

sudo systemctl start firewalld
sudo systemctl enable firewalld

最佳实践建议

  1. 最小权限原则:只开放必要的端口和服务。

  2. 使用服务名而非端口:更安全且易于管理。

  3. 定期审查规则:使用 --list-all 审计当前配置。

  4. 结合云安全组:云服务器需双重放行。

  5. 测试连通性

    telnet your-server-ip 80
    # 或
    nc -zv your-server-ip 8080

掌握 CentOS防火墙设置与端口开放 是每一位系统管理员和开发者的基本功。通过本文介绍的 firewalld 命令,你可以轻松实现端口管理、服务开放和安全策略配置。记住:安全无小事,每一次规则变更都应经过测试与审核

📌 收藏本文,作为你的CentOS防火墙操作速查手册!如有疑问,欢迎在评论区交流。

发表评论

评论列表

还没有评论,快来说点什么吧~