Mengapa tcpdump hanya menampilkan teks polos IPsec pada satu arah
Asimetri ini adalah artefak titik tangkap, bukan jalur balasan yang rusak. Berikut tempat mencari lalu lintas dalam dan luar pada gateway IPsec Linux.
Anda menjalankan tcpdump pada antarmuka luar gateway IPsec Linux dan melihat dua hal sekaligus: frame ESP masuk dan, tepat setelahnya, paket dalam yang telah didekripsi. Pada arah keluar hanya ESP yang muncul. Kesimpulan alaminya adalah balasan tidak dikirim, atau IPsec mengenkripsi satu arah dan melupakan arah lainnya. Keduanya tidak benar.
Yang Anda lihat adalah titik tangkap. Kernel mengubah paket keluar sebelum jalur transmisi perangkat menyerahkannya ke soket paket, sehingga soket tidak pernah melihat bentuk dalam saat keluar. Pada arah masuk, paket ditangkap lebih dulu sebagai ESP dan salinan yang didekapsulasi terlihat ketika masuk kembali ke tumpukan. Lalu lintas yang sama, dua jendela pengamatan berbeda.
Titik tangkap menentukan apa yang Anda lihat
Pada antarmuka normal, soket AF_PACKET berada dekat lapisan perangkat. Paket yang meninggalkan host lebih dulu melewati pemrosesan keluaran IPsec, yang mengubah segmen TCP dalam menjadi datagram ESP atau UDP-4500, dan baru setelah itu mencapai lapisan tersebut. Paket yang datang disalin ke soket saat keluar dari kabel, masih terenkripsi, dan hasil yang didekripsi terlihat belakangan ketika tumpukan mengirimkannya secara lokal atau meneruskannya.
Urutan itu menjelaskan asimetri sepenuhnya. Ini bukan bukti tentang arah, kebijakan, atau perilaku aplikasi, dan memperlakukannya demikian membuat orang mengejar balasan yang sebenarnya sudah dikirim dengan benar selama ini. Ini salah satu dari sedikit teka-teki jaringan di mana instrumennya, bukan jaringannya, yang menciptakan anomali.
Cocokkan filter dengan lapisan yang dimaksud
Ekspresi seperti tcp port 443 memilih koneksi TCP dalam. Pada arah keluar, koneksi itu sudah menjadi ESP saat soket dikonsultasikan, sehingga filter tidak cocok dengan apa pun. Jika Anda ingin menghitung lalu lintas yang dilindungi, filter berdasarkan bentuk luar: protokol 50 untuk ESP mentah, atau port UDP 4500 saat NAT traversal digunakan. Kedua filter menghasilkan jumlah paket yang dapat dibandingkan antara kedua peer, yang biasanya menjadi alasan penghitungan. Tidak satu pun memberi tahu apakah permintaan dalam dijawab.
Jangan memperlakukan hitungan UDP 4500 sebagai jumlah paket ESP. IKE juga memakai port itu untuk keepalive NAT-T dan untuk pertukaran terenkapsulasi, sehingga angkanya mencakup lalu lintas yang bukan data yang ingin Anda ukur. Pertukaran IKE awal pada UDP 500 membutuhkan filternya sendiri jika itu pertanyaannya. Angka yang mencampur lalu lintas kendali dengan data juga membuat perkiraan lebar pita salah dengan margin tak diketahui. Hitungan terpisah menjawab pertanyaan terpisah.
Tuliskan filter di samping pertanyaan yang dijawabnya. «Berapa banyak ESP yang keluar dari kotak» dan «apakah permintaan web keluar dari kotak» adalah pengukuran berbeda dengan filter berbeda, dan satu tangkapan tidak dapat menyelesaikan keduanya. Tanpa catatan itu, dua orang akan membandingkan angka yang tidak pernah menghitung hal yang sama.
Amati sebelum transformasi, bukan sesudahnya
Jika Anda perlu melihat teks polos keluar, pindahkan titik pengamatan lebih awal, sebelum pemrosesan keluaran IPsec. NFLOG memberi Anda kait Netfilter tempat aturan dapat menyalin paket terpilih ke soket ruang pengguna, yang dapat dibaca tcpdump. Panduan buang lalu lintas strongSwan mendokumentasikan pendekatan ini justru karena alasan itu.
Pencocokan kebijakan membatasi aturan pada lalu lintas yang akan masuk ke terowongan. -m policy --pol ipsec --dir out-lah yang membuat aturan menjadi spesifik alih-alih mencatat setiap paket yang dikirim kotak. Lalu baca grup log dengan tangkapan terbatas: jumlah snapshot kecil dan batas ukuran mencegah diagnostik menjadi arsip lalu lintas. Tangkapan terbatas juga lebih mudah diserahkan kepada peninjau tanpa menyeret muatan yang tidak relevan. Tentukan jumlahnya sebelum mulai, bukan setelah melihat berapa banyak yang tiba.
iptables -I OUTPUT 1 -d 10.83.0.44/32 -p tcp --dport 8443 -m policy --pol ipsec --dir out -j NFLOG --nflog-group 5
tcpdump -ni nflog:5 -s 128 -c 20 'host 10.83.0.44 and tcp port 8443'Pilih kait yang sesuai dengan aliran. OUTPUT mencakup lalu lintas yang dihasilkan gateway sendiri; transit dari klien LAN melewati rantai FORWARD dan aturan pada OUTPUT tidak akan pernah melihatnya. Alamat dan port di atas adalah placeholder untuk tujuan uji yang disetujui.
Apa yang dibuktikan pengamatan
NFLOG adalah target pencatatan, bukan keputusan penerimaan. Paket yang muncul di sana menunjukkan bahwa ia mencapai kait dan cocok dengan aturan. Itu tidak menunjukkan bahwa filter berikutnya mengizinkannya, bahwa perangkat mengirimkannya, atau bahwa peer menerima apa pun.
Log kosong sama ambigu. Periksa penghitung paket aturan, pastikan arahnya, pastikan aliran benar-benar cocok dengan kebijakan IPsec, dan pastikan tujuannya. Hanya penghitung yang cocok pada kedua peer yang mengubah pengamatan menjadi kesimpulan. Lalu bandingkan penghitung asosiasi keamanan pada kedua peer untuk upaya terkendali yang sama, karena penghitung SA adalah catatan otoritatif tentang apa yang dilindungi dan dikirim.
Satu jebakan lagi: «teks polos» dalam konteks ini berarti di luar lapisan enkripsi IPsec. Sesi HTTPS dalam tetap memiliki TLS-nya sendiri. Menangkap paket yang didekapsulasi tidak mendekripsi TLS aplikasi, dan melihat HTTP yang terbaca di sana berarti aplikasi itu memang tidak pernah memakai HTTPS.
Bersihkan dan bandingkan kedua ujung
Hapus aturan persis yang Anda sisipkan, menurut pemiliknya, segera setelah pengamatan selesai. Membiarkan aturan pencatatan menetap memakan CPU pada setiap paket yang cocok dan diam-diam menciptakan masalah retensi data. Hapus dengan mengulang aturan dengan -D, bukan dengan membilas rantai yang bukan milik Anda.
iptables -D OUTPUT -d 10.83.0.44/32 -p tcp --dport 8443 -m policy --pol ipsec --dir out -j NFLOG --nflog-group 5Jika penerapan memakai IPsec ruang pengguna, antarmuka XFRM, atau offload perangkat keras, titik pengamatan berpindah dan resep ini mungkin tidak berlaku sama sekali. Dengan libipsec, tempat terdokumentasi untuk mengamati lalu lintas dalam adalah perangkat TUN. Identifikasi jalur lebih dulu, lalu pilih titik yang menjawab pertanyaan, dan harapkan kedua arah hanya tampak berbeda ketika Anda melihat sisi transformasi yang salah.