Hook koneksi adalah kebijakan sesi, bukan filter paket
Hook koneksi klien berjalan sekali per sesi dan tidak pernah melihat muatan. Letakkan penerimaan di tempat sesi ada, dan perubahan konten di tempat permintaan ada.
Seseorang ingin memeriksa apa yang dikirim klien melalui terowongan, menemukan hook koneksi di dokumentasi, dan mulai menulis skrip yang tidak akan pernah menerima satu paket pun. Hook itu nyata dan berguna, tetapi unit kerjanya adalah sesi, bukan bita. Memilih komponen yang tepat adalah perbandingan antara tiga tempat pekerjaan dapat terjadi, dan pertanyaan penentunya adalah unit mana yang benar-benar dapat dilihat masing-masing.
Apa yang diterima hook, dan apa yang tidak pernah diterimanya
Hook koneksi klien berjalan sekali ketika klien yang terautentikasi membentuk sesi, dalam konteks proses server, dengan argumen terdokumentasi dan nilai lingkungan seperti nama umum dan alamat yang diberikan. Hook dapat menulis konfigurasi per klien, mengambil keputusan penerimaan, mengalokasikan sumber daya eksternal, atau mencatat bahwa koneksi terjadi. Yang tidak dapat dilakukannya adalah mengamati lalu lintas, karena ketika paket pertama melintasi terowongan, hook sudah kembali.
Ini bukan batasan yang harus diakali. Panggilan balik sesi yang mencoba memproses aliran harus berjalan selama umur koneksi, dan kontrak skrip daemon tidak dibangun untuk bentuk itu. Tanyakan untuk apa hook itu sebelum memutuskan bahwa ia menghalangi.
Koneksi ulang juga penting. Klien yang terputus dan menyambung lagi adalah sesi baru, jadi apa pun yang dialokasikan hook harus idempoten atau dipasangkan dengan peristiwa pemutusan yang membersihkan. Keadaan yang bocor pada setiap koneksi ulang adalah bug pertama yang biasa dalam desain berbasis hook.
Kebijakan sesi tempatnya di hook
Penerimaan adalah pekerjaan alami hook. Anda tahu siapa yang terhubung, dari mana, dan dengan sertifikat apa, dan Anda dapat memutuskan apakah sesi ini boleh berlanjut atau ditolak. Keputusan itu murah, terjadi sekali, dan tidak menuntut melihat satu bita muatan pun.
Penetapan konfigurasi cocok dengan bentuk yang sama. Hook dapat memilih alamat klien, mendorong opsi yang sesuai dengan identitas itu, atau menulis fragmen yang dibaca server untuk klien ini. Karena keputusannya per sesi, ia tetap dapat dipahami ketika ada yang salah dan seseorang harus menjelaskan mengapa klien tertentu mendapat alamat tertentu.
Pencatatan adalah kecocokan ketiga. Entri audit yang menyatakan bahwa sesi diterima, dengan identitas dan waktunya, tepat berada di sini. Itu bukan log lalu lintas dan tidak boleh berpura-pura menjadi log lalu lintas. Jika nanti seseorang bertanya apa yang dilakukan klien di dalam terowongan, jawabannya harus datang dari tempat lain.
Pekerjaan paket tempatnya di jalur paket
Jika persyaratannya adalah melihat atau mengubah bita yang sedang bergerak, komponen harus berada di jalur penerusan: aturan firewall dengan antrean, hook kendali lalu lintas, atau penerus di ruang pengguna. Mekanisme itu melihat paket, dan mereka memiliki keadaan, mode kegagalan, serta profil kinerjanya sendiri.
Menyunting muatan pada lapisan itu lebih sulit daripada membacanya. Mengubah satu bita dapat membatalkan kolom panjang, checksum, atau mesin status protokol, dan terowongan lapisan tiga tidak melindungi Anda dari semua itu. Itu hanya berarti header luarnya bukan yang Anda sunting. Anggarkan pekerjaan perbaikan itu sebelum menjanjikan penulisan ulang konten kepada siapa pun.
Tangkapan antarmuka adalah alat termurah di kategori ini, dan itu pengamatan, bukan penyunting. Orang mencampuradukkan keduanya karena keduanya digambarkan sebagai melihat lalu lintas, tetapi tangkapan menghasilkan berkas dan jalur paket menghasilkan keputusan.
Perubahan aplikasi tempatnya di aplikasi
Ketika tujuannya adalah mengubah isi permintaan atau cara respons dibentuk, tempat yang tepat adalah layanan itu sendiri atau proksi yang dengan sengaja mengakhiri protokol. Komponen itu sudah memahami permintaan, respons, dan autentikasi yang diharapkan aplikasi, dan itulah tepatnya konteks yang tidak dimiliki filter paket.
Penerjemahan alamat berada di dasar daftar ini karena suatu alasan. Ia menulis ulang alamat dan porta dan membiarkan muatan, jadi ia bukan alat konten seberapa pun seringnya muncul dalam resep yang juga menyebut konten.
Menjaga batas-batas ini tetap terpisah adalah yang membuat rancangan dapat dijelaskan. Kebijakan sesi di hook, penanganan paket di jalur paket, dan perubahan aplikasi di tempat protokol dengan sengaja diakhiri: tiga kalimat yang juga berfungsi sebagai daftar periksa untuk tinjauan.
Di mana TLS masih mengakhiri percakapan
Satu hal bertahan dari semua di atas: lalu lintas di dalam terowongan yang membawa HTTPS menyimpan enkripsi transportnya sendiri. Memegang kunci VPN memberi Anda paket IP dalam, dan tidak memberi Anda kunci sesi untuk situs web di ujung lain.
Itu sebabnya hook tidak dapat memeriksa konten bahkan secara prinsip, dan itu sebabnya jalur paket melihat teks tersandi kecuali penerapan dengan sengaja mengakhiri TLS dalam. kontrak skrip menjelaskan apa yang diberikan kepada hook; ia tidak mengatakan apa pun tentang muatan karena tidak ada muatan yang bisa diberikan.