目录
firewall-cmd --get-icmptypes命令执行结果阻塞信息类型
将网络接口 ens33 对应区域更改为 internal 区域。
firewall-cmd 命令工具与配置模式相关的选项有三个。
概述:
Firewalld是Linux系统上的一种动态防火墙管理工具,提供了支持网络/防火墙区域(zones)和接口的标记能力,它是CentOS 7及其后续版本的默认防火墙管理工具,取代了之前的iptables防火墙。Firewalld提供了一种简化和易于使用的方法来配置和管理防火墙,支持IPv4、IPv6防火墙设置以及以太网桥。它支持运行时配置与永久配置,允许动态更新防火墙规则,这意味着您可以在运行时添加、删除或修改规则,而无需重新加载整个防火墙配置。这是 CentOS、Fedora 和其他基于 RHEL 的发行版中的默认防火墙管理工具。
设置在不同网络与网络安全域之间的一系列部件的组合,也是不同安全域之间信息 的唯一出口。通过监测、限制并更改跨越防火墙的数据流,尽可能地对外屏蔽网络内部的信息、结构和运行状态,且有选择地接受外部网络访问。在内外网之间架起一道屏障,以避免发生不可预知 或潜在的入侵。
Linux 的防火墙体系主要工作在网络层,针对TCP/P 数据包实时过滤和限制,属于典型的包过滤 防火墙(或称为网络层防火墙)。Linux 系统的防火墙体系基于内核编码实现,具有非常稳定的性能 和高效率,也因此获得广泛的应用。在 CentOS7 系统中几种防火墙共存:firewalld、iptables、ebtables, 默认使用firewalld 来管理 netfilter 子系统。
传统意义上的防火墙技术主要分为以下几类:
-
包过滤防火墙(Packet Filtering Firewall): 这是最基本的防火墙类型,它工作在网络层(OSI模型的第三层)和传输层(OSI模型的第四层)。包过滤防火墙根据预设的规则检查数据包的头部信息,如源IP地址、目的IP地址、端口号、协议类型等,然后决定是否允许数据包通过。
-
应用层防火墙(Application-Level Gateway Firewall,也称为代理防火墙): 应用层防火墙工作在OSI模型的第五层或更高层,它能够检查应用层协议的数据。这种防火墙可以理解特定应用协议的细节,并据此进行过滤。它通常通过代理服务器来处理数据传输,可以提供更高级的安全功能,如用户身份验证和数据内容检查。
-
电路层防火墙(Circuit-Level Gateway Firewall): 电路层防火墙工作在OSI模型的会话层(第五层),它在传输层建立了一个连接,并监控这个连接的状态。它不会检查每个数据包的内容,而是检查建立连接的尝试和连接的状态,确保连接是合法的。
-
状态检测防火墙(Stateful Inspection Firewall): 状态检测防火墙结合了包过滤防火墙和电路层防火墙的特点。它不仅检查数据包的头部信息,还会记录和检查数据包的状态信息,以决定是否允许数据包通过。这种防火墙可以跟踪TCP连接的状态,确保只有合法的连接数据包被允许通过。
-
下一代防火墙(Next-Generation Firewall,NGFW): 下一代防火墙是较新的技术,它不仅包括上述所有防火墙的功能,还增加了更多的安全特性,如入侵预防系统(IPS)、应用层过滤、用户身份识别、深度包检查(DPI)等。NGFW能够提供更细粒度的控制和更全面的安全保护。
无论一个防火墙的实现过程有多复杂,根本原因都是在这三种技术的基础上进行扩展的。
传统意义上的防火墙技术可以单独使用,也可以组合使用。
关键特点:
-
区域(Zones):
firewalld
使用区域来管理规则。每个区域都有自己的规则集,用于处理进入该区域的流量。例如,public
区域可能允许有限的流量,而trusted
区域可能允许所有流量。 -
服务(Services):服务是预定义的规则,用于简化特定类型流量的管理。例如,
ssh
服务会自动打开端口 22,允许 SSH 连接。 -
接口(Interfaces):可以将网络接口分配给一个区域,以便对该接口上的流量应用相应的规则。
-
富规则(Rich Rules):除了基本的服务和端口规则之外,
firewalld
还允许使用富规则进行更复杂的流量管理,如基于源地址、目的地址、协议等条件进行过滤。 -
运行时和永久配置:
firewalld
允许您在运行时(即时生效,但重启后失效)和永久(重启后仍然有效)之间进行选择。 -
动态更新:
firewalld
支持在不中断服务的情况下动态更新规则,这意味着可以在不重启服务的情况下更改防火墙设置。 -
IPv4 和 IPv6 支持:
firewalld
同时支持 IPv4 和 IPv6。 -
图形界面和命令行工具:
firewalld
提供了图形界面(firewall-config
)和命令行工具(firewall-cmd
),方便用户进行配置。
firewalld网络区域
根据数据包的源IP 地 址或传入网络接口等条件,将数据流量转入相应区域的防火墙规则。对于进入系统的数据包,首先检查的就是其源地址。
若源地址关联到特定的区域,则执行该区域所制定的规则。
若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所制定的规则。
若网络接口未关联到特定的区域,则使用默认区域并执行该区域所制定的规则。
block(限制) | 任何进入的流量都会被拒绝,并回复一个拒绝包。只有出口流量,与传出流量相关,会被允许。 |
drop(丢弃) | 任何进入的流量都会被丢弃,没有任何回复。只有出口流量与传出流量相关会被允许。 |
dmz(隔离区) | 用于隔离区域。只有与传出的流量相关,或者与ssh预定以服务匹配,否则拒绝流量通过。 |
external(外部) | 通过此区域转 发的IPv4传出流量将进行地址伪装,可用于为路由器启用了伪装功能的外部网络。 用于路由器等设备,保护内部网络不受外部网络的攻击。 |
home(家庭) | 用于家庭区域,除与传出流量相关,或与ssh、ipp-client、mdns、samba-client、dhcpv6-client预定 义服务匹配,否则拒绝流量传入,信任网络内的其他计算机不会危害计算机,仅接收经过选择的连接。 |
internal(内部) | 用于内部网络。除非与传出流量相关,或与ssh、ipp-client、mdns、samba-client、dhcpv6-client预定 义服务匹配,否则拒绝流量传入。信任网络内的其他计算机不会危害计算机,仅接收经过选择的连接。 |
public(公共)默认区域 | 用于在公共场所,您不信任其他计算机。只允许选定的入口流量,例如用于浏览网页和电子邮件。 除非与传出流量相关,或与ssh或dhcpv6-client预定义服务匹配,否则拒绝流量传入 在公共区域内,不能相信网络内的其他计算机不会对计算机造成危害,只能接收经过 选择的连接。且该区域是新添加网络接口的默认区域。 |
trusted(信任) | 所有流量都允许,可接收所有的网络连接。这个区域对于您完全信任的内部网络非常有用。 |
work(工作) | 用于工作区域,您信任其他计算机不会危害您的计算机。除非与传出流量相关,或与ssh、ipp-client、dhcpv6-client预定义服务匹配,否则拒绝 流量传入,用于工作区。相信网络内的其他计算机不会危害计算机,仅接收经过选择的连接。 |
firewall命令
启动
systemctl start direwalld
停止
systemctl stop firewalld
开机自启
systemctl enable firewalld
禁止开机自启动
systemctl disable firewalld
查看
systemctl status firewalld
#或者
firewall-cmd --state
获取预定义信息
firewall-cmd预定义信息主要分为三种:
1、可用区域
2、可用服务
3、可用的icmp阻塞类型
显示预定义的区域
firewall-cmd --get-zones
显示预定义的服务
firewall-cmd --get-service
显示预定义的icmp类型
firewall-cmd --get-icmptypes
firewall-cmd --get-icmptypes命令执行结果阻塞信息类型
address-mask-reply: | 回应子网掩码请求。 |
address-mask-request: | 请求子网掩码。 |
destination-unreachable | 当数据包无法到达目的地时使用。 目的地址不可达。 |
echo-reply | 回应 ICMP 回显请求(ping)。 应答回应 (ping)。 |
parameter-problem | 参数问题。 当数据包中的某个参数有问题时使用。 |
redirect: | 重新定向。 用于路由器通知主机更好的路由。 |
router-advertisement: | 路由器通告。 |
router-solicitation: | 路由器征寻。 |
source-quench: | 旧版的流量控制消息,现代网络中很少使用。 源端抑制。 |
time-exceeded: | 超时。 当数据包的生存时间(TTL)耗尽时使用。 |
timestamp-reply: | 时间戳应答回应。 回应时间戳请求。 |
timestamp-request: | 时间戳请求。 |
information-request: | 旧版的 ICMP 请求,已不再使用。 |
information-reply: | 旧版的 ICMP 回复,已不再使用。 |
要允许或阻止特定的 ICMP 类型,您可以使用 firewall-cmd
命令的 --add-icmp-block
和 --add-icmp-block-inversion
选项。例如,要阻止所有 ICMP 流量,可以使用以下命令:
firewall-cmd --add-icmp-block=incoming --permanent
firewall-cmd --reload
要仅阻止特定的 ICMP 类型,例如 echo-request
(ping),可以使用:
firewall-cmd --add-icmp-block=echo-request --permanent
firewall-cmd --reload
命令中的 --permanent
选项意味着更改将永久生效,并在防火墙服务重载后生效。如果您不使用 --permanent
选项,更改将只在当前会话中生效,并在系统重启或防火墙服务重载后失效。
firewalld防火墙区域
在 firewalld
中,区域(zones)是一个核心概念,它允许管理员根据网络的信任级别来应用不同的防火墙规则。每个区域都有自己的规则集,决定了哪些流量被允许进入或离开系统。
查看区域
firewall-cmd --get-zones
查看默认区域
firewall-cmd --get-default-zone
设置默认区域
firewall-cmd --set-default-zone=public
public
是您想要设置为默认的区域名称。
显示默认区域的所有规则
firewall-cmd --list-all
查看活动区域--显示所有激活区域。
firewall-cmd --get-active-zones
修改接口区域
要将某个接口分配到特定区域,eth0
是您想要分配区域的接口名称,public
是目标区域的名称。
firewall-cmd --zone=public --change-interface=eth0
查看区域规则
要查看特定区域的所有规则,
firewall-cmd --list-all --zone=public
添加或删除服务
要在特定区域中添加或删除服务。
firewall-cmd --zone=public --add-service=http
firewall-cmd --zone=public --remove-service=http
永久更改
要在系统重启后保持更改,需要添加 --permanent
选项。
firewall-cmd --zone=public --add-service=http --permanent
在做出永久性更改后,需要重新加载 firewalld
以应用这些更改:
firewall-cmd --reload
显示网络接口 ens33 对应区域
firewall-cmd --get-zone-of-interface=ens33
将网络接口 ens33 对应区域更改为 internal 区域。
firewall-cmd --zone=public --change-interface=ens33
#The interface is under control of NetworkManager,setting zone to 'internal'.
#该接口由NetworkManager控制,将区域设置为“内部”。
#success
#成功
firewall-cmd --zone=internal --list-interfaces
#ens33
firewall-cmd --get-zone-of-interface=ens33
#internal
服务管理
firewalld
中,服务(services)是一组预定义的防火墙规则,用于简化对特定网络服务的管理。每个服务通常对应于一个或多个端口和协议,以及可能需要的任何额外的防火墙设置。
firewalld 预先定义了很多服务,存放在/usr/lib/firewalld/services/ 目录中 服务通过单个的 XML 配置文件来指定。这些配置文件则按以下格式命名: service-name.xml,每个 文件对应一项具体的网络服务。
以 XML 格式编写的,它们定义了服务的基本属性,包括服务名称、端口号、协议、模块等。服务配置文件的优点包括:
简化规则管理: | 通过服务配置文件,管理员可以为常用服务定义一组预配置的规则,而不是手动添加每个需要的端口和协议。这简化了防火墙的配置和管理。 |
可重用性: | 一旦为某个服务定义了配置文件,该配置可以在多个区域中重复使用,而无需为每个区域重新定义相同的规则。 |
易于理解和维护: | 服务配置文件提供了一个清晰的结构,使得理解和维护防火墙规则变得更加容易。文件名和服务名通常与服务本身相对应,如 ssh.xml 对应于 SSH 服务。 |
一致性: | 使用服务配置文件有助于保持防火墙规则的一致性。当服务更新或端口变化时,只需更新一个配置文件,而不是所有引用该服务的规则。 |
灵活性: | 管理员可以根据需要轻松地自定义或修改服务配置文件,以满足特定的安全需求或网络环境。 |
中央化管理: | 在大型或分布式环境中,服务配置文件可以在多个系统之间共享,使得中央化管理变得更加方便。 |
运行时和永久配置: | firewalld 允许管理员在运行时和永久配置之间进行选择。服务配置文件可以应用于即时生效的运行时配置,也可以应用于重启后仍然有效的永久配置。 |
模块化: | 服务配置文件支持使用内核模块,这允许更高级的防火墙规则,如根据连接的状态或内容过滤流量。 |
良好的文档和社区支持: | 由于 firewalld 是许多 Linux 发行版的一部分,因此有广泛的文档和社区支持,这有助于解决配置和管理中的问题。 |
firewall-cmd 命令区域中服务管理的常用选项说明
选项 | 说明 |
[--zone=<zone>]--list-services | 显示指定区域内允许访问的所有服务 |
[--zone=<zone>]--add-service=<service> | 为指定区域设置允许访问的某项服务 |
[--zone=<zone>]--remove-service=<service> | 删除指定区域已设置的允许访问的某项服务 |
[--zone=<zone>]--list-ports | 显示指定区域内允许访问的所有端口号 |
[--zone=<zone>]--add-port=<portid>[-<portid>]/<protocol> | 为指定区域设置允许访问的某个/某段端口号(包括协议名) |
[--zone=<zone>]--remove-port=<portid>[-<portid>]/<protocol> | 删除指定区域已设置的允许访问的端口号(包括 协议名) |
[--zone=<zone>]--list-icmp-blocks | 显示指定区域内拒绝访问的所有ICMP类型 |
[--zone=<zone>]--add-icmp-block=<icmptype> | 为指定区域设置拒绝访问的某项ICMP类型 |
[--zone=<zone>]--remove-icmp-block=<icmptype> | 删除指定区域已设置的拒绝访问的某项ICMP 类型,省略--zone=<zone>时表示对默认区域操作 |
列出可用服务
firewall-cmd --get-services
查看服务的详细信息
firewall-cmd --service=ssh --get-all
#ssh 是您想要查看的服务名称。
添加服务
firewall-cmd --zone=public --add-service=http
public
是您想要添加服务的区域名称,http
是您想要添加的服务名称。
删除服务
firewall-cmd --zone=public --remove-service=http
永久更改
要在系统重启后保持更改,需要添加 --permanent
选项。
firewall-cmd --zone=public --add-service=http --permanent
在做出永久性更改后,需要重新加载 firewalld
以应用这些更改:
firewall-cmd --reload
查看当前区域的服务(允许的)
firewall-cmd --list-services
查看特定区域的服务
firewall-cmd --zone=public --list-services
firewalld端口
在 firewalld
中,端口管理是控制网络流量进出系统的关键方面。您可以使用 firewalld
的命令行工具 firewall-cmd
来添加、删除或查询端口的防火墙规则。
在进行服务配置时,预定义的网络服务可以使用服务名配置,服务所涉及的端口就会自动打开。 但是,对于非预定义的服务只能手动为指定的区域添加端口。
添加端口
firewall-cmd --zone=public --add-port=1626/tcp
public
是您想要添加端口的区域名称,1626/tcp
表示您想要添加的端口和协议。
删除端口
firewall-cmd --zone=public --remove-port=1626/tcp
查看端口
firewall-cmd --zone=public --list-ports
永久更改
firewall-cmd --zone=public --add-port=1626/tcp --permanent
要在系统重启后保持更改,需要添加 --permanent
选项。
在做出永久性更改后,需要重新加载 firewalld
以应用这些更改:
firewall-cmd --reload
运行时和永久配置
firewalld
允许您在运行时(即时生效,但重启后失效)和永久(重启后仍然有效)之间进行选择。如果您不使用 --permanent
选项,更改将只在当前会话中生效,并在系统重启或防火墙服务重载后失效。
两种配置模式
运行时模式 (Runtime mode)
运行时模式 (Runtime mode) 表示当前内存中 运行的防火墙配置,在系统或firewalld 服务重启、停止时配置将失效;
永久模式 (Permanent mode )
表示重启防火墙或重新加载防火墙时的规则配置,是永久存储在配置文件中的。
firewall-cmd 命令工具与配置模式相关的选项有三个。
--reload: | 重新加载防火墙规则并保持状态信息,即将永久配置应用为运行时配置。 |
--permanent: | 带有此选项的命令用于设置永久性规则,这些规则只有在重新启动 firewalld 或重新加载防火墙规则时才会生效;若不带有此选项,表示用于设置运行时规则。 |
--runtime-to-permanent: | 将当前的运行时配置写入规则配置文件中,使之成为永久性配置。 |
范围端口
您还可以添加端口范围,而不是单个端口:
firewall-cmd --zone=public --add-port=10000-20000/tcp
协议
firewalld
支持多种协议,包括但不限于 tcp
、udp
和 sctp
。确保在添加端口时指定正确的协议。
开启网关服务器的路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
禁止ping
firewall-cmd --add-icmp-block=echo-request --zone=external --permanent
将(ens33)网卡配置到某一个区域
firewall-cmd --change-interface=ens33 --zone=external
查看网卡配置情况
firewall-cmd --get-active-zones