VLAN 关键词 ============= .. role:: example-rule-action .. role:: example-rule-header .. role:: example-rule-options .. role:: example-rule-emphasis vlan.id ------- Suricata 提供 ``vlan.id`` 关键词,可用于在签名中基于虚拟局域网ID(VLAN ID)识别和过滤网络数据包。默认情况下,若数据包包含多层VLAN标签,该关键词会匹配所有层级。但如果指定了特定层级,则仅匹配该层级。 语法:: vlan.id: [op]id[,layer]; 可通过精确匹配或 ``op`` 运算符比较ID值:: vlan.id:300 # 精确匹配300 vlan.id:<300,0 # 第0层小于300 vlan.id:>=200,1 # 第1层大于等于200 vlan.id 使用 :ref:`16位无符号整型 `。 有效VLAN ID范围为 ``0 - 4095``。 该关键词的 ``layer`` 参数支持 ``all`` 和 ``any`` 值。``all`` 要求所有VLAN层都匹配,``any`` 则任意层匹配即可。 .. table:: **vlan.id关键词的层级取值说明** =============== ================================================ 取值 描述 =============== ================================================ [默认] 匹配任意层级 0 - 2 匹配指定层级 ``-3`` - ``-1`` 从后向前索引匹配指定层级 all 仅当所有层级都匹配时生效 any 任意层级匹配即生效 =============== ================================================ 以下示意图展示vlan.id的索引机制:: [以太网头] [VLAN标签666 (索引0或-2)] [VLAN标签123 (索引1或-1)] [IPv4头] [UDP头] 示例 ^^^^^^^^ 匹配任意层级VLAN ID等于300的规则: .. container:: example-rule alert ip any any -> any any (msg:"VLAN ID等于300"; :example-rule-emphasis:`vlan.id:300;` sid:1;) 匹配第1层VLAN ID等于300的规则: .. container:: example-rule alert ip any any -> any any (msg:"第1层VLAN ID等于300"; :example-rule-emphasis:`vlan.id:300,1;` sid:1;) 匹配最内层VLAN ID等于400的规则: .. container:: example-rule alert ip any any -> any any (msg:"最内层VLAN ID等于400"; :example-rule-emphasis:`vlan.id:400,-1;` sid:1;) 要求所有VLAN ID都大于100的规则: .. container:: example-rule alert ip any any -> any any (msg:"所有VLAN ID均大于100"; :example-rule-emphasis:`vlan.id:>100,all;` sid:1;) 可通过 ``prefilter`` 关键词将vlan.id内容设为快速匹配模式,如下例所示。 .. container:: example-rule alert ip any any -> any any (msg:"第1层VLAN ID等于200"; :example-rule-emphasis:`vlan.id:200,1; prefilter;` sid:1;) vlan.layers ----------- 基于VLAN标签层数进行匹配。 语法:: vlan.layers: [op]number; 支持精确匹配或运算符比较:: vlan.layers:3 # 精确匹配3层 vlan.layers:<3 # 少于3层 vlan.layers:>=2 # 大于等于2层 vlan.layers 使用 :ref:`8位无符号整型 `。 有效取值范围为 ``0`` 至 ``3``。 示例 ^^^^^^^^ 匹配不含VLAN标签的规则: .. container:: example-rule alert ip any any -> any any (msg:"数据包不含VLAN标签"; :example-rule-emphasis:`vlan.layers:0;` sid:1;) 匹配VLAN标签多于1层的规则: .. container:: example-rule alert ip any any -> any any (msg:"数据包含多层VLAN标签"; :example-rule-emphasis:`vlan.layers:>1;` sid:1;) 可通过 ``prefilter`` 关键词将vlan.layers内容设为快速匹配模式,如下例所示。 .. container:: example-rule alert ip any any -> any any (msg:"数据包含双层VLAN标签"; :example-rule-emphasis:`vlan.layers:2; prefilter;` sid:1;)