防火墙firewalld

2023-05-16

RHEL7中有几种防火墙共存:firewalld、iptables、ebtables等。基于iptables的防火墙默认不启动,但仍然可以继续使用。RHEL7默认使用firewalld作为防火墙,管理工具是firewall-cmd。RHEL7的内核版本是3.10,在此版本的内核里防火墙的包过滤机制是firewalld,使用firewalld来管理netfilter,不过底层调用的命令仍然是iptables等。因为这几种daemon是冲突的,所以建议禁用其他几种服务。

Firewalld提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的防火墙管理工具。拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。以前的system-config-firewall防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括内核netfilter防火墙模块的卸载和新配置所需模块的装载等。相反,firewall daemon动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块了。
在这里插入图片描述

什么是区域:网络区域定义了网络连接的可信等级。
在这里插入图片描述
数据包要进入到内核必须要通过这些zone中的一个,而不同的zone里定义的规则不一样(即信任度不一样,过滤的强度也不一样)。可以根据网卡所连接的网络的安全性来判断,这张网卡的流量到底使用哪个zone,比如上图来自eth0的流量全部使用zone1的过滤规则,eth1的流量使用zone2。一张网卡同时只能绑定到一个zone。

预定义的服务:服务是端口和/或协议入口的组合。
端口和协议:定义了tcp或udp端口,端口可以是一个端口或者端口范围。
ICMP阻塞:可以选择Internet控制报文协议的报文。这些报文可以是信息请求亦可以是对信息请求或错误条件创建的响应。
伪装:私有网络地址可以被映射到公开的ip地址。这是一次正规的地址转换。
端口转发:端口可以映射到另一个端口以及/或者其他主机。

在进行firewalld配置之前,先了解区域(zones)这个概念。默认情况就有一些有效的区域。由firewalld提供的区域按照从不信任到信任的顺序排序。

  • 丢弃区域(Drop Zone):如果使用丢弃区域,任何进入的数据包将被丢弃。这个类似于iptables -j drop。使用丢弃规则意味着将不存在响应。
  • 阻塞区域(Block Zone):阻塞区域会拒绝进入的网络连接,返回icmp-host-prohibited,只有服务器已经建立的连接会被通过即只允许有该系统初始化的网络连接。
  • 公共区域(Public Zone):只接受那些被选中的连接,默认只允许ssh和dhcpv6-client。这个zone是缺省zone。
  • 外部区域(Eexternal Zone):这个区域相当于路由器的启用伪装(masquerading)选项。只有指定的连接会被接受,如ssh,而其他的连接将被丢弃或者不被接受。
  • 隔离区域(DMZ Zone):如果想要只允许给部分服务能被外部访问,可以在DMZ区域中定义。它也拥有只通过被被选中连接的特性,如ssh。
  • 工作区域(Work Zone):在这个区域,我们只能定义内部网络。比如私有网络通信才被允许,只允许ssh、ipp-client和dhcpv6-client。
  • 家庭区域(Home Zone):这个区域专门用于家庭环境。它同样只允许被选中的连接。
  • 内部区域(Internal Zone):这个区域和工作区域(Work Zone)类似,只有通过被选中的连接,和home区域一样。
  • 信任区域(Trusted Zone):信任区域允许所有网络通信通过。注:因为trusted是最被信任的,即使没有设置任何的服务,那么也是被允许的,因为trusted是允许所有连接的。
    以上是系统定义的所有的zone,但是这些zone并不是都在使用。只有活跃的zone才有实际操作意义。

firewalld的原则:

如果一个客户端访问服务器,服务器根据以下原则决定使用哪个zone的策略去匹配。

  1. 如果一个客户端数据包的源IP地址匹配zone的sources,那么该zone的规则就实用这个客户端;一个源只能属于一个zone,不能同时属于多个zone。
  2. 如果一个客户端数据包进入服务器的某一个接口(如eth0)匹配zone的interfaces,则该zone的规则就适用这个客户端;一个接口只能属于一个zone,不能同时属于多个zone。
  3. 如果上述两个原则都不满足,那么缺省的zone将被应用。

你可以使用任何一种firewall配置工具来配置或者增加区域,以及修改配置。工具有例如firewall-config这样的图形界面工具,firewall-cmd这样的命令行工具,或者你也可以在配置文件目录中创建或者拷贝区域文件,/usr/lib/firewalld/zones被用于默认和备用配置,/etc/firewalld/zones被用于用户创建和自定义配置文件。

使用图形化 firewall-config工具和通过编辑/etc/firewalld/services/中的XML文件,服务可以被增加和删除。如果服务没有被用户增加或者改变,那么/etc/firewalld/services/中不会发现相应的XML文件。如果您希望增加或者改变服务,/usr/lib/firewalld/services/文件可以作为模板使用。以 root 身份执行以下命令:cp /usr/lib/firewalld/services/[service].xml /etc/firewalld/services/[service].xml

然后您可以编辑最近创建的文件。firewalld优先使用/etc/firewalld/services/里的文件,如果一份文件被删除且服务被重新加载后,会切换到 /usr/lib/firewalld/services/

管理firewalld

可以通过以下三种方式来管理firewalld:

  • 使用命令行工具firewall-cmd
  • 使用图形工具firewall-config
  • 使用/etc/firewalld/中的配置文件

在大部分情况下,不建议直接编辑配置文件,但是在使用配置管理工具时,以这种方法复制配置会很有用。

在centos7中,默认安装firewalld和图形化用户接口配置工具firewall-config。

使用以下命令检测firewall是否安装:yum install firewalld firewall-config

禁用firewalld运行如下命令:

 systemctl disable firewalld.service
 systemctl stop firewalld.service

要用iptables和ip6tables服务代替firewalld则以 root 身份运行以下命令,先禁用firewalld,然后安装 iptables-services程序包,以root身份输入以下命令:yum install iptables-services

iptables-services 程序包包含了iptables服务和ip6tables服务。然后以 root身份运行
iptables 和 ip6tables 命令:

systemctl start iptables
systemctl start ip6tables
systemctl enable iptables
systemctl enable ip6tables

要启动 firewalld,则以root用户身份输入以下命令:systemctl start firewalld.service
开机启动firewalld,则以root用户身份输入以下命令:systemctl enable firewalld.service
如果firewalld在运行,输入以下命令检查:systemctl status firewalld.service
还可以通过firewall-cmd命令来连接后台程序进行检查:firewall-cmd --state

使用图形化用户接口配置防火墙

点击“应用程序”–“杂项”–“防火墙”或者在终端输入firewall-config命令打开
在这里插入图片描述
在左下角可以看到“已建立至firewall的连接”,这标志着firewall-config工具已经连接到用户区后台程序firewalld。注意:ICMP类型、直接配置和锁定白名单标签只在从“查看”下拉菜单中选择之后才能看见。

要立刻改变现在的防火墙配置,须确定当前视图设定在“运行时”。或者,从下拉菜单中选择“永久”,编辑下次启动系统或者防火墙重新加载时执行的设定。您可以选择左边列里的分区。您将注意到这些分区包含一些可用的服务,您可能需要调整或者滚动窗口才能看见整个列表。您可以通过选择和取消选择一个服务来自定义设定。

要增加或者重新分配一个连接到区域的接口,从菜单栏选择“选项”,由下拉菜单里选择“更改连接区域”,“连接”列表就出现了。选择被分配的连接,出现“为连接选择区域”窗口。从下拉菜单中选择新的防火墙区域并点击确定。
在这里插入图片描述
要设定一个将要被分配新接口的区域作为默认值,从菜单栏选择“选项”,由下拉菜单中选择“改变默认区域”,出现“默认区域”窗口。从给出的列表中选择您需要用的“区域”作为默认区域,点击确定。
在这里插入图片描述
要使用或者禁用一个预先定义的用户服务,则启动firewall-config工具并选择将要配置服务的网络区域。选中“服务”标签并选择每个你需要信任的服务类型的复选框。清除复选框则限制服务。
要编辑一项服务,开始firewall-config工具,然后从标记为“配置”的下拉选项菜单选择“永久”模式。其余的图标和菜单按键会出现在“服务”窗口的底部。选择您想要配置的服务。
“端口”和“协议”标签可以为选择的服务执行增加、更改、移除端口和协议。“模块”标签用于配置Netfilter辅助模块。“目的地址”模块使得流量进入一个受限的特定的目的地址和互联网协议(IPv4 or IPv6)。
在这里插入图片描述
要允许流量通过防火墙到达某个端口,则启动firewall-config并选择您想要更改设定的网络区域。选择“端口”图标并点击右边的“添加”按钮,“端口和协议”就打开了。输入端口数量或者端口号范围,获得许可。从下拉菜单中选择tcp或者udp。
在这里插入图片描述
要将IPv4地址转换为一个单一的外部地址,则启动firewall-config工具并选择需要转换地址的网络区域。选择“伪装”标签和复选框以便把IPv4地址转换成一个单一的地址。
在这里插入图片描述
为一个特定端口转发入站网络流量或报文到一个内部地址或者替代端口,首先激活伪装IP地址,然后选择Port Forwarding标签。
在窗口靠上部分选择入站流量协议和端口或者端口范围。靠下部分是用于设置目的端口细节的。
要转发流量到其他的IPv4地址,则选择“转发到另一端口”复选框,输入目的地IP地址和端口或者端口范围。如果端口位置空缺则默认发送到同一个端口。点击确定执行更改。
在这里插入图片描述

使用命令行工具配置防火墙

命令行工具firewall-cmd支持全部防火墙特性。

一般应用:

1、获取firewall状态:firewall-cmd --state
在这里插入图片描述
2、在不改变状态的条件下重新加载防火墙:firewall-cmd --reload
在这里插入图片描述
3、获取支持的区域列表:firewall-cmd --get-zones
在这里插入图片描述
4、获取所有支持的服务:firewall-cmd --get-services
在这里插入图片描述
服务是firewalld所使用的有关端口和选项的规则集合。被启动的服务会在firewalld服务开启或者运行时自动加载。默认情况下,很多服务是有效的。使用下面命令可列出有效的服务。
想要列出默认有效的服务,也可以进入/usr/lib/firewalld/services取得:
在这里插入图片描述
想要创建自己的服务,需要在/etc/firewalld/services/目录定义它。比如我想添加一个test服务,端口号6666。首先,任选一个服务作为模板复制过来。
在这里插入图片描述
将复制的文件重命名为“test.xml”
在这里插入图片描述
接下来打开并编辑文件的头部、描述、协议和端口号,以供test服务使用
在这里插入图片描述
重启firewalld服务或者重新加载设置,以激活这些设置:firewall-cmd --reload
确认服务是否已经生效:firewall-cmd --get-services
在这里插入图片描述
5、获取所有支持的ICMP类型:firewall-cmd --get-icmptypes
在这里插入图片描述
6、列出全部启用的区域的特性(即查询当前防火墙策略):firewall-cmd --list-all-zones

解释:特性可以是定义的防火墙策略,如:服务、端口和协议的组合、端口/数据报转发、伪装、ICMP拦截或自定义规则等
在这里插入图片描述
上面的命令将会列出每种区域如block、dmz、drop、external、home、internal、public、trusted以及work。如果区域还有其他详细规则(rich-rules)、启用的服务或者端口,这些区域信息也会分别被罗列出来。

7、输出区域全部启用的特性。如果省略区域,将显示默认区域的信息:firewall-cmd [--zone=] --list-all
在这里插入图片描述
8、查看默认区域:firewall-cmd --get-default-zone
在这里插入图片描述
9、设置默认区域:firewall-cmd --set-default-zone=区域名
在这里插入图片描述
文件/etc/firewalld/firewalld.confDefaultZone=public项也可用于定义默认区域(修改后重启服务)
流入默认区域中配置的接口的新访问请求将被置入新的默认区域。当前活动的连接将不受影响。

10、获取活动的区域:firewall-cmd --get-active-zones
在这里插入图片描述
11、根据接口获取区域(即需要查看哪个区域和这个接口绑定或查看某个接口属于哪个zone的):firewall-cmd --get-zone-of-interface=接口名
在这里插入图片描述
12、将接口(网卡)增加到区域:firewall-cmd [--zone=] --add-interface=接口名
在这里插入图片描述
如果接口不属于区域,接口将被增加到区域。如果区域被省略了,将使用默认区域。接口在重新加载后将重新应用。

13、修改接口所属区域:firewall-cmd [--zone=] --change-interface=接口名
在这里插入图片描述
这个选项与–add-interface选项相似,但是当接口已经存在于另一个区域的时候,该接口将被添加到新的区域。

14、从区域中删除一个接口:firewall-cmd [--zone=] --remove-interface=接口名
在这里插入图片描述
注:如果某个接口不属于任何Zone,那么这个接口的所有数据包使用默认的Zone的规则

15、查询接口是否属于一个区域:firewall-cmd [--zone=] --query-interface=接口名
在这里插入图片描述
如果区域被省略了,将使用默认区域

16、列举区域中启用的服务:firewall-cmd [--zone=] --list-services
在这里插入图片描述
如果区域被省略了,将使用默认区域

17、启用应急模式阻断所有网络连接,以防出现紧急状况:firewall-cmd --panic-on
在这里插入图片描述

18、禁用应急模式:firewall-cmd --panic-off
在这里插入图片描述

19、查询应急模式:firewall-cmd --query-panic
在这里插入图片描述
其他相关的配置项可以查看firewall-cmd的手册页:man firewall-cmd

处理运行时区域

运行时模式下对区域进行的修改不是永久有效的。重新加载或者重启后将失效。

1、启用区域中的一种服务,即给某个区域开启某个服务:firewall-cmd [--zone=区域] --add-service=服务 [--timeout=秒数]
此操作启用区域中的一种服务。如果未指定区域,将使用默认区域。如果设定了超时时间,服务将只启用特定秒数。
例:使区域中的ipp-client服务生效60秒。
在这里插入图片描述
启用默认区域中的http服务:firewall-cmd --add-service=http

2、禁用区域中的某种服务,即关闭某个服务:firewall-cmd [--zone=区域] --remove-service=服务
该命令将禁用区域中的某个服务。如果未指定区域,将使用默认区域。
例:禁用默认区域中的http服务:
在这里插入图片描述

3、查询区域中是否启用了特定服务:firewall-cmd [--zone=] --query-service=服务
在这里插入图片描述

4、启用区域端口和协议组合:firewall-cmd [--zone=区域] --add-port=portid[-portid]/protocol [--timeout=seconds]
此操作将启用端口和协议的组合。端口可以是一个单独的端口或者是一个端口范围。协议可以是tcp或udp。
在这里插入图片描述

5、禁用端口和协议组合:firewall-cmd [--zone=区域] --remove-port=portid[-portid]/protocol
在这里插入图片描述

6、查询区域中是否启用了端口和协议组合:firewall-cmd [--zone=区域] --query-port=portid[-portid]/protocol
在这里插入图片描述

7、启用区域中的IP伪装功能:firewall-cmd [--zone=区域] --add-masquerade
此操作启用区域的伪装功能。私有网络的地址将被隐藏并映射到一个公有IP。这是地址转换的一种形式,常用于路由。由于内核的限制,伪装功能仅可用于IPv4。

8、禁用区域中的IP伪装:firewall-cmd [--zone=区域] --remove-masquerade

9、查询区域的伪装状态:firewall-cmd [--zone=区域] --query-masquerade
注意:启用伪装功能的主机同时也需要开启转发服务:

echo 1 > /proc/sys/net/ipv4/ip_forward
或
vi /etc/sysctl.conf 添加如下内容
net.ipv4.ip_forward = 1
保存退出并执行sysctl -p使修改生效

10、启用区域的ICMP阻塞功能:firewall-cmd [--zone=区域] --add-icmp-block=icmp类型
在这里插入图片描述
此操作将启用选中的Internet控制报文协议(ICMP)报文进行阻塞。ICMP报文可以是请求信息或创建的应答报文,以及错误应答。

11、禁止区域的ICMP阻塞功能:firewall-cmd [--zone=区域] --remove-icmp-block=icmp类型
在这里插入图片描述

12、查询区域的ICMP阻塞功能:firewall-cmd [--zone=区域] --query-icmp-block=icmp类型
在这里插入图片描述

13、在区域中启用端口转发或映射:firewall-cmd [--zone=区域] --add-forward-port=port=portid[-portid]:proto=protocol[ :toport=portid[-portid]][ :toaddr=address [/mask]]
端口可以映射到另一台主机的同一端口,也可以是同一主机或另一主机的不同端口。端口号可以是一个单独的端口或者端口范围。协议可以为tcp或udp。目标端口可以是端口号或者端口范围。目标地址可以是IPv4地址。受内核限制,端口转发功能仅可用于IPv4。
例:所有从expernal(外部区域)进来的22端口的数据包全部转发到192.168.66.66
在这里插入图片描述

14、禁止区域的端口转发或者端口映射:firewall-cmd [--zone=] --remove-forward-port=port=portid[-portid]:proto=protocol[ :toport=portid[-portid]][ :toaddr=address [/mask]]
在这里插入图片描述

15、查询区域的端口转发或者端口映射:firewall-cmd [--zone=]--query-forward-port=port=portid[-portid]:proto=protocol[ :toport=portid[-portid]][ :toaddr=address [/mask]]
在这里插入图片描述

处理永久区域:

永久选项不直接影响运行时的状态。这些选项仅在重载或者重启服务时可用。为了使用运行时和永久设置,需要分别设置两者。选项--permanent需要是永久设置的第一个参数。
1、获取永久选项所支持的服务:firewall-cmd --permanent --get-services
在这里插入图片描述

2、获取永久选项所支持的ICMP类型列表:firewall-cmd --permanent --get-icmptypes
在这里插入图片描述

3、获取支持的永久区域:firewall-cmd --permanent --get-zones
在这里插入图片描述

4、配置防火墙在public区域打开http协议,并保存,以致重启有效:firewall-cmd --permanent --zone=public --add-service=http
在这里插入图片描述
查看永久模式下public区域是否打开http服务:firewall-cmd --permanent --zone=public --query-service=http
在这里插入图片描述
5、防火墙开放8080端口在public区域:firewall-cmd --permanent --zone=public --add-port=8080/tcp
在这里插入图片描述

Firewall中理解直接规则

firewalld有一个被称为“direct interface”(直接接口),它允许管理员将手动编码的iptables、ip6tables和ebtables规则插入到firewalld管理的区域中。它适用于应用程序,而不是用户。如果不太熟悉iptables,那么使用直接接口是很危险的,因为可能无意中导致防火墙被入侵。firewalld保持对所增加项目的追踪,所以它还能质询firewalld和发现由使用直接端口模式的程序造成的更改。直接端口由增加–direct选项到firewall-cmd命令来使用。除非将直接规则显式插入到由firewalld管理的区域,否则将首先解析直接规则,然后才会解析任何firewalld规则。

例:添加一些直接规则以将某个IP范围列入黑名单

firewall-cmd --direct --permanent --add-chain ipv4 raw blacklist
firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.0.0/24 -j blacklist
firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log-prefix "blacklisted"
firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP

来个简单规则:打开9000端口
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT

使用富语言(rich language)

富语言特性提供了一种不需要了解iptables语法的通过高级语言配置复杂IPv4和IPv6防火墙规则的机制,为管理员提供了一种表达性语言,通过这种语言可以表达firewalld的基本语法中未涵盖的自定义防火墙规则;例如:仅允许从单个IP地址(而非通过某个区域路由的所有IP地址)连接到服务。
富规则可用于表达基本的允许/拒绝规则,也可以用于配置记录(面向syslog和auditd)以及端口转发、伪装和速率限制。下面是表达富规则的基本语法:

rule [family="<rule family>"]
    [ source address="<address>" [invert="True"] ]
    [ destination address="<address>" [invert="True"] ]
    [ <element> ]
    [ log [prefix="<prefix text>"] [level="<log level>"] [limit value="rate/duration"] ]
    [ audit ]
    [ accept|reject|drop ]

规则的几乎每个单一元素都能够以option=value的形式来采用附加参数。

规则排序

一旦像某个区域(一般是指防火墙)中添加了多个规则,规则的排序会在很大程度上影响防火墙的行为。对于所有的区域,区域内的规则的基本排序是相同的。
1、为该区域设置的任何记录规则(log)
2、为该区域设置的任何拒绝规则(deny)
3、为该区域设置的任何允许规则(allow)
如果区域中的任何规则与包均不匹配,那么通常会拒绝该包,但是区域可能具有不同的默认值,例如:可信区域(trusted)将接受任何不匹配的包。此外,在匹配某个记录规则后,将继续正常处理包。
直接规则是个例外。对于大部分直接规则,将首先进行解析,然后再由firewalld进行任何其他处理,但是直接规则语法允许管理员再任何区域中的任何位置插入任何规则。

测试和调试

为了便于测试和调试,几乎所有规则都可以与超时一起添加到运行时配置。当包含超时的规则添加到防火墙,计时器便针对该规则开始倒计时,一旦规则的计时器达到0秒,便从运行时配置中删除该规则。
在使用远程防火墙时,使用超时会是一种极其有用的工具,特别是在测试更复杂的规则集时。如果规则有效,则管理员可以再次添加该规则,如果规则没有按照预期运行,甚至可能将管理员锁定而使其无法进入系统,那么规则将被自动删除,以允许管理员可以继续其工作。
通过在启用规则的firewall-cmd的结尾添加选项--timeout=<TIMEINSECONDS>,即可向运行时规则中添加超时。

理解富规则命令

firewall-cmd有四个选项可以用于处理富规则,所有这些选项都可以同常规的--permanent--zone=<ZONE>选项组合使用。

选项说明
–add-rich-rule=‘RULE’向指定区域中添加RULE,如果没有指定区域,则为默认区域。
–remove-rich-rule=‘RULE’从指定区域中删除RULE,如果没有指定区域,则为默认区域。
–query-rich-rule=‘RULE’查询RULE是否已添加到指定区域,如果未指定区域,则为默认区域。规则存在则返回0,否则返回1。
–list-rich-rules输出指定区域的所有富规则,如果未指定区域,则为默认区域。

任何已配置的富规则还将显示在firewall-cmd --list-allfirewall-cmd --list-all-zones的输出中。具体语法解释:
source
规定限制源IP地址,源地址可以是一个IPv4或者IPv6地址或者一个网络地址段。
destination
规定限制目标。目标地址使用跟源地址相同的语法。
element
这个要素只可以是以下要素类型之一:service,port,protocol,masquerade,icmp-block和forward-port。
service
服务名称是firewalld提供的其中一种服务。要获得被支持的服务的列表,输入以下命令:firewall-cmd --get-services。如果一个服务提供了一个目标地址,它将和规则中的目标地址冲突,并且导致一个错误。命令为以下形式:service name=service_name
port
端口既可以是一个独立端口数字,又或者是端口范围,例如:8000-8080。协议可以指定未tcp或udp。命令为以下形式:port port=number_or_ranger protocol=protocol
protocol
协议值可以是一个协议ID号,或者一个协议名。预知可用协议,请查阅/etc/protocols。命令为以下形式:protocol value=protocol_name_or_ID
icmp-block
用这个命令阻断一个或多个ICMP类型。ICMP类型是firewalld支持的ICMP类型之一。要获得被支持的ICMP类型列表,输入以下命令:firewall-cmd --get-icmptypes
在此,指定一个动作是不被允许的。icmp-block在内部使用reject动作。命令为以下形式:icmp-block name=icmptype_name
masquerade
打开规则里的IP伪装。用源地址而不是目的地址来把伪装限制在一个范围在。为此,指定一个动作是不被允许的。
forward-port
从一个带有指定为tcp或udp协议的本地端口转发数据包到另一个本地端口,或另一台机器上的另一个端口。port和to-port可以是单独的端口数字,也可以是一个端口范围。而目的地址是一个简单的IP地址。在此,指定一个动作是不被允许的。forward-port命令使用内部动作accept。这个命令为以下形式:forward-port port=number_or_range protocol=protocol /to-port=number_or_range to addr=address
log
注册含有内核日志的新的连接请求到规则中,比如系统日志。可以定义一个前缀文本把日志信息作为前缀加入。日志等级可以是emerg、alert、crit、error、warning、notice、info或者debug中的一个。可以选择日志的用法,按以下方式限制日志:log [prefix=prefix text] [level=log level] limit value=rate/duration
持续时间的单位为s、m、h、d。s表示秒,m表示分钟,h表示小时,d表示天。最大限定值是1/d,意为每天最多有一条日志进入。
audit
审核为发送到auditd服务的审核记录来注册提供了另一种方法。审核类型可以是ACCEPT、REJECT或DROP中的一种,但不能在audit命令后指定,因为审核类型将会从规则动作中自动收集。审核不包含自身参数,但可以选择性地增加限制。审核的使用是可选择的。
accept|reject|drop
可以是accept、reject或drop中的一个行为。
accept | reject [type=reject type] | drop
选择accept,所有新的连接请求都会被允许。选择reject,连接将被拒绝,连接来源将接到一个拒绝信息。选择drop,所有数据包会被丢弃,并且不会向源地发送任何信息。

富规则配置举例:

查看富规则:firewall-cmd --list-rich-rules

为认证报头协议AH使用心得IPv4和IPv6连接:firewall-cmd --add-rich-rule='rule protocol value=ah accept'

同意新的IPv4和IPv6连接FTP,并使用审核每分钟记录一次:firewall-cmd --add-rich-rule='rule service name=ftp log limit value=1/m audit accept'

为TFTP协议同意来自192.168.0.0/24地址的新IPv4连接,并且使用系统日志每分钟记录一次:firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept'

为RADIUS协议拒绝所有来自1:2:3:4:6::的新IPv6连接,并每分钟在级别3登录。接受来自其他来源的新的IPv6连接:firewall-cmd --add-rich-rule='rule family="ipv6" source address="1:2:3:4:6::" service name="radius" log prefix="dns" level="info" limit value="3/m" reject'
firewall-cmd --add-rich-rule='rule family="ipv6" service name="radius" accept'

转发带有TCP协议的端口4011上的来自1:2:3:4:6::的IPv6包,到端口4012上的1::2:3:4:7:firewall-cmd --add-rich-rule='rule family="ipv6" source address="1:2:3:4:6::" forward-port to-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"'

把一个源地址加入白名单,以便允许来自这个源地址的所有连接:firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.1" accept'

拒绝来自public区域中IP地址192.168.0.1的所有流量:firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.1/32 reject'

丢弃来自默认区域中任何位置的所有传入的ipsec esp协议包:firewall-cmd --add-rich-rule='rule protocol value="esp" drop'

在192.168.1.0/24子网的dmz区域中,接收端口7900–7905的所有TCP包:firewall-cmd --zone=dmz --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept'

接收从work区域到ssh的新连接,以notice级别且每分钟最多三条消息的方式将新连接记录到syslog:firewall-cmd --zone=work --add-rich-rule='rule service name=ssh log prefix=ssh level=notice limit value=3/m accept'

在接下来的5分钟内,将拒绝从默认区域中的子网192.168.2.0/24到DNS的新连接,并且拒绝的连接将记录到audit系统,且每小时最多一条消息:firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.2.0/24 service name=dns audit limit value=1/h reject' --timeout=300

更多富规则配置例子

firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.100.0/24 service name=ftp log prefix="ftp" level=info accept' --permanent
firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.100.0/24 port port=80 protocol=tcp log prefix="80" level=info accept' --permanent
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.50.10" forward-port port="80" protocol="tcp" to-port="8080" to-addr="10.10.10.2"'

富规则中使用伪装功能可以更精确详细的限制:firewall-cmd --add-rich-rule 'rule family=ipv4 source address=10.10.10.2/24 masquerade'

仅允许部分IP访问本机服务配置:firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" service name="http" accept"

禁止远程IP访问ssh:firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 service name=ssh reject'

删除rich规则:firewall-cmd --permanent --zone=public --remove-rich-rule='rule family=ipv4 source address=192.168.0.0/24 service name=ssh reject'

仅允许部分IP访问本机端口配置firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="8080" accept"

创建rich规则,可以指定日志的前缀和输出级别:firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.4/24" port port=8080 protocol="tcp" log prefix=proxy level=warning accept"可以通过查看/var/log/messages日志文件

端口转发:client(192.168.141.64)访问server的1234端口,将转发到80端口:firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.141.64/32 forward-port port=1234 protocol=tcp to-port=80'

192.168.10.0/24网段内的客户端不能访问主机的ssh:firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.10.0/24 service name=ssh drop'

通过编辑XML文件为一个区域增加服务

默认区域文件:
在这里插入图片描述
这些文件不能编辑。如果/etc/firewalld/zones/目录里没有等效文件存在,他们被默认为可使用。也就是说如果两个目录同时存在相同名称的区域文件,则/etc/firewalld/zones/目录中的区域文件优先级高。
查看从默认区域被更改的区域文件:
在这里插入图片描述
在上述实例中,work区域文件不存在,加入work文件:cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/
现在可以在/etc/firewalld/zones/目录中编辑该文件。如果删除该文件,firewalld将切换到使用/usr/lib/firewalld/zones/里的默认文件。要将一个服务加入work区域,比如允许SMTP进入work区域,则需要编辑/etc/firewalld/zones/work.xml文件,使之包括如下行:
<service name="smtp"/>

以下是一个修改了public区域的文件例子:

[root@localhost ~]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <service name="http"/>
  <port protocol="tcp" port="80"/>
  <port protocol="tcp" port="3306"/>
  <port protocol="tcp" port="10051"/>
  <port protocol="udp" port="10051"/>
  <port protocol="tcp" port="8080"/>
  <rule family="ipv4">
    <source address="192.168.100.0/24"/>
    <service name="ftp"/>
    <log prefix="ftp" level="info"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="192.168.100.0/24"/>
    <port protocol="tcp" port="80"/>
    <log prefix="80" level="info"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="192.168.0.0/24"/>
    <service name="http"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="192.168.0.0/24"/>
    <port protocol="tcp" port="8080"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="192.168.0.4/24"/>
    <port protocol="tcp" port="8080"/>
    <log prefix="proxy" level="warning"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="192.168.141.64/32"/>
    <forward-port to-port="80" protocol="tcp" port="1234"/>
  </rule>
  <rule family="ipv4">
    <source address="192.168.10.0/24"/>
    <service name="ssh"/>
    <drop/>
  </rule>
</zone>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防火墙firewalld 的相关文章

  • firewalld高级配置

    1 IP地址伪装 masquerade xff1a 伪装 通过地址伪装 xff0c NAT设备将经过设备的包转发到指定接收方 xff0c 同时将通过的数据包的原地址更改为NAT的接口地址转发到不同步目的地 当是返回数据包是 xff0c 会将
  • Linux防火墙及端口策略设置(iptables&firewalld)

    防火墙设置 service firewalld stop service firewalld start service firewall restart service firewalld status 开机禁用 xff1a system
  • 五、Docker用iptables绕过firewalld的问题

    1 前面用Docker安装了mysql xff0c 没有用防火墙开放3306端口 xff0c 但是我们也确实可以访问数据库 xff0c 原因是Docker利用了iptables管理了防火墙 xff0c 而这种管理在firewalld中还看不
  • firewalld和netfilter

    setenforce 0 临时关闭selinux vi etc selinux config 永久关闭selinux需要修改这个配置文件 将SELINUX 61 enforcing修改为SELINUX 61 disabled getenfo
  • 10.12 firewalld和netfilter

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Linux防火墙 netfilter selinux临时关闭 setenforce 0selinux永久关闭 vi etc selinux configcentos7之前使
  • firewalld防火墙

    一 xff0c 防火墙的分类 1 xff0c 软硬件形式 xff1a 软件防火墙 xff1b 硬件防火墙 xff1b 芯片级防火墙 2 xff0c 防火墙技术 xff1a 包过滤型 xff1b 应用代理型 3 xff0c 防火墙结构 xff
  • firewalld添加端口

    CentOS7默认的防火墙是firewalld 如果没有firewalld防火墙 xff0c 可以执行yum install firewalld 命令进行安装 2 0firewalld防火墙启用与关闭 启动systemctl start f
  • CentOS7防火墙(Firewalld篇)

    一 防火墙设置 1 启用防火墙 systemctl start firewalld 2 关闭防火墙 systemctl stop firewalld 3 查看状态 systemctl status firewalld 4 开机启用防火墙 s
  • CentOS7使用firewalld打开关闭防火墙与端口火墙与端口

    CentOS7使用firewalld打开关闭防火墙与端口火墙与端口 启动 xff1a systemctl start firewalld 关闭 xff1a systemctl stop firewalld 查看状态 xff1a system
  • CentOS 7 firewalld使用简介

    学习apache安装的时候需要打开80端口 xff0c 由于centos 7版本以后默认使用firewalld后 xff0c 网上关于iptables的设置方法已经不管用了 xff0c 想着反正iptable也不会用 xff0c 索性直接搬
  • CentOS 7/8 预装的新型防火墙firewalld配置详解,

    前言 本文将会详细介绍CentOS 7 firewalld的来由 功能 常用命令 常用的案例及使用方法 希望能帮助读者全面了解firewalld xff0c 并能正确配置和使用它 centos7 firewalld firewalld与ip
  • 防火墙---firewalld

    Firewalld概述 支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具支持IPv4 IPv6防火墙设置以及以太网桥支持服务或应用程序直接添加防火墙规则接口拥有两种配置模式 xff1a 运行时配置永久配置 firewalld
  • linux 防火墙管理-firewalld

    文章目录 什么是Firewalld防火墙firewalld防火墙的域概念firewalld cmd的参数及作用firewalld中的过滤规则firewalld防火墙的作用模式firewalld cmd操作实例 对Firewalld服务的简单
  • centos7防火墙(firewalld、iptables)

    一 firewalld和iptables netfilter iptables是集成在linux2 4 x版本内核中的包过滤防火墙系统 该框架可以实现数据包过滤 xff0c 网络地址转换以及数据包管理功能 linux中的防火墙系统包括两个部
  • firewalld-cmd简介

    firewalld是centos7的一大特性 xff0c 最大的好处有两个 xff1a 支持动态更新 xff0c 不用重启服务 xff1b 第二个就是加入了防火墙的 zone 概念 firewalld有图形界面和工具界面 xff0c 由于我
  • CentOS 7之FirewallD与iptables的区别

    2019独角兽企业重金招聘Python工程师标准 gt gt gt FirewallD 即Dynamic Firewall Manager of Linux systems xff0c Linux系统的动态防火墙管理器 xff0c 是 ip
  • 如何在 CentOS 8 上配置和管理防火墙

    防火墙是一种监视和过滤传入和传出网络流量的方法 它的工作原理是定义一组安全规则来确定是允许还是阻止特定流量 正确配置的防火墙是整个系统安全最重要的方面之一 CentOS 8 附带一个名为防火墙 它是一个带有 D Bus 接口的完整解决方案
  • Linux防火墙命令

    文章目录 一 Linux防火墙基本命令 1 查看防火墙状态 2 开启防火墙 3 关闭防火墙 4 重启防火墙 5 禁用防火墙 禁止开机启动 6 开机启用防火墙 开机自启防火墙 7 查看防火墙所有开放的端口 8 开放指定端口号 9 关闭指定端口
  • 如何在 Linux 中打开端口

    在 Linux 操作系统中 端口是用于通过网络发送或接收数据的通信端点 网络端口由数字标识 每个端口号与特定类型的网络服务相关联 例如 端口 80 用于 HTTP 流量 端口 21 用于 FTP 端口 25 用于电子邮件 为了建立网络连接
  • 如何在 FirewallD 中打开特定端口

    防火墙是大多数现代 Linux 发行版使用的防火墙管理解决方案 在本教程中 您将学习如何在firewalld 中打开端口 本教程介绍如何在firewalld 中为公共 特定IP 或IP 范围打开端口 找到我们的上一篇文章关于Firewall

随机推荐

  • MDK debug时出现*** error 65: access violation at

    简介 本文针对的是访问内存权限的问题 xff0c 其他问题暂时不讨论 问题描述 使用mdk arm调试keil工程的时候遇到错误 error 65 access violation at 0xE0042004 no write permis
  • CreateSemaphore函数

    创建或打开命名或未命名的信号量对象 要指定对象的访问掩码 xff0c 请使用CreateSemaphoreEx函数 语法 HANDLE WINAPI CreateSemaphore xff08 In opt LPSECURITY ATTRI
  • 什么是underlay和overlay?

    1 什么是underlay和overlay xff1f 常规解释 xff1a underlay 现实的物理基础层网络设备 数据中心基础转发架构的网络 以太网最初设计的时候就是一个分布式的网络架构 xff0c 没有中心控制节点 xff0c 网
  • 分布式脑裂问题分析

    1 34 脑裂 34 定义 在一个高可用系统中 xff0c 当联系着的节点断开联系时 xff0c 本来为一个整体的系统 xff0c 分裂成两个独立节点 xff0c 两个节点开始争抢共享资源造成系统混乱 数据损坏的现象 xff0c 成为 脑裂
  • idea必备插件01-代码智能补全插件codota

    代码智能补全插件 codota 01 idea插件下载地址 02 codota在线网站 03 codota官方指导 Codota这个插件可以用于代码的智能补全功能 xff0c 它基于百万级github仓库java程序 xff0c 能根据程序
  • 04-spring-boot-resttemplate netty定制使用

    04 spring boot resttemplate netty定制使用 rest template可以使用netty定制的工厂类 Netty4ClientHttpRequestFactory xff0c 完成相关rest接口访问工作 x
  • sshuttle工具简介

    1 sshuttle简介 最近在k8s配置用到shuttle xff0c 只知道公司用它完成远端k8s集群环境网络环境打通环境工作 xff0c 于是决定研究一下它 xff0c 了解这个穷人代理究竟魅力何在 01 github链接 sshut
  • 日志无法打印问题总结

    日志无法打印问题总结 现象 log4j2运行环境可以生成日志 xff0c 但是没有任何打印信息 1 日志无法打印 最近新开发的服务 xff0c k8s容器部署后 xff0c 发现log4j2的日志无法打印 xff0c 定义的日志都生成了相关
  • 元空间过大与intern方法探究

    1 问题 所负责服务需要保存大量字符串 xff0c 通过写入大量数据 xff0c 发现元空间持续变大 xff0c 于是想到之前每位研发的的建议 xff0c 使用intern方法来优化字符串存储 xff0c 于是做了如下的测试 2 测试int
  • Spring Cloud Tencent和alibaba备忘

    1 Spring Cloud Tencent简介 服务注册与发现 Spring Cloud Tencent Polaris Discovery 命名空间服务服务实例 配置中心 Spring Cloud Tencent Polaris Con
  • Java Se 、JavaEE、JavaME区别

    1 Java Se JavaEE JavaME区别 Java SE Java SE xff08 Java Platform xff0c Standard Edition xff09 J2SE 它允许开发和部署在桌面 服务器 嵌入式环境和实时
  • STM32通用定时器实现pwm输出、输入捕获

    简介 以stm32f103rct6为例 xff0c 下面说明如何使用通用定时器实现pwm输出 详细 stm32的定时器有多种类型 xff0c 有RTC 基本定时器 通用定时器 高级定时器 下面我们选择通用定时器来实现pwm输出功能 利用比较
  • Flex Ethernet (FlexE) 初识

    Flex Ethernet FlexE 初识 1 初识FlexE Flexible Ethernet 由OIF组织制定了其统一标准 xff0c 通过OIF FLEXE 01可以了解到其基本信息 xff1b 摘录其标准的一个概要说明 xff1
  • .adoc使用说明

    开发过程中 xff0c 部分开源代码文档中出现了 adoc文件 xff0c 为了了解并使用这个文件 xff0c 简单记录以下功能和用法 xff0c 方便后续查阅使用 what xff1a AsciiDoc file 标记语言 why xff
  • 【开源推介01-flameshot】-这或许是linux最好用的截图软件

    文章目录 1 介绍flameshot2 安装flameshot3 使用flameshot3 1 命令行3 2 图形化截屏3 3 操作快捷键3 4 图形化配置 4 进阶玩转flameshot4 1 设置系统启动快捷键4 2 下拉菜单截屏 延时
  • 【开源推介02-pyang】-你离yang模型只差一个pyang工具

    文章目录 1 yang建模语言及pyang背景简介2 pyang工具特性3 pyang安装及命令行简介4 pyang的yin yang模型转化5 pyang生成tree文件6 yang语法校验7 pyang小结 你离懂yang模型只差一个p
  • 【高精度定位】关于GPS、RTK、PPK三种定位技术的探讨

    高精度定位通常是指亚米级 厘米级以及毫米级的定位 xff0c 从市场需求来看 xff0c 定位的精度越高往往越好 高精度 低成本 的定位方案无疑将是未来市场的趋势 在物联网时代 xff0c 大多数的应用或多或少都与位置服务相关联 xff0c
  • top 默认使用内存排序的命令

    linux下 xff0c top默认使用cpu来排序 xff0c 如果希望改用内存占用情况或其他项来排序 xff0c 可以通过 o选项 top o MEM 通过 man top 查看其用法 xff0c 里面描述了 o 选项 xff0c 用于
  • 寻找两个点云重叠部分

    目录 方法1 xff1a 方法1实验效果 xff1a 方法2 c 43 43 xff1a 方法2 python 方法2实验效果 xff1a 结论 xff1a 网上大部分寻找重叠区域都是对一个点云建立kdtree xff0c 然后在r半径内搜
  • 防火墙firewalld

    RHEL7中有几种防火墙共存 xff1a firewalld iptables ebtables等 基于iptables的防火墙默认不启动 xff0c 但仍然可以继续使用 RHEL7默认使用firewalld作为防火墙 xff0c 管理工具