Το ESP είναι IP πρωτόκολλο 50, όχι θύρα TCP 50: τι πρέπει να επιτρέψετε
Οι αριθμοί πρωτοκόλλου και οι αριθμοί θύρας είναι διαφορετικοί χώροι ονομάτων. Ένας κανόνας για τη θύρα TCP 50 δεν επιτρέπει τίποτα, και το NAT traversal μεταφέρει το ESP σε UDP 4500.
Οι φόρμες του τείχους προστασίας ζητούν θύρα TCP, και η προφανής καταχώριση είναι 50. Αυτή η καταχώριση δεν επιτρέπει τίποτα, επειδή το ESP είναι IP πρωτόκολλο με αριθμό 50 και οι αριθμοί πρωτοκόλλου δεν είναι θύρες. Οι δύο χώροι ονομάτων μοιράζονται μικρούς ακέραιους και τίποτα άλλο, και το λάθος μένει αόρατο μέχρι να ολοκληρωθεί το IKE και η προστατευμένη κίνηση να μη φτάσει ποτέ.
Δύο χώροι ονομάτων που μοιράζονται μικρούς αριθμούς
Μια κεφαλίδα IP φέρει πεδίο πρωτοκόλλου που ονομάζει το επόμενο: 6 για TCP, 17 για UDP, 1 για ICMP, 50 για ESP, 51 για AH. Μια κεφαλίδα TCP ή UDP φέρει αριθμούς θύρας, που επιλέγουν μια διεργασία στον κεντρικό υπολογιστή προορισμού. Το πρωτόκολλο 50 και η θύρα TCP 50 είναι άσχετες τιμές, αλλά ένα παράθυρο διαλόγου μπορεί να τις κάνει να φαίνονται εναλλάξιμες.
Γι’ αυτό ένας κανόνας προώθησης θυρών δεν μπορεί να εκφράσει το εγγενές ESP. Δεν υπάρχει θύρα προορισμού ESP για προώθηση, και μια συσκευή που καταλαβαίνει μόνο κανόνες θυρών δεν έχει καθόλου λεξιλόγιο για αυτό το πακέτο. Ο σωστός κανόνας ονομάζει το IP πρωτόκολλο. Οποιοσδήποτε διάλογος θυρών είναι το λάθος εργαλείο για αυτό το πακέτο.
Η σύγχυση έχει και δεύτερο μισό. Όταν το πακέτο είναι κρυπτογραφημένο, ό,τι βρίσκεται μέσα του είναι αδιαφανές, συμπεριλαμβανομένης της κεφαλίδας TCP της αρχικής σύνδεσης. Ένα τείχος προστασίας που εξετάζει θύρες σε αυτό το πακέτο κοιτάζει την εξωτερική κεφαλίδα, η οποία στην εγγενή περίπτωση δεν έχει θύρες για εξέταση.
Εγγενές ESP, μετά η ενθυλακωμένη εναλλακτική
Το εγγενές ESP μεταφέρεται απευθείας ως IP πρωτόκολλο, κάτι που είναι εξίσου αποδοτικό και άβολο. Είναι αποδοτικό επειδή δεν υπάρχει πρόσθετη κεφαλίδα, και άβολο επειδή κάθε συσκευή που κάνει μετάφραση διευθύνσεων και θυρών δεν μπορεί να το παρακολουθήσει. Το NAT traversal υπάρχει για να το λύσει αυτό, τυλίγοντας το πακέτο ESP μέσα σε UDP ώστε ο μεταφραστής να έχει θύρες να ξαναγράψει.
| Form on the wire | How it is identified | What the firewall must permit |
|---|---|---|
| IKE negotiation | UDP with a destination port | UDP 500, and 4500 once traversal is detected |
| Native ESP | IP protocol 50 in the outer header | The protocol itself, with no port to name |
| ESP inside UDP | UDP 4500 carrying an ESP payload | The UDP port pair, which translation devices can track |
Οι δύο μορφές είναι εναλλακτικές αναπτύξεις του ίδιου καναλιού δεδομένων, όχι επίπεδα ενός. Το να επιτρέψετε το εγγενές ESP δεν επιτρέπει την ενθυλακωμένη μορφή, και το να επιτρέψετε το UDP 4500 δεν επιτρέπει την εγγενή κίνηση, επομένως ένα σύνολο κανόνων πρέπει να ταιριάζει με την ανάπτυξη αντί να καλύπτει και τα δύο κατά λάθος.
Η ανίχνευση μετράει και εδώ. Τα τελικά σημεία αποφασίζουν μεταξύ των μορφών κατά τη διαπραγμάτευση, και η αλλαγή συμβαίνει συνήθως όταν ανιχνευθεί NAT ανάμεσά τους. Μια διαδρομή που αλλάζει αφού στηθεί η σήραγγα μπορεί επομένως να μετακινήσει την κίνηση σε χώρο ονομάτων που οι κανόνες σας δεν κάλυπταν ποτέ.
Διαβάστε ποια μορφή χρησιμοποιεί πραγματικά η σύνδεση
Ρωτήστε το τελικό σημείο αντί να μαντέψετε από το τείχος προστασίας. Στο Linux η καταχώριση κατάστασης αναφέρει αν ο συσχετισμός χρησιμοποιεί ενθυλάκωση UDP και ποιες θύρες εμπλέκονται. Μια καταγραφή πακέτων απαντά στο ίδιο ερώτημα από το καλώδιο, και τα δύο είναι γρηγορότερα από το να διαβάσετε ένα σύνολο κανόνων και να ελπίζετε.
ip xfrm state | grep -A3 encap
tcpdump -ni any 'ip proto 50 or udp port 4500'
Η πρώτη εντολή δείχνει τύπο ενθυλάκωσης όταν χρησιμοποιείται NAT traversal και τίποτα όταν δεν χρησιμοποιείται. Η δεύτερη δείχνει ποια από τις δύο μορφές περνά πραγματικά τη διεπαφή, και αυτό τελειώνει τις συζητήσεις για μια διαμόρφωση που φαίνεται σωστή στο χαρτί.
Τα αντιφατικά στοιχεία ανήκουν στο ίδιο βήμα. Ένας κανόνας που αναφέρει μηδέν αντιστοιχίσεις σας λέει ότι το πακέτο δεν τον έφτασε ποτέ, και αυτό είναι ζήτημα δρομολόγησης ή επιλογέα, όχι τείχους προστασίας.
Στη συνέχεια επιβεβαιώστε το κανάλι ελέγχου ξεχωριστά. Το IKE έχει τις δικές του θύρες και τα δικά του αρχεία καταγραφής, και μια ολοκληρωμένη διαπραγμάτευση χωρίς δεδομένα είναι ακριβώς ο διαχωρισμός για τον οποίο μιλά αυτό το άρθρο.
Γράψτε τον κανόνα στον σωστό χώρο ονομάτων
Ένας κανόνας πρωτοκόλλου και ένας κανόνας θύρας είναι διαφορετικές οδηγίες, οπότε το εργαλείο πρέπει να εκφράζει αυτό που εννοείτε. Στο nftables η αντιστοίχιση πρωτοκόλλου είναι ρητή, και η ενθυλακωμένη εναλλακτική παίρνει τον δικό της κανόνα UDP. Κρατήστε τους δύο κανόνες δίπλα-δίπλα ώστε το ζεύγος να είναι ορατό στην ανασκόπηση.
nft add rule inet filter input ip protocol esp accept
nft add rule inet filter input udp dport { 500, 4500 } accept
Αντισταθείτε στον πειρασμό να διευρύνετε οποιονδήποτε από τους δύο κανόνες για να αντισταθμίσετε μια λανθασμένη διάγνωση. Μια άδεια για όλα στο πρωτόκολλο ESP σε κάθε διεπαφή, ή μια άδεια UDP από οπουδήποτε σε οπουδήποτε, διορθώνει ένα σύμπτωμα και αφαιρεί τον έλεγχο που προσπαθούσατε να ρυθμίσετε. Η στενή υποστηριζόμενη ροή είναι σχεδόν πάντα αρκετή μόλις γίνει γνωστή η μορφή.
Τέλος, κρατήστε τα επίπεδα σωστά όταν η σήραγγα δουλεύει και η εφαρμογή όχι. Τα πακέτα που φτάνουν στην πύλη εξακολουθούν να χρειάζονται προώθηση, μια διαδρομή επιστροφής και μια πολιτική που τα δέχεται, και κανένα από αυτά δεν εκφράζεται από έναν κανόνα ESP. Η θύρα που λείπει εξηγεί μια συγκεκριμένη αποτυχία, όχι κάθε αποτυχία IPsec. Κρατήστε τη διόρθωση του κανόνα και τον έλεγχο δρομολόγησης ως δύο ξεχωριστά συμπεράσματα.
Καταγράψτε τη μορφή που παρατηρήσατε, τον κανόνα πρωτοκόλλου που προσθέσατε και τον μετρητή που είδατε μετά. Τρεις γραμμές, και ο επόμενος μπορεί να ξεχωρίσει ένα λάθος χώρου ονομάτων από ένα λάθος δρομολόγησης σε ένα λεπτό αντί για ένα απόγευμα.