Δώστε σε ένα απομακρυσμένο Pi ένα SOCKS proxy μέσω του SSH client σας
Η απομακρυσμένη δυναμική προώθηση τοποθετεί τον ακροατή SOCKS στο Pi και κάνει την επόμενη σύνδεση από την εγκεκριμένη διαδρομή VPN του φορητού σας. Χωρίς δεύτερο διακομιστή SSH.
Υποθέτετε ότι ένα SOCKS proxy πρέπει να εκτελείται εκεί όπου υπάρχει ήδη η πρόσβαση στο δίκτυο. Το OpenSSH μπορεί να τοποθετήσει τον ακροατή εντελώς αλλού. Μια απομακρυσμένη δυναμική προώθηση ανοίγει τη θύρα SOCKS σε έναν απομακρυσμένο κεντρικό υπολογιστή και ξεκινά κάθε σύνδεση από τον τοπικό σας SSH client, που μεταφέρει την εγκεκριμένη διαδρομή VPN του φορητού σας. Το Pi αποκτά ένα περιορισμένο proxy; δεν κληρονομεί τη σήραγγα ή τα προνόμιά σας.
Ο ακροατής και η πλευρά από την οποία ξεκινά η σύνδεση μπορεί να διαφέρουν
Ένα συνηθισμένο ssh -D 1080 εκτελεί τον ακροατή στο δικό σας μηχάνημα και στέλνει τις συνδέσεις από εκεί. Μια απομακρυσμένη δυναμική προώθηση το αντιστρέφει: ο ακροατής εμφανίζεται στον απομακρυσμένο κεντρικό υπολογιστή και κάθε σύνδεση που δέχεται ανοίγει από την τοπική πλευρά. Το εγχειρίδιο του OpenSSH client τεκμηριώνει το -R χωρίς σταθερό προορισμό ακριβώς ως αυτή τη διάταξη SOCKS4/5.
Μια υποστηριζόμενη εντολή από τον φορητό έχει ως εξής, με τον λογαριασμό, τους κεντρικούς υπολογιστές και τη θύρα ως θέσεις δεσμευτικές:
ssh -NT -S none -o ExitOnForwardFailure=yes \
-o PermitRemoteOpen=app.corp.example:443 \
-R 1080 [email protected]
Τρεις λεπτομέρειες κάνουν χρήσιμη δουλειά εκεί. Το -S none κρατά τη συνεδρία μακριά από έναν κοινόχρηστο master ελέγχου, το ExitOnForwardFailure αποτυγχάνει γρήγορα αντί να σας αφήσει με μισάνοιχτη συνεδρία, και το PermitRemoteOpen περιορίζει το τι μπορεί να φτάσει ο απομακρυσμένος ακροατής. Χρησιμοποιήστε εξουσιοδοτημένο λογαριασμό Pi και επαληθεύστε το κλειδί του κεντρικού υπολογιστή πριν προσθέσετε οτιδήποτε από αυτά.
Τι εκθέτει πραγματικά ο απομακρυσμένος ακροατής
Ελέγξτε την πολιτική προώθησης του διακομιστή πριν βασιστείτε στον ακροατή. Με το GatewayPorts no η απομακρυσμένη προώθηση παραμένει δεσμευμένη στο loopback, και αυτή είναι η έκθεση που θέλετε. Ένας διακομιστής που έχει ρυθμιστεί να επιβάλλει προώθηση με μπαλαντέρ δημοσιεύει την ίδια θύρα σε κάθε διεπαφή, κάτι που μετατρέπει ένα προσωπικό proxy σε κάτι προσβάσιμο από το τοπικό δίκτυο.
Το loopback επίσης δεν είναι όριο ανά χρήστη. Μια άλλη διεργασία στο Pi μπορεί να συνδεθεί στο 127.0.0.1:1080 αν γνωρίζει τη θύρα, οπότε οι τοπικοί λογαριασμοί του Pi και ό,τι εκτελείται σε αυτό αποτελούν μέρος του σχεδιασμού πρόσβασής σας. Αυτός είναι λόγος να κρατάτε τη λίστα προορισμών στενή, όχι λόγος να παραλείψετε τον έλεγχο πολιτικής.
Κρατήστε τον επιτρεπόμενο προορισμό συγκεκριμένο για την εφαρμογή που προσπαθείτε να προσεγγίσετε. Η αντικατάστασή του με απεριόριστη προώθηση για να δουλέψει ένα άσχετο πρόγραμμα διευρύνει τη διαδρομή πολύ πέρα από το πρόβλημα με το οποίο ξεκινήσατε. Μια λίστα προορισμών καταγράφει επίσης για τι ήταν η συνεδρία, κάτι που βοηθά όποιον την ελέγξει αργότερα. Γράψτε την δίπλα στον λογαριασμό που χρησιμοποιήσατε.
Στείλτε μία εφαρμογή μέσω του proxy
Ένας client στο Pi που καταλαβαίνει proxy μπορεί τότε να κάνει το αίτημα. Το πρόθεμα socks5h παραδίδει το όνομα προορισμού στο proxy, ώστε η αναζήτηση και η σύνδεση να γίνονται και οι δύο στην πλευρά του φορητού, και ταιριάζει με τον ονομαστικό προορισμό στο PermitRemoteOpen:
curl --proxy socks5h://127.0.0.1:1080 \
--noproxy '' https://app.corp.example/
Διατηρήστε την κανονική επικύρωση πιστοποιητικού και τον δικό της έλεγχο ταυτότητας της εφαρμογής. Το proxy αλλάζει πού δημιουργείται η σύνδεση TCP; δεν κάνει ασφαλή μια υπηρεσία χωρίς έλεγχο ταυτότητας και δεν μετατρέπει ένα αυτοϋπογεγραμμένο άκρο σε αξιόπιστο.
Ο φορητός χρειάζεται ακόμη τη δική του διαδρομή και πρόσβαση στον resolver τόσο στον διακομιστή SSH όσο και στην εφαρμογή. Η κίνηση του SSH client του πρέπει να επιλέγεται από την εγκεκριμένη πολιτική VPN, και μια εξαίρεση split-tunnel μπορεί να στείλει αυτή την κίνηση σε διαφορετική διαδρομή από αυτή που δοκιμάσατε.
Αποδείξτε τη διαδρομή και κλείστε την
Επιβεβαιώστε ότι ο ακροατής υπάρχει εκεί που τον περιμένετε και ότι απαντά μόνο ο προβλεπόμενος προορισμός:
$ ss -ltnp | grep 1080
LISTEN 0 128 127.0.0.1:1080 0.0.0.0:*
$ curl -sS -o /dev/null -w '%{http_code}\n' \
--proxy socks5h://127.0.0.1:1080 https://app.corp.example/
Το ExitOnForwardFailure μπορεί να αποδείξει ότι η προώθηση εγκαταστάθηκε, και πάλι δεν μπορεί να πιστοποιήσει ότι η σύνδεση στην εφαρμογή πετυχαίνει παρακάτω. Δοκιμάστε την εφαρμογή, όχι μόνο τη θύρα. Ένας ακροατής που δέχεται και μετά αποτυγχάνει σε κάθε αίτημα συνήθως σημαίνει ότι το όνομα προορισμού ή η διαδρομή του φορητού είναι λάθος, όχι ότι απέτυχε η σήραγγα.
Αυτή η διάταξη μεταφέρει μόνο TCP. UDP, ICMP και προγράμματα που αγνοούν τις ρυθμίσεις proxy μένουν έξω από αυτήν, και η προώθηση τελειώνει τη στιγμή που τελειώνει η συνεδρία SSH. Σταματήστε αυτή τη συνεδρία όταν τελειώσετε και αφαιρέστε τη ρύθμιση proxy που προσθέσατε στην εφαρμογή.
Για μόνιμη πρόσβαση, χρησιμοποιήστε αντ' αυτού την υποστηριζόμενη εγγραφή του ιδιοκτήτη του δικτύου ή μια διαχειριζόμενη πύλη. Ένα αντίστροφο proxy είναι το λάθος εργαλείο για την παράκαμψη περιορισμών συσκευής ή πόρων ενός VPN; χρησιμοποιημένο μέσα σε αυτούς, είναι απλώς μία εξουσιοδοτημένη διαδρομή εφαρμογής με ρητά όρια.