Bagikan melalui


Pemrosesan Mengklasifikasikan Callout Secara Asinkron

Driver callout WFP dapat mengotorisasi atau menolak operasi jaringan, atau mengakui atau membuang paket jaringan, dengan mengembalikan jenis tindakan FWP_ACTION_PERMIT, FWP_ACTION_CONTINUE, atau FWP_ACTION_BLOCK dari fungsi callout classifyFn . Sering kali driver callout tidak dapat mengembalikan keputusan inspeksi dari fungsi classifyFn-nya sampai informasi yang ditunjukkan, seperti bidang, metadata, atau paket yang dapat diklasifikasikan, dapat diteruskan untuk diproses ke komponen lain, seperti aplikasi mode pengguna. Dalam kasus ini, keputusan mungkin harus dibuat secara asinkron di lain waktu.

Aturan Umum untuk Pemrosesan Asinkron

WFP mendukung pemrosesan asinkron dari fungsi callout classifyFn . Namun, mekanisme untuk melakukan ini berbeda sesuai dengan lapisan yang berbeda.

Klasifikasi ALE Asinkron
Driver callout harus memanggil fungsi FwpsPendOperation0 dari classifyFn. Operasi asinkron harus diselesaikan dengan panggilan ke fungsi FwpsCompleteOperation0 .

Klasifikasi Paket Asinkron
Driver callout harus mengembalikan FWP_ACTION_BLOCK dari fungsi classifyFn , dengan bendera FWPS_CLASSIFY_OUT_FLAG_ABSORB diatur. Paket jaringan harus direferensikan atau dikloning. Operasi asinkron diselesaikan dengan memasukkan kembali paket yang dikloning atau dimodifikasi atau dengan membuang paket secara diam-diam.

Klasifikasi ALE Asinkron yang Menyertakan Paket
Kombinasi dari dua prosedur sebelumnya digunakan: operasi klasifikasi tertunda dan paket direferensikan atau dikloning, dan pada beberapa waktu kemudian panggilan ke classifyFn selesai dan paket kloning disuntikkan kembali atau dibuang.

Kasus dan Pertimbangan Khusus

ALE Connect vs. Receive/Accept Layers
Ketika FwpsCompleteOperation0 dipanggil untuk menyelesaikan operasi klasifikasi tertunda pada lapisan koneksi ALE (FWPS_LAYER_ALE_AUTH_CONNECT_V4 atau FWPS_LAYER_ALE_AUTH_CONNECT_V6), operasi klasifikasi ulang autentikasi ALE dipicu pada lapisan koneksi ALE masing-masing. Driver callout harus mengembalikan keputusan inspeksi dari operasi klasifikasi ulang ini. Anda dapat mendeteksi operasi klasifikasi ulang ALE dengan memeriksa apakah bendera FWP_CONDITION_FLAG_IS_REAUTHORIZE diatur.

Driver callout harus mempertahankan status unik untuk setiap operasi yang tertunda ALE_AUTH_CONNECT mengklasifikasikan sedemikian rupaya sehingga keputusan inspeksi untuk setiap operasi klasifikasi dapat dicari selama autentikasi ulang yang dipicu FwpsCompleteOperation0. Jika paket direferensikan atau dikloning selama operasi klasifikasi ALE_AUTH_CONNECT tertunda (misalnya, untuk koneksi non-TCP), paket tersebut dapat disuntikkan kembali setelah autentikasi ulang terjadi.

Ketika FwpsCompleteOperation0 dipanggil selama dengan operasi klasifikasi pada lapisan penerima/terima ALE (FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4 atau FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6), FwpsCompleteOperation0 tidak memicu autentikasi ulang ALE. Sebaliknya panggilan baru ke classifyFn dilakukan lagi ketika paket kloning disuntikkan kembali masuk jika modifikasi tidak cukup signifikan untuk melewati filter. Mengizinkan kloning yang disuntikkan sendiri dari lapisan ALE_RECV_ACCEPT secara efektif mengotorisasi koneksi masuk. Jika koneksi masuk tidak diizinkan, buang paket masuk setelah memanggil FwpsCompleteOperation0.

Aautorisasi Ulang ALE
Driver callout dapat diklasifikasikan kembali pada lapisan sambungkan atau terima/terima ALE untuk peristiwa seperti perubahan kebijakan (misalnya, menambahkan atau menghapus filter di lapisan), mendeteksi antarmuka kedatangan baru, dan kunci ulang koneksi dengan menggunakan IPsec. Autentikasi ulang seperti itu tidak dapat ditunda dengan memanggil FwpsCompleteOperation0, dan tidak perlu melakukannya. Driver callout harus menggunakan aturan yang tercantum sebelumnya untuk memproses paket yang ditunjukkan selama autentikasi ulang.

Ketahuilah bahwa paket masuk dan keluar dapat diotorisasi ulang pada lapisan ALE_AUTH_CONNECT atau ALE_RECV_ACCEPT. Misalnya, paket masuk dapat diotorisasi ulang pada lapisan ALE_AUTH_CONNECT. Driver callout tidak boleh berasumsi bahwa arah paket sama dengan arah koneksi.

Lapisan ALE_FLOW_ESTABLISHED
Pemrosesan asinkron tidak didukung pada lapisan ini (FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4 atau FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6).

Lapisan INBOUND_TRANSPORT
Driver callout tidak boleh melakukan pemrosesan paket asinkron yang memerlukan pemrosesan klasifikasi ALE pada lapisan transportasi masuk (masuk) (FWPS_LAYER_INBOUND_TRANSPORT_V4 atau FWPS_LAYER_INBOUND_TRANSPORT_V6). Melakukan ini dapat mengganggu pembuatan alur. Ketika WFP memanggil fungsi callout classifyFn pada lapisan transportasi masuk, WFP menetapkan bendera FWPS_METADATA_FIELD_ALE_CLASSIFY_REQUIRED untuk paket yang memerlukan pemrosesan klasifikasi ALE. Driver callout harus mengizinkan paket tersebut dari lapisan INBOUND_TRANSPORT dan harus menunda pemrosesannya sampai mencapai lapisan ALE_RECV_ACCEPT.

Lapisan STREAM
Pada lapisan aliran (FWPS_LAYER_STREAM_V4 atau FWPS_LAYER_STREAM_V6), segmen data TCP ditunjukkan alih-alih header IP atau TCP. Lapisan aliran juga merupakan tempat rantai daftar buffer bersih dapat ditunjukkan dalam satu panggilan ke fungsi callout classifyFn . WFP menyediakan fungsi klon dan injeksi khusus, FwpsCloneStreamData0 dan FwpsStreamInjectAsync0, untuk digunakan oleh callout lapisan aliran.

Karena sifat pengiriman data lapisan aliran yang diurutkan, driver callout harus terus mengkloning dan menyerap data selama data aliran masih tertunda. Mencampur operasi asinkron dan sinkron untuk aliran aliran tertentu dapat mengakibatkan perilaku yang tidak terdefinisi.