ADC

MQTT-Unterstützung für Responder

Die Responder-Funktion unterstützt das MQTT-Protokoll. Sie können Responder-Richtlinien so konfigurieren, dass sie eine Aktion basierend auf den Parametern in der eingehenden MQTT-Nachricht ausführen.

Die Aktion reagiert mit einem der folgenden Punkte auf eine neue Verbindung:

  • DROP
  • RESET
  • NOOP
  • Eine Responder-Aktion, um eine neue MQTT CONNACK-Antwort einzuleiten.

Konfigurieren von Responder-Richtlinien für MQTT

Nachdem Sie die Responder-Funktion aktiviert haben, müssen Sie eine oder mehrere Aktionen für die Bearbeitung von MQTT-Anfragen konfigurieren. Konfigurieren Sie dann eine Responder-Richtlinie. Sie können die Responder-Richtlinien global oder an einen bestimmten virtuellen Lastausgleichsserver oder virtuellen Content Switching-Server binden.

Die folgenden Bindepunkte stehen zur Verfügung, um die Responder-Richtlinien global zu binden:

  • MQTT_REQ_DEFAULT
  • MQTT_REQ_OVERRIDE
  • MQTT_JUMBO_REQ_DEFAULT
  • MQTT_JUMBO_REQ_OVERRIDE

Die folgenden Bindepunkte sind verfügbar, um die Responder-Richtlinien an einen virtuellen Content Switching- oder Lastenausgleichsserver zu binden:

  • REQUEST
  • MQTT_JUMBO_REQ (dieser Bindepunkt wird nur für Jumbo-Pakete verwendet)

So konfigurieren Sie den Responder so, dass er mit CLI auf eine MQTT-Anfrage antwortet

Geben Sie an der Eingabeaufforderung die folgenden Befehle ein:

Konfigurieren Sie eine Responder-Aktion.

add responder action <actName> <actType>
<!--NeedCopy-->
  • Ersetzen Sie actname durch einen Namen für Ihre neue Aktion. Der Name kann 1—127 Zeichen lang sein und kann Buchstaben, Zahlen, Bindestriche (-) und Unterstriche (_) enthalten.
  • Ersetzen Sie für actTypeeinen Responder-Aktionstyp respondwith.

Beispiel:

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

Konfigurieren Sie eine Responderrichtlinie. Die Citrix ADC Appliance reagiert auf die MQTT-Anforderungen, die in dieser Responder-Richtlinie ausgewählt werden.

add responder policy <polName> <rule> <actname>
<!--NeedCopy-->
  • Ersetzen Sie polname durch einen Namen für Ihre neue Richtlinie.
  • Ersetzen Sie für actnameden Namen der Aktion, die Sie erstellt haben.

Beispiel:

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

Binden Sie die Responder-Richtlinie an einen bestimmten virtuellen Lastausgleichsserver oder virtuellen Content Switching-Server. Die Richtlinie gilt nur für die MQTT-Anfragen, deren Ziel-IP-Adresse der VIP dieses virtuellen Servers ist.

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

bind cs vserver <name> -policyName <policy_name> -priority <priority>
<!--NeedCopy-->
  • Ersetzen Sie für policy_nameden Namen der Richtlinie, die Sie erstellt haben.
  • Geben Sie für priority die Priorität der Richtlinie an.

Beispiel:

bind lb vserver lb1 -policyName reject_lower_version -priority 50

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

Anwendungsfall1: Filtern Sie Clients basierend auf dem Benutzernamen oder der Client-ID

Der Administrator kann eine MQTT-Responder-Richtlinie konfigurieren, um die Verbindung basierend auf dem Benutzernamen oder der Client-ID in der MQTT CONNECT-Nachricht abzulehnen.

Beispielkonfiguration zum Filtern von Clients basierend auf der Client-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-->

Verwenden Sie case2: Begrenzen Sie die maximale Nachrichtenlänge von MQTT-Nachrichten, um Jumbo-Pakete zu verarbeiten

Der Administrator kann eine MQTT-Responder-Richtlinie konfigurieren, um die Clientverbindung zu löschen, wenn die Länge der Nachricht einen bestimmten Schwellenwert überschreitet, oder die erforderlichen Maßnahmen basierend auf der Anforderung ergreifen.

Um Jumbo-Pakete zu behandeln, sind die Responder-Richtlinien mit einem der folgenden Regelmuster an den Jumbo-Bind-Punkt gebunden:

  • MQTT.MESSAGE_LENGTH
  • MQTT.COMMAND
  • MQTT.FROM_CLIENT
  • MQTT.FROM_SERVER

Richtlinien, die an Jumbo-Bindepunkte gebunden sind, werden nur für Jumbo-Pakete ausgewertet.

Beispielkonfiguration zur Begrenzung der maximalen Nachrichtenlänge von MQTT-Nachrichten

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-->

In diesem Beispiel ist der dropmqttjumbomessage Parameter auf NO festgelegt. Daher verarbeitet die ADC-Appliance die Nachrichten mit einer Länge von mehr als 64.000 Byte und weniger als 1.00.000 Byte. Die Nachrichten mit einer Länge von mehr als 1.00.000 Bytes werden zurückgesetzt.