Δοκιμή αλλαγών τείχους προστασίας χωρίς να κλειδώσετε τον εαυτό σας έξω
Κατατάξτε τις διαδρομές ανάκτησης πριν μπει ο κανόνας και έπειτα επαληθεύστε με μια ροή που πρέπει να αξιολογήσει η νέα πολιτική, όχι με τη συνεδρία που επιβίωσε.
Ο κανόνας μπαίνει, το τερματικό που έχετε ήδη συνεχίζει να απαντά και η επόμενη σύνδεση απορρίπτεται. Αυτό το κενό είναι όλη η δυσκολία της δοκιμής μιας αλλαγής τείχους προστασίας μέσω της σύνδεσης που αλλάζετε. Η παρακολούθηση συνδέσεων αποφασίζει μία φορά και μετά σταματά να κοιτάζει, οπότε μια εδραιωμένη ροή είναι η μόνη δοκιμή που δεν μπορεί να δει τη νέα πολιτική. Στη συνέχεια συγκρίνονται οι τρεις δρόμοι επιστροφής και έπειτα καθορίζεται η σειρά με την οποία αλλάζουν και ελέγχονται οι κανόνες.
Γιατί η συνεδρία που επιβίωσε είναι η ασθενέστερη απόδειξη
Ένα τείχος προστασίας με κατάσταση αξιολογεί το πρώτο πακέτο μιας ροής και κρατά αυτή την ετυμηγορία όσο ζει η εγγραφή. Κανόνες που προστίθενται μετά εφαρμόζονται σε ροές που ξεκινούν αργότερα, γι' αυτό το παράθυρο στο οποίο πληκτρολογείτε παραμένει χρησιμοποιήσιμο ενώ όλοι οι άλλοι απορρίπτονται. Ό,τι μάθετε από αυτό περιγράφει την πολιτική που ίσχυε πριν από λίγα λεπτά. Ακόμη και μια καταγραφή που λαμβάνεται σε εκείνη τη ροή δείχνει μια απόφαση που το μηχάνημα έχει ήδη πάρει.
Αντιμετωπίστε τη λειτουργική συνεδρία ως έξοδο κινδύνου και όχι ως μέτρηση. Κάθε έλεγχος που αξίζει να τρέξει πρέπει να ανοίξει μια νέα ροή από μια πηγή που θα αξιολογήσει ο νέος κανόνας, και ο πρώτος έλεγχος θα πρέπει να είναι εκείνος του οποίου η αποτυχία θα πονούσε περισσότερο. Όταν αυτή η συνεδρία είναι ο μόνος τρόπος να μπείτε, η αλλαγή δεν είναι έτοιμη να γίνει.
Τρεις δρόμοι επιστροφής, ταξινομημένοι κατά το τι εξαρτάται ο καθένας
Κατατάξτε τις επιλογές κατά το πόσο εξαρτώνται από τη συσκευή υπό δοκιμή, γιατί αυτή η κατάταξη είναι αυτό στο οποίο καταφεύγετε όταν ο κανόνας αποδειχθεί λανθασμένος. Μια κονσόλα που δεν περνά ποτέ από το τείχος προστασίας είναι ανεξάρτητη, μια δοκιμασμένη επαναφορά είναι σχεδόν, και η συνεδρία που είναι ήδη ανοιχτή δεν είναι.
| Way back in | What it survives | Where it fails |
|---|---|---|
| out-of-band or hypervisor console | a policy that blocks new logins | needs separate access you have already tried |
| rollback rehearsed on that platform | a rule that breaks remote access | fails when nobody ever ran it |
| the session that is already open | the change itself | cannot show whether new flows work |
Πριν από την αλλαγή, συνδεθείτε μέσω της κονσόλας και αποδείξτε ότι λειτουργεί, γιατί μια διαδρομή εκτός ζώνης που δεν χρησιμοποιήσατε ποτέ είναι σχεδιάγραμμα και όχι εφεδρική λύση. Μια επαναφορά κερδίζει τη θέση της μόνο μετά από πρόβα σε εκείνη την πλατφόρμα, με εκείνο το σύνολο κανόνων, ακολουθώντας την εγκεκριμένη διαδικασία αντί να αυτοσχεδιάζετε σε ζωντανό μηχάνημα. Γράψτε τα βήματα και ζητήστε από κάποιον άλλο να σας τα διαβάσει. Αν η ακολουθία χρειάζεται τη μνήμη σας για να ολοκληρωθεί, δεν είναι σχέδιο.
Μία αλλαγή και έπειτα μια σύνδεση που πρέπει να αξιολογηθεί
Αποθηκεύστε το ζωντανό σύνολο κανόνων και το αρχείο που το κατέχει και έπειτα κάντε μία στενή επεξεργασία. Μία αλλαγή ανά δοκιμή κρατά το αποτέλεσμα αποδόσιμο· δύο ταυτόχρονα σας αφήνουν με ένα μηχάνημα που δουλεύει και καμία ιδέα για το ποια επεξεργασία έκανε τη δουλειά. Όπου η πλατφόρμα μπορεί να αναλύσει μια διαμόρφωση χωρίς να τη φορτώσει, κάντε το πρώτα, ώστε ένα τυπογραφικό λάθος να αποτύχει όσο δεν διακυβεύεται τίποτα.
nft list ruleset > /root/ruleset.before
nft -c -f /etc/nftables.conf
Έπειτα ξεκινήστε μια νέα συνεδρία από μια πηγή που θα ταιριάξει ο αλλαγμένος κανόνας, ενώ η κονσόλα είναι ακόμη συνδεδεμένη. Επαναλάβετε το μία φορά αν πετύχει, γιατί η πρώτη προσπάθεια μπορεί να προσγειωθεί σε μια εγγραφή που ο πίνακας κρατούσε ήδη. Αν αποτύχει, έχετε ακόμη έναν τρόπο να μπείτε και μια απόφαση να αναιρέσετε, που είναι το φθηνότερο κακό αποτέλεσμα που υπάρχει.
Οι μετρητές, η κατάσταση και το αρχείο απαντούν σε διαφορετικές ερωτήσεις
Κάθε μία από τις τρεις παρατηρήσεις μπορεί να φαίνεται πειστική από μόνη της και να σας παραπλανήσει για τις άλλες δύο. Οι μετρητές δείχνουν αν η ροή που μόλις δημιουργήσατε έφτασε στον κανόνα που επεξεργαστήκατε. Ο πίνακας κατάστασης δείχνει ποιες ροές πιστεύει το μηχάνημα ότι είναι ήδη εδραιωμένες, και έτσι ένας σπασμένος κανόνας μπορεί να φαίνεται ακόμη υγιής. Το αποθηκευμένο αρχείο δείχνει τι θα κάνει η συσκευή μετά την επόμενη επαναφόρτωση, και αυτό μπορεί να μην είναι αυτό που κάνει τώρα το ζωντανό σύνολο κανόνων.
ss -tn state established
Διαβάστε τους μετρητές ως δέλτα και όχι ως σύνολο, γιατί ο μόνος αριθμός που μετράει είναι αυτός που μετακίνησε η ροή δοκιμής σας. Ένας κανόνας του οποίου ο μετρητής δεν αυξάνεται ποτέ δεν ταιριάζει, όσο σωστός κι αν φαίνεται στο χαρτί. Επιβεβαιώστε και την περίπτωση απόρριψης: μια πολιτική που δεν έχει απορρίψει ποτέ τίποτα δεν έχει αποδείξει ποτέ ότι απορρίπτει αυτό που θέλατε να μπλοκάρετε. Περάστε από μία διεπαφή σε κάθε οικογένεια που φέρει πραγματικά η ανάπτυξη, γιατί ένας κανόνας v4 δεν λέει τίποτα για μια ροή v6.
Επαναφέρετε από το αποθηκευμένο σύνολο κανόνων και έπειτα κάντε το αρχείο να συμφωνήσει
Όταν η αλλαγή αποτύχει, φορτώστε το αποθηκευμένο σύνολο κανόνων αντί να προσθέτετε επιτρεπτικούς κανόνες μέχρι να δουλέψουν ξανά οι συνδέσεις. Κάθε επιπλέον άδεια καταπραΰνει το σύμπτωμα και αφήνει μια τρύπα που επιβιώνει του περιστατικού και της ανάμνησής του. Επαναφέρετε, επανασυνδεθείτε και έπειτα κρατήστε τη χαμένη σύγκριση δίπλα στο αρχείο του τι δοκιμάσατε.
Μετά από μια επιτυχημένη αλλαγή, κάντε το αρχείο στον δίσκο να περιγράφει το σύνολο κανόνων που εκτελείται, και επιβεβαιώστε ότι μια επαναφόρτωση το αναπαράγει. Ένα ζωντανό σύνολο κανόνων που έχει ξεφύγει από το δικό του αρχείο διαμόρφωσης είναι μια παγίδα στημένη για την επόμενη επανεκκίνηση.