Εκτελείτε tcpdump στη εξωτερική διεπαφή μιας πύλης IPsec Linux και βλέπετε δύο πράγματα ταυτόχρονα: εισερχόμενα καρέ ESP και, αμέσως μετά, τα αποκρυπτογραφημένα εσωτερικά πακέτα. Προς τα έξω εμφανίζεται μόνο ESP. Το φυσικό συμπέρασμα είναι ότι οι απαντήσεις δεν αποστέλλονται ή ότι το IPsec κρυπτογραφεί τη μία κατεύθυνση και ξεχνά την άλλη. Κανένα από τα δύο δεν είναι αληθές.

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

Το σημείο σύλληψης καθορίζει τι βλέπετε

Σε μια κανονική διεπαφή, ένας υποδοχέας AF_PACKET βρίσκεται κοντά στο επίπεδο της συσκευής. Τα πακέτα που φεύγουν από τον κεντρικό υπολογιστή περνούν πρώτα από την επεξεργασία εξόδου του IPsec, η οποία μετατρέπει ένα εσωτερικό τμήμα TCP σε αυτοδύναμο πακέτο ESP ή UDP-4500, και μόνο μετά φτάνουν σε αυτό το επίπεδο. Τα εισερχόμενα πακέτα αντιγράφονται στον υποδοχέα καθώς βγαίνουν από το καλώδιο, ακόμη κρυπτογραφημένα, και το αποκρυπτογραφημένο αποτέλεσμα γίνεται ορατό αργότερα όταν η στοίβα το παραδώσει τοπικά ή το προωθήσει.

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

Αντιστοιχίστε το φίλτρο με το επίπεδο που εννοείτε

Μια έκφραση όπως tcp port 443 επιλέγει μια εσωτερική σύνδεση TCP. Προς τα έξω, αυτή η σύνδεση έχει ήδη γίνει ESP όταν ρωτηθεί ο υποδοχέας, οπότε το φίλτρο δεν ταιριάζει με τίποτα. Αν θέλετε να μετρήσετε προστατευμένη κίνηση, φιλτράρετε την εξωτερική μορφή: πρωτόκολλο 50 για ακατέργαστο ESP ή θύρα UDP 4500 όταν υπάρχει διέλευση NAT. Και τα δύο φίλτρα δίνουν ένα πλήθος πακέτων που μπορεί να συγκριθεί μεταξύ των δύο ομοτίμων, που συνήθως είναι ο λόγος για τη μέτρηση. Κανένα από τα δύο δεν σας λέει αν το εσωτερικό αίτημα απαντήθηκε.

Μην αντιμετωπίζετε ένα πλήθος UDP 4500 ως πλήθος πακέτων ESP. Το IKE χρησιμοποιεί επίσης αυτή τη θύρα για μηνύματα διατήρησης NAT-T και για την ενθυλακωμένη ανταλλαγή, οπότε ο αριθμός περιλαμβάνει κίνηση που δεν είναι τα δεδομένα που θέλατε να μετρήσετε. Η αρχική ανταλλαγή IKE στη θύρα UDP 500 χρειάζεται δικό της φίλτρο αν αυτό είναι το ερώτημα. Ένας αριθμός που αναμιγνύει κίνηση ελέγχου με δεδομένα κάνει επίσης κάθε εκτίμηση εύρους ζώνης λανθασμένη κατά ένα άγνωστο περιθώριο. Ξεχωριστές μετρήσεις απαντούν σε ξεχωριστά ερωτήματα.

Γράψτε το φίλτρο δίπλα στο ερώτημα που απαντά. Το «πόσο ESP έφυγε από το κουτί» και το «έφυγε το αίτημα ιστού από το κουτί» είναι διαφορετικές μετρήσεις με διαφορετικά φίλτρα, και μία σύλληψη δεν μπορεί να λύσει και τα δύο. Χωρίς αυτή τη σημείωση, δύο άνθρωποι θα συγκρίνουν αριθμούς που ποτέ δεν μετρούσαν το ίδιο πράγμα.

Παρατηρήστε πριν από τον μετασχηματισμό, όχι μετά

Αν χρειάζεται να δείτε το εξερχόμενο απλό κείμενο, μετακινήστε το σημείο παρατήρησης νωρίτερα, πριν από την επεξεργασία εξόδου του IPsec. Το NFLOG σάς δίνει ένα άγκιστρο του Netfilter όπου ένας κανόνας μπορεί να αντιγράψει επιλεγμένα πακέτα σε υποδοχέα χώρου χρήστη, τον οποίο μπορεί να διαβάσει το tcpdump. Ο οδηγός αποτύπωσης κίνησης του strongSwan τεκμηριώνει αυτή την προσέγγιση ακριβώς για αυτόν τον λόγο.

Η αντιστοίχιση πολιτικής περιορίζει τον κανόνα στην κίνηση που πρόκειται να εισέλθει σε σήραγγα. Το -m policy --pol ipsec --dir out είναι αυτό που κάνει τον κανόνα συγκεκριμένο αντί να καταγράφει κάθε πακέτο που στέλνει το κουτί. Στη συνέχεια διαβάστε την ομάδα καταγραφής με περιορισμένη σύλληψη: ένας μικρός αριθμός στιγμιοτύπων και ένα όριο μεγέθους εμποδίζουν τη διάγνωση να γίνει αρχείο κίνησης. Μια περιορισμένη σύλληψη είναι επίσης ευκολότερο να δοθεί σε έναν ελεγκτή χωρίς να συρθεί άσχετο ωφέλιμο φορτίο. Αποφασίστε το πλήθος πριν ξεκινήσετε, όχι αφού δείτε πόσα έφτασαν.

iptables -I OUTPUT 1 -d 10.83.0.44/32 -p tcp --dport 8443 -m policy --pol ipsec --dir out -j NFLOG --nflog-group 5
tcpdump -ni nflog:5 -s 128 -c 20 'host 10.83.0.44 and tcp port 8443'

Επιλέξτε το άγκιστρο που ταιριάζει με τη ροή. Το OUTPUT καλύπτει κίνηση που παράγει η ίδια η πύλη· η διέλευση από πελάτη LAN περνά αντίθετα από την αλυσίδα FORWARD, και ένας κανόνας στο OUTPUT δεν θα τη δει ποτέ. Η διεύθυνση και η θύρα παραπάνω είναι θέσεις για εγκεκριμένο προορισμό δοκιμής.

Τι αποδεικνύει η παρατήρηση

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

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

Μια ακόμη παγίδα: το «απλό κείμενο» εδώ σημαίνει έξω από το επίπεδο κρυπτογράφησης του IPsec. Μια εσωτερική συνεδρία HTTPS έχει ακόμη το δικό της TLS. Η σύλληψη του αποκαψυκιωμένου πακέτου δεν αποκρυπτογραφεί το TLS της εφαρμογής, και αν εκεί διαβάζεται HTTP, σημαίνει ότι η εφαρμογή δεν χρησιμοποιούσε ποτέ HTTPS.

Καθαρίστε και συγκρίνετε τα δύο άκρα

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

iptables -D OUTPUT -d 10.83.0.44/32 -p tcp --dport 8443 -m policy --pol ipsec --dir out -j NFLOG --nflog-group 5

Αν η ανάπτυξη χρησιμοποιεί IPsec χώρου χρήστη, διεπαφή XFRM ή επιτάχυνση υλικού, τα σημεία παρατήρησης μετακινούνται και αυτή η συνταγή μπορεί να μην ισχύει καθόλου. Με το libipsec, το τεκμηριωμένο σημείο παρατήρησης της εσωτερικής κίνησης είναι η συσκευή TUN. Προσδιορίστε πρώτα τη διαδρομή, μετά επιλέξτε το σημείο που απαντά στο ερώτημα, και περιμένετε οι δύο κατευθύνσεις να φαίνονται διαφορετικές μόνο όταν κοιτάτε τη λάθος πλευρά του μετασχηματισμού.

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