Τοπική προώθηση SSH σε υπάρχον HTTP proxy: δύο διευθύνσεις loopback
Ένα υπάρχον proxy σε κεντρικό υπολογιστή SSH μπορεί να εξυπηρετήσει μία εφαρμογή μέσω μίας μόνο τοπικής προώθησης. Κρατήστε τις δύο διευθύνσεις loopback και το πρωτόκολλο του proxy ξεχωριστά.
Το εγκεκριμένο proxy σας εκτελείται σε έναν κεντρικό υπολογιστή άλματος όπου ακούει μόνο στο loopback, οπότε τίποτα έξω από αυτό το μηχάνημα δεν μπορεί να το φτάσει. Δεν χρειάζεστε VPN ή νέο proxy· χρειάζεστε μία θύρα αυτού του μηχανήματος μεταφερμένη σε μία δική σας θύρα. Μια τοπική προώθηση κάνει ακριβώς αυτό και απαιτεί μία εντολή συν μία ρύθμιση της εφαρμογής. Η σύγχυση συνήθως προέρχεται από το μπέρδεμα του ποια διεύθυνση loopback ανήκει σε ποιο μηχάνημα.
Αποφασίστε αν υπάρχει ήδη σταθερό proxy
Αυτή η τεχνική προωθεί μια υπηρεσία που εκτελείται ήδη. Αν ο απομακρυσμένος κεντρικός υπολογιστής έχει μόνο έναν δαίμονα SSH και κανένα proxy, καμία ποσότητα προώθησης δεν δημιουργεί ένα, και η σύνδεση θα απορριφθεί από την απομακρυσμένη πλευρά. Επιβεβαιώστε ότι το proxy είναι δεσμευμένο, ποια είναι η θύρα του και αν ακούει στο 127.0.0.1 ή σε μια συγκεκριμένη διεύθυνση διασύνδεσης, γιατί αυτή η διεύθυνση είναι ο στόχος της προώθησης.
Αν το επιβεβαιώσετε πρώτα, γλιτώνετε την αποσφαλμάτωση μιας σήραγγας που δεν συνδέθηκε ποτέ με τίποτα.
Χτίστε την προώθηση και διαβάστε την εντολή
Η μορφή που θέλετε δεσμεύει μια θύρα loopback στον φορητό σας υπολογιστή και τη συνδέει, από την πλευρά του διακομιστή, με τη διεύθυνση του proxy όπως τη βλέπει ο διακομιστής.
ssh -NT -o ControlPath=none -o ExitOnForwardFailure=yes \
-L 127.0.0.1:13128:127.0.0.1:3128 [email protected]Το -N καταστέλλει μια απομακρυσμένη εντολή και το -T καταστέλλει τη δέσμευση termios, γιατί θέλετε σήραγγα και όχι κέλυφος. Η πρώτη διεύθυνση loopback είναι εκεί όπου ακούει ο φορητός υπολογιστής· η δεύτερη επιλύεται από τον διακομιστή SSH, άρα το 127.0.0.1 εκεί σημαίνει το proxy σε εκείνο το μηχάνημα. Το ExitOnForwardFailure κάνει την εντολή να αποτυγχάνει ηχηρά αν η τοπική θύρα είναι ήδη κατειλημμένη, αντί να ξεκινά μια συνεδρία που δεν προωθεί τίποτα. Γράψτε τη διεύθυνση προορισμού όπως την επιλύει ο διακομιστής, γιατί ένα όνομα που μόνο ο φορητός σας μπορεί να επιλύσει θα αποτύχει στην άλλη πλευρά.
Η πολιτική του ίδιου του διακομιστή ισχύει πριν δουλέψει οτιδήποτε από αυτά. Το AllowTcpForwarding πρέπει να το επιτρέπει, και το PermitOpen μπορεί να περιορίσει σε ποιους προορισμούς και θύρες μπορεί να φτάσει μια συνεδρία, άρα μια προώθηση που δέχεται ο πελάτης μπορεί παρόλα αυτά να απορριφθεί από τον διακομιστή. Η απόρριψη εμφανίζεται ως σφάλμα προώθησης ή καναλιού στον πελάτη, και το διάβασμα αυτού του μηνύματος είναι ταχύτερο από την επεξεργασία της εντολής.
Στρέψτε μία εφαρμογή στην προώθηση
Ρυθμίστε την εφαρμογή να χρησιμοποιεί HTTP proxy στο http://127.0.0.1:13128, με διαπιστευτήρια αν το απομακρυσμένο proxy τα απαιτεί. Κρατήστε την επαλήθευση πιστοποιητικών της ίδιας της εφαρμογής για προορισμούς HTTPS, αφού η σήραγγα του proxy δεν την αντικαθιστά. Αυτή είναι σταθερή προώθηση μίας υπηρεσίας, άρα πρέπει να ειπωθεί στην εφαρμογή ότι υπάρχει proxy αντί να την αφήσετε να τον ανακαλύψει.
Ένας γρήγορος έλεγχος πριν ρυθμίσετε κάτι μόνιμο: curl -x http://127.0.0.1:13128 -I https://example.com, που δοκιμάζει τη μέθοδο HTTP CONNECT που πρέπει να υποστηρίζει το proxy.
Κρατήστε την εξουσία εκεί που ήταν
Το απομακρυσμένο proxy εξακολουθεί να αποφασίζει ποιους προορισμούς και μεθόδους επιτρέπει, και μια σύνδεση SSH δεν πρέπει να δίνει σιωπηρά σε κάθε λογαριασμό ένα γενικό web relay. Η δέσμευση στο 127.0.0.1 στον φορητό αποφεύγει τη δημοσίευση της θύρας στο τοπικό σας δίκτυο, και δεν κάνει τη θύρα ιδιωτική από άλλες διεργασίες στο ίδιο μηχάνημα. Η αντικατάσταση αυτής της δέσμευσης με διεύθυνση wildcard για να μοιραστείτε το proxy είναι ο τρόπος που δημιουργείται ένα μη διαχειριζόμενο ανοιχτό relay.
Η μεταφορά SSH προστατεύει το άλμα προς τον διακομιστή. Πέρα από αυτό το σημείο το proxy ανοίγει τη δική του σύνδεση, άρα ένα απλό αίτημα HTTP προς έναν προορισμό παραμένει απλό πέρα από τον διακομιστή, παρόλο που το πρώτο τμήμα ήταν κρυπτογραφημένο.
Επαληθεύστε και τα δύο άκρα και μετά καθαρίστε
Η τοπική ρύθμιση σήραγγας και η επιτυχία της απομακρυσμένης υπηρεσίας είναι διαφορετικά αποτελέσματα, και η κατάσταση εξόδου της εντολής σας λέει μόνο για το πρώτο. Ελέγξτε ότι ο ακροατής υπάρχει με το ss -ltn, μετά κάντε ένα επιτρεπόμενο αίτημα της εφαρμογής και ένα αίτημα που το proxy θα έπρεπε να απορρίψει. Αν και τα δύο συμπεριφέρονται όπως αναμένεται, η διαδρομή είναι πραγματική· αν η σήραγγα είναι ενεργή και κάθε αίτημα αποτυγχάνει, το proxy απορρίπτει ή δεν μπορεί να φτάσει τον προορισμό.
Όταν τελειώσετε, σταματήστε τη διεργασία SSH που το κατέχει, αφαιρέστε τη ρύθμιση proxy από την εφαρμογή και επιβεβαιώστε ότι η τοπική θύρα έφυγε αντί να αφήσετε έναν ακροατή που θα επιβιώσει της εργασίας.