Asynchrones Klassifizieren von Legenden
Ein WFP-Legendentreiber kann einen Netzwerkvorgang autorisieren oder verweigern oder ein Netzwerkpaket zulassen oder verwerfen, indem er die Aktionstypen FWP_ACTION_PERMIT, FWP_ACTION_CONTINUE oder FWP_ACTION_BLOCK der Legendenfunktion klassifizierenFn zurückgibt. Häufig kann ein Legendentreiber keine Überprüfungsentscheidung aus seiner klassifizierenFn-Funktion zurückgeben, bis die angegebenen Informationen, z. B. klassifizierbare Felder, Metadaten oder Pakete, zur Verarbeitung an eine andere Komponente, z. B. eine Benutzermodusanwendung, weitergeleitet werden können. In diesen Fällen muss eine Entscheidung möglicherweise zu einem späteren Zeitpunkt asynchron getroffen werden.
Allgemeine Regeln für die asynchrone Verarbeitung
WFP unterstützt die asynchrone Verarbeitung der Beschriftungsfunktion klassifizierenFn . Der Mechanismus dafür unterscheidet sich jedoch je nach den verschiedenen Schichten.
Asynchrone ALE-Klassifizierung
Ein Legendentreiber muss die FwpsPendOperation0-Funktion von klassifizierenFn aufrufen. Der asynchrone Vorgang muss mit einem Aufruf der Funktion FwpsCompleteOperation0 abgeschlossen werden.
Asynchrone Paketklassifizierung
Ein Legendentreiber sollte FWP_ACTION_BLOCK aus der klassifizierenFn-Funktion zurückgeben, wobei das FWPS_CLASSIFY_OUT_FLAG_ABSORB-Flag festgelegt ist. Netzwerkpakete müssen referenziert oder geklont werden. Der asynchrone Vorgang wird entweder durch erneutes Auswerfen des geklonten oder geänderten Pakets oder durch automatisches Verwerfen des Pakets abgeschlossen.
Asynchrone ALE-Klassifizierung mit Paketen
Es wird eine Kombination der beiden vorherigen Prozeduren verwendet: Der Klassifizierungsvorgang wird geschrieben und auf das Paket wird verwiesen oder geklont, und irgendwann wird der Aufruf von klassifizierenFn abgeschlossen, und das geklonte Paket wird erneut ausgeworfen oder verworfen.
Sonderfälle und Überlegungen
ALE Connect im Vergleich zu Empfangs-/Annahmeebenen
Wenn FwpsCompleteOperation0 aufgerufen wird, um einen pended klassifizierenden Vorgang auf einer ALE-Verbindungsschicht (FWPS_LAYER_ALE_AUTH_CONNECT_V4 oder FWPS_LAYER_ALE_AUTH_CONNECT_V6) abzuschließen, wird auf der jeweiligen ALE-Verbindungsschicht ein ALE-Vorgang zur Erneutauthorisierungsklassifizierung ausgelöst. Der Legendentreiber sollte eine Überprüfungsentscheidung aus diesem Vorgang zur Klassifizierung der erneuten Autorisierung zurückgeben. Sie können einen ALE-Reauthorisierungsklassifizierungsvorgang erkennen, indem Sie überprüfen, ob das flag FWP_CONDITION_FLAG_IS_REAUTHORIZE festgelegt ist.
Der Legendentreiber muss für jeden geschriebenen ALE_AUTH_CONNECT Klassifizierungsvorgang einen eindeutigen Zustand beibehalten, sodass die Überprüfungsentscheidung für jeden Klassifizierungsvorgang während einer durch FwpsCompleteOperation0 ausgelösten erneuten Authentifizierung nachschlagen kann. Wenn während eines Schreibvorgangs ALE_AUTH_CONNECT Klassifizierung auf Pakete verwiesen oder geklont werden (z. B. für Nicht-TCP-Verbindungen), können sie nach der erneuten Autorisierung erneut ausgeworfen werden.
Wenn FwpsCompleteOperation0 während mit einem Klassifizierungsvorgang auf einer ALE-Empfangs-/Annahmeebene (FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4 oder FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6) aufgerufen wird, löst FwpsCompleteOperation0 keine ALE-Neuautorisierung aus. Stattdessen wird erneut ein neuer Aufruf von klassifizierenFn ausgeführt, wenn das geklonte Paket erneut gesendet wird, wenn die Änderung nicht signifikant genug war, um den Filter zu umgehen. Das Zulassen des selbstinjizierten Klons von der ALE_RECV_ACCEPT-Schicht autorisiert effektiv die eingehende Verbindung. Wenn die eingehende Verbindung nicht zugelassen werden soll, verwerfen Sie das eingehende Paket, nachdem fwpsCompleteOperation0 aufgerufen wurde.
ALE-Neuauthorisierung
Ein Legendentreiber kann bei einer ALE-Verbindungs- oder Empfangs-/Annahmeebene für Ereignisse wie eine Richtlinienänderung (z. B. das Hinzufügen oder Entfernen eines Filters auf der Ebene), das Erkennen einer neuen Ankunftsschnittstelle und das erneute Schlüsseln einer Verbindung mithilfe von IPsec neu klassifiziert werden. Eine solche erneute Autorisierung kann nicht durch Aufrufen von FwpsCompleteOperation0 erstellt werden, und dies ist nicht erforderlich. Ein Legendentreiber sollte die zuvor aufgeführten Regeln verwenden, um Pakete zu verarbeiten, die während der erneuten Autorisierung angegeben werden.
Beachten Sie, dass sowohl ein- als auch ausgehende Pakete auf ALE_AUTH_CONNECT- oder ALE_RECV_ACCEPT-Ebenen neu authentifiziert werden können. Beispielsweise kann ein eingehendes Paket auf der ALE_AUTH_CONNECT Ebene neu authentifiziert werden. Ein Legendentreiber darf nicht davon ausgehen, dass die Richtung des Pakets mit der Richtung der Verbindung identisch ist.
ALE_FLOW_ESTABLISHED Ebenen
Die asynchrone Verarbeitung wird auf diesen Ebenen (FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4 oder FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6) nicht unterstützt.
INBOUND_TRANSPORT Ebenen
Ein Legendentreiber darf keine asynchrone Verarbeitung von Paketen durchführen, die ALE-Klassifikationsverarbeitung auf einer eingehenden (eingehenden) Transportschicht (FWPS_LAYER_INBOUND_TRANSPORT_V4 oder FWPS_LAYER_INBOUND_TRANSPORT_V6) erfordern. Dies kann die Flusserstellung beeinträchtigen. Wenn WFP die Beschriftungsfunktion klassifizierenFn auf einer eingehenden Transportschicht aufruft, legt er das FWPS_METADATA_FIELD_ALE_CLASSIFY_REQUIRED Flag für die Pakete fest, die ALE-Klassifizierungsverarbeitung erfordern. Ein Legendentreiber sollte solche Pakete von einer INBOUND_TRANSPORT-Schicht zulassen und die Verarbeitung zurückstellen, bis sie eine ALE_RECV_ACCEPT Ebene erreichen.
STREAM-Ebenen
Auf einer Streamebene (FWPS_LAYER_STREAM_V4 oder FWPS_LAYER_STREAM_V6) werden TCP-Datensegmente anstelle eines IP- oder TCP-Headers angegeben. Auf der Streamebene kann auch eine Kette von Nettopufferlisten in einem Aufruf der Calloutfunktion klassifizierenFn angegeben werden. WFP stellt spezielle Klon- und Einschleusfunktionen, FwpsCloneStreamData0 und FwpsStreamInjectAsync0, für die Verwendung von Streamebenen-Legenden zur Verfügung.
Aufgrund der geordneten Übermittlungsart von Daten auf Streamebene muss ein Beschriftungstreiber weiterhin Daten klonen und absorbieren, solange Datenstromdaten noch ausstehen. Das Mischen asynchroner und synchroner Vorgänge für einen bestimmten Datenstromfluss kann zu einem nicht definierten Verhalten führen.