Hub yang menjalankan WireGuard dapat menjaga grup peer tetap terpisah tanpa antarmuka atau tabel perutean terpisah per grup. Dua mekanisme melakukan pekerjaannya, dan mencampuradukkan keduanya adalah alasan biasa sebuah kebijakan tampak benar tetapi tidak melakukan apa pun. Satu lapisan memutuskan siapa yang boleh mengklaim alamat sumber. Lapisan lain memutuskan ke mana paket itu boleh pergi.

Dua tugas, dijaga terpisah

Lapisan terowongan menjawab pertanyaan sempit: apakah kunci peer ini mengotorisasi alamat sumber dalam ini. Lapisan penerusan menjawab pertanyaan yang lebih luas: apakah paket ini boleh keluar menuju tujuan itu. Tidak ada yang menjawab pertanyaan yang lain, dan tidak ada yang sendirian menjadi kebijakan akses yang utuh.

Pemisahan itulah sebabnya sebuah peer bisa terautentikasi, beralamat benar, dan tetap tidak dapat menjangkau host yang seharusnya tidak ia jangkau. Ini juga menjelaskan kebalikannya: aturan firewall yang mengizinkan segalanya tidak membuktikan apa pun tentang siapa yang boleh mengklaim alamat mana.

Rancang kedua lapisan bersama-sama, lalu uji keduanya. Konfigurasi yang benar pada satu lapisan dan belum diuji pada lapisan lain gagal terbuka atau tertutup tergantung nilai bawaan.

Beri setiap peer hanya alamatnya sendiri

Peer dengan banyak host menggoda Anda untuk memberikan seluruh rentang grup di sisi server. Izin itu adalah klaim alamat sumber, jadi klien yang disusupi atau salah konfigurasi dapat menyodorkan alamat mana pun dalam rentang itu dan terowongan akan menerimanya. Tetapkan /32 per peer untuk alamat dalamnya sendiri. Setel rentang grup hanya pada klien, tempat rentang itu menjelaskan tujuan mana yang boleh dijangkau klien tersebut bukan sumber mana yang boleh ia gunakan.

Firewall lalu mencocokkan sumber yang dapat dipercayainya. Aturan yang ditulis untuk rentang grup tetap merupakan pengelompokan yang berguna, dan aturan itu baru bermakna ketika tidak ada satu peer pun yang dapat mengklaim alamat milik anggota lain.

Tulis kebijakan penerusan yang memisahkan grup

Lalu lintas yang menarik di sini masuk dan keluar melalui antarmuka terowongan yang sama, sehingga melewati jalur penerusan dan bukan jalur masukan host. Aturan berada di rantai penerusan yang sudah ada pada pengelola firewall mana pun yang memiliki host itu, dan aturan-aturan itu adalah fragmen, bukan kumpulan aturan yang lengkap.

iifname "wg0" oifname "wg0" ip saddr 10.66.10.0/24 ip daddr 10.66.10.0/24 accept
iifname "wg0" oifname "wg0" ip saddr 10.66.20.0/24 ip daddr 10.66.20.0/24 accept
iifname "wg0" oifname "wg0" drop

Dua aturan pertama mengizinkan lalu lintas di dalam setiap grup. Yang terakhir memblokir semua hal lain yang melewati antarmuka itu, dan itulah yang menghasilkan isolasi antargrup. Tambahkan aturan eksplisit untuk keluarga alamat lainnya jika Anda membutuhkannya, karena drop yang ditulis untuk IPv4 tidak mengotorisasi atau menjelaskan perilaku IPv6.

Urutan menentukan apakah kebijakan berlaku

Urutan aturan lebih penting daripada fragmennya sendiri. Aturan generik yang menerima koneksi yang sudah terbentuk dan ditempatkan sebelum entri-entri ini membiarkan aliran lama antargrup berlanjut, sehingga isolasi hanya berlaku untuk koneksi baru. Putuskan hasil mana dari kedua itu yang Anda inginkan sebelum memuat ulang.

Putusan terima juga tidak selalu final antar-rantai pada kait yang sama. Jika rantai dasar lain berjalan kemudian, kebijakan efektif adalah kombinasinya, jadi periksa penghitungnya, bukan berkas yang Anda sunting. Penghitung adalah bukti termurah yang tersedia. Aturan tanpa hitungan paket tidak cocok, dan aturan yang cocok sementara rantai berikutnya menerima memberi tahu Anda bahwa drop berada di tempat yang salah.

Uji matriksnya, bukan jumlah berkas

Bangun matriks kecil hasil yang diharapkan dan periksa setiap sel. Dari grup A ke grup A seharusnya berhasil, dari grup B ke grup B seharusnya berhasil, dan dari A ke B seharusnya tidak, di kedua arah dan untuk kedua keluarga alamat jika Anda mendukungnya.

nft list ruleset
wg show wg0 allowed-ips
ping -c 2 10.66.10.5
conntrack -L -s 10.66.20.7 2>/dev/null | head

Dua yang pertama menunjukkan apa yang dikonfigurasi. Ping dari anggota grup yang salah menunjukkan apa yang sebenarnya terjadi. Daftar conntrack menunjukkan apakah aliran yang lebih lama masih diterima, dan begitulah perubahan isolasi diam-diam gagal berlaku.

Layanan host di hub dan akses ke LAN di belakangnya adalah jalur terpisah dengan kebijakan terpisah. Catat mana di antaranya yang dicakup matriks, karena uji yang hanya memeriksa lalu lintas peer-ke-peer tidak mengatakan apa pun tentang keduanya.

Artikel terkait