CentOS 7 使用 firewalld 开启端口
在 CentOS 7 中,防火墙默认使用 firewalld
进行管理,相较于 CentOS 6 的 iptables
,firewalld
支持动态配置,无需重启服务即可生效。以下是查看防火墙状态、端口列表以及开启端口的详细步骤。
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
:指定要开启的端口和协议(tcp
或udp
)。--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/tcp
或11400-11410/tcp
)。
- 包含新增的端口(例如
5. 特点与 CentOS 6 的区别
CentOS 7 (
firewalld
):- 支持动态配置,执行
firewall-cmd --reload
后无需重启服务。 - 使用区域(zone)管理规则,灵活性更高。
- 支持动态配置,执行
CentOS 6 (
iptables
):- 修改
/etc/sysconfig/iptables
配置文件后,需重启iptables
服务(service iptables restart
)使规则生效。
- 修改
6. 注意事项
确保
firewalld
服务启用:
如果防火墙未运行,需启用并设置为开机自启:sudo systemctl enable firewalld sudo systemctl start firewalld
- 权限要求:
所有firewall-cmd
命令需使用sudo
执行,确保具有管理员权限。 验证端口可用性:
使用telnet
或nc
测试端口是否可访问,例如:nc -zv localhost 11400
- 区域选择:
默认使用public
区域,若需操作其他区域,可通过--zone=<zone_name>
指定。