Το NEW του conntrack σε πακέτο ACK: τι δεν αποδεικνύει
Ένα ACK με ετικέτα NEW σημαίνει ότι ο tracker δεν είχε αντίστοιχη κατάσταση, όχι ότι το VPN άνοιξε συνεδρία. Δείτε το hook, το tuple και το παράθυρο καταγραφής.
Στο ημερολόγιο του τείχους προστασίας υπάρχει μια γραμμή που δεν περιμένατε: ένα πακέτο ACK, κατάσταση conntrack NEW, διεύθυνση προέλευσης που δεν είναι δική σας, θύρα προορισμού ανοιχτή. Ο πειρασμός είναι να το διαβάσετε ως νέα εισερχόμενη σύνδεση που κανείς δεν εξουσιοδότησε. Αυτό που λέει στην πραγματικότητα η γραμμή είναι στενότερο: όταν εκείνο το πακέτο έφτασε σε αυτό το hook, ο tracker δεν είχε αντίστοιχη κατάσταση, και το πακέτο έφερε ACK. Πρόκειται για δύο γεγονότα για δύο διαφορετικά πράγματα, και κανένα από τα δύο δεν είναι πλήρες αντίγραφο χειραψίας. Αυτή είναι η σειρά που ακολουθώ πριν βγάλω συμπέρασμα.
Ξεκινήστε από το πακέτο, όχι από την ετυμηγορία
Διαχωρίστε τις παρατηρήσεις πριν τις ερμηνεύσετε. Οι σημαίες TCP περιγράφουν αυτό το πακέτο, η κατάσταση του tracker περιγράφει τι γνώριζε σε εκείνο το hook, και η καταγραφή σας περιγράφει μόνο το παράθυρο που καταγράψατε.
Η σύγχυση αυτών των τριών είναι ο τρόπος με τον οποίο ένα ACK γίνεται «ο πάροχος άφησε κάποιον να μπει».
Τι σημαίνει στην πραγματικότητα το NEW στο hook
αντιστοίχιση conntrack του iptables τεκμηριώνει το NEW ως πακέτο που ξεκινά σύνδεση, ή ως ένα που σχετίζεται με σύνδεση που δεν έχει δει ακόμη κίνηση και προς τις δύο κατευθύνσεις. Το ESTABLISHED σημαίνει ότι ο tracker έχει δει πακέτα και προς τις δύο κατευθύνσεις. Καμία από τις δύο περιγραφές δεν λέει ότι το πακέτο ήταν SYN, ούτε ότι έφτασε χωρίς ιστορικό.
Ένας tracker που αρχίζει να παρατηρεί μια ροή στη μέση της ταξινομεί το επόμενο πακέτο με βάση ό,τι γνωρίζει, και αυτό μπορεί να είναι τίποτα. Αυτό αφορά τη μνήμη του tracker, όχι την πρόθεση του απομακρυσμένου κεντρικού υπολογιστή.
Η χαλαρή παρακολούθηση εξηγεί τις περισσότερες εκπλήξεις με ACK
Ο πυρήνας τεκμηριώνει nf_conntrack_tcp_loose, που επιτρέπει στον tracker να αναλάβει συνδέσεις TCP των οποίων δεν είδε την αρχή. Με τη ρύθμιση στην προεπιλεγμένη τιμή, ένα ACK από τη μέση της ροής μπορεί να υιοθετηθεί ως εδραιωμένη ροή. Απενεργοποιήστε την και το ίδιο πακέτο είναι πιθανότερο να ταξινομηθεί ως INVALID αντί για NEW. Και τα δύο αποτελέσματα περιγράφουν τους κανόνες του tracker, όχι το ιστορικό της εφαρμογής.
Ελέγξτε λοιπόν αυτή τη ρύθμιση πριν χτίσετε θεωρία πάνω στην ετικέτα.
Αποκλείστε τις βαρετές αιτίες με αυτή τη σειρά
Τα περισσότερα συμβάντα NEW σε ACK που κυνήγησα κατέληξαν σε μία από αυτές, και όλες είναι φθηνές στον έλεγχο:
- Ο πίνακας conntrack καθαρίστηκε, ή ο tracker επανεκκινήθηκε.
- Ο κεντρικός υπολογιστής επανεκκινήθηκε, ή η ροή μεταφέρθηκε σε άλλο namespace ή συσκευή.
- Η ασύμμετρη δρομολόγηση έβγαλε το SYN από διαδρομή που δεν καταγράφετε.
- Το NAT ξαναέγραψε το tuple, οπότε η εγγραφή δεν ταιριάζει πλέον με αυτό που διαβάσατε.
- Η καταγραφή ξεκίνησε αργά και δεν είδε ποτέ την αρχή.
Κάθε μία από αυτές αφαιρεί τα προηγούμενα πακέτα από την εικόνα του tracker και αφήνει τα επόμενα άθικτα. Η επανεκκίνηση ή το άδειασμα του πίνακα επιβεβαιώνονται ευκολότερα από το uptime και τα ημερολόγια. Η ασύμμετρη δρομολόγηση εμφανίζεται ως μονόδρομη καταγραφή. Το NAT είναι το ύπουλο, γιατί το tuple που αποθήκευσε ο tracker δεν είναι το tuple που τυπώθηκε στο ημερολόγιο.
Γράψτε ποιες από αυτές αποκλείσατε, και πώς, πριν προχωρήσετε.
Διαβάστε το tuple, τη διεπαφή και το hook
Μια εγγραφή conntrack κλειδώνεται με διευθύνσεις, θύρες και πρωτόκολλο, άρα κάθε μετάφραση αλλάζει ποια εγγραφή ταιριάζει. Καταγράψτε επίσης τη διεπαφή και το hook, γιατί ένα πακέτο που φαίνεται στη λάθος διεπαφή ή μετά από άλλη αλυσίδα σας λέει ότι η διαδρομή δεν είναι αυτή του διαγράμματος. Όταν το συμβάν αφορά VPN, αποφασίστε αν κοιτάτε το εσωτερικό πακέτο ή τον εξωτερικό φορέα. Έπειτα συγκρίνετε με ό,τι κατέγραψε η πύλη για το ίδιο tuple πέντε μερών.
Δύο όψεις της ίδιας ροής που διαφωνούν είναι πιο κατατοπιστικές από οποιαδήποτε από τις δύο μόνη της.
Πότε αξίζει κλιμάκωση
Κλιμακώστε όταν μπορείτε να δείξετε μια υπηρεσία που είναι προσβάσιμη και δεν θα έπρεπε, μαζί με τη ροή, την πολιτική που το επέτρεψε και στοιχεία από τα δύο άκρα. Μην αναφέρετε ελάττωμα παρόχου με βάση μία ετικέτα κατάστασης ή μία μερική καταγραφή, γιατί αυτή η αναφορά θα κλείσει με την εξήγηση που μόλις διαβάσατε. Αν η υπηρεσία είναι πραγματικά εκτεθειμένη, ο ιδιοκτήτης αυτού του ορίου είναι το σωστό πρόσωπο να το διορθώσει, και μια εκχωρημένη αντιστοίχιση θύρας ή ένας ακούσιος ακροατής είναι πιθανότερη αιτία από ένα σφάλμα.
Έπειτα κλείστε το κενό ορατότητας που επέτρεψε σε ένα πακέτο να μοιάζει με ολόκληρη συνεδρία.