VPN yang tersambung tetapi tidak mencapai apa pun biasanya digambarkan sebagai masalah firewall, dan solusi yang diambil orang adalah menaruh antarmuka tunnel ke zona tepercaya. Itu berhasil dalam arti lalu lintas mulai mengalir, tetapi juga mengizinkan jauh lebih banyak daripada layanan yang dimaksud. Kedua kebijakan yang terlibat berbeda: satu mengizinkan transport luar ke soket yang mendengarkan, dan yang lain mengotorisasi lalu lintas yang didekripsi untuk mencapai sumber daya tertentu. Memperlakukan keduanya sebagai satu pengaturan itulah yang mengubah izin sempit menjadi lebar. Keduanya diputuskan di tempat berbeda, karena itu kesalahannya begitu mudah.

Dua kebijakan, satu tunnel

Kebijakan luar menjawab pertanyaan sederhana: bolehkah paket dari sumber ini mencapai UDP 1194 di host ini? Kebijakan dalam menjawab pertanyaan lain: bolehkah klien terautentikasi di balik tunnel itu mencapai tujuan ini, dengan protokol ini, pada port ini? Yang pertama tentang soket, yang kedua tentang jalur, dan firewalld memodelkannya dengan objek berbeda karena keduanya diputuskan di titik berbeda. Satu adalah properti soket di host ini, yang lain properti jalur yang melewatinya.

Konsekuensi praktisnya adalah tunnel yang berfungsi tidak memberi tahu apa pun tentang kebijakan kedua, dan kebijakan kedua yang benar tidak membuat yang pertama tidak diperlukan.

Izinkan listener luar yang sebenarnya

Mulailah dengan memeriksa apa yang sudah ditetapkan alih-alih menganggapnya. Baca zona aktif, daftarkan zona yang benar-benar membawa ingress, dan periksa definisi layanan yang terpasang, karena nama layanan menggambarkan sekumpulan port dan tidak mengatakan apa pun tentang apakah listener server ini cocok dengannya.

firewall-cmd --get-active-zones
firewall-cmd --zone=public --list-all
firewall-cmd --info-service=openvpn

Jika listener memang UDP 1194 di zona itu, buka port dan transport tersebut secara spesifik, lalu jadikan aturan spesifik yang sama persisten setelah Anda mengujinya. Periksa juga penetapan berbasis sumber, karena zona yang terikat ke rentang sumber dapat menangkap lalu lintas sebelum zona antarmuka melihatnya.

Otorisasi tujuan yang didekripsi secara terpisah

Koneksi ke layanan yang berjalan di server VPN itu sendiri adalah kebijakan input lokal. Koneksi yang diteruskan ke host lain di LAN memerlukan kebijakan penerusan, penerusan yang diaktifkan di kernel dan rute balasan — tiga persyaratan terpisah yang sering digabung orang menjadi satu. Objek kebijakan firewalld modern menggambarkan lalu lintas terarah antara zona ingress dan zona egress, dan di situlah tempat yang tepat untuk menyatakan sumber VPN mana yang boleh mencapai layanan privat mana.

Definisikan sumber yang diizinkan secara eksplisit dan biarkan sisanya jatuh ke penolakan. Izin untuk layanan luar bukanlah kebijakan itu, tidak peduli bagaimana tampilan tata letak zonanya.

Mengapa memercayai antarmuka adalah jalan pintas yang salah

Menaruh antarmuka tunnel ke zona yang targetnya menerima segalanya mengizinkan seluruh lalu lintas yang didekripsi ke setiap layanan yang diekspos host, termasuk yang belum Anda tinjau. Mengarahkan ulang zona tepercaya menjadi membatasi pada mesin yang sedang berjalan lebih buruk, karena antarmuka dan rentang sumber lain mungkin sudah bergantung pada maknanya dan akan berubah perilaku saat Anda mengeditnya. Jika Anda memerlukan kebijakan sempit, buatlah satu; jangan menggunakan ulang zona bersama.

Jaga juga penetapan zona tunnel tetap stabil melalui komponen mana pun yang memiliki konfigurasi itu. Kehilangan penetapan saat restart menghasilkan kegagalan yang tampak seperti masalah aturan firewall dan sebenarnya masalah persistensi.

Verifikasi tiga hal, termasuk satu penolakan

Uji koneksi luar dari luar, uji satu layanan dalam yang diotorisasi dari klien yang terhubung, dan uji satu layanan yang seharusnya tetap tak terjangkau. Uji ketiga itulah yang membedakan kebijakan dari efek samping, dan itulah yang dilewati orang karena semuanya tampak berfungsi. Jika layanan yang ditolak menjawab, Anda telah mengizinkan zona, bukan layanan.

Catat zona, port, transport, dan objek kebijakan di catatan server. Jika tidak, perubahan berikutnya pada host ini akan dimulai dari anggapan yang sama.

Artikel terkait