Αντίστροφο SSH για μία συσκευή: ακροατής loopback ή δρομολογημένο VPN;
Μία θύρα διαχείρισης για μια συσκευή που μπορεί μόνο να καλεί προς τα έξω. Τρεις συνθήκες καθορίζουν αν αρκεί ένα αντίστροφο τούνελ ή αν χρειάζεστε πραγματική δρομολογημένη διαδρομή.
Η συσκευή σας βρίσκεται πίσω από NAT παρόχου, μπορεί να ανοίγει εξερχόμενες συνδέσεις και εκτελεί διακομιστή SSH στον οποίο δεν μπορεί να φτάσει κανείς. Το αίτημα που φτάνει συνήθως διατυπώνεται ως "δώστε της ένα VPN", που είναι μία απάντηση ανάμεσα σε αρκετές. Πριν το δεχτείτε, αποφασίστε αν χρειάζεστε μία διαχειριστική θύρα TCP ή μια δρομολογημένη διαδρομή προς ένα ολόκληρο υποδίκτυο, γιατί αυτά είναι διαφορετικά έργα με διαφορετική έκθεση.
Ένα αντίστροφο τούνελ απαντά καλά στη στενή εκδοχή. Η συσκευή καλεί τον κόμβο σας, ζητά από τον κόμβο να ακούει σε θύρα loopback και προωθεί αυτή τη θύρα πίσω στη δική της υπηρεσία SSH. Έπειτα οι διαχειριστές φτάνουν στον ακροατή μέσω του κόμβου, όχι μέσω του δημόσιου διαδικτύου.
Τρεις συνθήκες που κρίνουν την επιλογή
Γράψτε τις πριν από οποιαδήποτε ρύθμιση. Είναι το όριο ανάμεσα σε μια περιορισμένη διαχειριστική είσοδο και σε επέκταση δικτύου, και η σύγχυσή τους είναι ο τρόπος με τον οποίο ένα τούνελ πέντε γραμμών γίνεται ένα επίπεδο δίκτυο χωρίς ιδιοκτήτη.
| Condition | Reverse tunnel fits | Something else is needed |
|---|---|---|
| How many services must be reachable? | One, or a small fixed set on loopback | Anything that needs many ports or dynamic discovery |
| Who connects, and how are they authenticated? | Named administrators with their own hub accounts | Third parties, or anything needing per-flow audit you do not control |
| Does the device's own LAN need to be reachable? | No | Yes, so a routed VPN or a managed platform is the honest answer |
Η τρίτη γραμμή είναι αυτή για την οποία διαφωνούν οι άνθρωποι. Ένα τούνελ στη θύρα SSH μιας συσκευής δεν βάζει τους γείτονές της στο δίκτυό σας και δεν πρέπει να δίνεται η εντύπωση ότι το κάνει μέσω αλυσίδας περαιτέρω προωθήσεων. Αν η απαίτηση είναι πραγματικά το LAN, πείτε το και σχεδιάστε εκείνο αντί γι' αυτό.
Πλευρά κόμβου: περιορισμένος λογαριασμός αναμετάδοσης
Δώστε σε κάθε συσκευή τον δικό της λογαριασμό αναμετάδοσης με έλεγχο ταυτότητας δημόσιου κλειδιού και χωρίς διαδραστική συνεδρία. Match μπλοκ περιορισμένο σε αυτόν τον λογαριασμό κρατά την άδεια μικρή, και το ιδιωτικό κλειδί μένει στη συσκευή όπου ανήκει.
Match User relay-dev-7
AuthenticationMethods publickey
PubkeyAuthentication yes
AllowTcpForwarding remote
PermitListen 127.0.0.1:21022
GatewayPorts no
MaxSessions 0
PermitTTY no
X11Forwarding no
AllowAgentForwarding no
MaxSessions 0 είναι η ενδιαφέρουσα γραμμή. Αρνείται συνεδρίες κελύφους και υποσυστημάτων ενώ επιτρέπει ακόμη την προώθηση που χρειάζεται η συσκευή, ώστε ένα κλεμμένο κλειδί να μην μπορεί να μετατραπεί σε διαδραστική σύνδεση. PermitListen καρφιτσώνει τη διεύθυνση και τη θύρα του ακροατή στην πλευρά του κόμβου, και GatewayPorts no το κρατά στο loopback αντί να το ανοίξει στο δίκτυο όπου βρίσκεται ο κόμβος.
Δοκιμάστε την ενεργή ρύθμιση πριν την επαναφόρτωση και κρατήστε μια δεύτερη συνεδρία ανοιχτή όσο το κάνετε. Match μπλοκ που εφαρμόζεται κατά λάθος σε όλους, ή ένα τυπογραφικό λάθος σε όνομα επιλογής, είναι ο κλασικός τρόπος να κλειδωθείτε έξω από το μηχάνημα που θωρακίζετε. Εκτυπώστε την τρέχουσα ρύθμιση και διαβάστε τις επιλογές ξανά αντί να εμπιστεύεστε το αρχείο που μόλις γράψατε. Σημειώστε ότι η υποστήριξη επιλογών διαφέρει μεταξύ builds, οπότε μια γραμμή που γίνεται δεκτή σε νεότερο διακομιστή μπορεί απλώς να αγνοείται από παλαιότερο.
Πλευρά συσκευής: προώθηση που αποτυγχάνει ηχηρά
Η συσκευή ανοίγει τη σύνδεση και ζητά τον ακροατή. Οι δύο διευθύνσεις στο -R όρισμα σημαίνουν διαφορετικά πράγματα, και η ανάγνωσή τους από αριστερά προς τα δεξιά είναι ο ταχύτερος τρόπος να θυμάστε ποια είναι ποια.
ssh -NT \
-o ExitOnForwardFailure=yes \
-o ServerAliveInterval=30 \
-o ServerAliveCountMax=3 \
-R 127.0.0.1:21022:127.0.0.1:22 \
[email protected]
Το αριστερό ζεύγος είναι εκεί όπου πρέπει να ακούει ο κόμβος. Το δεξιό ζεύγος είναι αυτό με το οποίο συνδέεται η συσκευή όταν φτάνει ένα αίτημα, επιλυμένο από την πλευρά της ίδιας της συσκευής. Η ανταλλαγή τους παράγει ένα τούνελ που σηκώνεται καθαρά και προωθεί στο λάθος σημείο, κάτι χειρότερο από μια αποτυχία.
ExitOnForwardFailure=yes κάνει την εντολή να εξέρχεται όταν ο ζητούμενος ακροατής δεν μπορεί να εδραιωθεί, ώστε ένας βρόχος επανεκκίνησης να σας λέει την αλήθεια αντί να αφήνει μια μισολειτουργική συνεδρία. Δεν λέει τίποτα για το αν η τοπική υπηρεσία SSH είναι υγιής αργότερα, οπότε συνδυάστε το με έναν διαχειριστή διεργασιών και έναν περιστασιακό πραγματικό έλεγχο σύνδεσης.
Ποτέ μην αντικαθιστάτε τη διεύθυνση ακρόασης loopback με μπαλαντέρ για να αποφύγετε ένα επιπλέον άλμα. Αυτή η μία αλλαγή είναι η διαφορά ανάμεσα σε μια διαδρομή διαχείρισης και σε μια δημόσια προσβάσιμη θύρα, και συνήθως συμβαίνει κατά την αποσφαλμάτωση και μετά μένει. Αν ένας συνάδελφος δεν φτάνει στη θύρα μέσω του κόμβου, διορθώστε τη ρύθμιση του άλματος αντί να διευρύνετε το bind. Το loopback είναι ολόκληρο το επιχείρημα ασφαλείας αυτού του σχεδίου.
Πρόσβαση διαχειριστή μέσω του κόμβου
Ένας διαχειριστής με συνηθισμένο λογαριασμό στον κόμβο μπορεί να πηδήξει μέσω αυτού στην προωθημένη θύρα. Ο λογαριασμός αναμετάδοσης δεν χρησιμοποιείται για αυτό, και αυτό είναι το νόημα του να τους κρατάτε χωριστούς.
ssh -J [email protected] -o HostKeyAlias=device-7 \
-p 21022 [email protected]
Επαληθεύστε το κλειδί κεντρικού υπολογιστή της συσκευής κάτω από το ψευδώνυμο που επιλέξατε, γιατί αυτό το κλειδί ταυτοποιεί τη συσκευή στο τέλος της αλυσίδας και το τούνελ είναι μόνο μεταφορά. Η σύνδεση από άκρη σε άκρη εξακολουθεί να πιστοποιεί και τα δύο άκρα· ένα τούνελ που καταλήγει σε κοινό κόμβο δεν το κάνει από μόνο του αξιόπιστη διαδρομή.
Αναλάβετε τον κύκλο ζωής
Εκτελέστε την εντολή της συσκευής κάτω από έναν διαχειριστή διεργασιών με ακριβώς μία ενεργή παρουσία και μια πολιτική επανεκκίνησης που επιλέξατε σκόπιμα. Οι επιλογές keepalive ανιχνεύουν έναν νεκρό ομόλογο· δεν ανασταίνουν μια διεργασία που τερματίστηκε.
Έπειτα γράψτε τη διαδικασία απόσυρσης. Κάθε συσκευή αποκτά τον δικό της ακροατή και το δικό της κλειδί, οπότε ο παροπλισμός σημαίνει ανάκληση αυτού του λογαριασμού και αφαίρεση αυτού του κλειδιού, όχι εναλλαγή ενός μυστικού που μοιράζεται όλος ο στόλος.
Τέλος, θυμηθείτε τι σας προσφέρει το loopback. Περιορίζει την έκθεση δικτύου και δεν κάνει τίποτα για άλλους τοπικούς χρήστες σε κοινό κόμβο, οπότε η πολιτική πρόσβασης του ίδιου του κόμβου πρέπει να είναι ακόμη σωστή. Αναφορά sshd_config τεκμηριώνει καθεμία από τις επιλογές που χρησιμοποιήθηκαν παραπάνω, και αξίζει να διαβάσετε πλήρως τις ενότητες προώθησης πριν διευρύνετε οποιαδήποτε από αυτές.