#P1451. 2024.10.23-秋招-第3题-防火墙规则匹配

2024.10.23-秋招-第3题-防火墙规则匹配

题目内容

iptablesiptablesLinuxLinux系统的网络访问控制模块,管理员可通过iptablesiptables配置允许从哪些来源IPIPIPIP段访问66tinuxtinux主机。

iptablesiptables支持设置多个规则链,每个规则链中可以包含若干条访问控制规则。当系统收到一个网络报文时,会基于系统配置的访问控制规则来决定是接受还是拒绝这个报文。

请开发一个简化版iptablesiptables,现给定一系列规则操作命令和查询命令,

请依次输出其中查询命令的IPIP匹配结果。

规则操作命令有两种格式:

  1. op chain_name ip_or_cidr action.op有三种:

II表示InsertInsert,在对应的规则链开始处插入一条规则,

AA表示AppendAppend,在对应的规则链结尾处追加一条规则,

DD表示从chain_name对应的链中删除一条规则;

actionaction字段AA表示AcceptAcceptRR表示RejectReject

  1. op chain_name1 ip_or_cidr_G chain_name2.表示当匹配到此规则后跳转到chain_name2继续匹配,GG表示GotoGoto

其中ip_or_cidr字段可以是单个IPV4IPV4地址,也可以是CIDRCIDR格式的IPV4IPV4地址段。

CIDRCIDR示例:10.1.0.0/24 表示10.1.0.0到10.1.0.25s这个IP段。

对于一个CDRa.b.c.d/a,如果一个IP地址的前n个bit与a.b.c.d的前n个bit相同,那么这个P属于a.b.c.d/这个IP段。

查询命令的格式: M ip 查询此IPIP是否被允许访问,MM表示MatchMatch。输入用例保证一定有一条c0c0规则链,每一个MM操作都从c0c0链开始依次对每一条规则进行匹配,

输出匹配到的第一条规则的actionaction(AARR)。如果没有匹配到任何规则,输出UU(表示UnknownUnknown)。只支持通过IPIP查询,不支持CIDRCIDR格式。

输入描述

第一行:一个整数NN(2<=N<=1000002<=N<=100000),表示总的规则操作命令和查询命令的总数。

接下来NN行为规则操作命令或查询命令。

输出描述

对于每一个MM操作,输出规则匹配后的actionaction字段 (ARA、RUU)

样例1

输入

11
A c0 192.168.1.0/24 R
I c0 192.168.1.1 A
A c0 10.1.0.0/24 G c2
A c1 0.0.0.0/0 R
A c2 10.1.0.3 R
A c2 10.1.0.0/24 A
M 192.168.1.1
M 192.168.1.10
D c0 192.168.1.0/24 R
M 192.168.1.10
M 10.1.0.3

输出

ARUR

说明

一共11条配置或查询操作。 规则链c0c0中包含33条规则,c1c1中包含11条规则,c2c2中包含22条规则。 然后查询192.168.1.1192.168.1.1,匹配到了cOcO链中的I c0192.168.1.1 A,输出AA;

查询192.168.1.10192.168.1.10,匹配到了c0c0中的A c0 192.168.1.0/24 RA\ c0\ 192.168.1.0/24\ R,输出RR;

接下来删除了c0c0中的192.168.1.0/24 R192.168.1.0/24\ R规则,再查询192.168.1.10192.168.1.10时已没有任何规则可匹配,输出UU;

又查询10.1.0.310.1.0.3,先匹配到了c0c0中的第33条规则,发现要goto c2goto\ c2,于是匹配到了c2c2中的10.1.0.3 R10.1.0.3\ R规则,输出RR

样例2

输入

2
A c0 192.168.1.0/24 R
M 192.168.1.20

输出

R

说明

一共22条配置或查询操作。

规则链c0c0中包含11条规则,拒绝来自192.168.1.0/24192.168.1.0/24的IP。

192.168.1.20192.168.1.20属于192.168.1.0/24192.168.1.0/24 这个IPIP段,因此输出RR