firewall-cmd 工具以及区域 Zone 介绍

firewall-cmd 命令讲解

firewall-cmdfirewalld 服务的命令行接口,用于配置和管理 Linux 防火墙。它提供了很多选项来添加规则、打开/关闭端口、管理网络区域以及查询防火墙状态等。

以下是 firewall-cmd 的主要命令和选项的详细解释。

基本命令结构

firewall-cmd [选项] [子命令] [参数]
  • 选项:如 --permanent--zone 等,用于指定作用范围或模式。
  • 子命令:如 --add-port--list-all 等,表示具体的操作。
  • 参数:如端口号、协议、服务名等,用于指定子命令的具体参数。

常见选项和子命令

1. --state:查看防火墙状态
firewall-cmd --state

该命令会返回防火墙的当前状态。常见的输出结果有:

  • running:防火墙正在运行。
  • not running:防火墙未运行。
2. --reload:重新加载防火墙规则
firewall-cmd --reload

此命令重新加载防火墙规则,并应用所有已经通过 --permanent 选项设置的更改。

3. --permanent:永久性生效的规则
firewall-cmd --permanent --add-port=80/tcp

当使用 --permanent 选项时,规则会被永久写入,且在防火墙重新加载后生效(通过 --reload 重新加载)。如果不加 --permanent,更改只会立即生效,但重启防火墙后将失效。

4. --zone:指定网络区域
firewall-cmd --zone=public --add-port=443/tcp
  • --zone=public 表示应用规则到特定区域。每个区域代表一组规则,默认区域通常是 public
  • 如果不指定 --zone,则默认作用于当前默认区域。
5. --list-all:列出区域的所有规则
firewall-cmd --zone=public --list-all

显示某个区域(如 public)的所有规则,包括已允许的服务、端口、转发规则等。输出结果类似:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh dhcpv6-client
  ports: 80/tcp 443/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:
6. --add-port:开放指定端口
firewall-cmd --zone=public --add-port=80/tcp
firewall-cmd --zone=public --add-port=443/tcp --permanent
  • --add-port=80/tcp:在 public 区域开放 TCP 协议的 80 端口。
  • --permanent:指定该规则永久生效。
7. --remove-port:移除已开放的端口
firewall-cmd --zone=public --remove-port=80/tcp
firewall-cmd --zone=public --remove-port=80/tcp --permanent

移除指定的端口,方式与 --add-port 相同。

8. --add-service:允许某个服务通过
firewall-cmd --zone=public --add-service=http
firewall-cmd --zone=public --add-service=https --permanent
  • --add-service=http:允许 HTTP 服务(通常是端口 80)。
  • 使用 --permanent 使规则永久生效。
9. --remove-service:禁止某个服务通过
firewall-cmd --zone=public --remove-service=http --permanent

移除已允许的服务,比如 HTTP 或 HTTPS。

10. --list-ports:列出开放的端口
firewall-cmd --zone=public --list-ports

列出当前区域中已经开放的端口,输出类似:

80/tcp 443/tcp
11. --list-services:列出允许的服务
firewall-cmd --zone=public --list-services

列出已允许的服务,输出类似:

ssh dhcpv6-client http https
12. --add-rich-rule:添加复杂规则
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=22 protocol=tcp accept'
  • rich rule:允许你定义更复杂的规则。上面的示例允许来自 192.168.1.100 的 IP 访问 TCP 的 22 端口(SSH)。
13. --remove-rich-rule:移除复杂规则
firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=22 protocol=tcp accept'

移除已定义的复杂规则,规则字符串必须与添加时的规则一致。

14. --add-masquerade:启用伪装(NAT)
firewall-cmd --zone=public --add-masquerade
firewall-cmd --zone=public --add-masquerade --permanent

启用网络地址转换(NAT),可以让内网的私有地址通过外部地址进行访问。

15. --remove-masquerade:禁用伪装
firewall-cmd --zone=public --remove-masquerade --permanent

禁用伪装功能。

16. --get-default-zone:获取默认区域

firewall-cmd --get-default-zone

查看当前默认区域,通常是 public,所有规则默认应用于此区域。

17. --set-default-zone:设置默认区域

firewall-cmd --set-default-zone=internal

设置新的默认区域为 internal。所有规则不指定区域时将作用于该区域。

18. --get-active-zones:查看当前活跃的区域

firewall-cmd --get-active-zones

查看当前正在使用的区域及对应的网络接口。

示例输出:
public
  interfaces: eth0

19. --zone--permanent 的配合使用

--zone--permanent 选项通常一起使用。--zone 用于指定规则作用的网络区域,--permanent 用于指定规则是否永久生效。

例如,永久开放 internal 区域的 8080 端口:

firewall-cmd --zone=internal --add-port=8080/tcp --permanent
firewall-cmd --reload

总结

firewall-cmd 是一个非常灵活且强大的工具,用于管理防火墙规则和配置。通过它,你可以:

  • 动态添加/删除端口和服务。
  • 应用临时或永久的规则。
  • 使用复杂的 rich rule 管理更细粒度的防火墙策略。

在操作防火墙时,确保规则配置正确,以避免不必要的服务中断或安全风险。

区域(Zone)讲解

firewalld 中,区域(Zone)定义了一组预配置的防火墙规则,这些规则基于网络信任级别来管理流量。每个区域表示一个特定的网络环境或信任级别,决定了哪些流量可以进入或离开该区域中的接口(如网络接口、IP 地址、VLAN 等)。

区域的作用

  1. 管理不同网络环境的流量控制
    每个网络环境可能具有不同的信任级别,例如家庭网络、工作网络或公共网络。通过为不同的区域分配不同的接口,管理员可以为不同的网络环境配置不同的防火墙规则。

  2. 允许或限制特定服务和端口
    每个区域可以配置允许哪些服务(例如 HTTP、SSH)或端口可以通过防火墙访问,哪些协议或源地址的流量被接受。

  3. 简化防火墙配置管理
    通过使用区域,管理员可以轻松地为不同的网络环境应用不同的规则集,而无需为每个接口手动配置防火墙规则。

区域的信任级别

每个区域根据网络的信任级别预先配置了不同的防火墙规则。firewalld 默认提供了几种区域类型,信任级别从最开放到最严格递增,涵盖从完全信任的网络到完全不信任的网络。

以下是常见的区域类型及其信任级别:

  1. trusted(完全信任)

    • 允许所有传入和传出的流量,不进行任何过滤。适用于完全信任的网络(如本地回环)。
    • 示例:实验室设备或安全的专用网络。
  2. home(家庭网络)

    • 适用于家庭环境,信任级别较高,允许常见服务(如 SSH、DHCP)访问。
    • 示例:家庭 Wi-Fi 网络。
  3. work(工作网络)

    • 用于工作环境,类似于家庭区域,但信任级别稍低,允许的服务较少。
    • 示例:办公室内网。
  4. internal(内部网络)

    • 适用于内部网络,信任级别较高,允许内部网络流量,但对外部连接有限制。
    • 示例:企业局域网。
  5. public(公共网络)

    • 用于不信任的公共网络,默认仅允许基本的传入流量,禁止大部分传出流量。
    • 示例:咖啡馆 Wi-Fi、机场 Wi-Fi。
  6. external(外部网络)

    • 用于外部连接,通常用于路由器或网关,启用网络伪装(NAT)以保护内部网络。
    • 示例:边界路由器连接到互联网。
  7. dmz(隔离区)

    • 适用于放置在网络隔离区的系统,限制外部访问,只允许特定服务。通常用于需要受限外部访问的服务器(如 Web 服务器)。
    • 示例:Web、邮件服务器等暴露给外部但要与内部网络隔离的系统。
  8. block(阻止所有流量)

    • 默认阻止所有传入流量,适用于完全不信任的网络环境。除了允许通过的流量(如回送接口、ping),所有其他请求都会被拒绝。
  9. drop(丢弃所有流量)

    • 最严格的区域,不回应传入请求,直接丢弃所有外部连接,甚至不发送响应(如 ICMP 请求)。适用于完全不信任的网络环境。

示例:区域的使用

1. 查看默认区域

查看当前防火墙的默认区域:

firewall-cmd --get-default-zone
2. 设置接口到特定区域

你可以将一个网络接口(如 eth0)分配到特定的区域。例如,将 eth0 分配到 public 区域:

firewall-cmd --zone=public --change-interface=eth0 --permanent
firewall-cmd --reload
  • --zone=public:指定区域为 public
  • --change-interface=eth0:将接口 eth0 分配到该区域。
  • --permanent:使配置永久生效。
  • --reload:重新加载防火墙以应用更改。
3. 修改区域中的规则

可以为每个区域添加、删除服务或端口。例如,在 public 区域开放 HTTP 服务:

firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload
4. 查看某个区域的规则

列出 public 区域中的所有规则:

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

输出示例:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh http
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

解释:

# public (active)
# 这是当前激活的防火墙区域。区域可以定义特定的防火墙规则,适用于不同的网络环境(例如家庭、公共场所)。
# "public" 是一个预定义的防火墙区域,默认情况下更注重安全,适用于不太信任的公共网络。

# target: default
# 防火墙的目标(target)是 "default",这意味着默认情况下,如果没有显式的规则允许或拒绝某个连接,
# 它会遵循区域的默认策略。在 public 区域,这通常是拒绝不明流量。

# icmp-block-inversion: no
# ICMP(Internet Control Message Protocol)是用于网络诊断的协议,如 ping 命令。
# "icmp-block-inversion" 设置为 "no" 表示 ICMP 不会被阻止。若为 "yes",则会阻止 ICMP 请求。

# interfaces: eth0
# 防火墙规则应用于接口 "eth0"。这个网络接口代表服务器的网络连接,通常是网卡的名称。
# 所有进出该接口的流量都由该区域的规则管理。

# sources:
# sources 列为空,意味着没有特定的 IP 源被添加到此区域。默认情况下,该区域应用于所有流量。

# services: dhcpv6-client ssh http
# 允许的服务列表包括:
# - dhcpv6-client: DHCPv6 客户端服务,用于获取 IPv6 地址。
# - ssh: 允许通过端口 22 进行 SSH 连接,便于远程管理服务器。
# - http: 允许通过端口 80 提供 HTTP 服务,通常是网站服务器。

# ports:
# 这里为空,意味着没有特定的端口被手动允许或阻止。允许的服务会自动开放相应的端口。

# protocols:
# 这里为空,意味着没有指定的网络协议(如 TCP、UDP)需要被显式处理。

# masquerade: no
# "masquerade" 是网络地址转换(NAT)的一个功能,用于隐藏内部网络的 IP 地址。
# 在这里设置为 "no",意味着没有启用 IP 地址伪装,流量不会进行 NAT 转换。

# forward-ports:
# 这里为空,意味着没有端口转发配置。端口转发允许将来自一个端口的流量转发到另一个端口或 IP。

# source-ports:
# 这里为空,意味着没有对特定源端口的流量进行任何特别处理。

# icmp-blocks:
# 这里为空,表示没有阻止任何 ICMP 消息类型。

# rich rules:
# "rich rules" 是 firewalld 中的高级规则,可以精确控制网络流量。
# 这里为空,意味着没有定义任何自定义的高级规则。

区域的实际作用场景

  1. 家用路由器:你可以为家庭网络的接口(如 wlan0)配置 home 区域,以允许常见的家庭服务,同时防止来自不可信设备的流量。
  2. 工作网络:如果你有多个网络接口,连接到不同的网络环境(如办公室局域网、外部公共网络),可以为局域网接口配置 work 区域,为公共网络接口配置 public 区域,以确保不同环境下的流量安全。
  3. 服务器:当运行一个暴露给外部的 Web 服务器时,服务器通常会分配到 dmz 区域,从而仅允许 HTTP、HTTPS 等必要的流量通过。

总结

  • 区域firewalld 用于根据网络环境和信任级别分类防火墙规则的机制。
  • 每个区域都有一组预定义的规则,决定了可以允许哪些服务、端口或流量。
  • 通过将网络接口分配到不同区域,你可以在不同网络环境下灵活应用不同的安全策略,以确保系统安全并简化防火墙管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值