Kill switch pada router yang meliputi FORWARD, OUTPUT dan IPv6
Kill switch hanya dalam FORWARD membiarkan router bebas bocor, dan peraturan hanya IPv4 membiarkan IPv6 terbuka. Susun rantai dan uji dengan terowong dimatikan.
Anda log masuk ke router, tampal satu set peraturan kill switch daripada kiriman forum, dan LAN berhenti melayari begitu terowong terputus. Dua hari kemudian router masih mengemas kini rekod DNS dinamiknya melalui WAN biasa, dan komputer riba tetamu masih mencapai laman IPv6. Kedua-dua tingkah laku itu normal, kerana peraturan yang ditampal hanya meliputi satu rantai dan satu keluarga alamat, dan tiada satu pun daripadanya ialah seluruh router. Menelusuri laluan paket mengikut urutan menunjukkan dengan tepat apa yang terlepas.
Mulakan pada router, bukan pada komputer riba
Dasar pada peringkat router menarik bagi pejabat kecil kerana setiap peranti di belakangnya mewarisi tingkah laku yang sama dan tiada siapa boleh terlupa menghidupkan suis pada klien. Ia juga memberi anda satu tempat untuk menguji selepas setiap kemas kini firmware. Apa yang tidak diberikannya ialah liputan automatik trafik router itu sendiri atau keluarga alamat kedua, dan itulah dua jurang di sebalik kebanyakan penggunaan yang gagal.
Sebelum menyunting apa-apa, catat tiga fakta di atas kertas: nama antara muka WAN, nama jambatan LAN, serta alamat dan port titik akhir VPN. Anda akan memerlukan ketiga-tiganya dalam peraturan, dan meneka nama antara muka ialah sebab paling biasa sesuatu set peraturan yang kelihatan betul tidak melakukan apa-apa.
Lalui tiga laluan yang boleh diambil oleh paket
Trafik daripada komputer riba ke internet diposkan ke hadapan, jadi ia melalui rantai FORWARD. Trafik yang dijana oleh router sendiri, seperti pemajuan DNS, pertanyaan NTP, kemas kini DDNS dan saluran kawalan VPN, melalui OUTPUT. Trafik pengurusan yang ditujukan kepada router masuk melalui INPUT.
Jadi kill switch yang dibina hanya dalam FORWARD melindungi klien dan tidak yang lain. Jadual menunjukkan mengapa kebocoran dalam babak pembukaan boleh dijangka dan bukan misteri.
| Packet path | Example | Chain that sees it |
|---|---|---|
| LAN client to WAN or tunnel | Browser request | FORWARD |
| Router-originated | DDNS update, NTP | OUTPUT |
| Addressed to the router | SSH from the LAN | INPUT |
Dalam kebanyakan reka bentuk anda tidak memerlukan kill switch pada INPUT, tetapi anda perlu mengekalkan akses pengurusan berfungsi semasa terowong dimatikan. Jika tidak, kali pertama VPN gagal anda memandu ke pejabat dengan kabel konsol.
Susun peraturan supaya terowong masih boleh naik
Kill switch yang berfungsi ialah senarai benaran yang berakhir dengan penolakan, dan susunan itulah yang menjadikannya kill switch dan bukan bata. Benarkan loopback, titik akhir VPN, balasan untuk aliran yang sedia ada dan antara muka terowong dahulu; tolak selebihnya terakhir.
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 198.51.100.7 -p udp --dport 51820 -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o wg0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j REJECT
Titik akhir mesti berupa alamat pada peringkat ini, bukan nama hos. Sebaik sahaja penolakan terakhir menyekat DNS, peraturan yang menamakan nama hos penyedia tidak lagi boleh diselesaikan, dan terowong tidak bermula lagi selepas but semula. Jika penyedia menukar titik akhir, selesaikan nama itu sebelum dasar digunakan dan segarkan peraturan itu daripada skrip yang sama.
Cerminkan bentuk yang sama dalam FORWARD untuk trafik klien, dan letakkan peraturan pengurusan yang jelas di atas penolakan. Kekalkan peraturan pengurusan itu sempit tetapi boleh dicapai, dan sahkan dengan membuka sesi SSH kedua sebelum menutup yang pertama. Terkunci di luar semasa perubahan kill switch cukup biasa untuk dirancang. Pada router yang menjalankan WireGuard, allowed-ips rakan sebaya menentukan apa yang masuk ke terowong, manakala peraturan ini menentukan apa yang dibenarkan keluar tanpanya.
IPv6 perlukan pintunya sendiri
Semua di atas ialah IPv4. Jika LAN anda mempunyai IPv6 yang berfungsi dan terowong hanya membawa IPv4, setiap peranti yang diliputi masih mempunyai laluan terus ke internet yang tidak pernah dilihat oleh peraturan baharu anda. Komputer riba dwi-timbunan akan memilihnya dengan senang hati, dan kill switch hanya akan kelihatan rosak kepada orang yang menguji dengan IPv4.
ip6tables -A FORWARD -i br-lan -j REJECT
ip6tables -A OUTPUT -o eth0 -j REJECT
ip6tables -A OUTPUT -o lo -j ACCEPT
Susunan juga penting di sini: kebenaran loopback mesti mendahului penolakan WAN, jika tidak perkhidmatan tempatan pada router mula gagal dengan cara yang pelik. Jika rangkaian tidak menggunakan IPv6 sama sekali, melumpuhkannya pada WAN dan LAN lebih mudah dan tidak meninggalkan apa-apa untuk dilupakan.
Sesetengah klien VPN memasang laluan lalai hanya untuk IPv4 dan membiarkan laluan lalai IPv6 sedia ada tidak disentuh. Periksa jadual penghalaan selepas terowong bersambung dan bukannya menganggap klien telah mengendalikannya.
Buktikan dengan terowong dimatikan
Hentikan terowong dari router dan uji dari tiga tempat mengikut urutan ini:
# systemctl stop wg-quick@wg0
# ip route get 203.0.113.1
# curl -m 5 -sS http://example.com || echo blocked
# iptables -vnL OUTPUT | head
# ip6tables -vnL OUTPUT | head
Carian laluan memberitahu anda ke mana paket akan pergi, dan pembilang memberitahu anda sama ada peraturan anda pernah sepadan. Peraturan dengan sifar paket selepas ujian yang gagal tidak melindungi apa-apa, dan punca biasa ialah nama antara muka yang berbeza daripada yang anda taip. Uji trafik yang dijana router secara jelas, kerana ujian dari sisi LAN tidak boleh melaksanakan OUTPUT.
Tentukan mod kegagalan sebelum anda memerlukannya. Fail-closed mengekalkan klien di luar talian sehingga terowong kembali; fail-open memulihkan akses WAN biasa dan menggagalkan tujuan untuk trafik yang anda ambil berat. Laluan blackhole ke kolam VPN dengan metrik tinggi ialah lapisan kedua yang berguna untuk reka bentuk fail-closed, kerana ia bertahan apabila laluan terowong hilang dan bukannya kembali kepada laluan lalai.
Terima persediaan hanya apabila klien LAN, permintaan yang dijana router dan permintaan IPv6 semuanya gagal dengan terowong dimatikan, dan ketiga-tiganya berfungsi semula apabila ia naik.