ADC

MQTT 对响应程序的支持

响应程序功能支持 MQTT 协议。您可以配置响应程序策略,以根据传入的 MQTT 消息中的参数执行操作。

该操作会对新连接进行以下任何一项响应:

  • DROP
  • RESET
  • 努普
  • 响应者启动新的 MQTT CONNACK 响应的行动。

为 MQTT 配置响应程序策略

启用响应程序功能后,您必须配置一个或多个操作来处理 MQTT 请求。然后,配置响应程序策略。您可以将响应程序策略全局绑定,也可以绑定到特定负载平衡虚拟服务器或内容交换虚拟服务器。

以下绑定点可用于全局绑定响应程序策略:

  • MQTT_REQ_DEFAULT
  • MQTT_REQ_OVERRIDE
  • MQTT_JUMBO_REQ_DEFAULT
  • MQTT_JUMBO_REQ_OVERRIDE

以下绑定点可用于将响应程序策略绑定到内容交换或负载平衡虚拟服务器:

  • 请求
  • MQTT_JUMBO_REQ(此绑定点仅用于巨型数据包)

使用 CLI 配置响应程序以响应 MQTT 请求

在命令提示符下,键入以下命令:

配置响应程序操作。

add responder action <actName> <actType>
<!--NeedCopy-->
  • 对于 actname,替换新操作的名称。名称的长度可以是 1-127 个字符,可以包含字母、数字、连字符 (-) 和下划线 (_) 符号。
  • 对于 actType,将响应者操作类型替换为响应者操作类型。

示例:

add responder action mqtt_connack_unsup_ver respondwith MQTT.NEW_CONNACK(132)
<!--NeedCopy-->

配置响应程序策略。Citrix ADC 设备会响应此响应程序策略选择的 MQTT 请求。

add responder policy <polName> <rule> <actname>
<!--NeedCopy-->
  • 对于 polname,请替换新策略的名称。
  • 对于 actname,替换您创建的操作的名称。

示例:

add responder policy reject_lower_version "MQTT.HEADER.COMMAND.EQ(CONNECT) && MQTT.VERSION.LT(3)" mqtt_connack_unsup_ver
<!--NeedCopy-->

将响应程序策略绑定到特定负载平衡虚拟服务器或内容交换虚拟服务器。该策略仅适用于目标 IP 地址为该虚拟服务器的 VIP 的 MQTT 请求。

bind lb vserver <name> -policyName <policy_name> -priority <priority>

bind cs vserver <name> -policyName <policy_name> -priority <priority>
<!--NeedCopy-->
  • 对于 policy_name,替换已创建的策略的名称。
  • 对于priority,指定策略的优先级。

示例:

bind lb vserver lb1 -policyName reject_lower_version -priority 50

bind cs vserver mqtt_frontend_cs -policyName reject_lower_version -priority 5
<!--NeedCopy-->

使用案例 1:根据用户名或客户端 ID 筛选客户端

管理员可以配置 MQTT 响应程序策略,根据 MQTT CONNECT 消息中的用户名或客户端 ID 拒绝连接。

根据客户端 ID 筛选客户端的示例配置

add policy patset filter_clients
bind policy patset filter_clients client1

add responder action mqtt_connack_invalid_client respondwith MQTT.NEW_CONNACK(2)

add responder policy reject_clients "MQTT.HEADER.COMMAND.EQ(CONNECT) && mqtt.connect.clientid.equals_any("filter_clients")" mqtt_connack_invalid_client

bind cs vserver mqtt_frontend_cs -policyName reject_clients -priority 5
<!--NeedCopy-->

使用 case2:限制 MQTT 消息的最大消息长度以处理巨型数据包

管理员可以配置 MQTT 响应程序策略,以便在消息长度超过特定阈值时断开客户端连接,或者根据要求采取必要措施。

为了处理巨型数据包,具有以下任何规则模式的响应程序策略将绑定到巨型绑定点:

  • MQTT.ESSAGE_LENGTH
  • MQTT.命令
  • MQTT.FROM_CLIENT
  • MQTT.FROM_SERVER

绑定到巨型绑定点的策略仅针对巨型数据包进行评估。

限制 MQTT 消息的最大消息长度的配置示例

set lb parameter -dropmqttjumbomessage no

add responder policy drop_large_message MQTT.MESSAGE_LENGTH.GT(100000) reset

bind cs vserver mqtt_frontend_cs -policyName drop_large_message -priority 10
<!--NeedCopy-->

在此示例中, dropmqttjumbomessage 参数设置为 NO。因此,ADC 设备处理长度大于 64,000 字节且小于 1,00,000 字节的消息。长度超过 1,00,000 字节的消息将被重置。

MQTT 对响应程序的支持