跳转至

firewalld

在 CentOS 7 中,防火墙使用 firewalld 服务来管理。你可以通过命令行工具 firewall-cmd 来配置防火墙规则。以下是详细的配置方法和规则讲解。


1. firewalld 基础概念

  • Zone(区域):定义了不同的信任级别,网络接口绑定到某个区域后,应用该区域的规则。
  • Service(服务):预定义的服务(如 http、https、ssh)规则。
  • Port(端口):直接开放或关闭特定端口。
  • Permanent(永久规则):需要明确指定 --permanent 参数,否则规则仅在当前运行时有效。

2. firewalld 常用命令

启动与状态管理

# 启动 firewalld 服务
systemctl start firewalld

# 设置开机自启动
systemctl enable firewalld

# 查看 firewalld 服务状态
systemctl status firewalld

# 停止 firewalld 服务(如果需要关闭防火墙)
systemctl stop firewalld

基本命令

# 查看默认区域
firewall-cmd --get-default-zone

# 查看所有区域
firewall-cmd --get-zones

# 查看当前活动区域及绑定的接口
firewall-cmd --get-active-zones

# 查看区域内的规则
firewall-cmd --zone=public --list-all

动态添加规则(临时规则,重启后失效)

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

# 开放服务(如 http)
firewall-cmd --zone=public --add-service=http

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

# 重载防火墙配置
firewall-cmd --reload

永久添加规则

# 开放端口(永久规则)
firewall-cmd --zone=public --add-port=8080/tcp --permanent

# 开放服务(永久规则)
firewall-cmd --zone=public --add-service=http --permanent

# 删除永久规则
firewall-cmd --zone=public --remove-port=8080/tcp --permanent

# 重载防火墙配置(永久规则生效必须重载)
firewall-cmd --reload

3. 防火墙规则说明

区域规则

  • CentOS 7 的 firewalld 默认区域是 public,适用于大多数场景。
  • 可以根据网络安全需求自定义不同的区域,例如:trusted(完全信任),block(完全拒绝)。

服务规则

  • firewalld 内置了一些常见的服务,可以通过以下命令查看支持的服务:
    firewall-cmd --get-services
  • 添加服务时,firewalld 会根据 /usr/lib/firewalld/services/ 中的配置文件应用规则。

端口规则

  • 协议:firewalld 支持 tcpudp 两种协议。
  • 端口范围:可以直接开放端口范围,例如:
    firewall-cmd --zone=public --add-port=5000-5100/tcp --permanent

源地址规则

  • 可指定来源 IP 地址允许访问:
    firewall-cmd --zone=public --add-source=192.168.1.100 --permanent

富规则(Rich Rules)

  • 富规则提供了更高的灵活性,例如控制特定 IP 对特定端口的访问:
    firewall-cmd --zone=public --add-rich-rule="rule family=ipv4 source address=192.168.1.100 port port=22 protocol=tcp accept" --permanent

4. 完整配置示例

场景:开放 HTTP 服务(80端口)和自定义端口(8080),限制某 IP 访问 SSH(22端口)。

# 开放 HTTP 服务
firewall-cmd --zone=public --add-service=http --permanent

# 开放自定义端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent

# 禁止特定 IP 访问 SSH
firewall-cmd --zone=public --add-rich-rule="rule family=ipv4 source address=192.168.1.100 port port=22 protocol=tcp drop" --permanent

# 重载规则
firewall-cmd --reload

# 查看规则
firewall-cmd --zone=public --list-all

5. 防火墙规则文件手动修改

firewalld 的规则保存在 /etc/firewalld/ 目录中: - zones/ 文件夹包含区域规则的 XML 配置文件。 - 修改这些文件后,重启 firewalld 生效:

systemctl restart firewalld