在 CentOS 7 中,防火墙默认使用 firewalld 进行管理,相较于 CentOS 6 的 iptablesfirewalld 支持动态配置,无需重启服务即可生效。以下是查看防火墙状态、端口列表以及开启端口的详细步骤。

1. 查看防火墙状态

检查 firewalld 服务是否正在运行。

firewall-cmd --state
  • 输出说明

    • running:防火墙服务正在运行。
    • not running:防火墙服务未运行,需先启动服务:

      sudo systemctl start firewalld

2. 查看当前端口列表

查询当前防火墙规则中的开放端口和相关配置。

firewall-cmd --list-all
  • 输出示例

    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: eth0
      sources:
      services: ssh dhcpv6-client
      ports: 80/tcp
      protocols:
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:
  • 说明

    • 显示当前区域(默认 public)的配置,包括已开放的端口和服务。

3. 开启端口并应用配置

通过以下命令添加端口规则,并确保配置持久化。

3.1 开启单一端口

例如,开启 TCP 协议的 11400 端口:

sudo firewall-cmd --zone=public --add-port=11400/tcp --permanent
  • 参数说明

    • --zone=public:指定操作的防火墙区域,默认使用 public
    • --add-port=11400/tcp:指定要开启的端口和协议(tcpudp)。
    • --permanent:确保规则持久化,重启后依然生效。

3.2 开启端口范围

例如,开启 TCP 协议的 11400 至 11410 端口段:

sudo firewall-cmd --zone=public --add-port=11400-11410/tcp --permanent
  • 说明

    • 使用连字符(-)指定端口范围,适用于需要批量开放连续端口的场景。

3.3 重新加载防火墙配置

使上述配置立即生效:

sudo firewall-cmd --reload
  • 说明

    • --reload 命令会应用所有更改,无需重启 firewalld 服务。
    • 若不执行此命令,新增的规则仅在当前会话有效,重启后将丢失。

4. 验证端口是否开启

重新查看端口列表,确认规则已生效:

firewall-cmd --list-all
  • 预期输出

    • 包含新增的端口(例如 11400/tcp11400-11410/tcp)。

5. 特点与 CentOS 6 的区别

  • CentOS 7 (firewalld)

    • 支持动态配置,执行 firewall-cmd --reload 后无需重启服务。
    • 使用区域(zone)管理规则,灵活性更高。
  • CentOS 6 (iptables)

    • 修改 /etc/sysconfig/iptables 配置文件后,需重启 iptables 服务(service iptables restart)使规则生效。

6. 注意事项

  1. 确保 firewalld 服务启用
    如果防火墙未运行,需启用并设置为开机自启:

    sudo systemctl enable firewalld
    sudo systemctl start firewalld
  2. 权限要求
    所有 firewall-cmd 命令需使用 sudo 执行,确保具有管理员权限。
  3. 验证端口可用性
    使用 telnetnc 测试端口是否可访问,例如:

    nc -zv localhost 11400
  4. 区域选择
    默认使用 public 区域,若需操作其他区域,可通过 --zone=<zone_name> 指定。

7. 参考资料