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

Ο μύθος: επιτρέψτε τον διακομιστή VPN και τελειώσατε

Ένα VPN με δρομολόγηση μπορεί να διατηρήσει τη διεύθυνση της σήραγγας του πελάτη μέχρι τον κεντρικό υπολογιστή του Docker. Μια πύλη που εκτελεί μετάφραση πηγής μπορεί να αντικαταστήσει αυτή τη διεύθυνση με τη δική της. Και τα δύο σχέδια είναι θεμιτά και παράγουν διαφορετικές πηγές για την ίδια ενέργεια χρήστη.

Άρα η φράση IP του διακομιστή VPN περιγράφει μια υπόθεση, όχι μια παρατήρηση. Μέχρι να μάθετε ποιο από τα δύο σχέδια βρίσκεται μπροστά σας, ο κανόνας είναι εικασία.

Πηγή: δεξαμενή πελατών ή μεταφρασμένη πύλη

Ελέγξτε τέσσερα πράγματα με τη σειρά. Πρώτο, τη δεξαμενή διευθύνσεων πελατών, για παράδειγμα 10.90.0.0/24. Δεύτερο, αν η πύλη μεταφράζει αυτή τη δεξαμενή πριν φτάσει στον κεντρικό υπολογιστή. Τρίτο, την πηγή που παρατηρεί πραγματικά ο κεντρικός υπολογιστής για μία νέα σύνδεση. Τέταρτο, αν η πιστοποίηση της εφαρμογής ξεχωρίζει μεμονωμένους χρήστες, γιατί μια κοινή μεταφρασμένη διεύθυνση δεν μπορεί.

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

Θύρα: το DNAT αλλάζει τον αριθμό που αντιστοιχίζετε

Στη συνήθη δημοσίευση μέσω γέφυρας Linux με Docker iptables, μια αντιστοίχιση κεντρικού υπολογιστή από 8443 στη θύρα 443 του κοντέινερ μεταφράζεται πριν εκτελεστεί το φίλτρο προώθησης. Το πακέτο φτάνει στο φίλτρο με θύρα προορισμού 443. Ένας κανόνας που ταιριάζει με 8443 σε εκείνο το σημείο δεν ενεργοποιείται ποτέ, παρόλο που 8443 είναι αυτό που πληκτρολόγησε ο πελάτης.

Η δημοσιευμένη θύρα εξακολουθεί να υπάρχει στην παρακολούθηση συνδέσεων, γι’ αυτό ο αρχικός προορισμός μπορεί να αντιστοιχιστεί εκεί όταν τον χρειάζεστε πραγματικά.

Αποφασίστε ποιος αριθμός εκφράζει την πρόθεση. Αντιστοιχίστε τη θύρα του κοντέινερ μετά το DNAT όταν ο κανόνας προστατεύει την υπηρεσία μέσα στο κοντέινερ. Αντιστοιχίστε τον αρχικό προορισμό με την επιλογή conntrack όταν ο κανόνας πρέπει να περιγράψει τι ζήτησε ο πελάτης, και δεχτείτε το πρόσθετο κόστος αντιστοίχισης και τη φροντίδα για τη σειρά των κανόνων που το συνοδεύουν.

Αλυσίδα: DOCKER-USER, όχι INPUT

Ο οδηγός του Docker για το iptables τοποθετεί την πολιτική προώθησης χρήστη στην αλυσίδα DOCKER-USER, η οποία αξιολογείται πριν από τους δικούς του κανόνες προώθησης του Docker. Ένας κανόνας αντιγραμμένος από υπηρεσία του κεντρικού υπολογιστή στην αλυσίδα INPUT φιλτράρει την κίνηση που απευθύνεται στον κεντρικό υπολογιστή, όχι την κίνηση που προωθείται σε κοντέινερ. Αυτό το λάθος παράγει έναν κανόνα που φαίνεται σωστός και δεν έχει καμία επίδραση στη διαδρομή του κοντέινερ.

Κρατήστε το εύρος πηγής, την ενεργή θύρα προορισμού, το πρωτόκολλο και τη διεπαφή εισόδου μαζί στον ίδιο κανόνα. Μια άδεια μόνο κατά πηγή για κάθε προωθούμενο προορισμό είναι ευρύτερη από την άδεια μιας δημοσιευμένης υπηρεσίας.

Επαληθεύστε με νέες συνδέσεις

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

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

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