Το PostgreSQL δεν μαθαίνει ποτέ ότι ένας πελάτης βρίσκεται σε VPN. Δέχεται μια σύνδεση TCP από μια διεύθυνση και ένα σύνολο διαπιστευτηρίων και αποφασίζει τι θα κάνει με αυτά. Το να εξαρτήσετε την πρόσβαση από το τούνελ σημαίνει επομένως να τακτοποιήσετε τρεις ξεχωριστές αποφάσεις ώστε να συμφωνούν και στη συνέχεια να ελέγξετε τη μία διεύθυνση που βλέπει πραγματικά ο διακομιστής αντί για εκείνη που σχεδιάσατε στο διάγραμμα.

Τρεις αποφάσεις που δεν πρέπει να συγχωνεύονται

Το πού ακούει ο διακομιστής είναι μία απόφαση. Ποια κίνηση μπορεί να φτάσει σε αυτή τη διεύθυνση είναι δεύτερη και τη λαμβάνει το firewall του κεντρικού υπολογιστή και οποιοδήποτε δίκτυο-όριο μπροστά του. Ποια ταυτότητα βάσης δεδομένων μπορεί να πιστοποιηθεί από ποια προέλευση είναι τρίτη και λαμβάνεται στο pg_hba.conf.

Κάθε μία επιβάλλεται από διαφορετικό συστατικό και κάθε μία αποτυγχάνει με διαφορετικό μήνυμα. Η συγχώνευσή τους σε μια συζήτηση είναι ο τρόπος με τον οποίο οι άνθρωποι καταλήγουν να επεξεργάζονται το αρχείο HBA για να διορθώσουν ένα πρόβλημα firewall. Κρατήστε τις σε σειρά: ένας listener που δεν είναι δεσμευμένος δεν μπορεί να προσεγγιστεί, σε μια φιλτραρισμένη θύρα δεν μπορεί να συνδεθεί κανείς, και ένας κανόνας HBA αποφασίζει μόνο τι συμβαίνει αφού υπάρξει σύνδεση. Όταν μια αλλαγή δεν έχει αποτέλεσμα, εντοπίστε ποιο από τα τρία επίπεδα αλλάξατε πραγματικά.

Πού ακούει ο διακομιστής

Δεσμεύστε σε μια διεύθυνση που έχει πραγματικά εκχωρηθεί στο μηχάνημα, όχι σε ένα όνομα διεπαφής:

listen_addresses = '10.20.0.30'

Η βάση δεδομένων μπορεί να βρίσκεται πίσω από την πύλη VPN χωρίς δική της διεπαφή τούνελ, και γι' αυτό ακριβώς μια διεύθυνση είναι το σωστό πράγμα που πρέπει να ονομάσετε. Η αλλαγή αυτής της ρύθμισης απαιτεί πλήρη επανεκκίνηση· μια επαναφόρτωση δεν αρκεί.

Στη συνέχεια φιλτράρετε τη θύρα, συνήθως 5432, στον κεντρικό υπολογιστή και σε κάθε όριο μπροστά του. Η δέσμευση σε μια ιδιωτική διεύθυνση δεν είναι απόδειξη δημόσιας άρνησης, επειδή μια προώθηση θύρας ή μια αντιστοίχιση διεύθυνσης cloud μπορεί ακόμη να παραδώσει πακέτα σε αυτόν τον ιδιωτικό listener.

Η διεύθυνση που βλέπει πραγματικά το HBA

Με δρομολογημένη πρόσβαση ο διακομιστής βλέπει την εσωτερική διεύθυνση τούνελ κάθε πελάτη. Με μετάφραση προέλευσης βλέπει αντ' αυτού τη μεταφρασμένη διεύθυνση της πύλης, και κάθε πελάτης συμπτύσσεται σε αυτή τη μία τιμή. Εξετάστε την προέλευση μέσα από τα δικά του στοιχεία σύνδεσης του διακομιστή πριν επιλέξετε ένα πρόθεμα για να επιτρέψετε.

Για μια εγκατάσταση που χρησιμοποιεί ήδη TLS και SCRAM, ένα σκόπιμα στενό παράδειγμα απομακρυσμένης πρόσβασης μοιάζει έτσι:

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

Αυτό επιτρέπει έναν ρόλο και μία βάση δεδομένων μέσω TLS από τη δεξαμενή που αναφέρεται και στη συνέχεια απορρίπτει άλλη απομακρυσμένη πρόσβαση TCP. Δεν αντικαθιστά ένα πλήρες αρχείο HBA: διατηρήστε την τοπική διαχείριση, την αντιγραφή και οποιαδήποτε άλλη εξουσιοδοτημένη υπηρεσία, και τοποθετήστε τους στενούς κανόνες πριν από τις ευρύτερες άδειες.

Όταν η μετάφραση είναι στο παιχνίδι, το HBA δεν μπορεί να ξεχωρίσει τους πελάτες από τις αρχικές τους διευθύνσεις. Κρατήστε την εισδοχή δικτύου αυστηρή και απαιτήστε πραγματικά διαπιστευτήρια βάσης δεδομένων, και μην αντικαθιστάτε ποτέ την πιστοποίηση trust με έναν πραγματικό λογαριασμό.

Κερδίζει το πρώτο ταίριασμα, χωρίς εφεδρεία

Το PostgreSQL διαβάζει το αρχείο από πάνω προς τα κάτω και χρησιμοποιεί την πρώτη εγγραφή που ταιριάζει με τη σύνδεση. Δεν υπάρχει δεύτερη προσπάθεια αν η πιστοποίηση αυτής της εγγραφής αποτύχει, οπότε μια προηγούμενη ευρεία άδεια νικά σιωπηλά μια μεταγενέστερη απόρριψη.

Αυτός ο κανόνας σειράς είναι ο πιο συνηθισμένος λόγος για τον οποίο μια προσεκτικά γραμμένη απόρριψη δεν τίθεται ποτέ σε ισχύ. Βάλτε τους συγκεκριμένους κανόνες πρώτους και τους ευρείς τελευταίους και μετά διαβάστε το αρχείο ως ακολουθία και όχι ως σύνολο. Ένας κανόνας που προσθέσατε στο τέλος δεν είναι πολιτική, είναι σχόλιο. Μετακινήστε τον πάνω και επαναφορτώστε πριν συμπεράνετε ότι το αρχείο αγνοείται.

Η αναφορά HBA ορίζει τόσο τη σειρά όσο και τη διαφορά μεταξύ εγγραφών host και hostssl, κάτι που έχει σημασία όταν το νόημα του κανόνα είναι ότι η σύνδεση πρέπει να είναι κρυπτογραφημένη.

Επαναφόρτωση, επανεκκίνηση και η περίπτωση απόρριψης

Οι αλλαγές HBA εφαρμόζονται με επαναφόρτωση και η προβολή pg_hba_file_rules σας βοηθά να βρείτε σφάλματα ανάλυσης. Αυτή η προβολή περιγράφει το τρέχον περιεχόμενο του αρχείου, όχι αν ο εκτελούμενος διακομιστής τις φόρτωσε με επιτυχία, επομένως μια καθαρή λίστα δεν είναι απόδειξη ότι οι νέοι κανόνες είναι ενεργοί.

Οι αλλαγές στον listener χρειάζονται τη δική τους επανεκκίνηση, και οι δύο ενέργειες συγχέονται εύκολα όταν μια αλλαγή φαίνεται να μην έχει αποτέλεσμα.

Δοκιμάστε με νέες συνεδρίες: ένας εγκεκριμένος πελάτης με τον προβλεπόμενο λογαριασμό συνδέεται, ο ίδιος λογαριασμός από μη εγκεκριμένη διαδρομή δεν συνδέεται, και μια μη εξουσιοδοτημένη ταυτότητα βάσης δεδομένων εξακολουθεί να αποτυγχάνει από μέσα στο VPN. Αυτά τα τρία αποτελέσματα χωρίζουν το δίκτυο-όριο από την εξουσιοδότηση βάσης δεδομένων, που είναι όλο το νόημα του να κρατάτε τις αποφάσεις χωριστά.

Σχετικά άρθρα