Formulir firewall meminta port TCP, dan isian yang tampak jelas adalah 50. Isian itu tidak mengizinkan apa pun, karena ESP adalah protokol IP nomor 50 dan nomor protokol bukanlah port. Kedua ruang nama hanya berbagi bilangan bulat kecil dan tidak lebih, dan kesalahannya tidak terlihat sampai IKE selesai dan lalu lintas yang dilindungi tidak pernah tiba.

Dua ruang nama yang berbagi angka kecil

Header IP membawa bidang protokol yang menamai apa yang berikutnya: 6 untuk TCP, 17 untuk UDP, 1 untuk ICMP, 50 untuk ESP, 51 untuk AH. Header TCP atau UDP membawa nomor port, yang memilih proses pada host tujuan. Protokol 50 dan port TCP 50 adalah nilai yang tidak berhubungan, tetapi kotak dialog bisa membuatnya tampak dapat dipertukarkan.

Itulah sebabnya aturan penerusan port tidak dapat menyatakan ESP asli. Tidak ada port tujuan ESP untuk diteruskan, dan perangkat yang hanya memahami aturan port sama sekali tidak punya kosakata untuk paket itu. Aturan yang benar menyebut protokol IP. Kotak dialog port apa pun adalah alat yang salah untuk paket itu.

Kebingungan ini punya paruh kedua. Ketika paket terenkripsi, semua isinya buram, termasuk header TCP dari koneksi asli. Firewall yang memeriksa port pada paket itu sedang melihat header luar, yang dalam kasus asli tidak punya port untuk diperiksa.

ESP asli, lalu alternatif yang dienkapsulasi

ESP asli dibawa langsung sebagai protokol IP, yang sama efisien dan sama merepotkannya. Efisien karena tidak ada header tambahan, dan merepotkan karena perangkat apa pun yang menerjemahkan alamat dan port tidak dapat melacaknya. NAT traversal ada untuk menyelesaikannya, dengan membungkus paket ESP di dalam UDP agar penerjemah punya port untuk ditulis ulang.

Form on the wireHow it is identifiedWhat the firewall must permit
IKE negotiationUDP with a destination portUDP 500, and 4500 once traversal is detected
Native ESPIP protocol 50 in the outer headerThe protocol itself, with no port to name
ESP inside UDPUDP 4500 carrying an ESP payloadThe UDP port pair, which translation devices can track

Kedua bentuk adalah penerapan alternatif dari kanal data yang sama, bukan lapisan dari satu kanal. Mengizinkan ESP asli tidak mengizinkan bentuk terekap, dan mengizinkan UDP 4500 tidak mengizinkan lalu lintas asli, jadi kumpulan aturan harus cocok dengan penerapannya, bukan menutupi keduanya secara kebetulan.

Deteksi juga penting di sini. Titik akhir memutuskan di antara bentuk-bentuk itu selama negosiasi, dan peralihan biasanya terjadi ketika NAT terdeteksi di antara keduanya. Karena itu jalur yang berubah setelah terowongan terbentuk dapat memindahkan lalu lintas ke ruang nama yang tidak pernah dicakup aturan Anda.

Baca bentuk mana yang sebenarnya dipakai koneksi

Tanyakan ke titik akhir daripada menebak dari firewall. Di Linux entri status melaporkan apakah asosiasi memakai enkapsulasi UDP dan port mana yang terlibat. Penangkapan paket menjawab pertanyaan yang sama dari kabel, dan keduanya lebih cepat daripada membaca kumpulan aturan lalu berharap.

ip xfrm state | grep -A3 encap
tcpdump -ni any 'ip proto 50 or udp port 4500'

Perintah pertama menampilkan jenis enkapsulasi ketika NAT traversal dipakai dan tidak menampilkan apa pun ketika tidak. Yang kedua menunjukkan bentuk mana dari keduanya yang benar-benar melintasi antarmuka, dan itu menyelesaikan perdebatan tentang konfigurasi yang tampak benar di atas kertas.

Bukti berlawanan termasuk dalam langkah yang sama. Aturan yang melaporkan nol kecocokan memberi tahu Anda bahwa paket tidak pernah mencapainya, dan itu pertanyaan perutean atau selektor, bukan firewall.

Lalu pastikan kanal kendali secara terpisah. IKE punya port dan lognya sendiri, dan negosiasi yang selesai tanpa data persis merupakan pemisahan yang dibahas artikel ini.

Tulis aturan di ruang nama yang benar

Aturan protokol dan aturan port adalah instruksi yang berbeda, jadi alatnya harus menyatakan yang Anda maksud. Di nftables pencocokan protokol bersifat eksplisit, dan alternatif terekap mendapat aturan UDP sendiri. Jaga kedua aturan tetap berdampingan agar pasangannya terlihat saat ditinjau.

nft add rule inet filter input ip protocol esp accept
nft add rule inet filter input udp dport { 500, 4500 } accept

Jangan memperlebar salah satu aturan untuk menutupi diagnosis yang keliru. Mengizinkan semua untuk protokol ESP di setiap antarmuka, atau izin UDP dari mana saja ke mana saja, memperbaiki gejala dan menghapus kendali yang coba Anda pasang. Aliran sempit yang didukung hampir selalu cukup setelah bentuknya diketahui.

Terakhir, jaga lapisannya tetap lurus ketika terowongan bekerja dan aplikasinya tidak. Paket yang tiba di gateway tetap membutuhkan penerusan, rute balik, dan kebijakan yang menerimanya, dan tidak satu pun dari itu dinyatakan oleh aturan ESP. Port yang hilang menjelaskan kegagalan tertentu, bukan setiap kegagalan IPsec. Jaga perbaikan aturan dan pemeriksaan perutean sebagai dua kesimpulan terpisah.

Catat bentuk yang Anda amati, aturan protokol yang Anda tambahkan, dan penghitung yang Anda lihat sesudahnya. Tiga baris, dan orang berikutnya dapat membedakan kesalahan ruang nama dari kesalahan perutean dalam satu menit, bukan satu sore.

Artikel terkait