/ip/firewall/filter

filter

/ip/firewall/filter 的 RouterOS 目录参考。


ip/firewall/filter

Type: Directory

参数类型描述
allswitch
staticswitch
dynamicswitch
chain *enum指定规则将添加到哪个链。如果输入与已定义链的名称不匹配,则会创建新链。
actionenum (accept | jump | return | log | passthrough | add-src-to-address-list | add-dst-to-address-list | drop | reject | tarpit | fasttrack-connection) { accept:0, jump:1, return:2, log:3, passthrough:4, add-src-to-address-list:5, add-dst-to-address-list:6, drop:10, reject:11, tarpit:12, fasttrack-connection:40 }当数据包匹配规则时要执行的操作: - accept - 接受数据包。数据包不会传递给下一条防火墙规则。 - add-dst-to-address-list - 将目标地址添加到由 address-list 参数指定的地址列表。 - add-src-to-address-list - 将源地址添加到由 address-list 参数指定的地址列表。 - jump - 跳转到由 jump-target 参数值指定的用户自定义链。 - log - 向系统日志添加一条包含以下数据的消息:in-interface、out-interface、src-mac、protocol、src-ip:port->dst-ip:port 以及数据包长度。数据包匹配后,会像 passthrough 一样传递给列表中的下一条规则。 - passthrough - 如果数据包匹配规则,则增加计数器并转到下一条规则(用于统计)。 - return - 将控制权返回到发生跳转的链。 - drop - 丢弃数据包。 - reject - 拒绝数据包并发送 ICMP 响应。 - tarpit - 捕获并保持连接打开。 - fasttrack-connection - 对连接进行快速跟踪。
jump-targetenum ()要跳转到的目标链名称。仅在 action=jump 时适用。
reject-withenum (icmp-network-unreachable | icmp-host-unreachable | icmp-protocol-unreachable | icmp-port-unreachable | icmp-net-prohibited | icmp-host-prohibited | tcp-reset | icmp-admin-prohibited) { icmp-network-unreachable:0, icmp-host-unreachable:1, icmp-protocol-unreachable:2, icmp-port-unreachable:3, icmp-net-prohibited:5, icmp-host-prohibited:6, tcp-reset:7, icmp-admin-prohibited:8 }指定数据包被拒绝时要返回的 ICMP 错误。适用于 action=reject。 - icmp-network-unreachable - 发送 ICMP 端口不可达消息。ICMP 类型 3,代码 0 - icmp-host-unreachable - 发送 ICMP 端口不可达消息。ICMP 类型 3,代码 1 - icmp-protocol-unreachable - 发送 ICMP 端口不可达消息。ICMP 类型 3,代码 2 - icmp-port-unreachable - 发送 ICMP 端口不可达消息。ICMP 类型 3,代码 3 - icmp-net-prohibited - 发送 ICMP 地址禁止消息。ICMP 类型 3,代码 9 - icmp-host-prohibited - 发送 ICMP 地址禁止消息。ICMP 类型 3,代码 10 - tcp-reset - 发送设置了 RST 标志的 TCP 段。 - icmp-admin-prohibited - 发送 ICMP 地址禁止消息。ICMP 类型 3,代码 13
hw-offloadbool启用或禁用 FastTrack 硬件卸载。仅在 支持 FastTrack 卸载的交换机 上且设置了 action=fasttrack-connection 时受支持。
tcp-flagssuper { !, , flags: multi { array-id, array-id, flag: super { ! , flag: enum (fin | syn | rst | psh | ack | urg | ece | cwr) { fin:0, syn:1, rst:2, psh:3, ack:4, urg:5, ece:6, cwr:7 } } } }匹配指定的 TCP 标志: - ack - 确认数据。 - cwr - 拥塞窗口减小。 - ece - ECN 回显标志(显式拥塞通知)。 - fin - 关闭连接。 - psh - 推送功能。 - rst - 重置连接。 - syn - 新连接。 - urg - 紧急数据。
p2psuper { ! , p2p: enum (fasttrack | gnutella | direct-connect | edonkey | bit-torrent | blubster | soulseek | winmx | warez | all-p2p) { fasttrack:0x01, gnutella:0x02, direct-connect:0x03, edonkey:0x04, bit-torrent:0x05, blubster:0x06, soulseek:0x07, winmx:0x08, warez:0x09, all-p2p:0xFF } }匹配某些未加密的 P2P 协议。由于现在大多数内容都已加密并需要深度包检测才能识别,此功能已弃用。仅适用于 IPv4。
connection-statesuper { ! , state: ubit (invalid, established, related, new, untracked) }解释特定数据包的连接跟踪分析数据: - established - 属于现有连接的数据包。 - invalid - 在连接跟踪中没有确定状态的数据包(通常是严重乱序的数据包、序列号/确认号错误的数据包,或路由器资源过度使用的情况)。无效数据包不会参与 NAT(只有 connection-state=new 的数据包才会),并且在路由时仍会包含原始源 IP 地址。您应该在防火墙 filter 的 forward 和 input 链中丢弃所有 connection-state=invalid 数据包。 - new - 数据包已开始一个新连接,或者以其他方式关联到一个尚未看到双向数据包的连接。 - related - 与现有连接相关但不属于该连接的数据包,例如 ICMP 错误或开始 FTP 数据连接的数据包。 - untracked - 在防火墙 RAW 表中设置为绕过连接跟踪的数据包。
connection-nat-statesuper { ! , state: ubit (srcnat, dstnat, ein-snat, ein-dnat) }匹配经过源 NAT、目标 NAT 或两者兼有的连接。connection-state=related 连接的 connection-nat-state 由第一个数据包的方向决定;如果连接跟踪需要使用 dst-nat 将此连接传递到与主连接相同的主机,即使完全没有 dst-nat 规则,它也会处于 connection-nat-state=dstnat。 使用端点无关 NAT 时,ein-snat 和 ein-dnat 分别表示源 NAT 和目标 NAT 连接。
tls-hostsuper { ! , tls-host: string }根据 TLS SNI 主机名匹配 HTTPS 流量。接受 GLOB 语法进行通配符匹配。如果 TLS 握手帧被分片到多个 TCP 段中,匹配器将无法匹配主机名。
connection-limitsuper { ! , limit: num , [netmask] ,num }在达到给定值后按地址或地址块匹配连接。应将其与 connection-state=new 和/或 tcp-flags=syn 配合使用,因为该匹配器非常消耗资源。
layer7-protocolsuper { ! , protocol: enum }在 layer7 protocol 菜单中定义的 Layer7 过滤器名称。
realmsuper { ! , realm: num }匹配路由域。仅适用于 IPv4。
protocolsuper { ! , protocol: enum () }匹配由协议名称或编号指定的特定 IP 协议。
src-addresssuper { ! , range: ipRange }匹配源地址等于指定 IP 或落在指定 IP 范围内的数据包。
dst-addresssuper { ! , range: ipRange }匹配目的地址等于指定 IP 或落在指定 IP 范围内的数据包。
fragmentsuper { fragment: bool }匹配分片数据包。第一个(起始)分片不计入。如果启用了连接跟踪,系统会自动重组每个数据包,因此不会出现分片。仅适用于 IPv4。
psdsuper { weight-threshold: num , [delay-threshold] ,time , [low-port-weight] ,num , [high-port-weight] ,num }尝试检测 TCP 和 UDP 扫描。参数采用以下格式:WeightThreshold, DelayThreshold, LowPortWeight, HighPortWeight。 - WeightThreshold - 来自同一主机、目的端口不同的最新 TCP/UDP 数据包总权重,达到该值即被视为端口扫描序列。 - DelayThreshold - 来自同一主机、目的端口不同的数据包被视为可能端口扫描子序列的延迟。 - LowPortWeight - 目的端口为特权端口(<1024)的数据包权重。 - HighPortWeight - 目的端口为非特权端口的数据包权重。仅适用于 IPv4。
ipv4-optionssuper { options: enum (strict-source-routing | loose-source-routing | no-source-routing | record-route | no-record-route | timestamp | no-timestamp | router-alert | no-router-alert | any | none) { strict-source-routing:0x1, loose-source-routing:0x2, no-source-routing:0x4, record-route:0x8, no-record-route:0x10, timestamp:0x20, no-timestamp:0x40, router-alert:0x80, no-router-alert:0x100, any:0x200, none:0x400 } }匹配 IPv4 头选项。 - any - 匹配至少包含一个 IPv4 选项的数据包。 - loose-source-routing - 匹配带有宽松源路由选项的数据包。 - no-record-route - 匹配不带记录路由选项的数据包。 - no-router-alert - 匹配不带路由器警告选项的数据包。 - no-source-routing - 匹配不带源路由选项的数据包。 - no-timestamp - 匹配不带时间戳选项的数据包。 - record-route - 匹配带有记录路由选项的数据包。 - router-alert - 匹配带有路由器警告选项的数据包。 - strict-source-routing - 匹配带有严格源路由选项的数据包。 - timestamp - 匹配带有时间戳的数据包。仅适用于 IPv4。
src-address-typesuper { ! , type: ubit (unicast, local, broadcast, multicast, blackhole) }匹配源地址类型: - unicast - 用于点对点传输的 IP 地址。 - local - 该地址分配给路由器的某个接口。 - broadcast - 数据包发送到子网中的所有设备。 - multicast - 数据包转发到定义的设备组。
dst-address-typesuper { ! , type: ubit (unicast, local, broadcast, multicast, blackhole) }匹配目的地址类型: - unicast - 用于点对点传输的 IP 地址。 - local - 目的地址分配给路由器的某个接口。 - broadcast - 数据包发送到子网中的所有设备。 - multicast - 数据包转发到定义的设备组。
src-address-listsuper { ! , address-list: enum }将数据包的源地址与用户定义的地址列表进行匹配。仅支持一个列表。
dst-address-listsuper { ! , address-list: enum }将数据包的目的地址与用户定义的地址列表进行匹配。仅支持一个列表。
hotspotmulti { array-id, array-id, flag: super { ! , flag: enum (from-client | auth | local-dst | to-client | http) { from-client:0, auth:1, local-dst:2, to-client:3, http:4 } } }将来自 HotSpot 客户端的数据包与各种 HotSpot 匹配器进行匹配。 - auth - 匹配已认证的 HotSpot 客户端数据包。 - from-client - 匹配来自 HotSpot 客户端的数据包。 - http - 匹配发送到 HotSpot 服务器的 HTTP 请求。 - local-dst - 匹配发往 HotSpot 服务器的数据包。 - to-client - 匹配发送到 HotSpot 客户端的数据包。仅适用于 IPv4。
address-listenum ()要使用的地址列表名称。适用于动作为 add-dst-to-address-list 或 add-src-to-address-list 的情况。
address-list-timeoutalt { address-list-timeout: enum (none-dynamic | none-static) { none-dynamic:0, none-static:0xffffffff } , address-list-timeout: time [ .. 21474836] }地址通过 add-src-to-address-list 或 add-dst-to-address-list 动作添加到 address-list 后,在列表中保留的时长。指定时间后,规则会添加一个动态条目(D),路由器在时间结束时将其移除;每次规则再次匹配都会将时间重置为完整值。最大值为 35w3d13h13m56s。如果地址已经是列表中的静态条目,则保持静态。 - none-dynamic (0s) - 添加不带超时的动态条目。它不会保存在配置中,重启后会清除。 - none-static - 添加静态条目。它会保存在配置和导出中,并在重启后保留,直到你将其移除。
ttlsuper { mode: enum (equal | not-equal | less-than | greater-than) { equal:0, not-equal:1, less-than:2, greater-than:3 } , [value] :num [0 .. 255] }匹配数据包的 TTL 值。仅适用于 IPv4。
connection-marksuper { ! , mark: enum }匹配由 mangle 功能标记了特定连接标记的数据包。如果设置了 no-mark,规则将匹配任何未标记的连接。
connection-typesuper { ! , type: enum (ftp | pptp | h323 | sip | irc | quake3 | tftp) { ftp:0, pptp:1, h323:2, sip:3, irc:4, quake3:5, tftp:6 } }根据连接跟踪助手的信息匹配来自相关连接的数据包。必须在 /ip/firewall/service-port 下启用相关的连接助手。
connection-bytessuper { from: num , [to] -num }仅当通过特定连接传输了给定字节数时才匹配数据包。0 表示不限,例如 connection-bytes=2000000-0 表示当相关连接传输超过 2MB 时规则匹配。
connection-ratesuper { ! , from: num , [to] -num }允许根据连接的当前速度捕获流量。
routing-marksuper { ! , mark: enum () }匹配由 mangle 功能标记了特定路由标记的数据包。
in-interfacesuper { ! , interface: iface_enum }数据包进入路由器时所经过的接口。
out-interfacesuper { ! , interface: iface_enum }数据包离开路由器时所经过的接口。
in-interface-listsuper { ! , interface-list: enum }在接口列表中定义的接口集合。作用与 in-interface 相同。
out-interface-listsuper { ! , interface-list: enum }在接口列表中定义的接口集合。作用与 out-interface 相同。
in-bridge-portsuper { ! , interface: iface_enum }当入接口为网桥时,数据包进入路由器实际经过的接口。仅在网桥设置中启用 use-ip-firewall 时有效。
out-bridge-portsuper { ! , interface: iface_enum }当出接口为网桥时,数据包离开路由器实际经过的接口。仅在网桥设置中启用 use-ip-firewall 时有效。
in-bridge-port-listsuper { ! , interface-list: enum }在接口列表中定义的接口集合。作用与 in-bridge-port 相同。
out-bridge-port-listsuper { ! , interface-list: enum }在接口列表中定义的接口集合。作用与 out-bridge-port 相同。
packet-marksuper { ! , mark: enum }匹配由 mangle 功能标记了特定数据包标记的数据包。如果设置了 no-mark,规则将匹配任何未标记的数据包。
src-portsuper { ! , port: multi { range: range [ .. 65535] } }源端口及源端口范围列表。仅当协议为 TCP 或 UDP 时适用。
dst-portsuper { ! , port: multi { range: range [ .. 65535] } }目的端口号或端口号范围列表。
portsuper { ! , port: multi { range: range [ .. 65535] } }当任一端口(源端口或目的端口)与指定的端口或端口范围列表匹配时匹配。仅当 protocol 为 TCP 或 UDP 时适用。
icmp-optionssuper { ! , type: num [0 .. 255] , [code] [ :range [ .. 255]] }匹配 ICMP 的 type:code 字段。
src-mac-addresssuper { ! , address: macAddr }匹配数据包的源 MAC 地址。
contentsuper { ! , content: string }匹配包含指定文本的数据包。
ingress-prioritysuper { ! , ingress-priority: num [0 .. 63] }匹配入站数据包的优先级。优先级可能来自 VLAN、WMM、DSCP 或 MPLS EXP 位。
prioritysuper { ! , priority: num [0 .. 63] }匹配设置新优先级后的数据包优先级。优先级可能来自 VLAN、WMM、DSCP、MPLS EXP 位,或来自通过 set-priority 动作设置的优先级。
dscpsuper { ! , dscp: num [0 .. 63] }匹配 DSCP IP 头字段。
tossuper { ! , tos: num [0 .. 255] , [mask] [ /num [0 .. 255]] }
limitsuper { ! , count: num [1 .. 32000000000] , [time] [ /time [1 .. ]] , [burst] ,num [ .. 2000000000] , [mode] [ :enum (packet | bit) { packet:0, bit:1 }] }匹配数据包,直到达到有限速率(数据包速率或比特速率)。带有此匹配器的规则会一直匹配,直到达到该限制。参数采用以下格式:rate[/time],burst:mode。 - rate - 每个时间间隔要匹配的数据包数或比特数。 - time - 指定数据包或比特速率不能超过的时间间隔(可选,未指定时使用 1s)。 - burst - 要匹配的初始数据包数或比特数:该数字每 10ms 重新增加,因此 burst 至少应为每秒速率值的 1/100。 - mode - 数据包或比特模式。
dst-limitsuper { count: num , [time] [ /time] , [burst] ,num , [mode] ,enum (dst-address | dst-address-and-port | src-address | src-and-dst-addresses | addresses-and-dst-port) { dst-address:1, dst-address-and-port:3, src-address:4, src-and-dst-addresses:5, addresses-and-dst-port:7 } , [expire] [ /time] }匹配数据包,直到超过给定速率。速率定义为每个时间间隔的数据包数。与 limit 匹配器不同,每个流都有自己的限制。流由 mode 参数定义。参数采用以下格式:rate[/time],burst,mode[/expire]。 - rate - 每个流每个时间间隔要匹配的数据包数。 - time - 指定每个流的数据包计数速率不能超过的时间间隔(可选,未指定时使用 1s)。 - burst - 每个流要匹配的初始数据包数:每经过一个 time/rate,该数字会重新增加一,直到达到此数量。 - mode - 指定哪些唯一字段定义流(src-address、dst-address、src-and-dst-address、dst-address-and-port、addresses-and-dst-port)。 - expire - 指定无数据包的流在多长时间后允许删除(可选)。
timesuper { ! , start: time [0 .. 86400] , [end] -time [0 .. 86400] , [day] ,ubit (sun, mon, tue, wed, thu, fri, sat) }根据数据包的到达时间和日期创建过滤器;对于本地生成的数据包,则使用离开时间和日期。该匹配器会考虑路由器上配置的时间和时区。
randomsuper { percent: num [1 .. 99] }以给定概率随机匹配数据包。
nthsuper { ! , every: num [1 .. ] , [packet] [ ,num [1 .. ]] }每隔第 n 个数据包进行匹配:nth=2,1 将匹配每 2 个数据包中的第 1 个,即匹配该规则命中的所有流量中的 50%。
tcp-msssuper { ! , min: num [0 .. 65535] , [max] -num [0 .. 65535] }匹配 IP 数据包的 TCP MSS 值。
per-connection-classifiersuper { ! , values-to-hash: enum (src-address | dst-address | both-addresses | src-port | src-address-and-port | dst-port | dst-address-and-port | both-ports | both-addresses-and-ports) { src-address:1, dst-address:2, both-addresses:3, src-port:4, src-address-and-port:5, dst-port:8, dst-address-and-port:10, both-ports:12, both-addresses-and-ports:15 } , [denominator] :num [1 .. ] , [remainder] /num [0 .. ] }PCC 匹配器允许将流量划分为相等的流,并能够将具有特定选项集合的数据包保留在同一个流中。
packet-sizesuper { ! , min: num [ .. 65535] , [max] -num [ .. 65535] }按字节匹配指定大小或大小范围的数据包。
logbool向系统日志添加一条消息,包含以下数据:in-interface、out-interface、src-mac、protocol、src-ip:port->dst-ip:port 以及数据包长度。即使动作不是 log 也允许记录数据包,便于防火墙调试。
log-prefixstring在每条日志消息开头添加指定文本。适用于配置了 action=log 或 log=yes 的情况。
ipsec-policysuper { direction: enum (in | out) { in:0, out:1 } , [policy] ,enum (none | ipsec) { none:0, ipsec:1 } }匹配 IPsec 使用的策略。值的格式为:direction, policy。 - in - 在 PREROUTING、INPUT 和 FORWARD 链中有效。 - out - 在 POSTROUTING、OUTPUT 和 FORWARD 链中有效。 - ipsec - 如果数据包需要经过 IPsec 处理则匹配。 - none - 匹配不经过 IPsec 处理的数据包。