Αφήστε έναν πελάτη OpenVPN να κάνει SSH σε άλλον χωρίς να ανοίξει η δεξαμενή
Κρατήστε το client-to-client κλειστό, αφήστε τον πυρήνα να προωθήσει μία ροή και αφήστε την υπόλοιπη δεξαμενή κλειστή. Δύο κανόνες στον διακομιστή και ένας στον προορισμό.
Ένας πελάτης πρέπει να φτάσει την υπηρεσία SSH ενός άλλου πελάτη, και το υπόλοιπο της δεξαμενής πρέπει να μείνει τόσο απομονωμένο όσο σήμερα. Ο δελεαστικός διακόπτης είναι το client-to-client, που ενεργοποιεί την πρόσβαση μεταξύ ομοτίμων για όλους ταυτόχρονα και δίνει την απόφαση στο OpenVPN αντί στον πυρήνα. Μια στενότερη απάντηση κρατά αυτόν τον διακόπτη κλειστό και αφήνει τη δρομολόγηση και το τείχος προστασίας του ίδιου του διακομιστή να μεταφέρουν ακριβώς μία ροή.
Ο μηχανισμός μετράει περισσότερο από το κείμενο του κανόνα, γιατί οι δύο προσεγγίσεις τοποθετούν το πακέτο σε διαφορετικά σημεία. Το να ξέρετε ποια επιλέξατε εξηγεί και τον κανόνα που μοιάζει να μην κάνει τίποτα και τον ομότιμο που συνδέεται χωρίς αυτόν.
Πού μετακινεί το πακέτο το client-to-client
Με το client-to-client ενεργό, ο διακομιστής προωθεί το πακέτο του ομοτίμου εσωτερικά αντί να το στείλει ξανά έξω από τη συσκευή τούνελ, ώστε το πακέτο να μην φτάνει ποτέ στη διαδρομή προώθησης του πυρήνα. Αυτό είναι βολικό και σημαίνει επίσης ότι το τείχος προστασίας σας δεν βλέπει ποτέ τη ροή που θα έπρεπε να επιτηρεί. Αφήστε την επιλογή κλειστή και ο διακομιστής δρομολογεί το πακέτο ξανά έξω από την ίδια διεπαφή, κάτι που το βάζει μπροστά από το netfilter. Ίδια διεπαφή μέσα, ίδια έξω, και η αλυσίδα FORWARD έχει τον λόγο.
Η ανταλλαγή είναι σαφής: κερδίζετε ένα σημείο πολιτικής και αναλαμβάνετε τη δρομολόγηση και την προώθηση που έκανε η συντόμευση για εσάς. Αυτή η εργασία είναι μικρή για μία ροή και μεγαλώνει με κάθε εξαίρεση που προσθέτετε. Μετρήστε τις εξαιρέσεις τώρα, γιατί στο σύνολο κανόνων ζει πραγματικά η πολιτική μεταξύ ομοτίμων.
Η διαδρομή που ακολουθεί στην πραγματικότητα ένα πακέτο ομοτίμου
Υποθέστε μια υπηρεσία Linux Community OpenVPN 2.6, επεξεργασία TUN στον χώρο χρήστη αντί για DCO, τοπολογία υποδικτύου, tun0 και μια δεξαμενή 10.44.0.0/24 με τον πελάτη A στο 10.44.0.21 και τον πελάτη B στο 10.44.0.37. Με τοπολογία υποδικτύου η διεύθυνση και η μάσκα που έλαβε ο A καλύπτουν ήδη τη δεξαμενή, οπότε ο A στέλνει το πακέτο στη συσκευή τούνελ χωρίς να χρειάζεται επιπλέον ωθημένη διαδρομή. Ελέγξτε την πραγματική διαδρομή στον A αντί να υποθέσετε μία.
Στον διακομιστή το πακέτο φτάνει διευθυνσιοδοτημένο στον B, που δεν είναι τοπική διεύθυνση, οπότε προωθείται. Η προώθηση IPv4 πρέπει να είναι ενεργή για να συμβεί αυτό, και η αναζήτηση διαδρομής πρέπει να στείλει το πακέτο ξανά έξω από το tun0. Το τείχος προστασίας βλέπει επομένως μια προωθημένη ροή με την ίδια διεπαφή και στις δύο πλευρές, και αυτή είναι η λεπτομέρεια που χάνουν τα περισσότερα σύνολα κανόνων. Εδώ δεν χρειάζεται μετάφραση πηγής, και το να μείνει η διεύθυνση του A άθικτη είναι αυτό που επιτρέπει στον B να εφαρμόσει τον δικό του κανόνα με βάση την πηγή.
Δύο κανόνες στον διακομιστή, με αυτή τη σειρά
Τρεις κανόνες φέρουν ολόκληρη την άδεια: η προώθηση, η εξαίρεση του ζεύγους και μια προεπιλεγμένη απόρριψη για το ζεύγος τούνελ. Ο κανόνας αποδοχής ονομάζει το ζεύγος και την υπηρεσία, ώστε η άδεια να επιβιώνει σε μια δεξαμενή που μεγαλώνει. Τοποθετήστε τον πριν από οποιαδήποτε γενική άρνηση της κίνησης τούνελ-προς-τούνελ, γιατί κερδίζει η πρώτη αντιστοίχιση:
sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o tun0 -s 10.44.0.21 -d 10.44.0.37 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -j DROPΑυτές οι εντολές είναι ενδεικτικές και ανήκουν στον μηχανισμό που χρησιμοποιεί ο κεντρικός σας υπολογιστής για να διατηρεί κανόνες· μια εισαγωγή κατά την εκτέλεση εξαφανίζεται στην επόμενη εκκίνηση. Ο κανόνας κατάστασης είναι αυτός που αφήνει τις απαντήσεις του B και τη χειραψία TCP να επιστρέψουν χωρίς δεύτερη, κατοπτρική αποδοχή.
Ελέγξτε τους μετρητές μετά, όχι τη λίστα κανόνων, γιατί ένας κανόνας που δεν ταιριάζει ποτέ μοιάζει ίδιος με έναν που λειτουργεί. Αν οι μετρητές μείνουν στο μηδέν, το πακέτο δεν ακολουθεί τη διαδρομή που νομίζετε.
Τι πρέπει ακόμα να επιτρέψει ο B
Ο B εκτελεί την υπηρεσία SSH, άρα ο B αποφασίζει αν κάτι ακούει στη διεύθυνση του τούνελ και αν το δικό του τείχος προστασίας υποδέχεται την πηγή. Μια άδεια δικτύου στον διακομιστή δεν είναι άδεια για κανέναν λογαριασμό στον B, και η επαλήθευση κλειδιού κεντρικού υπολογιστή και η ταυτοποίηση χρήστη εξακολουθούν να ισχύουν όπως από οπουδήποτε αλλού.
Δοκιμάστε πρώτα τη θετική περίπτωση: μια νέα σύνδεση SSH από τον A στη διεύθυνση τούνελ του B, αποδεκτή με το αναμενόμενο κλειδί κεντρικού υπολογιστή. Έπειτα δοκιμάστε άλλον ομότιμο ή άλλη θύρα και επιβεβαιώστε ότι απορρίπτεται, γιατί μια άδεια που επιτρέπει σιωπηλά τα πάντα δεν ξεχωρίζει από μια που λειτουργεί μέχρι να μετρήσει. Και τα δύο μισά αυτής της δοκιμής είναι απαραίτητα, και το δεύτερο είναι αυτό που παραλείπουν οι άνθρωποι.
Καταγράψτε τις εκχωρημένες διευθύνσεις, τις πραγματικές διαδρομές και στους δύο πελάτες και τους ακριβείς κανόνες στον διακομιστή και στον B. Ένα επιτυχημένο ping στην πύλη ή μια ανοιχτή θύρα στον διακομιστή δεν αποδεικνύει τίποτα από αυτά, αφού και τα δύο μπορεί να ισχύουν ενώ η προώθηση μεταξύ ομοτίμων είναι ακόμα αποκλεισμένη. Γράψτε αυτούς τους αριθμούς όσο το τούνελ είναι πάνω, γιατί η διεύθυνση που λαμβάνει ένας πελάτης μετά από επανασύνδεση μπορεί να είναι άλλη.