PostgreSQL preko VPN-a: koju izvornu adresu će vidjeti pg_hba
Listener, firewall i prvo pravilo HBA koje se poklapa tri su odluke. Provjerite izvor koji PostgreSQL zaista prima prije nego što odaberete prefiks.
PostgreSQL nikada ne sazna da je klijent na VPN-u. Prima TCP vezu s neke adrese i skup akreditiva te odlučuje šta će s njima. Zato učiniti pristup zavisnim od tunela znači uskladiti tri odvojene odluke, a zatim provjeriti jedinu adresu koju server zaista vidi, umjesto one koju ste nacrtali na dijagramu.
Tri odluke koje se ne smiju spojiti
Gdje server sluša jedna je odluka. Koji promet može doći do te adrese druga je, koju donosi firewall na hostu i svaka mrežna granica ispred njega. Koji se identitet baze podataka može autentificirati s kojeg izvora treća je, donesena u pg_hba.conf.
Svaku od njih provodi druga komponenta i svaka pada s drugom porukom. Njihovo spajanje u raspravi način je na koji ljudi završe s uređivanjem HBA datoteke da bi popravili problem firewalla. Držite ih u redu: listener koji nije vezan ne može se dosegnuti, na filtrirani port ne može se spojiti, a HBA pravilo odlučuje samo o tome šta se događa nakon što veza postoji. Kada promjena nema učinka, utvrdite koji ste od tri sloja zapravo promijenili.
Gdje server sluša
Vežite se na adresu koja je zaista dodijeljena mašini, a ne na naziv interfejsa:
listen_addresses = '10.20.0.30'Baza podataka može stajati iza VPN gatewaya bez vlastitog tunelskog interfejsa, i upravo je zato adresa prava stvar koju treba imenovati. Promjena ove postavke zahtijeva potpuno ponovno pokretanje; reload nije dovoljan.
Zatim filtrirajte port, obično 5432, na hostu i na svakoj granici ispred njega. Vezivanje na privatnu adresu nije dokaz javnog odbijanja, jer port forwarding ili cloud mapiranje adrese još uvijek mogu dostaviti pakete tom privatnom listeneru.
Adresa koju HBA zaista vidi
S rutiranim pristupom server vidi unutrašnju tunelsku adresu svakog klijenta. S translacijom izvora umjesto toga vidi prevedenu adresu gatewaya i svaki klijent se sažima u tu jednu vrijednost. Provjerite izvor kroz servereve vlastite dokaze o vezama prije nego što odaberete prefiks koji ćete dozvoliti.
Za instalaciju koja već koristi TLS i SCRAM, namjerno uska primjer daljinskog pristupa izgleda ovako:
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 rejectTo dopušta jednu rolu i jednu bazu podataka preko TLS-a iz navedenog pool-a, a zatim odbija ostali daljinski TCP pristup. To nije zamjena za potpunu HBA datoteku: zadržite lokalnu administraciju, replikaciju i bilo koju drugu ovlaštenu uslugu, a uska pravila stavite prije širih dopuštenja.
Kada je translacija u igri, HBA ne može razlikovati klijente po njihovim izvornim adresama. Držite mrežni prijem čvrstim i zahtijevajte stvarne akreditive baze podataka, i nikada ne zamjenjujte trust autentifikaciju stvarnim računom.
Prvo poklapanje pobjeđuje, bez rezerve
PostgreSQL čita datoteku odozgo prema dolje i koristi prvi zapis koji se poklapa s vezom. Nema drugog pokušaja ako autentifikacija tog zapisa ne uspije, pa ranije široko dopuštenje tiho pobjeđuje kasnije odbijanje.
To pravilo reda najčešći je razlog zašto pažljivo napisano odbijanje nikada ne stupi na snagu. Stavite specifična pravila prva, a široka posljednja, pa čitajte datoteku kao niz, a ne kao skup. Pravilo koje ste dodali na dno nije politika, to je komentar. Pomjerite ga gore i učitajte ponovo prije nego što zaključite da se datoteka ignorira.
HBA referenca definiše i red i razliku između zapisa host i hostssl, što je važno kada je poenta pravila da veza mora biti šifrirana.
Reload, restart i slučaj odbijanja
Promjene HBA primjenjuju se reloadom, a prikaz pg_hba_file_rules pomaže vam pronaći greške parsiranja. Taj prikaz opisuje trenutni sadržaj datoteke, a ne to da li ih je pokrenuti server uspješno učitao, pa čist spisak nije dokaz da su nova pravila aktivna.
Promjene listenera trebaju vlastiti restart, a dvije je operacije lako zamijeniti kada izgleda da promjena nema učinka.
Testirajte sa svježim sesijama: odobreni klijent s predviđenim računom se spaja, isti račun s neodobrene staze ne, a neovlašteni identitet baze podataka i dalje pada iz unutrašnjosti VPN-a. Ta tri rezultata razdvajaju mrežnu granicu od autorizacije baze podataka, što je i cijela poenta držanja odluka odvojeno.