Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Camadas compatíveis com IPsec
Para ser totalmente compatível com a implementação do Windows do IPsec que começa com o Windows Vista e o Windows Server 2008, um driver de callout deve ser registado numa das seguintes camadas de filtragem em tempo de execução:
Filtragem de Pacotes TCP
Camadas de fluxo:
FWPS_LAYER_STREAM_V4
FWPS_LAYER_STREAM_V6
Filtragem de pacotes ICMP não TCP e sem erro
Datagram-Data camadas:
FWPS_LAYER_DATAGRAM_DATA_V4
FWPS_LAYER_DATAGRAM_DATA_V6
FWPS_CAMADA_DADOS_GRAMA_DATAGRAMAS_V4_DESCARTAR
FWPS_LAYER_DATAGRAM_DATA_V6_DISCARD
Exceto no caso em que os pacotes de entrada devem ser reconstruídos antes de serem injetados a partir de uma camada de dados de datagrama, os drivers de chamada registrados nessas camadas de dados são compatíveis com o IPsec.
As camadas que são incompatíveis com IPsec
As camadas de rede e encaminhamento são incompatíveis com o IPsec porque nessas camadas o tráfego IPsec ainda não foi descriptografado ou verificado. As diretivas IPsec são impostas na camada de transporte, o que ocorre após uma operação de classificação de camada de rede.
As seguintes camadas de filtragem em tempo de execução são incompatíveis com o IPsec porque o processamento de IPsec no Windows ocorre abaixo das seguintes camadas:
FWPS_LAYER_INBOUND_IPPACKET_V4
FWPS_LAYER_INBOUND_IPPACKET_V6
FWPS_CAMADA_DESCARTE_PACOTE_IP_V4_ENTRADA
CAMADA_FWPS_PACOTE_IP_ENTRADA_V6_DESCARTAR
FWPS_LAYER_OUTBOUND_IPPACKET_V4
FWPS_LAYER_OUTBOUND_IPPACKET_V6
Camada de Descarte de Pacote de Saída IPv4 do FWPS
FWPS_CAMADA_DESCARTE_PACOTE_IP_V6_SAÍDA
Considerações especiais para camadas de transporte
Para tornar um driver de chamada registado com uma camada de transporte (FWPS_LAYER_XXX_TRANSPORT_V4 ou _V6) compatível com IPsec, siga as seguintes diretrizes:
Registe o callout nas camadas de autorização de receção/aceitação ALE (FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4 ou FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6), além das camadas de transporte (FWPS_LAYER_XXX_TRANSPORT_V4 ou _V6).
Para evitar interferência com o processamento interno de IPsec do Windows, registe a chamada em uma subcamada que tenha um peso inferior a FWPM_SUBLAYER_UNIVERSAL. Use a função FwpmSubLayerEnum0 para localizar o peso da subcamada. Para obter informações sobre essa função, consulte a documentação do Windows Filtering Platform no SDK do Microsoft Windows.
Um pacote de transporte de entrada que requer classificação ALE deve ser inspecionado nas camadas de autorização/aceitação ALE (FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4 ou FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6). Esse pacote deve ser permitido a partir das camadas de transporte de entrada. A partir do Windows Vista com Service Pack 1 (SP1) e do Windows Server 2008, use o sinalizador de metadados FWPS_METADATA_FIELD_ALE_CLASSIFY_REQUIRED para determinar se o pacote de entrada será indicado para as camadas de filtragem FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4 e FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6. Esse sinalizador de metadados substitui o sinalizador de condição FWP_CONDITION_FLAG_REQUIRES_ALE_CLASSIFY que foi usado no Windows Vista.
Para evitar interferência com o processamento interno de IPsec do Windows, não intercete o tráfego de modo de túnel IPsec em camadas de transporte se o tráfego IPsec ainda não estiver desencapsulado. O exemplo de código a seguir mostra como ignorar esses pacotes.
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; }Depois que um pacote protegido por IPsec é descriptografado e verificado na camada de transporte, o cabeçalho AH/ESP permanece no cabeçalho IP. Se tal pacote tiver que ser reinjetado de volta na pilha TCP/IP, o cabeçalho IP deve ser reconstruído para remover o cabeçalho AH/ESP. A partir do Windows Vista com SP1 e Windows Server 2008, você pode fazer isso clonando o pacote e chamando a função FwpsConstructIpHeaderForTransportPacket0 que tem o parâmetro headerIncludeHeaderSize definido como o tamanho do cabeçalho IP do pacote clonado.
Na camada de recepção/aceitação do ALE, uma função pode detetar tráfego protegido por IPsec verificando se o sinalizador FWP_CONDITION_FLAG_IS_IPSEC_SECURED está definido. Nas camadas de transporte, um callout pode detetar tráfego protegido por IPsec chamando a função FwpsGetPacketListSecurityInformation0 e verificando se o sinalizador FWPS_PACKET_LIST_INFORMATION0 está definido no parâmetro queryFlags.
Trabalhando com pacotes ESP IPsec
Quando o motor indica pacotes descriptografados da carga útil de segurança de encapsulamento (ESP), ele os trunca para excluir dados ESP adicionais. Devido à maneira como o mecanismo lida com esses pacotes, os dados MDL na estrutura NET_BUFFER não refletem o comprimento correto do pacote. O comprimento correto pode ser obtido usando a macro NET_BUFFER_DATA_LENGTH para recuperar o comprimento de dados da estrutura NET_BUFFER.