Traitement de classifier les légendes de manière asynchrone
Un pilote de légende PAM peut autoriser ou refuser une opération réseau, ou admettre ou ignorer un paquet réseau, en retournant les types d’actions FWP_ACTION_PERMIT, FWP_ACTION_CONTINUE ou FWP_ACTION_BLOCK à partir de la fonction de légende classifyFn . Souvent, un pilote de légende ne peut pas retourner une décision d’inspection à partir de sa fonction classifyFn tant que les informations indiquées, telles que les champs classifiables, les métadonnées ou les paquets, ne peuvent pas être transférées pour traitement à un autre composant, tel qu’une application en mode utilisateur. Dans ce cas, une décision peut être prise ultérieurement de façon asynchrone.
Règles générales pour le traitement asynchrone
PAM prend en charge le traitement asynchrone de la fonction de légende classifyFn . Toutefois, le mécanisme pour effectuer cette opération diffère selon les différentes couches.
Classification ALE asynchrone
Un pilote de légende doit appeler la fonction FwpsPendOperation0 à partir de classifyFn. L’opération asynchrone doit être effectuée avec un appel à la fonction FwpsCompleteOperation0 .
Classification asynchrone des paquets
Un pilote de légende doit retourner FWP_ACTION_BLOCK de la fonction classifyFn , avec l’indicateur FWPS_CLASSIFY_OUT_FLAG_ABSORB défini. Les paquets réseau doivent être référencés ou cloné. L’opération asynchrone est effectuée en réinjectant le paquet cloné ou modifié ou en ignorant le paquet en mode silencieux.
Classification ALE asynchrone qui inclut des paquets
Une combinaison des deux procédures précédentes est utilisée : l’opération de classification est suspendu et le paquet est référencé ou cloné, puis, à un moment donné, l’appel à classifyFn est terminé et le paquet cloné est réinjecté ou ignoré.
Cas spéciaux et considérations
ALE Connect et couches réception/acceptation
Lorsque FwpsCompleteOperation0 est appelé pour effectuer une opération de classification avec pendaison au niveau d’une couche de connexion ALE (FWPS_LAYER_ALE_AUTH_CONNECT_V4 ou FWPS_LAYER_ALE_AUTH_CONNECT_V6), une opération de classification de réautorisation ALE est déclenchée au niveau de la couche de connexion ALE correspondante. Le pilote de légende doit retourner une décision d’inspection à partir de cette opération de classification de réautorisation. Vous pouvez détecter une opération de classification de la réauthentification ALE en vérifiant si l’indicateur FWP_CONDITION_FLAG_IS_REAUTHORIZE est défini.
Le pilote de légende doit conserver un état unique pour chaque opération de classification ALE_AUTH_CONNECT suspendu de telle sorte que la décision d’inspection pour chaque opération de classification puisse être recherchée lors d’une réautorisation déclenchée par FwpsCompleteOperation0. Si des paquets sont référencés ou clonés pendant une opération de classification ALE_AUTH_CONNECT suspendu (par exemple, pour les connexions non TCP), ils peuvent être réinjectés après la réauthentification.
Lorsque FwpsCompleteOperation0 est appelé pendant avec une opération de classification au niveau d’une couche réception/acceptation ALE (FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4 ou FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6), FwpsCompleteOperation0 ne déclenche pas de réautorisation ALE. Au lieu de cela, un nouvel appel à classifierFn est effectué à nouveau lorsque le paquet cloné est réinjecté entrant si la modification n’était pas suffisamment importante pour contourner le filtre. Autoriser le clone auto-injecté à partir de la couche ALE_RECV_ACCEPT autorise efficacement la connexion entrante. Si la connexion entrante ne doit pas être autorisée, ignorez le paquet entrant après avoir appelé FwpsCompleteOperation0.
Réautorisation ALE
Un pilote de légende peut être reclassé au niveau d’une couche de connexion ale ou de réception/acceptation pour des événements tels qu’une modification de stratégie (par exemple, l’ajout ou la suppression d’un filtre au niveau de la couche), la détection d’une nouvelle interface d’arrivée et la nouvelle clé d’une connexion à l’aide d’IPsec. Une telle réautorisation ne peut pas être bloquée en appelant FwpsCompleteOperation0, et il n’est pas nécessaire de le faire. Un pilote de légende doit utiliser les règles répertoriées précédemment pour traiter les paquets indiqués lors de la réautorisation.
N’oubliez pas que les paquets entrants et sortants peuvent être réautorisé au niveau des couches ALE_AUTH_CONNECT ou ALE_RECV_ACCEPT. Par exemple, un paquet entrant peut être réautorisé au niveau de la couche ALE_AUTH_CONNECT. Un pilote de légende ne doit pas supposer que la direction du paquet est la même que celle de la connexion.
couches ALE_FLOW_ESTABLISHED
Le traitement asynchrone n’est pas pris en charge au niveau de ces couches (FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4 ou FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6).
couches INBOUND_TRANSPORT
Un pilote de légende ne doit pas effectuer de traitement asynchrone des paquets qui nécessitent un traitement de classification ALE au niveau d’une couche de transport entrante (entrante ) (FWPS_LAYER_INBOUND_TRANSPORT_V4 ou FWPS_LAYER_INBOUND_TRANSPORT_V6). Cela peut interférer avec la création de flux. Lorsque PAM appelle la fonction de légende classifyFn au niveau d’une couche de transport entrante, il définit l’indicateur FWPS_METADATA_FIELD_ALE_CLASSIFY_REQUIRED pour les paquets qui nécessitent un traitement de classification ALE. Un pilote de légende doit autoriser ces paquets à partir d’une couche INBOUND_TRANSPORT et doit différer leur traitement jusqu’à ce qu’ils atteignent une couche ALE_RECV_ACCEPT.
Couches STREAM
Au niveau d’une couche de flux (FWPS_LAYER_STREAM_V4 ou FWPS_LAYER_STREAM_V6), les segments de données TCP sont indiqués au lieu d’un en-tête IP ou TCP. La couche de flux est également l’endroit où une chaîne de listes de mémoires tampons nettes peut être indiquée dans un appel à la fonction de légende classifyFn . PAM met à disposition des fonctions de clonage et d’injection spécialisées, FwpsCloneStreamData0 et FwpsStreamInjectAsync0, pour les légendes de la couche de flux à utiliser.
En raison de la nature de remise ordonnée des données de la couche de flux, un pilote de légende doit continuer à cloner et à absorber des données tant que les données de flux sont toujours en attente. La combinaison d’opérations asynchrones et synchrones pour un flux de flux donné peut entraîner un comportement non défini.