Memblokir IPv6 untuk mengunci WireGuard membuat host rusak
Aturan input yang menjatuhkan semua IPv6 juga menghapus penemuan tetangga dan Packet Too Big. Pisahkan tiga tanggung jawab, lalu periksa host masih berfungsi.
Tujuannya masuk akal: hanya pengguna terowongan yang boleh mencapai layanan di mesin ini. Implementasi yang biasa dipakai adalah rantai input IPv6 yang menjatuhkan semua kecuali WireGuard, yang juga menjatuhkan lalu lintas yang menjaga host tetap terpasang pada tautannya sendiri. Penemuan tetangga dan pesan pemeliharaan jalur bukanlah akses layanan, dan menghapusnya menghasilkan mesin yang tak terjangkau karena alasan yang tidak berhubungan dengan kebijakan Anda. Terowongan naik, layanan dibatasi dengan benar, dan tidak ada hal lain di tautan yang bekerja.
Tiga tanggung jawab, satu kumpulan aturan
Tanggung jawab pertama adalah operasi jaringan luar: host harus tetap terpasang pada tautannya, menyelesaikan tetangga, dan mempelajari batas jalur tautan itu. Yang kedua adalah pendengar terenkripsi, yang menerima UDP pada alamat dan port yang Anda pilih. Yang ketiga adalah kumpulan layanan terdekripsi yang ingin Anda capai oleh pengguna terowongan.
Itu tiga kebijakan berbeda, dan hanya yang kedua dan ketiga menyangkut VPN. Kumpulan aturan yang memperlakukan ketiganya sebagai satu mewarisi mode kegagalan di mana memperketat batas aplikasi diam-diam memutus keterpasangan host.
Simpan dalam rantai terpisah atau setidaknya komentar terpisah, agar orang berikutnya melihat baris mana ada untuk alasan apa.
Apa yang ICMPv6 lakukan untuk host
IPv6 bergantung pada ICMPv6 jauh lebih banyak daripada echo. Permintaan dan pengumuman tetangga menggantikan ARP dan diperlukan untuk pengiriman lokal. Packet Too Big membawa informasi MTU jalur, dan mengabaikannya menghasilkan transfer yang macet pada paket besar. Pengumuman router membawa rute bawaan dan informasi prefiks saat tautan memakai konfigurasi otomatis.
RFC 4890 memisahkan pesan yang wajib diizinkan filter host dari yang merupakan pilihan administratif, dan melakukannya di bagian host yang berbeda dari aturan untuk router yang meneruskan antarjaringan. Membaca hanya bagian penerusan menghasilkan kebijakan input yang terlalu ketat bagi host yang dilindunginya.
Aturan praktisnya adalah mengizinkan pesan galat dan konfigurasi penting pada antarmuka yang membutuhkannya, dibatasi menurut jenis dan sumber di mana platform mengizinkannya, dan mengambil keputusan tegas tentang sisanya.
Mengganti semua itu dengan izin ICMPv6 menyeluruh menyelesaikan masalah ketersediaan dan melepaskan penyaringan. Menggantinya dengan penjatuhan menyeluruh menyelesaikan masalah penyaringan dan melepaskan host.
Izinkan terowongannya, lalu layanannya
Terima transport WireGuard pada alamat luar dan port UDP yang dimaksud, dan terima lalu lintas balik melalui pelacakan koneksi. Lalu izinkan layanan aplikasi melalui antarmuka terowongan, dari sumber yang benar-benar Anda otorisasi.
Izin untuk port UDP luar tidak mengotorisasi permintaan terdekripsi di dalamnya. Perbedaan itulah seluruh alasan antarmuka terowongan muncul di aturan layanan.
Baca kumpulan aturan sebagaimana adanya, bukan sebagaimana file menggambarkannya:
sudo nft list ruleset
ip -6 addr show
ip -6 route show default
Pendengar pada alamat fisik adalah paparan terpisah dari layanan yang sama pada alamat terowongan. Jika mesin juga meneruskan lalu lintas ke mesin lain, itu keputusan rantai penerusan dan bukan kebijakan input ini, dan perlu penalaran sendiri.
Uji tautannya, bukan hanya terowongannya
Terowongan yang bekerja setelah perubahan membuktikan lebih sedikit daripada kelihatannya, karena entri tetangga yang ada dan koneksi yang sudah terbentuk dapat menyembunyikan pesan kendali yang kini dijatuhkan kebijakan.
Periksa keterpasangan secara langsung, lalu periksa bahwa jalur yang dikecualikan masih gagal:
ip -6 neigh show
ping -6 -c 3 2001:db8:1::1
sudo nft -c -f /etc/nftables.conf
Tabel tetangga yang tetap lengkap setelah reboot adalah tanda penemuan masih bekerja. Tabel yang kosong dan tidak pernah terisi lagi adalah tanda Anda menyaringnya keluar. Perintah ketiga memvalidasi sintaks kumpulan aturan tanpa menerapkannya, dan itu layak dilakukan selagi Anda masih punya sesi.
Pulihkan host yang membuat Anda terkunci di luar
Sebelum mengubah aturan firewall yang membawa sesi administrasi Anda sendiri, siapkan kanal kedua: konsol, koneksi serial, atau pengembalian terjadwal yang menghapus aturan baru jika Anda tidak membatalkannya.
Jika perubahan benar-benar mengunci Anda, pemulihan melalui kanal itu dan bukan melalui jaringan yang baru saja Anda hapus. Pulihkan kumpulan aturan sebelumnya dari salinan tersimpan, pastikan host terjangkau lagi, dan baru setelah itu terapkan kebijakan yang dimaksud dalam potongan lebih kecil.
Kebijakan akhir tidak universal. Pengalamatan, perutean, dan implementasi firewall adalah masukan penerapan, tetapi batasnya sama di mana-mana: tolak akses aplikasi yang tidak diinginkan sambil mempertahankan lalu lintas kendali yang membawa terowongan terotorisasi.