Νέος κανόνας UFW, παλιά σύνδεση: κερδίζει η κατάσταση established
Ένας στενός κανόνας απόρριψης δρομολόγησης του UFW παρακάμπτει κίνηση που οι προηγούμενοι κανόνες έχουν ήδη δεχτεί. Δείτε πού να τον εισαγάγετε και τι αφήνει ακόμη να περάσει η κατάσταση established.
Το να προσθέσετε έναν κανόνα απόρριψης και να δείτε μια ανοιχτή λήψη να συνεχίζεται δεν είναι σφάλμα του UFW. Ο κανόνας που προσθέσατε βρίσκεται μετά από κανόνες που έχουν ήδη δεχτεί τη ροή, και μια σύνδεση που είχε καθιερωθεί νωρίτερα συνεχίζει να ταιριάζει μαζί τους. Η διόρθωση σημαίνει εισαγωγή στη σωστή θέση και κατανόηση του τι υπόσχονται οι προηγούμενοι κανόνες. Η στενή εκδοχή αυτής της αλλαγής ακολουθεί.
Αποφασίζει η σειρά, όχι η ύπαρξη του κανόνα
Το UFW είναι ένα front end που γράφει κανόνες netfilter σε στάδια: ένα τμήμα πλαισίου που εκτελείται πριν από τους κανόνες χρήστη, μετά οι ίδιοι οι κανόνες χρήστη και τέλος ένα τμήμα που εκτελείται μετά από αυτούς. Οι προεπιλεγμένοι κανόνες πριν δέχονται κίνηση συνδέσεων established και related, και αυτοί οι κανόνες αξιολογούνται πριν από οτιδήποτε προσθέτετε με ένα συνηθισμένο allow ή deny. Η αναφορά εντολών του UFW τεκμηριώνει τη σύνταξη εισαγωγής και την αριθμημένη προβολή κατάστασης από την οποία εξαρτάται αυτή η αλλαγή.
Αυτή η σειρά εξηγεί την έκπληξη. Ο νέος σας κανόνας είναι πραγματικός και βρίσκεται στον σωστό πίνακα, αλλά δεν είναι η πρώτη απόφαση που συναντά το πακέτο. Μια σύνδεση που παρακολουθείται ήδη ως established δεν φτάνει ποτέ σε αυτόν.
Χρησιμοποιήστε κανόνες route για αυτή τη δουλειά, επειδή το πακέτο προωθείται μέσω της πύλης και δεν απευθύνεται στις δικές της υπηρεσίες. Ένας κανόνας εισόδου θα φιλτράριζε λάθος κίνηση και θα φαινόταν σαν να μην κάνει τίποτα.
Εισαγάγετε πάνω από τη γενική άδεια
Προεπισκοπήστε την εισαγωγή πριν την εφαρμόσετε και επιβεβαιώστε ότι ο κανόνας δεν υπάρχει ήδη αλλού στη λίστα. Η αντιγραφή μιας πανομοιότυπης πολιτικής κάνει την ύστερη αφαίρεση αμφίσημη, και όποιος αφαιρέσει το λάθος αντίγραφο δεν θα το προσέξει για εβδομάδες.
sudo ufw --dry-run route insert 1 deny in on tun0 proto tcp from 10.88.0.55/32 to 192.0.2.88/32
Αν η προεπισκόπηση δείχνει ακριβώς έναν κανόνα στη θέση που περιμένετε, εφαρμόστε την ίδια εντολή χωρίς τη σημαία dry-run. Η θέση 1 τον τοποθετεί πάνω από τις ευρύτερες άδειες χρήστη, όχι πάνω από τους κανόνες πλαισίου που εξετάστηκαν νωρίτερα. Επιβεβαιώστε ότι το όνομα της διεπαφής ταιριάζει με τη συσκευή σήραγγας σε αυτή την πύλη, γιατί ένας κανόνας που περιορίζεται σε μια διεπαφή που δεν υπάρχει πια θα κάθεται στη λίστα και θα φαίνεται σωστός χωρίς να ταιριάζει με τίποτα. Μετονομάστε την αναφορά της συσκευής πριν την εφαρμογή, όχι αφού αποτύχει η δοκιμή.
Δεν εμφανίζεται θύρα προορισμού σε αυτόν τον κανόνα, οπότε απορρίπτει κάθε θύρα TCP σε αυτή τη διεύθυνση και όχι μόνο το HTTPS. Αν η πρόθεση είναι μία υπηρεσία, ονομάστε τη θύρα· ένας κανόνας ευρύτερος από την πολιτική είναι ένα μελλοντικό περιστατικό που περιμένει τον πρώτο αναγνώστη του.
Περιορίστε την πηγή σε μία μόνο διεύθυνση μόνο αν αυτή η διεύθυνση είναι δεσμευμένη στην προβλεπόμενη ταυτότητα. Μια δεξαμενή VPN με δυναμική ανάθεση μπορεί αύριο να δώσει την ίδια διεύθυνση σε άλλον πελάτη, και η απόρριψη θα ακολουθούσε τη διεύθυνση και όχι το πρόσωπο.
Οι established ροές επιβιώνουν του νέου κανόνα
Η παρακολούθηση συνδέσεων είναι ο λόγος που η υπάρχουσα συνεδρία συνεχίζεται. Μόλις μια ροή καταγραφεί ως established, οι κανόνες πριν δέχονται τα πακέτα της πριν εξεταστεί η απόρριψή σας, και η μεταφορά τελειώνει σαν να μην άλλαξε τίποτα. Γι’ αυτό μια δοκιμή με πρόγραμμα περιήγησης που επαναχρησιμοποιεί ανοιχτή σύνδεση δεν σας λέει τίποτα για τη νέα πολιτική. Μια απόρριψη μπορεί να φαίνεται άχρηστη λεπτά μετά την ανάπτυξη και απόλυτα αποτελεσματική για τον επόμενο χρήστη που συνδέεται.
Αν η απαίτηση περιλαμβάνει διακοπή ζωντανής κίνησης, αυτή η αλλαγή κανόνα χρήστη δεν μπορεί να την παράσχει. Η ανάκληση παρακολουθούμενης κατάστασης είναι ξεχωριστή ενέργεια με δικό της εύρος επιπτώσεων και ανήκει στον ιδιοκτήτη του τείχους προστασίας και όχι σε όποιον πρόσθεσε τον κανόνα. Το άδειασμα κάθε σύνδεσης σε μια πύλη για να εξαφανιστεί μία συνεδρία είναι το είδος της διόρθωσης που δημιουργεί δεύτερο περιστατικό.
Θυμηθείτε και τα όρια. Αυτός ο κανόνας δεν λέει τίποτα για ICMP, UDP ή IPv6, οπότε ένα επιτυχημένο ping δεν είναι απόδειξη ότι η απόρριψη απέτυχε. Μια διεύθυνση IPv4 επίσης δεν είναι ιστότοπος: ένα όνομα μπορεί να αναλύεται σε πολλές διευθύνσεις και καλύπτεται μόνο αυτή που ονομάσατε.
Δοκιμάστε με φρέσκια ροή
Διαβάστε τους αριθμημένους κανόνες χρήστη και την ενεργή ακατέργαστη προβολή και μετά ανοίξτε μια νέα σύνδεση από τον επιλεγμένο πελάτη:
sudo ufw status numbered
sudo ufw show raw
# from 10.88.0.55, a new TCP connection to 192.0.2.88 should fail
Η ακατέργαστη προβολή έχει σημασία επειδή το status παραλείπει κανόνες πλαισίου γραμμένους με το χέρι, οπότε μπορεί να κάνει τη σειρά να φαίνεται διαφορετική από αυτή που επιβάλλει ο πυρήνας. Συγκρίνετε τα δύο πριν συμπεράνετε ότι ένας κανόνας βρίσκεται σε λάθος θέση.
Έπειτα ελέγξτε τους δύο μηχανισμούς που αποδεικνύουν ότι ο κανόνας είναι στενός και όχι ευρύς: ένας επιτρεπόμενος προορισμός από τον ίδιο πελάτη λειτουργεί ακόμη, και ένας δεύτερος πελάτης φτάνει ακόμη στον απορριπτόμενο προορισμό αν η πολιτική του το επιτρέπει. Μια απόρριψη που σπάει και τις δύο δοκιμές είναι αλλαγή πολιτικής, όχι στοχευμένη.
Όταν τελειώσει η δοκιμή, αφαιρέστε μόνο τον κανόνα που προσθέσατε, επαναλαμβάνοντάς τον ακριβώς. Αν η πολιτική είναι μόνιμη, παραδώστε την στον ιδιοκτήτη του τείχους προστασίας με την ταυτότητα του πελάτη, τον ιδιοκτήτη του προορισμού και ημερομηνία αναθεώρησης, ώστε μια επαναχορηγημένη διεύθυνση σήραγγας να μην αφήσει πίσω της μια ξεπερασμένη απόρριψη.