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

Το drop, το reject και το reset είναι διαφορετικά

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

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

Τι κάνει η εφαρμογή όσο διαρκεί το κενό

Το TCP επαναμεταδίδει με αυξανόμενες καθυστερήσεις, και ο προεπιλεγμένος προϋπολογισμός επαναλήψεων του Linux λήγει κάπου γύρω στο ένα τέταρτο της ώρας και όχι σε δευτερόλεπτα. Μέχρι τότε η υποδοχή δεν είναι ούτε χρήσιμα ανοιχτή ούτε κλειστή. Εφαρμογές με δικά τους keepalive ή χρονικά όρια αιτημάτων τα παρατάνε συχνά νωρίτερα, γι' αυτό δύο προγράμματα στον ίδιο υπολογιστή συμπεριφέρονται διαφορετικά κατά τη διάρκεια μιας διακοπής.

Όταν το τούνελ επιστρέφει, η τοπική υποδοχή μένει αμετάβλητη αλλά η διαδρομή μπορεί να μην είναι. Μια νέα δημόσια διεύθυνση προέλευσης παράγει διαφορετικό four-tuple στον διακομιστή, οπότε ένα stateful τείχος προστασίας στην άλλη πλευρά δεν ταιριάζει πλέον με τη συνεδρία. Η σύνδεση είναι νεκρή παρόλο που ο πελάτης δεν είδε ποτέ σφάλμα.

Αποφασίστε αν απαιτείται ανάκτηση

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

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

Ελέγξτε τον αποκλεισμό και την ανάκτηση ξεχωριστά

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

ss -tnp state established '( dport = :443 )'
sudo conntrack -L -p tcp --dport 443
sudo tcpdump -ni any 'tcp port 443 and tcp[tcpflags] & tcp-syn != 0'

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

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

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