PostgreSQL tidak pernah mengetahui bahawa klien berada di VPN. Ia menerima sambungan TCP daripada sesuatu alamat dan satu set kelayakan, lalu memutuskan apa yang hendak dilakukan dengannya. Oleh itu, menjadikan akses bergantung pada terowong bermakna menyusun tiga keputusan berasingan supaya ia sepadan, kemudian menyemak satu-satunya alamat yang benar-benar dilihat pelayan dan bukan alamat yang anda lukis pada rajah.

Tiga keputusan yang tidak boleh digabungkan

Di mana pelayan mendengar ialah satu keputusan. Trafik mana yang boleh mencapai alamat itu ialah keputusan kedua, yang dibuat oleh firewall hos dan mana-mana sempadan rangkaian di hadapannya. Identiti pangkalan data mana yang boleh mengesahkan diri daripada sumber mana ialah keputusan ketiga, yang dibuat dalam pg_hba.conf.

Setiap satu dikuatkuasakan oleh komponen yang berbeza, dan setiap satu gagal dengan mesej yang berbeza. Menggabungkannya dalam perbincangan ialah cara orang akhirnya menyunting fail HBA untuk membaiki masalah firewall. Kekalkan ia mengikut urutan: pendengar yang tidak terikat tidak boleh dicapai, port yang ditapis tidak boleh disambung, dan peraturan HBA hanya menentukan apa yang berlaku selepas sambungan wujud. Apabila perubahan tidak memberi kesan, kenal pasti lapisan mana antara tiga yang sebenarnya anda ubah.

Di mana pelayan mendengar

Ikat pada alamat yang benar-benar diberikan kepada mesin, bukan pada nama antara muka:

listen_addresses = '10.20.0.30'

Pangkalan data boleh berada di belakang get laluan VPN tanpa antara muka terowong sendiri, dan itulah sebabnya alamat ialah perkara yang betul untuk dinamakan. Menukar tetapan ini memerlukan permulaan semula sepenuhnya; muat semula tidak mencukupi.

Kemudian tapis port, biasanya 5432, pada hos dan pada setiap sempadan di hadapannya. Mengikat pada alamat peribadi bukan bukti penafian awam, kerana pemajuan port atau pemetaan alamat awan masih boleh menyampaikan paket kepada pendengar peribadi itu.

Alamat yang benar-benar dilihat HBA

Dengan akses terlaluan, pelayan melihat alamat terowong dalaman setiap klien. Dengan terjemahan sumber, ia melihat alamat get laluan yang diterjemahkan, dan setiap klien meruntuh menjadi satu nilai itu. Periksa sumber melalui bukti sambungan pelayan sendiri sebelum anda memilih awalan untuk dibenarkan.

Untuk penggunaan yang sudah memakai TLS dan SCRAM, contoh akses jauh yang sengaja sempit kelihatan seperti ini:

hostssl appdb app_login 10.8.0.0/24 scram-sha-256
host all all 0.0.0.0/0 reject
host all all ::/0 reject

Ini membenarkan satu peranan dan satu pangkalan data melalui TLS daripada kumpulan yang dinyatakan, kemudian menolak akses TCP jauh yang lain. Ini bukan pengganti fail HBA lengkap: kekalkan pentadbiran setempat, replikasi dan mana-mana perkhidmatan dibenarkan yang lain, dan letakkan peraturan sempit sebelum kebenaran yang lebih luas.

Apabila terjemahan berperanan, HBA tidak boleh membezakan klien berdasarkan alamat asal mereka. Kekalkan penerimaan rangkaian secara ketat dan tuntut kelayakan pangkalan data sebenar, dan jangan sekali-kali menggantikan pengesahan trust dengan akaun sebenar.

Padanan pertama menang, tanpa sandaran

PostgreSQL membaca fail dari atas ke bawah dan menggunakan rekod pertama yang sepadan dengan sambungan. Tiada percubaan kedua jika pengesahan rekod itu gagal, jadi kebenaran luas yang lebih awal secara senyap mengalahkan penolakan yang kemudian.

Peraturan urutan itu ialah sebab paling biasa mengapa penolakan yang ditulis dengan teliti tidak pernah berkuat kuasa. Letakkan peraturan khusus dahulu dan yang luas terakhir, kemudian baca fail sebagai jujukan dan bukan sebagai set. Peraturan yang anda tambah di bahagian bawah bukan dasar, ia ialah komen. Pindahkannya ke atas dan muat semula sebelum anda membuat kesimpulan bahawa fail itu diabaikan.

Rujukan HBA mentakrifkan kedua-dua urutan dan perbezaan antara rekod host dan hostssl, yang penting apabila inti peraturan itu ialah sambungan mesti disulitkan.

Muat semula, mula semula dan kes penolakan

Perubahan HBA digunakan melalui muat semula, dan paparan pg_hba_file_rules membantu anda mencari ralat penghuraian. Paparan itu menerangkan kandungan fail semasa, bukan sama ada pelayan yang berjalan berjaya memuatkannya, jadi senarai yang bersih bukan bukti bahawa peraturan baharu itu aktif.

Perubahan pada pendengar memerlukan permulaan semula tersendiri, dan kedua-dua operasi mudah dikelirukan apabila perubahan kelihatan tidak memberi kesan.

Uji dengan sesi baharu: klien yang diluluskan dengan akaun yang dimaksudkan bersambung, akaun yang sama daripada laluan yang tidak diluluskan tidak, dan identiti pangkalan data yang tidak dibenarkan masih gagal dari dalam VPN. Ketiga-tiga hasil itu memisahkan sempadan rangkaian daripada kebenaran pangkalan data, dan itulah keseluruhan tujuan mengekalkan keputusan secara berasingan.

Artikel berkaitan