Φανταστείτε ένα media box σε οικιακή σύνδεση που υποτίθεται ότι φτάνει στο διαδίκτυο μόνο μέσω σήραγγας. Όταν πέσει η σήραγγα, η εφαρμογή πρέπει να σταματήσει αντί να συνεχίσει ήσυχα πάνω από τη φυσική διεπαφή. Το να αποκτήσετε αυτή τη συμπεριφορά είναι πρόβλημα τείχους προστασίας και όχι δρομολόγησης, και η διάκριση μετράει γιατί μια διαδρομή μπορεί να αντικατασταθεί με επανεκκίνηση του δαίμονα, ενώ ένα φίλτρο μένει εκεί που το βάλατε. Ακολουθεί πώς αποφασίζει στην πραγματικότητα η διαδρομή του πακέτου και μετά πώς να περιορίσετε τις εξαιρέσεις που κρατούν τη σήραγγα σε επανασύνδεση.

Η τοπική έξοδος είναι διαφορετικό άγκιστρο από την προώθηση

Ένα πακέτο που φεύγει από εφαρμογή στο μηχάνημα διασχίζει το άγκιστρο εξόδου· ένα πακέτο που το μηχάνημα δρομολογεί για άλλον υπολογιστή διασχίζει την προώθηση. Μια πολιτική που αναφέρει μόνο forward περιορίζει το δεύτερο και αφήνει το πρώτο ορθάνοιχτο, γι' αυτό τόσα κλειδώματα εξόδου φαίνονται σωστά και δεν κάνουν τίποτα. Η αντιστοίχιση διεπαφής ανήκει στον ίδιο κανόνα: oifname "tun0" accept περνά κίνηση που έχει ήδη δρομολογηθεί έξω από τη σήραγγα. Δρομολόγηση και φιλτράρισμα παραμένουν επίσης ξεχωριστές αποφάσεις, ώστε μια διαδρομή προς τον πάροχο να μπορεί να υπάρχει ενώ το φίλτρο απορρίπτει το πακέτο. Σε αυτόν τον διαχωρισμό στηρίζεστε.

Μια πύλη που προωθεί για άλλες συσκευές χρειάζεται και τα δύο άγκιστρα. Το κλείδωμα μόνο της εξόδου προστατεύει το ίδιο το μηχάνημα και αφήνει κάθε πελάτη πιο κάτω ελεύθερο να διαρρεύσει.

Γράψτε τη λίστα εξαιρέσεων από το τελικό σημείο προς τα έξω

Ξεκινήστε από το τελικό σημείο της σήραγγας: μία διεύθυνση προορισμού ή ένα μικρό εγκεκριμένο σύνολο, το πρωτόκολλο μεταφοράς και τη θύρα προορισμού, για παράδειγμα udp dport 1194 ip daddr 203.0.113.7 accept. Αν ο πελάτης επιλύει όνομα υπολογιστή, η αρχική ανταλλαγή DNS χρειάζεται δικό της κανόνα περιορισμένο στον resolver και στη θύρα 53, όχι μια γενική άδεια στη διεύθυνση αυτού του resolver. Κάθε εξαίρεση πρέπει να ονομάζει τον λόγο για τον οποίο υπάρχει. Μια άδεια για όλη την κίνηση UDP προς τη θύρα του VPN καλύπτει πολύ περισσότερα από τη μία πιστοποιημένη υπηρεσία που είχατε στον νου.

Η αρχική επίλυση είναι το σημείο όπου τα κλειδώματα συνήθως σαπίζουν. Ένα σύνολο διευθύνσεων που ανανεώνεται με χρονόμετρο χρειάζεται καθορισμένη συμπεριφορά όταν η ανανέωση αποτυγχάνει, και αυτή η συμπεριφορά δεν μπορεί να είναι το άνοιγμα της σύνδεσης μέχρι να πετύχει. Ανανεώστε μέσα από τη σήραγγα όσο η σήραγγα είναι όρθια, και αλλιώς επιστρέψτε στο τελευταίο γνωστό υγιές τελικό σημείο.

Η τοπική διαχείριση χρειάζεται την ίδια μεταχείριση. Ένα υποδίκτυο διαχείρισης δεν είναι αξιόπιστο επειδή οι διευθύνσεις του είναι ιδιωτικές, και ένας κανόνας που το εμπιστεύεται προσκαλεί δεύτερη διαδρομή γύρω από το κλείδωμα.

Η αντιστοίχιση διεπαφής δεν αποδεικνύει υγιή σήραγγα

Κανόνες που δέχονται ό,τι φεύγει από το tun0 υποθέτουν ότι ένα πακέτο σε αυτή τη διεπαφή ήρθε από τη σήραγγα. Τα ονόματα διεπαφών δημιουργούνται ξανά, και ένα όνομα δεν είναι κρυπτογραφική ταυτότητα. Ο ομότιμος μπορεί επίσης να έχει φύγει ενώ η διεπαφή μένει όρθια, κάτι που κάνει τον κανόνα μια πολύ πειστική ανενέργεια.

Η παρακολούθηση συνδέσεων προσθέτει μια συναφή παγίδα. Ένας ευρύς κανόνας για εδραιωμένες συνδέσεις αναπαράγει την άδεια που απέκτησε νωρίτερα μια ροή, οπότε μια συνεδρία που ξεκίνησε πριν πέσει η σήραγγα συνεχίζει μετά. Περιορίστε την αποδοχή κατάστασης στις διεπαφές και τις διευθύνσεις που πραγματικά εννοείτε, αλλιώς έχετε χτίσει ένα κλείδωμα που ανοίγει μόνο του. Οι κανόνες εισόδου και εξόδου απαντούν επίσης σε διαφορετικά ερωτήματα, και το να σκληρύνετε τον έναν αγνοώντας τον άλλον αφήνει το μηχάνημα προσβάσιμο προς την κατεύθυνση που δεν σκεφτήκατε.

Τι επιβιώνει από κατάρρευση του δαίμονα

Ένα φίλτρο που εγκαθιστά σενάριο το οποίο εκτελείται αφού ανέβει η σήραγγα εξαφανίζεται μαζί με τη σήραγγα, ακριβώς τη στιγμή που χρειαζόταν. Φορτώστε το κλείδωμα στην εκκίνηση και αφήστε τον δαίμονα να διαχειρίζεται μόνο τις εξαιρέσεις του.

Η διαγραφή της προεπιλεγμένης διαδρομής δεν είναι υποκατάστατο επίσης. Η διαδρομή είναι κατάσταση που κατέχει και ξαναγράφει ο δαίμονας, και η αφαίρεσή της μπορεί να πάρει τη διαδρομή που χρειάζεται για επανασύνδεση. Το IPv6 χρειάζεται δικό του σχέδιο, γιατί η ανακάλυψη γειτόνων και οι αναγγελίες δρομολογητή είναι υπηρεσίες ζεύξης που πρέπει να συνεχίσουν να λειτουργούν όσο η συνηθισμένη κίνηση είναι αποκλεισμένη. Το DHCP ανήκει στην ίδια κατηγορία. Γράψτε τα ως εξαιρέσεις με σκοπό, αντί να τα ανακαλύπτετε αργότερα ως διακοπές.

Διαδρομή ανάκτησης πριν την ανάπτυξη

Δοκιμάστε το κλείδωμα όπως θα αποτύχει: εκκίνηση χωρίς σήραγγα, σκοτώστε τον δαίμονα, αλλάξτε το τελικό σημείο και επανασυνδεθείτε. Κάθε περίπτωση πρέπει να σταματά τις εφαρμογές και να αφήνει το κανάλι ανάκτησης σε λειτουργία. Κάντε το από κονσόλα, γιατί το απομακρυσμένο κέλυφος είναι η συνεδρία που πιθανότατα θα κλειδωθεί έξω από τον δικό σας κανόνα.

Έπειτα ελέγξτε τι μπορεί να φτάσει ακόμη μια συνηθισμένη εφαρμογή, με έναν ακίνδυνο προορισμό και ένα αίτημα που μπορείτε να επαληθεύσετε. Το αποτέλεσμα που θέλετε είναι άρνηση στη σύνδεση και επιτυχία μέσα από τη σήραγγα, όχι ένα αμφίσημο timeout που θα μπορούσε να σημαίνει και τα δύο. Κρατήστε το σύνολο κανόνων στον ίδιο ιδιοκτήτη με το υπόλοιπο τείχος προστασίας αντί να αντικαταστήσετε όλο τον πίνακα από ένα σενάριο κελύφους. Μια πολιτική όπου κάθε άδεια μπορεί να δικαιολογήσει τον εαυτό της αξίζει περισσότερο από ένα μακρύ σύνολο κανόνων που κανείς δεν μπορεί να εξηγήσει.

Σχετικά άρθρα