介绍

防火墙RAW表允许在连接跟踪前有选择地绕过或丢弃数据包,这样可以大大减少CPU的负荷。该工具对缓解DsS/DDoS攻击非常有用。

RAW表没有依赖连接跟踪的匹配器(如连接状态、第七层等)。

如果一个数据包被标记为绕过连接跟踪,那么数据包的去碎片化就不会发生。

在RAW表中有两个预定义的链。

  • prerouting - 处理进入路由器的数据包

  • output - 处理来自路由器并通过某个接口离开路由器的数据包。通过路由器的数据包不按照输出链的规则处理。

数据包流程 图说明了数据包在RouterOS中是如何处理的。

属性

属性 说明
action (action name; Default: accept) 如果数据包被规则匹配要执行的动作。
- accept - 接受数据包。数据包不会传递到下一个防火墙规则。
- add-dst-to-address-list - 将目标地址添加到参数 "address-list "指定的地址列表中。
- add-src-to-address-list - 将源地址添加到参数 "address-list "指定的地址列表中。
- drop - 无声地丢弃数据包
- jump - 跳到由 jump-target 参数指定的用户定义的链上
- log - 在系统日志中添加一条信息,包含以下数据:in-interface, out-interface, src-mac, protocol, src-ip: port->dst-ip: port and length of the packet. 数据包被匹配后,它传递到列表中的下一个规则,类似于 "直通"。
- notrack - 不向连接跟踪发送数据包。
- passthrough - 忽略这个规则,转到下一个规则(对统计有用)。
- return - 将控制权传回发生跳转的那条链上
address-list (string; Default: ) 要使用的地址列表名称。如果动作是 add-dst-to-address-listadd-src-to-address-list 则适用。
address-list-timeout (none-dynamic | none-static | time; Default: none-dynamic) 地址从 address-list 参数指定的地址列表中删除的时间间隔。与 add-dst-to-address-listadd-src-to-address-list 动作一起使用。
- 非动态值(00:00:00)将在地址列表中保留该地址,直到重新启动。
- 非静态的值将使地址永远留在地址列表中,并将包括在配置导出/备份中。
chain (name; Default: ) 指定添加到哪个链的规则。如果输入的内容和已定义的链名称不一致,将创建一个新的链。
comment (string; Default: ) 规则的描述。
dscp (integer: 0..63; Default: ) 匹配DSCP IP报头。
dst-address (IP/netmask | IP range; Default: ) 匹配目的地等于指定IP或属于指定IP范围的数据包。
dst-address-list (name; Default: ) 根据用户定义的 地址列表 匹配数据包的目标地址。
dst-address-type (unicast | local | broadcast | multicast; Default: ) 匹配目的地址类型。
- unicast - 用于点对点传输的IP地址
- local - 如果dst-address被分配给路由器的一个接口
- broadcast - 数据包被发送到子网的所有设备上
- multicast - 数据包被转发到一个定义的设备组。
dst-limit (integer[/time],integer,dst-address | dst-port | src-address[/time]; Default: ) 匹配数据包,直到超过给定速率。速率被定义为每个时间间隔的数据包。与极限匹配器相反,每个流都有自己的极限。流量由一个模式参数定义。参数按下列格式书写。count[/time],burst,mode[/expire]:
- count - 匹配每个流的每个时间间隔的数据包数量
- time - 指定每个流的数据包数量不能超过的时间间隔(可选,如果不指定将使用1s)。
- burst - 每个流量要匹配的数据包的初始数量:这个数字每隔 time/count 就会增加一个,最多到这个数字。
- mode - 这个参数指定了定义流量的特殊字段(src-address, dst-address,src-and-dst-address, dst-address-and-port, addresses-and-dst-port)。
- expire - 指定没有数据包的流量允许删除的时间间隔(可选)。
dst-port (integer[-integer]: 0...65535; Default: ) 目标端口号或端口号范围列表
fragment (yes | no; Default: ) 匹配碎片化的数据包。第一个(开始)片段不计入。如果启用连接跟踪功能,就不会有碎片,因为系统会自动组合每个数据包。
hotspot (auth | from-client | http | local-dst | to-client; Default: )
icmp-options (integer:integer; Default: ) 匹配ICMP类型:代码字段
in-bridge-port (name; Default: ) 如果输入的接口是桥接,则数据包进入路由器的实际接口。只有在桥接设置中启用了 use-ip-firewall 时才起作用。
in-interface (name; Default: ) 数据包进入路由器的接口。
in-interface-list (name; Default: ) 在接口列表中定义的一组接口。与in-interface的作用相同。
ingress-priority (integer: 0..63; Default: ) 匹配入站数据包的优先级。优先级可以从VLAN、WMM或MPLS的EXP位得出。阅读全文
ipsec-policy (in | out, ipsec | none; Default: ) 匹配IPsec的策略。值按下列格式书写。方向,策略。方向用于选择是否匹配用于解封装或将封装的策略。
- in - 在PREROUTING链中有效
- out - 在OUTPUT链中有效
- ipsec - 匹配数据包是否需要进行IPsec处理。
- none - 匹配不需要进行IPsec处理的数据包(例如,IpSec传输数据包)。
例如,如果路由器收到一个IPsec封装的Gre包,那么规则 ipsec-policy=in,ipsec 将匹配Gre包,但规则 ipsec-policy=in,none 将匹配ESP包。
ipv4-options (any | loose-source-routing | no-record-route | no-router-alert | no-source-routing | no-timestamp | none | record-route | router-alert | strict-source-routing | timestamp; Default: ) 匹配IPv4头的选项。
- any - 匹配至少有一个IPv4选项的数据包。
- loose-source-routing - 匹配带有松散源路由选项的数据包。该选项用于根据源提供的信息对互联网数据报进行路由。
- no-record-route - 匹配没有记录路由选项的数据包。这个选项用于根据源提供的信息对互联网数据进行路由。
- no-router-alert - 匹配没有路由器改变选项的数据包
- no-source-routing - 匹配没有源路由选项的数据包
- no-timestamp - 匹配没有时间戳选项的数据包
- record-route - 匹配带有record route选项的数据包
- router-alert - 匹配带有router alter选项的数据包
- strict-source-routing - 匹配具有严格源路由选项的数据包
- timestamp - 匹配有时间戳的数据包
jump-target (name; Default: ) 要跳转的目标链名称。只适用于 action=jump 的情况。
limit (integer,time,integer; Default: ) 匹配达到限定速率(包速率或比特速率)的数据包。使用该匹配器的规则将进行匹配,直到达到该限制。参数按下列格式书写。count[/time],burst:mode.
- count - 匹配的每个时间间隔的数据包或比特计数
- time - 指定不超过数据包或比特数的时间间隔(可选,如果不指定将使用1s)。
- burst - 匹配的数据包或比特的初始数量:这个数字每10ms就会被充实一次,所以burst应该至少是每秒1/100的速率。
- mode - 数据包或比特模式
log (yes | no; Default: no) 在系统日志中添加一条信息,包含以下数据:in-interface, out-interface, src-mac, protocol, src-ip:port->dst-ip:port, 和包的长度。
log-prefix (string; Default: ) 在每条日志信息的开头添加指定的文字。如果配置了_action=log_或_log=yes_,则适用。
nth (integer,integer; Default: ) 匹配每n个数据包。nth=2,1 规则将匹配每两个包的第一个数据包,因此,50%的流量会匹配。
out-bridge-port (name; Default: ) 如果出站接口是网桥,则为数据包离开路由器的实际接口。只有在桥接设置中启用了 use-ip-firewall 时才起作用。
out-interface (; Default: ) 数据包离开路由器的接口。
out-interface-list (name; Default: ) 在接口列表中定义的接口集。与out-interface的作用相同。
packet-size (integer[-integer]:0..65535; Default: ) 匹配指定大小或大小范围的数据包,单位为字节。
per-connection-classifier (ValuesToHash:Denominator/Remainder; Default: ) PCC匹配器允许将流量分为相等的流,并能够把有特定选项集的数据包保留在一个特定的流中。
port (integer[-integer]: 0..65535; Default: ) 如果任何(源或目的)端口与指定的端口或端口范围列表相匹配,则进行匹配。仅当 protocol 为TCP或UDP时适用。
priority (integer: 0..63; Default:)
protocol (name or protocol ID; Default: tcp) 匹配由协议名称或编号指定的特定IP协议
psd (integer,time,integer,integer; Default: ) 尝试检测TCP和UDP扫描。参数的格式如下:"WeightThreshold, DelayThreshold, LowPortWeight, HighPortWeight"。
- WeightThreshold - 来自同一主机的不同目的端口的最新TCP/UDP数据包的总权重,视为端口扫描序列。
- DelayThreshold - 来自同一主机的不同目的端口的数据包视为可能的端口扫描子序列的延迟。
- LowPortWeight - 具有特权(<1024)目的端口的数据包的权重
- HighPortWeight - 具有非特权目的端口的数据包的权重
random (integer: 1..99; Default: ) 以一定的概率随机匹配数据包。
src-address (Ip/Netmaks, Ip range; Default: ) 匹配来源等于指定IP或属于指定IP范围的数据包。
src-address-list (name; Default: ) 根据用户定义的地址列表匹配数据包的源地址。
src-address-type (unicast | local | broadcast | multicast; Default: ) 匹配源地址类型:
- unicast - 用于点对点传输的IP地址
- local - 如果一个地址被分配给路由器的一个接口
- broadcast - 数据包发送到子网的所有设备上
- multicast - 数据包转发到一个定义的设备组中
src-port (integer[-integer]: 0..65535; Default: ) 源端口和源端口范围列表。仅当协议为TCP或UDP时适用。
src-mac-address (MAC address; Default: ) 匹配数据包的源MAC地址
tcp-flags (ack | cwr | ece | fin | psh | rst | syn | urg; Default: ) 匹配指定的TCP标志
- ack - 确认数据
- cwr - 拥塞窗口减少
- ece - ECN-echo标志(明确的拥塞通知)。
- fin - 关闭连接
- psh - 推送功能
- rst - 撤销连接
- syn - 新连接
- urg - 紧急数据
tcp-mss (integer[-integer]: 0..65535; Default: ) 匹配IP数据包的TCP MSS值
time (time-time,sat | fri | thu | wed | tue | mon | sun; Default: ) 允许根据数据包的到达时间和日期创建一个过滤器,或者对于本地生成的数据包,则根据出发时间和日期创建过滤器。
tls-host (string; Default: ) 允许根据TLS主机名来匹配流量。接受 GLOB语法 的通配符。注意,如果TLS握手帧被分割成多个TCP段(数据包),匹配器将无法匹配主机名。
ttl (integer: 0..255; Default: ) 匹配数据包的TTL值。