Περιμένετε μια διεπαφή σήραγγας, την ψάχνετε και δεν υπάρχει τίποτα στο τείχος προστασίας για αντιστοίχιση. Αυτό είναι φυσιολογικό για πύλη βασισμένη σε πολιτικές: η κρυπτογραφημένη ανταλλαγή φτάνει στη φυσική διεπαφή και το αποκρυπτογραφημένο εσωτερικό πακέτο που προωθείται στη συνέχεια παρατηρείται επίσης να φτάνει στην ίδια διεπαφή. Δεν υπάρχει tun0 επειδή τίποτα δεν δημιούργησε ένα.

Το εσωτερικό αίτημα παραμένει ξεχωριστό πακέτο με δική του πηγή, προορισμό και υπηρεσία, και ο πυρήνας γνωρίζει από ποια συσχέτιση ασφαλείας βγήκε. Αυτή η γνώση είναι ό,τι μπορεί να αντιστοιχίσει ένας κανόνας τείχους προστασίας.

Δύο πακέτα, μία διεπαφή

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

Αυτό που το ξεχωρίζει είναι το συμφραζόμενο της εισερχόμενης διαδρομής ασφαλείας που συνοδεύει το πακέτο. Το nftables το εκθέτει ως meta ipsec exists, που είναι αληθές όταν το πακέτο έφτασε μέσω διαδρομής ασφαλείας IPsec. Συνδυάστε το με τη δεξαμενή πελατών, τον προορισμό και την υπηρεσία, και ο κανόνας γίνεται αρκετά συγκεκριμένος ώστε να είναι ασφαλής.

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

Γράψτε τον κανόνα προώθησης

Υποθέστε μια πιστοποιημένη υπηρεσία απομακρυσμένης πρόσβασης IPv4 με πελάτες στο 10.90.0.0/24 και έναν εγκεκριμένο προορισμό στο 203.0.113.40. Ένα απόσπασμα κανόνα για αυτή τη ροή μοιάζει έτσι.

meta ipsec exists ip saddr 10.90.0.0/24 \
  ip daddr 203.0.113.40 tcp dport 443 \
  oifname "eth0" counter accept

Οι διευθύνσεις και η διεπαφή είναι παραδείγματα προς αντικατάσταση. Τοποθετήστε το ελεγμένο ισοδύναμο στην πολιτική προώθησης πριν από τον κανόνα που διαφορετικά θα απέρριπτε τη ροή, και μην αδειάσετε ένα υπάρχον σύνολο κανόνων για να το εγκαταστήσετε· μια πύλη δεν είναι πείραμα καθαρού δωματίου.

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

Οι άδειες για την εξωτερική ανταλλαγή είναι ξεχωριστές. Η διαδρομή εισόδου της πύλης χρειάζεται τις θύρες IKE και ESP ή ενθυλάκωσης UDP που πραγματικά χρησιμοποιεί, και αυτές οι άδειες δεν επιτρέπουν τίποτα σχετικά με το αποκρυπτογραφημένο πακέτο μέσα. Η ανάμειξη των δύο είναι ο τρόπος με τον οποίο μια σήραγγα που λειτουργεί καταλήγει με τείχος προστασίας που προωθεί τα πάντα.

Το εισερχόμενο συμφραζόμενο δεν είναι εξερχόμενο

Η ίδια οικογένεια εκφράσεων καλύπτει την άλλη κατεύθυνση με το rt ipsec, που περιγράφει τη συσχέτιση ασφαλείας εξόδου που θα χρησιμοποιήσει ένα πακέτο. Απαντά σε διαφορετικό ερώτημα: όχι από πού ήρθε αυτό το πακέτο, αλλά αν θα προστατευτεί στο επόμενο σκέλος του.

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

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

Το NAT δεν είναι απόφαση τείχους προστασίας

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

Μια αποδοχή μέσα σε αλυσίδα NAT δεν είναι ούτε αυτή γενική άδεια. Το NAT και το φιλτράρισμα έχουν διαφορετικές δουλειές, και μια αλυσίδα NAT δεν εξετάζει κάθε μεταγενέστερο πακέτο μιας εδραιωμένης ροής, και γι' αυτόν ακριβώς τον λόγο το να βασίζεστε σε αυτή για ασφάλεια παράγει κανόνες που φαίνονται να δουλεύουν στη δοκιμή και αποτυγχάνουν υπό φόρτο.

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

Επαληθεύστε την ακριβή εσωτερική υπηρεσία

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

Η αναφορά του nftables τεκμηριώνει το meta ipsec, το rt ipsec και τις εκφράσεις ειδικές για κατεύθυνση, και εκεί είναι το μέρος για να ελέγξετε τη σύνταξη με την εγκατεστημένη σας έκδοση. Και κρατήστε το εύρος ρητό: αυτό είναι παράδειγμα IPv4, δεν λέει τίποτα για IPv6, και δεν μετατρέπει την αυθαίρετη προώθηση δημόσιων θυρών σε μέρος της υπηρεσίας VPN.

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