Menulis -o tun+ terasa seperti instruksi yang tepat dan sebenarnya adalah wildcard atas setiap terowongan yang dimiliki kernel. Klien VPN kedua, jembatan kontainer, atau antarmuka yang ditinggalkan sesi yang crash semuanya memenuhinya, dan host lalu mengizinkan lalu lintas yang seharusnya dicegah oleh kebijakan. Prosedur di bawah menetapkan satu nama perangkat, mengurutkan pengecualian agar terowongan benar-benar dapat terbentuk, dan meninggalkan jalan kembali jika aturan yang dipasang keliru. Setiap langkah cukup pendek untuk dibatalkan sendiri.

Langkah 1: catat aturan yang Anda miliki sekarang

Sebelum mengubah kebijakan bawaan, simpan keadaan saat ini agar pengembaliannya berupa perintah, bukan ingatan. iptables-save > /root/iptables.pre menulis setiap tabel ke berkas yang dapat Anda pulihkan, dan terminal kedua dengan sesi root terbuka bukanlah paranoia ketika kebijakan yang akan Anda pasang memutus koneksi yang membawanya. Jika Anda bekerja dari jarak jauh, jadwalkan juga flush sebagai sakelar mati.

Lalu daftar antarmuka, karena nama yang Anda asumsikan adalah nama yang seharusnya Anda baca: ip -br link menunjukkan apa yang ada saat ini, dan terowongan tidak akan muncul sampai ia naik. Catat nama perangkat saat Anda membacanya.

Langkah 2: beri terowongan namanya sendiri

OpenVPN menerima dev tun_work dalam konfigurasi klien, dan Linux kemudian membuat antarmuka dengan nama itu persis alih-alih mengalokasikan tun0. Nama tetap stabil di antara koneksi ulang selama tidak ada hal lain yang mengklaimnya, dan itulah yang membuat aturan yang menyebut perangkat menjadi bermakna.

Jika nama tidak dapat dikendalikan, cocokkan alamat terowongan atau tanda paket sebagai gantinya. Keduanya berfungsi, keduanya lebih sulit dibaca, dan keduanya gagal lebih senyap ketika terowongan berganti nomor. Bagaimanapun, cocokkan satu hal dan nyatakan dengan jelas yang mana.

Langkah 3: tulis kebijakan dengan pengecualian endpoint lebih dulu

Host khusus VPN adalah host tolak-bawaan dengan daftar pengecualian pendek, dan pengecualian yang paling penting adalah yang memungkinkan terowongan ada. Bangunlah dengan urutan ini, aturan endpoint sebelum aturan perangkat terowongan, agar jabat tangan punya tempat tujuan:

# allow the tunnel to be built, then everything the tunnel carries
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 198.51.100.7 -p udp --dport 1194 -j ACCEPT
iptables -A OUTPUT -o tun_work -j ACCEPT
iptables -A INPUT  -i tun_work -j ACCEPT
iptables -A INPUT  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Alamat dan port endpoint yang literal milik penyedia Anda, bukan halaman ini. Jika endpoint berupa nama host, selesaikan sekali dan tetapkan hasilnya, karena aturan tidak dapat mencari nama dan jawaban yang berganti akan mematahkan kebijakan secara senyap setelah perubahan DNS berikutnya. Periksa juga portnya, karena penyedia yang memindahkan Anda ke TCP 443 jika tidak akan memerlukan aturan yang tidak ditulis siapa pun. Terowongan yang hanya bekerja pada satu protokol biasanya adalah kelalaian ini, bukan kerusakan firewall.

Pada router bentuk yang sama masuk ke rantai FORWARD bagi klien di belakangnya, dan lalu lintas router itu sendiri memerlukan aturannya sendiri. Himpunan aturan yang hanya mencakup paket yang diteruskan membiarkan SSH dan DNS di jalur lama, dan begitulah router menjadi tak terjangkau pada saat terowongan naik.

Langkah 4: periksa urutannya, bukan hanya keberadaannya

Aturan dievaluasi berurutan, jadi ACCEPT yang datang lebih awal sekadar menyembunyikan REJECT yang Anda tambahkan sesudahnya. Pencocokan established dan related adalah yang membuat jawaban atas permintaan keluar Anda sendiri kembali tanpa membuka jalur masuk umum, dan menempatkannya setelah penerimaan terowongan berarti terowongan yang jatuh tetap meloloskan lalu lintas balik pada antarmukanya.

Jaga jumlah aturan cukup kecil untuk dibaca dalam satu layar. Himpunan aturan yang tidak dapat Anda audit adalah yang akan Anda tambal dengan menambahkan pengecualian di atas, dan begitulah kebijakan tolak-bawaan perlahan mendapatkan tepi izin-bawaan. Hitung ACCEPT sebelum dan sesudah perubahan.

Langkah 5: buat ia bertahan melewati boot dan keluarga alamat

Aturan yang dimasukkan dengan tangan hilang saat boot ulang, jadi muat dari layanan firewall distribusi atau unit yang berjalan setelah antarmuka terowongan ada. Merujuk tun_work dalam skrip yang berjalan sebelum OpenVPN mulai adalah cara umum menghasilkan loop boot berisi lalu lintas yang jatuh.

Lalu periksa IPv6 secara terpisah, karena kebijakan tolak-bawaan IPv4 yang baik tidak mengatakan apa pun tentang keluarga lainnya. ip -6 route akan memberi tahu Anda apakah host memiliki rute yang dapat membawa lalu lintas di sekitar terowongan yang hanya menangani IPv4, dan ip6tables atau nftables memerlukan aturan setaranya sendiri. Uji dengan tujuan IPv6-only alih-alih memercayai simetri himpunan aturan.

Langkah 6: verifikasi dan siap memulihkan

Naikkan terowongan, pastikan layanan yang Anda maksud berfungsi, lalu coba sesuatu yang seharusnya ditolak kebijakan. Pulihkan dengan iptables-restore < /root/iptables.pre jika jawabannya mengejutkan Anda, dan baru setelah itu mulai menyunting aturan. Ketahanan plus jalur pemulihan yang teruji itulah yang membuat ini perubahan yang dapat Anda lakukan dua kali.

Artikel terkait