防火墙之firewalld

1、firewalld 简介

firewalld(Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)、基于GUI(图形用户界面)、直接修改配置文件三种管理方式。
相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了 区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
默认的策略都是拒绝的。

  • firewald提供了支持 网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。
  • 支持 IPv4,IPv6 的防火墙设置以及以太网桥接。
  • 支持服务或者应用程序直接添加防火墙规则的接口。
  • 拥有遮行时配置和永久配置两种选项。
  • 运行时配置 —— 服务或系统重启后失效。
  • 永久配置 —— 服务或系统关机、重启后生效。

2、firewalld 防火墙的区域

/usr/lib/firewalld/zones/ 目录存储预定义的区域,您可以立即将它们应用到任何可用的网络接口。只有在修改后,这些文件才会被拷贝到 /etc/firewalld/zones/ 目录中。预定义区的默认设置如下:

  • block 阻塞区域
    适用于:任何传入的网络连接都会被拒绝,并对 IPv4 显示 icmp-host-prohibited 消息,对 IPv6 显示 icmp6-adm-prohibited 消息。
    接受:只接受从系统内启动的网络连接。
  • dmz 隔离区域
    适用于:DMZ 中可公开访问,且对内部网络有有限访问的计算机。
    接受: 只接受所选的传入连接。
  • drop 丢弃区域
    适用于:任何传入的网络数据包都被丢弃,没有任何通知。
    接受:只有传出的网络连接。
  • external 外部区域
    适用于:启用了伪装的外部网络,尤其适用于路由器。不信任网络上其他计算机的情况。
    接受: 只接受所选的传入连接。
  • home 家庭区域
    适用于:您主要信任网络上其他计算机的家庭环境。
    接受: 只接受所选的传入连接。
  • internal 内部区域
    适用于:您主要信任网络上其他计算机的内部网络。
    接受: 只接受所选的传入连接。
  • public 公共区域
    适用于:您不信任网络上其他计算机的公共区域。
    接受: 只接受所选的传入连接。
  • trusted 信任区域
    接受:所有网络连接。
  • work 工作区域
    适用于:您主要信任网络上其他计算机的工作环境。
    接受: 只接受所选的传入连接。

这些区中的一个被设置为 default 区。当接口连接被添加到 NetworkManager 中时,它们会被分配到默认区。安装时,firewalld 中的默认区域是 public 区域。

您可以使用 ⁠firewalld 工具根据您在该网络中与接口和流量的信任级别将网络划分为不同的区域。连接只能是一个区域的一部分,但您可以对许多网络连接使用这个区域。

firewalld 在区域方面遵循严格的原则:

流量只进入一个区域。
流量只流出一个区域。
区域定义了一个信任级别。
默认情况下,允许区域内流量(在同一区域中)。
默认情况下,拒绝区域内流量(从区域到区域)。
原则 4 和 5 是原则 3 的结果。

原则 4 可以通过区域选项 --remove-forward 进行配置。原则 5 可以通过添加新策略来进行配置。

NetworkManager 通知接口区的 firewalld。您可以使用以下工具将区域分配给接口:

NetworkManager
firewall-config 工具
firewall-cmd 工具
RHEL web 控制台
RHEL web 控制台、firewall-config 和 firewall-cmd 只能编辑合适的 NetworkManager 配置文件。如果您使用 web 控制台、firewall-cmd 或 firewall-config 更改接口的区域,则请求被转发到 NetworkManager,且不是由firewalld 处理。

3、Firewalld简单使用

3.1、启用Firewalld防火墙

systemctl unmask firewalld
systemctl stop firewalld
systemctl disable firewalld
systemctl start firewalld
systemctl enable firewalld
systemctl status firewalld    # 查看当前firewalld转态

3.2、基本查询命令

3.2.1.帮助文档

firewall-cmd --help

3.2.2.查看服务器支持的网络区域

firewall-cmd --get-zones
=======================================
block dmz drop external home internal public trusted work

3.2.3.修改及查看当前服务器默认网络区域

firewall-cmd --set-default-zone=public
firewall-cmd --set-default-zone=home
firewall-cmd --get-default-zone
=======================================
public

3.2.4.配置文件位置

ll /etc/firewalld/zones/

3.2.5.查看配置特定网络区域的详细信息

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

3.2.6.显示预定义的服务

firewall-cmd --get-services 
=======================================
RH-Satellite-6 RH-Satellite-6-capsule afp amanda-client amanda-k5-client amqp amqps apcupsd audit ausweisapp2 bacula bacula-client bareos-director bareos-filedaemon bareos-storage bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-exporter ceph-mon cfengine checkmk-agent cockpit collectd condor-collector cratedb ctdb dds dds-multicast dds-unicast dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger foreman foreman-proxy freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp galera ganglia-client ganglia-master git gpsd grafana gre high-availability http http3 https ident imap imaps ipfs ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell kube-api kube-apiserver kube-control-plane kube-control-plane-secure kube-controller-manager kube-controller-manager-secure kube-nodeport-services kube-scheduler kube-scheduler-secure kube-worker kubelet kubelet-readonly kubelet-worker ldap ldaps libvirt libvirt-tls lightning-network llmnr llmnr-client 
llmnr-tcp llmnr-udp managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nbd nebula netbios-ns netdata-dashboard nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus prometheus-node-exporter proxy-dhcp ps2link ps3netsrv ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rquotad rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptls snmptls-trap snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui syncthing-relay synergy syslog syslog-tls telnet tentacle tftp tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server warpinator wbem-http wbem-https wireguard ws-discovery ws-discovery-client ws-discovery-tcp ws-discovery-udp wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server zerotier

3.2.7.显示预定义的icmp类型

firewall-cmd --get-icmptypes 
=======================================
address-unreachable bad-header beyond-scope communication-prohibited destination-unreachable echo-reply echo-request failed-policy fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem 
port-unreachable precedence-cutoff protocol-unreachable redirect reject-route required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option

执行结果阻塞信息类型:
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 选项。例如,,可以使用以下命令:

1.要阻止所有 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 选项,更改将只在当前会话中生效,并在系统重启或防火墙服务重载后失效。

3.2.8.关闭及开启ping

firewall-cmd --permanent --zone=public --add-rich-rule='rule protocol value=icmp drop'
firewall-cmd --permanent --zone=public --remove-rich-rule='rule protocol value=icmp drop'
firewall-cmd --add-icmp-block=echo-request --zone=external --permanent

3.2.9.将(ens33)网卡配置到某一个区域并查看网卡配置情况

firewall-cmd --change-interface=ens33 --zone=external
firewall-cmd --get-active-zones

4、Firewalld的服务配置

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类型。

系统中默认的ftp.xml格式:cat /usr/lib/firewalld/services/ftp.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>FTP</short>
  <description>
  	FTP is a protocol used for remote file transfer. 
  	If you plan to make your FTP server publicly available, 
  	enable this option. You need the vsftpd package installed for this option to be useful.
  </description>
  <port protocol="tcp" port="21"/>
  <module name="nf_conntrack_ftp"/>
</service>

自定义测试

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>michael_rulse</short>
  <description>michael test rulse xml file.</description>
  <port protocol="tcp" port="8848"/>
</service>

显示服务器上的所有可以找到的服务列表

firewall-cmd --list-services
# 将服务增加到默认网络区域
firewall-cmd --add-services your_service_name

# 将服务增加到指定网络区域
firewall-cmd --add-services your_service_name --zone=zone_name
# 查看公共区域配置
firewall-cmd --zone=public --list-all

# 在公共区域配置添加FTP服务
firewall-cmd --zone=public --add-service=ftp

# 在公共区域配置添加FTP服务(永久生效)
firewall-cmd --permanent --zone=public --add-service=ftp

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

5、firewalld端口

在 firewalld 中,端口管理是控制网络流量进出系统的关键方面。您可以使用 firewalld 的命令行工具 firewall-cmd 来添加、删除或查询端口的防火墙规则。

在进行服务配置时,预定义的网络服务可以使用服务名配置,服务所涉及的端口就会自动打开。 但是,对于非预定义的服务只能手动为指定的区域添加端口。

配置防火墙配置服务是推荐的方式。也可以在/etc/firewalld/service/下自定义服务,
也可以不使用文件的情况下添加端口,

1.添加端口
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=dmz --add-port=9000/tcp
firewall-cmd --zone=public --add-port=10000-20000/tcp

2.删除端口
firewall-cmd --zone=public --remove-port=1626/tcp

3.查看端口
firewall-cmd --zone=public --list-ports

4.永久更改
firewall-cmd --zone=public --add-port=1626/tcp --permanent
firewall-cmd --reload

firewall-cmd --zone=dmz --list-all
firewall-cmd --get-active-zones
firewall-cmd --list-all
firewall-cmd --direct --get-all-rules

6、运行时和永久配置

firewalld 允许您在运行时(即时生效,但重启后失效)和永久(重启后仍然有效)之间进行选择。如果您不使用 --permanent 选项,更改将只在当前会话中生效,并在系统重启或防火墙服务重载后失效。

运行时模式 (Runtime mode)
运行时模式 (Runtime mode) 表示当前内存中 运行的防火墙配置,在系统或firewalld 服务重启、停止时配置将失效;

永久模式 (Permanent mode )
表示重启防火墙或重新加载防火墙时的规则配置,是永久存储在配置文件中的。

firewall-cmd 命令工具与配置模式相关的选项有三个。
--reload:重新加载防火墙规则并保持状态信息,即将永久配置应用为运行时配置。

--permanent:带有此选项的命令用于设置永久性规则,这些规则只有在重新启动 firewalld。或重新加载防火墙规则时才会生效;若不带有此选项,表示用于设置运行时规则。

--runtime-to-permanent:将当前的运行时配置写入规则配置文件中,使之成为永久性配置。

系统管理员角色
业务管理员角色
业务审计员角色

新增了哪个用户的粒度

问题:Unit firewalld.service is masked

systemctl unmask firewalld
systemctl restart firewalld
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值