Proxy HTTP, τούνελ SSH ή VPN: διαλέξτε το σωστό επίπεδο
Ένα proxy, ένα τούνελ SSH και ένα VPN μεταφέρουν διαφορετική κίνηση. Ταιριάξτε το επίπεδο με τα πρωτόκολλα και την επίλυση ονομάτων που χρειάζεται η εργασία σας και μετά επαληθεύστε τη διαδρομή.
Ρωτήστε τρεις μηχανικούς πώς φτάνουν σε μια εσωτερική υπηρεσία και θα πάρετε τρία σχέδια: ένα web proxy, ένα τούνελ SSH ή ένα πλήρες VPN. Και τα τρία μπορούν να φέρουν μια απομακρυσμένη υπηρεσία σε απόσταση και τα τρία μπορούν να κάνουν την κίνηση να φαίνεται σαν να έρχεται από αλλού. Οι διαφορές εμφανίζονται αργότερα, όταν το πρωτόκολλο που χρησιμοποιείται δεν είναι αυτό που υποθέτει το επιλεγμένο εργαλείο. Ένα σχέδιο που περνά έναν γρήγορο έλεγχο στον περιηγητή αποτυγχάνει τακτικά στην εφαρμογή που προκάλεσε το αίτημα.
Αποφασίστε από δύο γεγονότα: ποια πρωτόκολλα πρέπει να περάσουν και ποιος μπορεί να επιλύσει τα ονόματα που εμπλέκονται. Όλα τα άλλα είναι προτίμηση.
Ένα proxy μετακινεί μόνο ό,τι καταλαβαίνει
Ένα web proxy αναλύει το πρωτόκολλο για το οποίο φτιάχτηκε. Ο πελάτης του δίνει ένα αίτημα και αυτό προωθεί το αίτημα, έτσι μια εφαρμογή χωρίς ρύθμιση proxy δεν συμμετέχει καθόλου. Για HTTPS ο πελάτης χρειάζεται ένα αδιαφανές κανάλι, το οποίο το proxy παρέχει μέσω CONNECT αντί να διαβάζει το αίτημα.
Μια δυναμική προώθηση SSH ανοίγει μια τοπική θύρα που μιλά SOCKS, και αυτή η θύρα μεταφέρει ένα ρεύμα TCP σε όποιον προορισμό ονομάσει ο πελάτης. Τα πρωτόκολλα πάνω σε TCP συνήθως δουλεύουν μέσω αυτής. Το UDP όχι, εκτός αν ένα εργαλείο προσθέσει υποστήριξη ρητά. Μια τοπική προώθηση είναι ακόμη στενότερη: μία τοπική θύρα αντιστοιχισμένη σε έναν σταθερό κεντρικό υπολογιστή και θύρα, που εξυπηρετεί μία γνωστή υπηρεσία και τίποτε άλλο.
ssh -D 1080 user@bastion
ssh -L 8443:fileserver.internal:443 user@bastionΈνα VPN μετακινεί πακέτα. Ό,τι δρομολογεί ο πελάτης στο τούνελ το διασχίζει, UDP και ICMP μαζί, γι' αυτό ταιριάζει σε απαίτηση δικτύου και όχι σε μία σύνδεση.
Κάποιος πρέπει να επιλύσει το όνομα
Όταν το όνομα στόχος υπάρχει μόνο στο DNS του απομακρυσμένου δικτύου, το μηχάνημα που κάνει την αναζήτηση πρέπει να βλέπει αυτή τη ζώνη. Ένα web proxy κάνει την αναζήτηση μόνο του, έτσι ένα εσωτερικό όνομα δουλεύει μέσω αυτού ακόμη και όταν ο φορητός δεν μπορεί να επιλύσει το όνομα καθόλου. Το SOCKS μπορεί να συμπεριφερθεί το ίδιο, αλλά μόνο αν ο πελάτης προωθήσει το όνομα αντί να συνδεθεί σε διεύθυνση που έχει ήδη επιλύσει. Αυτή η επιλογή βρίσκεται στον πελάτη, όχι στον διακομιστή.
Το curl δείχνει τον διαχωρισμό καθαρά: μια σημαία περνά το όνομα κεντρικού υπολογιστή στο proxy, μια άλλη το επιλύει πρώτα τοπικά. Με τοπική επίλυση ένα όνομα μόνο εσωτερικό αποτυγχάνει πριν αγγίξει οποιοδήποτε τούνελ, και το σφάλμα κατηγορεί το proxy για κάτι που ήταν στην πραγματικότητα απόφαση DNS.
Ένα VPN παίρνει την τρίτη διαδρομή εγκαθιστώντας τον ιδιωτικό επιλυτή και τον τομέα αναζήτησης δίπλα στις διαδρομές. Αυτό είναι βολικό και κατασκευάζει μια γνωστή ψευδαίσθηση: μια διαδρομή που υπάρχει με επιλυτή που δεν απαντά μοιάζει ακριβώς με νεκρό τούνελ, παρόλο που τα πακέτα φτάνουν στην άλλη πλευρά.
Όταν το δίκτυο επιτρέπει μόνο μία έξοδο
Πολλά εταιρικά δίκτυα επιτρέπουν εξερχόμενες συνδέσεις μόνο μέσω πιστοποιημένου web proxy. OpenVPN και SSH μπορούν και τα δύο να δουλέψουν εκεί, το πρώτο με τούνελ της δικής του μεταφοράς μέσω του proxy και το δεύτερο με εντολή proxy που τρέχει έναν μικρό βοηθό CONNECT.
Τα τούνελ πάνω σε TCP επιβιώνουν αυτού του περιορισμού και ένα VPN πάνω σε UDP όχι, κάτι που εξηγεί πάρα πολλές ρυθμίσεις που δουλεύουν στο σπίτι και αποτυγχάνουν στο γραφείο. Ένα δεύτερο κόστος περνά εύκολα απαρατήρητο: ένα τούνελ TCP που μεταφέρεται μέσα σε σύνδεση TCP μέσω proxy έχει τώρα δύο επίπεδα που επαναμεταδίδουν, και υπό απώλεια αυτό το ζεύγος κολλάει με τρόπο που κανένα επίπεδο δεν παράγει μόνο του.
Η αλυσίδα μεσαζόντων είναι διαφορετικό ερώτημα από την επιλογή επιπέδου. Η προσθήκη δεύτερου proxy ή Tor αλλάζει ποιος παρατηρεί τι, και η θέση στην αλυσίδα καθορίζει ποιο άλμα βλέπει το κρυπτοκείμενο.
Η σειρά μετρά περισσότερο από τον αριθμό των αλμάτων. Ένα εξωτερικό άλμα βλέπει κρυπτογραφημένη ροή ενώ ένα εσωτερικό βλέπει το απλό κείμενο που μεταφέρει, έτσι μια αλυσίδα είναι τόσο ιδιωτική όσο ο λιγότερο προσεκτικός κρίκος της. Η ανάμειξη πρωτοκόλλων στα άλματα δεν το βελτιώνει αυτόματα. Κυρίως κάνει τους τρόπους αποτυχίας δυσκολότερους στη σκέψη.
Μια πλαστή διεύθυνση δεν είναι μία από τις επιλογές
Η κατασκευή πακέτων με διεύθυνση προέλευσης κάποιου άλλου δεν πετυχαίνει τίποτε χρήσιμο: οι απαντήσεις ταξιδεύουν στον πραγματικό κάτοχο και τα περισσότερα δίκτυα πετούν την κίνηση εντελώς. Ένας μεσάζων χρειάζεται ακριβώς επειδή η προέλευση δεν μπορεί να επινοηθεί, και αυτή είναι η έντιμη αιτιολόγηση και για τα τρία σχέδια.
Περιορίζει επίσης τι μπορεί να ισχυριστεί καθένα από αυτά. Το να φαίνεται ότι προέρχεται από μια συγκεκριμένη διεύθυνση είναι ερώτημα για το πού έχει εκχωρηθεί νόμιμα αυτή η διεύθυνση και ποιος μπορεί να τη δρομολογήσει, όχι για το ποιο εργαλείο μπορεί να πλαστογραφήσει μια κεφαλίδα. Αν ένα σχέδιο υποθέτει το αντίθετο, η υπόθεση αποτυγχάνει στον πρώτο πάροχο που τη φιλτράρει. Γράψτε την υπόθεση ώστε η αποτυχία να είναι αναγνωρίσιμη όταν έρθει.
Αποφασίστε με πρωτόκολλα και ονόματα
Προτιμήστε proxy όταν ένας μόνο web πελάτης χρειάζεται μία μόνο web υπηρεσία και έχει ρυθμίσεις proxy. Προτιμήστε τούνελ SSH όταν μια χούφτα γνωστών υπηρεσιών TCP αρκεί και η πρόσβαση SSH υπάρχει ήδη. Προτιμήστε VPN όταν πολλές εφαρμογές, κίνηση εκτός TCP, ιδιωτικό DNS ή μια επαναχρησιμοποιήσιμη διαδρομή αποτελούν μέρος της απαίτησης.
Μετά επαληθεύστε με τον πραγματικό πελάτη και το πραγματικό όνομα. Το να φορτώσετε μια σελίδα μέσω proxy δεν σας μαθαίνει τίποτε για το UDP, και το να κάνετε ένα εργαλείο να δουλέψει μέσω SOCKS δεν σας μαθαίνει τίποτε για τον επιλυτή του συστήματος. Διαβάστε σε ποια τοπική διεύθυνση προσδέθηκε η διεργασία και ποιος επιλυτής απάντησε. Αυτή είναι η διαφορά ανάμεσα σε μια διαδρομή που δουλεύει και σε μια που δούλεψε κατά τύχη μία φορά.