5.15. 使用"Rich Language"语法配置复杂防火墙规则
通过 “丰富的语言” 语法,可以创建复杂的防火墙规则,比直接接口方法更容易理解。此外,可以永久设置。语言使用带有值的关键字,是 iptables 规则的一个抽象表示。可以使用此语言配置区域;当前配置方法仍被支持。
5.15.1. Rich Language 命令的格式 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
本节中的所有命令都需要以
root 用户身份运行。添加规则的命令格式如下:
firewall-cmd [--zone=zone] --add-rich-rule='rule' [--timeout=timeval]
firewall-cmd [--zone=zone] --add-rich-rule='rule' [--timeout=timeval]
这将为区域 区域 添加丰富的语言 规则。这个选项可多次指定。如果省略了区,则使用默认区。如果提供了超时,规则或规则只在指定的时间内保持活动状态,之后会自动删除。时间值可以跟随
s (秒)、m (分钟)或 h (小时)来指定时间单位。默认值为 秒。
删除规则:
firewall-cmd [--zone=zone] --remove-rich-rule='rule'
firewall-cmd [--zone=zone] --remove-rich-rule='rule'
这将删除区域 区域 的丰富语言 规则。这个选项可多次指定。如果省略了区,则使用默认区。
检查是否存在规则:
firewall-cmd [--zone=zone] --query-rich-rule='rule'
firewall-cmd [--zone=zone] --query-rich-rule='rule'
这将返回是否为区域 区域 添加丰富的语言 规则规则。如果已启用,命令将会打印
yes,且退出状态为 0。否则,将打印 no ,且退出状态为 1。如果省略了区,则使用默认区。
有关区配置文件中使用的丰富的语言表示的详情,请查看 firewalld.zone(5) man page。
5.15.2. 了解 Rich Rule 结构 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
rich rule 命令的格式或结构如下:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
注意
文件中富规则的结构使用
NOT 关键字来反转源地址命令的含义,但命令行使用 invert="true" 选项。
规则与特定区域关联。个区域可以有多个规则。如果某些规则交互或字典,则应用第一个与数据包匹配的规则。
5.15.3. 了解 Rich Rule 命令选项 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
系列- 如果提供了规则系列,可以是
ipv4或ipv6,它将规则分别限制为IPv4或IPv6。如果没有提供规则系列,则会为IPv4和IPv6添加该规则。如果在规则中使用源或目标地址,则需要提供规则系列。端口转发也是端口转发的情况。
源和目标地址
source- 通过指定源地址,连接尝试的来源可以限制为源地址。源地址或地址范围是 IP 地址或网络 IP 地址,其掩码为
IPv4或IPv6。对于IPv4,掩码可以是网络掩码或纯文本。对于IPv6,掩码是纯数字。不支持使用主机名。通过添加NOT关键字;除提供的地址匹配,可以反转源 address 命令的意义。如果该规则没有指定系列,则可以为IPv4和IPv6添加类型为 的 MAC 地址和 IP 集。其他 IP 集需要与规则的family设置匹配。 目的地- 通过指定目标地址,目标可以限制为目标地址。目标地址使用与 IP 地址或地址范围的源地址相同的语法。源和目标地址的使用是可选的,所有元素都不能使用目标地址。这取决于目标地址的使用,例如在服务条目中。您可以组合
目的地和操作。
元素
该元素 只能是以下元素类型之一 :
service,port,protocol,masquerade,icmp-block,forward-port, 和 source-port。
serviceservice元素是 firewalld 提供的服务之一。要获取预定义服务列表,请输入以下命令:如果服务提供目标地址,它将与规则中的目标地址冲突,并会导致错误。在内部使用目标地址的服务主要是使用多播的服务。该命令采用以下格式:firewall-cmd --get-services
~]$ firewall-cmd --get-servicesCopy to Clipboard Copied! Toggle word wrap Toggle overflow service name=service_name
service name=service_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow portport元素可以是单个端口号或端口范围,例如5060-5062,后跟协议,可以是tcp或udp。该命令采用以下格式:port port=number_or_range protocol=protocol
port port=number_or_range protocol=protocolCopy to Clipboard Copied! Toggle word wrap Toggle overflow protocolprotocol值可以是协议 ID 号或协议名称。有关允许的协议条目,请参阅/etc/protocols。该命令采用以下格式:protocol value=protocol_name_or_ID
protocol value=protocol_name_or_IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow icmp-block- 使用此命令阻止一个或多个
ICMP类型。ICMP类型是 firewalld 支持的ICMP类型之一。要获取支持的ICMP类型列表,请输入以下命令:此处不允许指定操作。ICMP-block 在内部使用操作firewall-cmd --get-icmptypes
~]$ firewall-cmd --get-icmptypesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 拒绝。该命令采用以下格式:icmp-block name=icmptype_name
icmp-block name=icmptype_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow masquerade- 在规则中打开 IP 伪装。可以提供源地址以限制伪装到此区域,但不能提供目标地址。此处不允许指定操作。
forward-port- 使用指定为
tcp或udp的协议从本地端口转发数据包到本地的其它端口,或转发到另一台计算机上的其他端口。port和to-port可以是单个端口号或端口范围。目标地址是一个简单的 IP 地址。此处不允许指定操作。forward-port 命令使用操作在内部接受。该命令采用以下格式:forward-port port=number_or_range protocol=protocol / to-port=number_or_range to-addr=addressforward-port port=number_or_range protocol=protocol / to-port=number_or_range to-addr=addressCopy to Clipboard Copied! Toggle word wrap Toggle overflow source-port- 匹配数据包的源端口 - 连接尝试的源端口。要匹配当前计算机上的端口,请使用
port元素。source-port元素可以是单个端口号或端口范围(例如 5060-5062),后跟协议为tcp或udp。该命令采用以下格式:source-port port=number_or_range protocol=protocol
source-port port=number_or_range protocol=protocolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
日志记录
log- 使用内核日志记录记录新连接尝试规则,例如在 syslog 中。您可以定义将作为前缀添加到日志消息中的前缀文本。日志级别可以是
emerg、alert、crit、error、warning、notice、info或debug之一。使用日志是可选的。可以按如下所示限制日志记录:速率是一个自然正数 [1, ..],持续时间为log [prefix=prefix text] [level=log level] limit value=rate/duration
log [prefix=prefix text] [level=log level] limit value=rate/durationCopy to Clipboard Copied! Toggle word wrap Toggle overflow s,m,h,d。s表示秒,m表示分钟,h表示小时和d天。最大限制值为1/d,这表示每天最多一个日志条目。 audit- Audit 提供了使用发送到 service
auditd的审计记录的日志的替代方法。audit 类型可以是ACCEPT、REJECT或DROP之一,但在命令 审计 后未指定,因为审计类型将从规则操作中自动收集。审计没有自己的参数,但可以选择性地添加限制。审计的使用是可选的。
操作
accept|reject|drop|mark- 一个操作可以是
接受之一、拒绝、丢弃或标记。该规则只能包含元素或源。如果规则包含一个元素,则与该元素匹配的新连接将使用该操作进行处理。如果规则包含源,则来自源地址的所有内容都将使用指定的操作进行处理。使用accept | reject [type=reject type] | drop | mark set="mark[/mask]"
accept | reject [type=reject type] | drop | mark set="mark[/mask]"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接受时,将授予所有新的连接尝试。如果拒绝,则它们的源将被拒绝,并且其源将收到拒绝消息。reject 类型可以设置为使用另一个值。使用drop时,所有数据包将立即丢弃,且不会向源发送任何信息。使用标记所有数据包时,将使用给定的 标记和可选 掩码 标记。
5.15.4. 使用 Rich Rule Log 命令 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
可以使用 Netfilter 日志目标以及 audit 目标来完成日志记录。向所有区域都添加了一个新链,其格式为 “zone_log”,其中 zone 是区域名称。这会在
拒绝 链之前进行处理,以便正确排序。根据规则的操作,它们的规则或部分放置在单独的链中,如下所示:
zone_log zone_deny zone_allow
zone_log
zone_deny
zone_allow
所有日志记录规则都将放在 “区域_log” 链中,首先解析这些规则。所有
拒绝 和丢弃 规则将放置在 “区域_deny” 链中,这些规则将在日志链后解析。所有 接受 规则将放置在 “区域_allow” 链中,这将在 拒绝 链后解析。如果规则包含 日志 以及 拒绝或允许 操作,则指定这些操作的规则部分放置在匹配的链中。
5.15.4.1. 使用 Rich Rule Log 命令示例 1 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
为身份验证标头协议
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
AH 启用新的 IPv4 和 IPv6 连接:
rule protocol value="ah" accept
rule protocol value="ah" accept
5.15.4.2. 使用 Rich Rule Log Command Example 2 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
允许协议
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
FTP 的新 IPv4 和 IPv6 连接,并使用审计每分钟记录 1 个:
rule service name="ftp" log limit value="1/m" audit accept
rule service name="ftp" log limit value="1/m" audit accept
5.15.4.3. 使用 Rich Rule Log 命令示例 3 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
对于协议
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
TFTP 允许从地址 192.168.0.0/24 进行新的 IPv4 连接,并使用 syslog 每分钟记录 1 个:
rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept
rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept
5.15.4.4. 使用 Rich Rule Log Command Example 4 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
从
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
1:2:3:4:6:: 用于协议 RADIUS 的新 IPv6 连接都会被拒绝,并记录每分钟的 3 个速率。可接受来自其他源的新 IPv6 连接:
rule family="ipv6" source address="1:2:3:4:6::" service name="radius" log prefix="dns" level="info" limit value="3/m" reject rule family="ipv6" service name="radius" accept
rule family="ipv6" source address="1:2:3:4:6::" service name="radius" log prefix="dns" level="info" limit value="3/m" reject
rule family="ipv6" service name="radius" accept
5.15.4.5. 使用 Rich Rule Log 命令示例 5 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在端口 4011 上将从
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
1:2:3:4:6:: 接收的 IPv6 数据包转发到端口 4012 上的 1::2:3:4:7。
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"
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"
5.15.4.6. 使用 Rich Rule Log Command Example 6 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
将源地址列入白名单以允许来自此源的所有连接。
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
rule family="ipv4" source address="192.168.2.2" accept
rule family="ipv4" source address="192.168.2.2" accept
有关更多示例,请参阅
firewalld.richlanguage (5) 手册页。