Bagikan melalui


Mengembangkan Driver Callout IPsec-Compatible

Lapisan yang Kompatibel Dengan IPsec

Agar sepenuhnya kompatibel dengan implementasi Windows IPsec yang dimulai dengan Windows Vista dan Windows Server 2008, driver callout harus didaftarkan di salah satu lapisan pemfilteran run-time berikut:

Pemfilteran Paket TCP
Lapisan Arus

  • FWPS_LAYER_STREAM_V4

  • FWPS_LAYER_STREAM_V6

Pemfilteran Paket ICMP Non-TCP dan Tanpa Kesalahan
Lapisan Datagram-Data:

  • FWPS_LAYER_DATAGRAM_DATA_V4

  • FWPS_LAYER_DATAGRAM_DATA_V6

  • FWPS_LAYER_DATAGRAM_DATA_V4_DISCARD

  • FWPS_LAYER_DATAGRAM_DATA_V6_DISCARD

Kecuali untuk kasus ketika paket masuk harus dibangun kembali sebelum disuntikkan kembali dari lapisan datagram-data, driver callout yang terdaftar di lapisan data ini kompatibel dengan IPsec.

Lapisan yang Tidak Kompatibel Dengan IPsec

Lapisan jaringan dan penerusan tidak kompatibel dengan IPsec karena pada lapisan ini lalu lintas IPsec belum didekripsi atau diverifikasi. Kebijakan IPsec diberlakukan pada lapisan transportasi, yang terjadi setelah operasi klasifikasi lapisan jaringan.

Lapisan pemfilteran run-time berikut tidak kompatibel dengan IPsec karena pemrosesan IPsec di Windows terjadi di bawah lapisan berikut:

FWPS_LAYER_INBOUND_IPPACKET_V4

FWPS_LAYER_INBOUND_IPPACKET_V6

FWPS_LAYER_INBOUND_IPPACKET_V4_DISCARD (Penolakan Paket IP Masuk V4)

FWPS_LAYER_INBOUND_IPPACKET_V6_DISCARD (Lapisan Paket Masuk IP V6 Dibuang)

FWPS_LAYER_OUTBOUND_IPPACKET_V4

FWPS_LAYER_OUTBOUND_IPPACKET_V6

Lapisan_Fwps_Keluar_PaketIP_V4_Tolak

FWPS_LAPISAN_PAKET_IP_KELUAR_V6_BUANG

Pertimbangan Khusus untuk Lapisan Transportasi

Untuk membuat driver callout yang terdaftar dengan lapisan transport (FWPS_LAYER_XXX_TRANSPORT_V4 atau _V6) yang kompatibel dengan IPsec, ikuti panduan berikut:

  1. Daftarkan callout pada lapisan otorisasi terima/terima ALE (FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4 atau FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6), selain pada lapisan transportasi (FWPS_LAYER_XXX_TRANSPORT_V4 atau _V6).

  2. Untuk mencegah gangguan dengan pemrosesan IPsec Windows internal, daftarkan callout di sublayer yang memiliki bobot lebih rendah daripada FWPM_SUBLAYER_UNIVERSAL. Gunakan fungsiFwpmSubLayerEnum0 untuk menemukan berat sublayer. Untuk informasi tentang fungsi ini, lihat dokumentasi Windows Filtering Platform di Microsoft Windows SDK.

  3. Paket transportasi masuk yang memerlukan klasifikasi ALE harus diperiksa di lapisan terima/terima otorisasi ALE (FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4 atau FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6). Paket semacam itu harus diizinkan dari lapisan transportasi yang masuk. Dimulai dengan Windows Vista dengan Paket Layanan 1 (SP1) dan Windows Server 2008, gunakan bendera metadata FWPS_METADATA_FIELD_ALE_CLASSIFY_REQUIRED untuk menentukan apakah paket masuk akan ditunjukkan ke lapisan pemfilteran FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4 dan FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6. Bendera metadata ini menggantikan bendera kondisi FWP_CONDITION_FLAG_REQUIRES_ALE_CLASSIFY yang digunakan di Windows Vista.

  4. Untuk mencegah gangguan dengan pemrosesan IPsec internal Windows, jangan mencegat lalu lintas IPsec dalam mode terowongan pada lapisan transportasi jika lalu lintas IPsec belum diurai dari terowongan. Contoh kode berikut menunjukkan cara melewati paket tersebut.

    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;
    }
    
  5. Setelah paket yang dilindungi IPsec didekripsi dan diverifikasi di lapisan transportasi, header AH/ESP tetap berada di header IP. Jika paket seperti itu harus dimasukkan kembali ke tumpukan TCP/IP, header IP harus dibangun kembali untuk menghapus header AH/ESP. Dimulai dengan Windows Vista dengan SP1 dan Windows Server 2008, Anda dapat melakukan ini dengan mengkloning paket dan memanggil fungsi FwpsConstructIpHeaderForTransportPacket0 yang memiliki parameter headerIncludeHeaderSize diatur ke ukuran header IP paket kloning.

  6. Pada lapisan penerimaan ALE, callout dapat mendeteksi lalu lintas yang dilindungi IPsec dengan memeriksa apakah tanda FWP_CONDITION_FLAG_IS_IPSEC_SECURED diatur. Pada lapisan transportasi, callout dapat mendeteksi lalu lintas yang dilindungi IPsec dengan memanggil fungsi FwpsGetPacketListSecurityInformation0 dan memeriksa apakah bendera FWPS_PACKET_LIST_INFORMATION0 diatur dalam parameter queryFlags.

Bekerja Dengan Paket IPsec ESP

Ketika mesin menunjukkan paket encapsulating payload keamanan (ESP) yang didekripsi, mesin akan memotongnya untuk menghilangkan data ESP yang mengikuti. Karena cara mesin menangani paket tersebut, data MDL dalam struktur NET_BUFFER tidak mencerminkan panjang paket yang benar. Panjang yang benar dapat diperoleh dengan menggunakan makro NET_BUFFER_DATA_LENGTH untuk mengambil panjang data struktur NET_BUFFER.