Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Warstwy kompatybilne z IPsec
Aby zapewnić pełną zgodność z implementacją protokołu IPsec systemu Windows rozpoczynającą się od systemów Windows Vista i Windows Server 2008, należy zarejestrować sterownik wywołań w jednej z następujących warstw filtrowania wykonywanego czasu:
filtrowanie pakietów TCP
Warstwy strumienia:
FWPS_LAYER_STREAM_V4
FWPS_LAYER_STREAM_V6
Filtrowanie pakietów ICMP, które nie są TCP i nie zawierają błędów
warstwy Datagram-Data:
FWPS_LAYER_DATAGRAM_DATA_V4
FWPS_LAYER_DATAGRAM_DATA_V6
FWPS_LAYER_DATAGRAM_DATA_V4_ODRZUCENIE
FWPS_LAYER_DATAGRAM_DATA_V6_DISCARD
Z wyjątkiem przypadku, gdy pakiety przychodzące muszą zostać odtworzone przed ich wstrzyknięciem do warstwy danych datagramu, sterowniki wywołań zarejestrowane w tych warstwach danych są zgodne z protokołem IPsec.
Warstwy niezgodne z protokołem IPsec
Warstwy sieciowe i przekazywania są niezgodne z protokołem IPsec, ponieważ na tych warstwach ruch IPsec nie został jeszcze odszyfrowany ani zweryfikowany. Zasady protokołu IPsec są wymuszane w warstwie transportu, która występuje po operacji klasyfikowania warstwy sieciowej.
Następujące warstwy filtrowania w czasie wykonywania są niezgodne z protokołem IPsec, ponieważ przetwarzanie protokołu IPsec w systemie Windows występuje poniżej następujących warstw:
FWPS_LAYER_INBOUND_IPPACKET_V4
FWPS_LAYER_INBOUND_IPPACKET_V6
FWPS_LAYER_INBOUND_IPPACKET_V4_DISCARD
Warstwa_Odwrócona_IP_Pakiet_W_V6_Odrzuć
FWPS_LAYER_OUTBOUND_IPPACKET_V4
FWPS_LAYER_OUTBOUND_IPPACKET_V6
FWPS_LAYER_OUTBOUND_IPPACKET_V4_DISCARD
FWPS_LAYER_OUTBOUND_IPPACKET_V6_DISCARD
Specjalne zagadnienia dotyczące warstw transportu
Aby utworzyć sterownik wywołań zwrotnych zarejestrowany w warstwie transportowej (FWPS_LAYER_XXX_TRANSPORT_V4 lub _V6) zgodny z protokołem IPsec, postępuj zgodnie z następującymi wytycznymi:
Zarejestruj zgłoszenie w warstwach autoryzacyjnych odbioru/akceptacji ALE (FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4 lub FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6) oraz w warstwach transportowych (FWPS_LAYER_XXX_TRANSPORT_V4 lub _V6).
Aby zapobiec ingerencji w wewnętrzne przetwarzanie IPsec systemu Windows, zarejestruj objaśnienie w podwarstwowej warstwie, która ma niższą wagę niż FWPM_SUBLAYER_UNIVERSAL. Użyj funkcji FwpmSubLayerEnum0, aby znaleźć wagę nakładki podrzędnej. Aby uzyskać informacje na temat tej funkcji, zobacz dokumentację Platforma filtrowania systemu Windows w zestawie Microsoft Windows SDK.
Przychodzący pakiet danych, który wymaga klasyfikacji ALE, musi być sprawdzany na warstwach autoryzacji odbioru/akceptacji ALE (FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4 lub FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6). Taki pakiet musi być dozwolony na przychodzących warstwach transportowych. Począwszy od systemu Windows Vista z dodatkiem Service Pack 1 (SP1) i Windows Server 2008, użyj flagi metadanych FWPS_METADATA_FIELD_ALE_CLASSIFY_REQUIRED, aby określić, czy pakiet przychodzący będzie wskazywany do warstw filtrowania FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4 i FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6. Ta flaga metadanych zastępuje flagę warunku FWP_CONDITION_FLAG_REQUIRES_ALE_CLASSIFY używaną w systemie Windows Vista.
Aby zapobiec ingerencji w wewnętrzne przetwarzanie IPsec systemu Windows, nie przechwytuj ruchu IPsec w trybie tunelu na warstwach transportowych, jeśli ruch ten nie został jeszcze odtunelowany. Poniższy przykład kodu pokazuje, jak pominąć takie pakiety.
FWPS_PACKET_LIST_INFORMATION0 packetInfo = {0}; FwpsGetPacketListSecurityInformation0( layerData, FWPS_PACKET_LIST_INFORMATION_QUERY_IPSEC | FWPS_PACKET_LIST_INFORMATION_QUERY_INBOUND, &packetInfo ); if (packetInfo.ipsecInformation.inbound.isTunnelMode && !packetInfo.ipsecInformation.inbound.isDeTunneled) { classifyOut->actionType = FWP_ACTION_PERMIT; goto Exit; }Po odszyfrowaniu i zweryfikowaniu pakietu chronionego przez protokół IPsec w warstwie transportu nagłówek AH/ESP pozostaje w nagłówku adresu IP. Jeśli taki pakiet musi zostać ponownie przywrócony do stosu TCP/IP, należy ponownie skompilować nagłówek IP, aby usunąć nagłówek AH/ESP. Począwszy od systemu Windows Vista z dodatkiem SP1 i Windows Server 2008, można to zrobić, klonując pakiet i wywołując FwpsConstructIpHeaderForTransportPacket0 funkcji, która ma headerIncludeHeaderSize ustawiony na rozmiar nagłówka IP sklonowanego pakietu.
W warstwie odbierania/akceptowania ALE, wywołanie może wykryć ruch chroniony przez protokół IPsec, sprawdzając, czy flaga FWP_CONDITION_FLAG_IS_IPSEC_SECURED jest ustawiona. W warstwach transportu wywołanie może wykrywać ruch chroniony przez IPsec poprzez wywołanie funkcji FwpsGetPacketListSecurityInformation0 i sprawdzenie, czy flaga FWPS_PACKET_LIST_INFORMATION0 jest ustawiona w parametrze queryFlags.
Praca z pakietami ESP w protokole IPsec
Gdy silnik wskazuje odszyfrowane kapsułkowane pakiety ładunku zabezpieczeń (ESP), obcina je, aby usunąć końcowe dane ESP. Ze względu na sposób, w jaki aparat obsługuje takie pakiety, dane MDL w strukturze NET_BUFFER nie odzwierciedlają prawidłowej długości pakietu. Prawidłową długość można uzyskać przy użyciu makra NET_BUFFER_DATA_LENGTH w celu pobrania długości danych struktury NET_BUFFER.