Πού πηγαίνει το NAT του VPN στο before.rules του UFW και πώς να το δοκιμάσετε
Μια γραμμή NAT στο before.rules πρέπει να βρίσκεται μέσα σε έγκυρο τμήμα πίνακα με COMMIT. Ελέγξτε το υποψήφιο αρχείο με iptables-restore --test πριν επαναφορτώσετε το UFW.
Ένας κανόνας NAT που λειτουργεί όταν πληκτρολογείται σε ένα κέλυφος αποτυγχάνει όταν επικολλάται στο before.rules, επειδή αυτό το αρχείο δεν είναι σκριπτ. Είναι ένα έγγραφο μορφής επαναφοράς με τμήματα πίνακα, δηλώσεις αλυσίδας και δείκτη COMMIT για κάθε πίνακα. Μια γραμμή σε λάθος θέση είτε ματαιώνει ολόκληρη την επαναφορά είτε απορρίπτει σιωπηλά κανόνες που πιστεύατε ότι υπάρχουν. Ο οδηγός παρακάτω τοποθετεί το απόσπασμα εκεί που το περιμένει το πλαίσιο και αποδεικνύει το αποτέλεσμα πριν την επόμενη επαναφόρτωση.
Μια εντολή κελύφους δεν είναι αρχείο επαναφοράς
Μια γραμμή που αρχίζει με iptables -t nat είναι οδηγία προς το δυαδικό iptables, ενώ το αρχείο που διαβάζει το UFW είναι περιγραφή ενός πλήρους συνόλου κανόνων. Η διαφορά δεν είναι καλλωπιστική: η μορφή επαναφοράς πρέπει να γνωρίζει σε ποιον πίνακα βρίσκεται, ποιες αλυσίδες υπάρχουν και πού τελειώνει ο πίνακας. Μια εντολή που επικολλάται σε αυτό το έγγραφο είναι είτε συντακτικό σφάλμα είτε, ακόμη χειρότερα, κανόνας προσαρτημένος σε λάθος πίνακα. Το πλαίσιο φορτώνει αυτά τα αρχεία μέσω εργαλείων επαναφοράς ακριβώς επειδή είναι δηλωτικά και όχι ακολουθιακά.
Το έγγραφο φορτώνεται επίσης ως σύνολο, οπότε ένα παραμορφωμένο τμήμα μπορεί να σταματήσει την εφαρμογή του υπόλοιπου αρχείου. Ένα μικρό λάθος σε ένα απόσπασμα NAT παίρνει μαζί του και τους κανόνες φιλτραρίσματος, και έτσι μια αλλαγή τείχους προστασίας γίνεται διακοπή λειτουργίας.
Τοποθετήστε το απόσπασμα μέσα στο υπάρχον τμήμα πίνακα
Ένα απόσπασμα NAT έχει μορφή, και η μορφή μετράει περισσότερο από το κείμενο του κανόνα μέσα του. Η κεφαλίδα του πίνακα ανοίγει το τμήμα, οι δηλώσεις αλυσίδας καθιερώνουν τους μετρητές, οι κανόνες ακολουθούν και ένα COMMIT κλείνει το τμήμα.
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.55.0.0/24 -o ens3 -j MASQUERADE
COMMIT
Το pool και η διεπαφή παραπάνω είναι θέσεις για τις δικές σας τιμές· η δομή είναι το κομμάτι που αξίζει να αντιγράψετε. Αν το αρχείο περιέχει ήδη ένα τμήμα *nat, προσθέστε τον κανόνα μέσα σε εκείνο το τμήμα αντί να ανοίξετε δεύτερο, επειδή η μορφή περιμένει ένα COMMIT ανά πίνακα και δύο τμήματα για τον ίδιο πίνακα είναι μια επισκευή που περιμένει να συμβεί. Διατηρήστε άθικτους τους ορισμούς αλυσίδας της διανομής, συμπεριλαμβανομένων όσων πρόσθεσε ο προμηθευτής για τη δική του ενσωμάτωση. Το εγχειρίδιο του πλαισίου UFW τεκμηριώνει τα αρχεία before, user και after μαζί με την απαίτηση για αντίστοιχο COMMIT.
Αν το αρχείο αποδειχθεί κενό, μην το γεμίσετε από έναν οδηγό. Επιβεβαιώστε ποιο πακέτο το κατέχει και ποια είναι πραγματικά η ενεργή πολιτική, επειδή ένα κενό μόνιμο αρχείο δεν αποδεικνύει ότι ο πυρήνας δεν κρατά κανόνες, και ένα φορτωμένο σύνολο κανόνων δεν αποδεικνύει ότι η επόμενη επαναφόρτωση θα έχει πλήρες αρχείο να διαβάσει. Επαναφέρετε πρώτα την υποστηριζόμενη βάση και μετά εφαρμόστε ξανά τις αλλαγές του ιστότοπου πάνω της.
Δοκιμάστε το υποψήφιο χωρίς να το εφαρμόσετε
Το εργαλείο επαναφοράς μπορεί να αναλύσει και να κατασκευάσει ένα σύνολο κανόνων χωρίς να το εφαρμόσει, που είναι η φθηνότερη διαθέσιμη δοκιμή. Εκτελέστε το σε προστατευμένο αντίγραφο και όχι στο ζωντανό αρχείο, και διαβάστε το κείμενο του σφάλματος και όχι μόνο την κατάσταση εξόδου. Μια αποτυχία ανάλυσης ονομάζει μια γραμμή και συνήθως έναν πίνακα, που είναι περισσότερα από όσα θα σας πει μια αποτυχημένη επαναφόρτωση.
sudo cp /etc/ufw/before.rules /root/before.rules.bak
sudo iptables-restore --test < /root/before.rules.bak
echo "exit: 0"
Η επιτυχία αυτού του ελέγχου αποδεικνύει ότι το έγγραφο αναλύεται και τίποτα άλλο. Δεν αποδεικνύει ότι το υποψήφιο περιέχει ακόμη κάθε αλυσίδα από την οποία εξαρτάται το UFW, ότι επιτρέπει μόνο τις πηγές που σκοπεύατε ή ότι η απομακρυσμένη διαχείριση παραμένει προσβάσιμη. Αυτές είναι ξεχωριστές αναθεωρήσεις, και η τελευταία αξίζει μια δεύτερη συνεδρία που ανοίγει πριν ξεκινήσετε.
Επιλέξτε το εργαλείο που ταιριάζει με το εγκατεστημένο backend και την οικογένεια διευθύνσεων. Ένας κεντρικός υπολογιστής που εκτελεί το backend nft μέσω του επιπέδου συμβατότητας χρειάζεται την αντίστοιχη εντολή, και οι κανόνες IPv6 ζουν σε εντελώς διαφορετικό αρχείο.
Κρατήστε την προώθηση, το NAT και την πολιτική πρόσβασης χωριστά
Η μετάφραση πηγής διορθώνει ένα πρόβλημα διευθυνσιοδότησης και δεν παραχωρεί τίποτα. Η προώθηση είναι ξεχωριστή άδεια που ελέγχεται από ένα sysctl και από τον πίνακα φιλτραρίσματος, και είναι αυτή που ξεχνούν οι άνθρωποι όταν μια σήραγγα δρομολογεί αλλά δεν περνά κίνηση. Η πολιτική πρόσβασης είναι μια τρίτη απόφαση για το ποιες πηγές μπορούν να φτάσουν σε ποιες υπηρεσίες, και κανένας κανόνας NAT δεν την εκφράζει. Το να κρατάμε τα τρία χωριστά είναι αυτό που κάνει μια αποτυχία διαγνώσιμη αντί για ένα μόνο αόριστο σύμπτωμα.
sysctl net.ipv4.ip_forward
sudo iptables -t nat -S POSTROUTING
sudo iptables -S FORWARD
Διαβάστε αυτές τις τρεις εξόδους μαζί και όχι μία κάθε φορά. Ένας κανόνας masquerade με απενεργοποιημένη προώθηση παράγει έναν πελάτη που συνδέεται και δεν φτάνει πουθενά, κάτι που από την πλευρά του πελάτη μοιάζει ακριβώς με βλάβη δρομολόγησης και στέλνει τους ανθρώπους στο λάθος αρχείο. Ο πίνακας φιλτραρίσματος είναι επίσης εκεί όπου κρύβεται ένα υπερβολικά ευρύ accept, οπότε ελέγξτε την προεπιλεγμένη πολιτική του όσο βρίσκεστε εκεί.
Επαληθεύστε μια επαναφόρτωση, μια άρνηση και μια απώλεια VPN
Τρεις παρατηρήσεις συνθέτουν έναν πλήρη έλεγχο αποδοχής: η επαναφόρτωση πετυχαίνει, μια επιτρεπόμενη λειτουργία πελάτη λειτουργεί και ένα αίτημα που θα έπρεπε να απορριφθεί πράγματι απορρίπτεται. Η τρίτη είναι αυτή που παραλείπεται, και είναι η μόνη απόδειξη ότι η πολιτική κάνει οτιδήποτε.
sudo ufw reload
sudo ufw status verbose
sudo iptables -t nat -L POSTROUTING -n -v
Στη συνέχεια δοκιμάστε την αποτυχία για την οποία σχεδιάσατε. Ρίξτε τη σήραγγα και παρατηρήστε τι κάνει ο κεντρικός υπολογιστής, επειδή μια πολιτική που λειτουργεί μόνο όσο το VPN είναι ενεργό είναι πολιτική με αδήλωτη εξάρτηση. Επαναφορτώστε άλλη μία φορά μετά, για να αποδείξετε ότι το αρχείο, και όχι κάποια υπολειπόμενη κατάσταση εκτέλεσης, παράγει το λειτουργικό αποτέλεσμα.
Το NAT του IPv4 δεν λέει τίποτα για το IPv6, οπότε δηλώστε την προβλεπόμενη κάλυψη και για τις δύο οικογένειες στην ίδια σημείωση με τον κανόνα. Στόχος είναι μια συνεκτική διαχειριζόμενη πολιτική, και ένα απόσπασμα που έτυχε να αναλυθεί δεν αποτελεί απόδειξή της.