Cara mengunci keluar Linux supaya tiada yang bocor apabila VPN terputus
Penghalaan dan penapisan ialah keputusan berasingan. Kunci cangkuk output, kemudian hadkan pengecualian endpoint, DNS dan pentadbiran yang diperlukan terowong untuk menyambung semula.
Bayangkan kotak media pada sambungan rumah yang sepatutnya hanya mencapai internet melalui terowong. Apabila terowong terputus, aplikasi sepatutnya terhenti dan bukannya terus berjalan senyap melalui antara muka fizikal. Mendapatkan tingkah laku itu ialah masalah firewall dan bukan masalah penghalaan, dan perbezaan itu penting kerana laluan boleh diganti dengan memulakan semula daemon manakala penapis kekal di tempat anda meletakkannya. Berikut ialah cara laluan paket benar-benar membuat keputusan, dan kemudian cara menghadkan pengecualian yang membolehkan terowong menyambung semula.
Output setempat ialah cangkuk berbeza daripada penghantaran
Paket yang meninggalkan aplikasi pada mesin melalui cangkuk output; paket yang dihalakan mesin untuk hos lain melalui penghantaran. Dasar yang hanya menyebut forward mengekang yang kedua dan membiarkan yang pertama terbuka luas, itulah sebabnya banyak kunci keluar kelihatan betul dan tidak melakukan apa-apa. Pemadanan antara muka tergolong dalam peraturan yang sama: oifname "tun0" accept meloloskan trafik yang telah dihalakan keluar melalui terowong. Penghalaan dan penapisan juga kekal sebagai keputusan berasingan, jadi laluan pautan boleh wujud manakala penapis menolak paket itu. Pemisahan itulah yang anda harapkan.
Gerbang yang menghantar untuk peranti lain memerlukan kedua-dua cangkuk. Mengunci output sahaja melindungi mesin itu sendiri dan membiarkan setiap klien di hilir bebas bocor.
Tulis senarai pengecualian dari endpoint ke luar
Mulakan dengan endpoint terowong: satu alamat destinasi atau set kecil yang diluluskan, protokol pengangkutan dan port destinasi, contohnya udp dport 1194 ip daddr 203.0.113.7 accept. Jika klien menyelesaikan nama hos, pertukaran DNS awal memerlukan peraturannya sendiri yang terhad kepada resolver dan port 53, bukan kebenaran menyeluruh ke alamat resolver itu. Setiap pengecualian patut menyebut sebab ia wujud. Kebenaran untuk semua trafik UDP ke port VPN meliputi jauh lebih banyak daripada satu perkhidmatan disahkan yang anda fikirkan.
Penyelesaian awal ialah tempat kunci biasanya reput. Set alamat yang dimuat semula dengan pemasa memerlukan tingkah laku yang ditetapkan apabila muat semula gagal, dan tingkah laku itu tidak boleh membuka pautan sehingga berjaya. Muat semula melalui terowong selagi terowong hidup, dan jika tidak kembali ke endpoint terakhir yang diketahui sihat.
Pentadbiran setempat memerlukan layanan yang sama. Subnet pengurusan tidak boleh dipercayai hanya kerana alamatnya persendirian, dan peraturan yang mempercayainya menjemput laluan kedua mengelilingi kunci.
Pemadanan antara muka bukan bukti terowong sihat
Peraturan yang menerima semua yang keluar dari tun0 menganggap paket pada antara muka itu datang dari terowong. Nama antara muka dicipta semula, dan nama bukan identiti kriptografi. Rakan juga mungkin sudah tiada manakala antara muka kekal hidup, yang menjadikan peraturan itu tanpa kesan yang sangat meyakinkan.
Penjejakan sambungan menambah perangkap berkaitan. Peraturan luas untuk sambungan yang sudah terbentuk memainkan semula kebenaran yang diperoleh aliran terdahulu, jadi sesi yang bermula sebelum terowong terputus terus berjalan selepasnya. Hadkan penerimaan berasaskan keadaan kepada antara muka dan alamat yang benar-benar anda maksudkan, atau anda telah membina kunci yang membuka sendiri. Peraturan input dan output juga menjawab soalan berbeza, dan mengeraskan satu sambil mengabaikan yang lain membiarkan mesin boleh dicapai ke arah yang tidak anda pertimbangkan.
Apa yang bertahan selepas daemon ranap
Penapis yang dipasang oleh skrip yang berjalan selepas terowong naik hilang bersama terowong, tepat pada saat ia diperlukan. Muatkan kunci semasa boot dan biarkan daemon hanya menguruskan pengecualiannya.
Memadam laluan lalai juga bukan pengganti. Laluan ialah keadaan yang dimiliki dan ditulis semula oleh daemon, dan memadamnya boleh mengambil laluan yang diperlukan untuk menyambung semula. IPv6 memerlukan rancangannya sendiri, kerana penemuan jiran dan pengumuman penghala ialah perkhidmatan pautan yang mesti terus berfungsi manakala trafik biasa disekat. DHCP tergolong dalam kategori yang sama. Catat perkara ini sebagai pengecualian yang mempunyai tujuan, bukan menemukannya kemudian sebagai gangguan.
Laluan pemulihan sebelum penggunaan
Uji kunci seperti ia akan gagal: boot tanpa terowong, bunuh daemon, tukar endpoint dan sambung semula. Setiap kes patut menghentikan aplikasi dan membiarkan saluran pemulihan berfungsi. Lakukan dari konsol, kerana shell jauh ialah sesi yang paling mungkin terkunci oleh peraturan anda sendiri.
Kemudian periksa apa yang masih boleh dicapai oleh aplikasi biasa, dengan destinasi tidak berbahaya dan permintaan yang boleh anda sahkan. Hasil yang anda mahu ialah penolakan pada pautan dan kejayaan melalui terowong, bukan tamat masa samar yang boleh bermaksud kedua-duanya. Kekalkan set peraturan di bawah pemilik yang sama dengan seluruh firewall, bukannya menggantikan seluruh jadual dari skrip shell. Dasar yang setiap kebenarannya boleh membenarkan dirinya sendiri lebih bernilai daripada set peraturan panjang yang tiada siapa dapat menjelaskan.