Dua klien pada server OpenVPN yang sama bisa saling menjangkau meskipun Anda sudah menambahkan aturan DROP untuk kumpulan alamat mereka. Aturannya ada di rantai FORWARD, lalu lintasnya jelas mengalir, dan penghitung aturan itu tetap nol. Kesimpulan yang wajar adalah firewallnya rusak. Lebih sering paketnya tidak pernah masuk ke rantai sama sekali.

Ada dua jalur yang bisa ditempuh paket peer melewati server OpenVPN, dan keduanya ditentukan oleh konfigurasi, bukan oleh firewall. Mengetahui jalur mana yang dipakai memberi tahu Anda apakah aturan host benar-benar berada di tempat yang tepat.

Dua jalur yang bisa ditempuh paket peer

Saat opsi penerusan internal dimatikan, paket dari klien A tiba di antarmuka tunnel dengan tujuan di dalam alamat yang diberikan kepada klien B. Tabel perutean server mengirimnya kembali keluar melalui antarmuka tunnel yang sama, karena server memiliki rute ke alamat B. Itu aliran masuk-dan-keluar melalui host, dan jalur penerusan IPv4 yang menilainya.

Saat opsi penerusan internal dinyalakan, proses server mencocokkan paket dengan klien yang terhubung dan menulisnya kembali langsung ke klien itu. Paket ditangani di dalam daemon dan tidak pernah masuk lagi ke perangkat tunnel, sehingga jalur penerusan host dilewati sepenuhnya. Panduan OpenVPN 2.6 menyebut opsi ini sebagai penerusan internal klien-ke-klien, dan itulah tepatnya alasan aturan firewall host tidak bisa melihatnya.

Ada varian ketiga pada penerapan yang memindahkan kanal data ke modul kernel. Keputusan penerusan dan enkripsi keluar dari ruang pengguna, dan apakah netfilter melihat alirannya bergantung pada bagaimana jalur offload dibangun. Jangan pernah menganggap seperangkat aturan lama berperilaku di server dengan offload sama seperti di server ruang pengguna. Pastikan modenya dari konfigurasi yang berjalan, bukan dari versi paket.

Ketika penghitung tidak pernah bergerak

Penghitung nol berarti paket tidak cocok dengan aturan itu pada titik tersebut, dan ada beberapa sebab. Yang pertama adalah jalan pintas di atas: lalu lintasnya tidak pernah mencapai rantai. Yang kedua adalah ketidakcocokan pada antarmuka, arah, sumber, atau tujuan, yang lazim ketika kumpulan alamat dinomori ulang dan aturannya masih menyebut prefiks lama.

Yang ketiga adalah posisi. Aturan yang lebih awal di rantai bisa menerima aliran sebelum DROP Anda dievaluasi, dan aturan yang lebih akhir bisa jadi yang benar-benar menentukan hasil. Bacalah rantai berurutan dengan penghitung terlihat, lalu periksa penghitung aturan mana yang bertambah saat Anda mengulang uji.

Lakukan satu pertukaran terkendali antara dua klien yang alamat aslinya sudah Anda pastikan dari status server itu sendiri, bukan dari sewa yang Anda ingat. Jika penghitung yang relevan masih tidak bergerak, curigai jalurnya sebelum menulis ulang pencocokan. Jika bergerak tetapi koneksi tetap berhasil, drop-nya ditimpa di kemudian hari dan urutannya yang bermasalah. Jawaban itu menentukan apakah perbaikannya berupa perubahan aturan atau perubahan topologi, jadi dapatkan sebelum menyunting apa pun.

Memilih batas yang bisa menyaring

Jika kebijakan harus tinggal di firewall host, tempatkan lalu lintas di tempat firewall bisa melihatnya. Mematikan penerusan internal adalah cara yang didukung untuk membuat lalu lintas peer melewati antarmuka tunnel dan jalur penerusan, dengan biaya setiap paket peer harus melewati tumpukan host.

Lalu cocokkan alirannya dengan tepat. Lalu lintas tiba di antarmuka tunnel dan keluar di antarmuka tunnel, pada kedua arah, sehingga aturan yang hanya mempertimbangkan antarmuka fisik tidak akan cocok. Aturan berbasis alamat memerlukan kumpulan alamat saat ini, dan harus memperhitungkan arah balik sebagaimana arah maju.

Banyak penerapan lebih baik dilayani dengan menyaring di tingkat klien atau grup, tempat identitasnya diketahui dan kebijakan mengikuti pengguna alih-alih alamat yang berubah saat menyambung ulang. Itu mekanisme yang berbeda dari rantai host, dan keduanya tidak boleh dicampur tanpa alasan yang jelas.

Jangan memindahkan seperangkat aturan topologi lama melewati migrasi tanpa perubahan. Kumpulan alamat, nama antarmuka, dan mode penerusan semuanya memengaruhi apakah sebuah aturan cocok, dan aturan hasil salinan yang dulu bekerja adalah jenis bukti yang paling menyesatkan. Mulailah dari aliran yang ingin Anda izinkan dan tulis aturan yang cocok dengannya.

Menguji isolasi alih-alih memercayai aturan

Uji kasus terlarang dan kasus yang diizinkan dalam satu jalannya pengujian. Mulai koneksi baru dari satu klien ke klien lain dan pastikan gagal, lalu pastikan koneksi yang seharusnya diizinkan masih bekerja. Jika hanya yang pertama diuji, firewall yang memblokir semuanya tampak seperti keberhasilan.

Ulangi setelah memuat ulang konfigurasi server dan setelah klien menyambung ulang, karena penerusan internal dan penetapan kumpulan alamat adalah status waktu jalan. Periksa penghitung di kedua arah, karena aturan yang cocok pada satu arah tetapi tidak pada balasannya menghasilkan isolasi sebagian yang sulit disadari dalam uji cepat.

Isolasi adalah hasil yang teramati pada batas yang benar-benar membawa aliran. Aturan DROP di suatu tempat dalam host bukan bukti; koneksi yang gagal ditambah penghitung yang bergerak pada aturan penyebabnya adalah bukti.

Artikel terkait