Οι κανόνες προώθησης για όλες τις θύρες μπορούν να καταπιούν τον δικό σας ακροατή WireGuard
Ένας ευρύς κανόνας προώθησης μπορεί να καταπιεί τους δικούς του ακροατές WireGuard και SSH της πύλης. Επιλέξτε στενούς κανόνες ή ξεχωριστή δημόσια διεύθυνση και μετά δοκιμάστε τη διαδρομή ελέγχου.
Μια δημόσια πύλη εκτελεί ήδη WireGuard στο UDP 51820, SSH στη 22 και μία εφαρμογή που πρέπει να είναι προσβάσιμη από το διαδίκτυο. Ο δελεαστικός κανόνας προωθεί κάθε θύρα στον peer και θεωρεί το θέμα λήξαν. Σε μια πύλη WireGuard αυτός ο κανόνας μπορεί να αιχμαλωτίσει τη δική του μεταφορά της σήραγγας και να σας κλειδώσει έξω από το μηχάνημα που την τερματίζει. Η δημοσίευση είναι απόφαση δρομολόγησης με εξαίρεση στο επίπεδο ελέγχου, όχι μία γραμμή DNAT.
Δημόσια είσοδος, είσοδος σήραγγας: διαλέξτε μία
Η δημοσίευση μιας υπηρεσίας δημιουργεί ένα νέο σημείο εισόδου στο διαδίκτυο. Δεν είναι το ίδιο με το να δώσετε ιδιότητα μέλους VPN σε έναν peer, γιατί ο επισκέπτης δεν μπαίνει ποτέ στη σήραγγα και η πύλη γίνεται το δημόσιο πρόσωπο του backend. Αυτή η διάκριση καθορίζει το κοινό του κανόνα και το πιστοποιητικό του.
Οι διαχειριστικές διεπαφές σπάνια ανήκουν σε αυτή τη θέση. Μια σελίδα διαχείρισης που φτάνουν εξουσιοδοτημένοι πελάτες VPN κρατά την επιφάνεια επίθεσης μέσα στη σήραγγα και αποφεύγει να εκθέσει μια φόρμα σύνδεσης σε αυθαίρετη σάρωση. Τα δημόσια τελικά σημεία εφαρμογών χρειάζονται ακόμη το δικό τους πιστοποιητικό TLS, έλεγχο ταυτότητας και περιορισμό ρυθμού· το κρυπτογραφημένο άλμα WireGuard δεν προστατεύει το σκέλος του επισκέπτη προς την πύλη.
Αν η υπηρεσία πρέπει πραγματικά να είναι δημόσια, καταγράψτε το όνομα κεντρικού υπολογιστή, το πιστοποιητικό που το καλύπτει και τις περιοχές επισκεπτών που πρέπει να φτάνουν σε αυτό. Αυτά τα τρία γεγονότα καθορίζουν αργότερα το σχήμα του κανόνα και την πολιτική φιλτραρίσματος. Οτιδήποτε έξω από αυτά είναι επέκταση πεδίου σε έναν δημόσιο ακροατή.
Μία θύρα μέσα, ένα backend έξω
Χρησιμοποιήστε μία δημόσια θύρα και μία υπηρεσία backend. Σε αυτό το παράδειγμα το eth0 φέρει τη δημόσια διεύθυνση 198.51.100.20, η διεύθυνση σήραγγας της πύλης είναι 10.200.0.1 και ο peer εκτελεί την εφαρμογή στο 10.200.0.7. Το δημόσιο TCP 9443 αντιστοιχίζεται στο TCP 8443 του peer:
iptables -t nat -A PREROUTING -i eth0 -d 198.51.100.20 -p tcp --dport 9443 -j DNAT --to-destination 10.200.0.7:8443
iptables -t nat -A POSTROUTING -o wg0 -d 10.200.0.7 -p tcp --dport 8443 -m conntrack --ctorigdst 198.51.100.20 --ctorigdstport 9443 -j SNAT --to-source 10.200.0.1Ο κανόνας SNAT ταιριάζει με το μεταφρασμένο backend και τον αρχικό δημόσιο προορισμό, ώστε μια άλλη σύνδεση στην ίδια υπηρεσία backend να μένει εκτός αυτής της αντιστοίχισης. Κρύβει επίσης τη διεύθυνση του επισκέπτη από τον peer, και αυτό είναι ο συμβιβασμός που κάνει μια δρομολογημένη επιστροφή με διατήρηση πηγής ξεχωριστό σχέδιο. Η αναφορά επεκτάσεων του iptables τεκμηριώνει και τους δύο στόχους και τις επιλογές αντιστοίχισής τους.
Η προώθηση πρέπει ακόμη να ενεργοποιηθεί και η αλυσίδα φίλτρου χρειάζεται άδεια για τον μεταφρασμένο προορισμό και θύρα συν τις καθιερωμένες απαντήσεις. Η αλυσίδα FORWARD βλέπει τον μεταφρασμένο προορισμό μετά το DNAT, οπότε ένας κανόνας γραμμένος για τη δημόσια διεύθυνση δεν ταιριάζει με το προωθούμενο πακέτο. Γράψτε την άδεια για την πλειάδα του backend, όχι για τη δημόσια.
Ο peer πρέπει να δεχτεί τη σύνδεση της υπηρεσίας από τη διεύθυνση σήραγγας της πύλης και να στείλει την απάντηση πίσω μέσα από τη σήραγγα. Το AllowedIPs του πρέπει να εξουσιοδοτεί την πηγή που πραγματικά λαμβάνει, η οποία με μετάφραση πηγής είναι η διεύθυνση σήραγγας της πύλης, και μια ευρεία καταχώριση 0.0.0.0/0 σε κάθε peer δεν απαιτείται για αυτό το σχέδιο. Αυτό που ρίχνει την επιστροφική κίνηση είναι ένας peer του οποίου η λίστα παραλείπει αυτή τη διεύθυνση, ή ένα σχέδιο με διατήρηση πηγής που προωθεί τη διεύθυνση του ίδιου του επισκέπτη, οπότε ελέγξτε την πηγή που βλέπει πραγματικά ο peer, όχι αυτή στον κανόνα σας.
Κρατήστε τους δικούς ακροατές της πύλης έξω από τον κανόνα
Αντικαταστήστε την αντιστοίχιση θύρας με έναν κανόνα που καλύπτει κάθε προορισμό TCP και UDP, και το δικό του socket WireGuard της πύλης πέφτει μέσα σε αυτόν. Η μετάφραση προορισμού συμβαίνει πριν το μηχάνημα αποφασίσει ότι ένα πακέτο είναι τοπικό, οπότε το UDP 51820 μπορεί να καταλήξει στον peer αντί στη διεργασία που κρατά κάθε σύνδεση peer. Ο κανόνας φορτώνεται επιτυχώς και η σήραγγα πεθαίνει, κάτι που είναι δύσκολο να διαβαστεί από την πλευρά του peer.
Το SSH, οι πράκτορες παρακολούθησης και οποιαδήποτε άλλη υπηρεσία φιλοξενείται στην πύλη έχουν την ίδια έκθεση. Ένας κανόνας που προωθεί τα πάντα δεν ξεχωρίζει το επίπεδο ελέγχου από τη δημοσιευμένη εφαρμογή, και η πρώτη επανεκκίνηση μετά την αλλαγή είναι όταν το κλείδωμα γίνεται προφανές. Ο κανόνας για όλα δεν προειδοποιεί για την υπηρεσία που αναλαμβάνει σιωπηρά. Το ανακαλύπτετε όταν αποτύχει η επόμενη σύνδεση.
Αν η ευρεία προώθηση είναι πραγματικά απαραίτητη, δεσμεύστε τις θύρες ελέγχου πριν από τον κανόνα για όλα ή χρησιμοποιήστε ξεχωριστή δημόσια διεύθυνση για τη δημοσίευση. Η δεύτερη επιλογή είναι καθαρότερη γιατί η διεύθυνση ελέγχου κρατά τη δική της πολιτική, αλλά ο πάροχος πρέπει να παρέχει αυτή τη διεύθυνση· η προσθήκη εγγραφής DNS δεν εκχωρεί μία.
Η ευρεία προώθηση TCP και UDP δεν είναι επίσης όλα τα πρωτόκολλα. Το ICMP, το IPv6, η ανατροφοδότηση MTU διαδρομής και η εξωτερική μεταφορά VPN χρειάζονται τη δική τους πολιτική, και ένας κανόνας που καλύπτει TCP και UDP αφήνει αυτές τις περιπτώσεις στην προεπιλεγμένη αλυσίδα.
Διαλέξτε το μοντέλο πριν γράψετε κανόνες
Τέσσερα σχήματα καλύπτουν τις περισσότερες δημοσιεύσεις πύλης, και η επιλογή εξαρτάται από το πόσες υπηρεσίες εκτελείτε και πόσο κίνδυνο στο επίπεδο ελέγχου μπορείτε να ανεχθείτε. Ο πίνακας παρακάτω τα κατατάσσει από το στενότερο στο ευρύτερο.
| Model | What it protects | Cost | Use when |
|---|---|---|---|
| Narrow port forward | Every other listener, including the VPN | One rule per service | Few services, stable ports |
| Catch-all with reserved ports | Ports named in the exception list | Rule order becomes critical | Many services and disciplined review |
| Separate public address | Control address fully isolated | Provider must supply the address | High-value publication |
| VPN-only access | No public entry at all | Visitors need the tunnel | Admin interfaces and internal tools |
Ξεκινήστε με το στενό μοντέλο ακόμη και αν περιμένετε περισσότερες υπηρεσίες αργότερα. Είναι το ευκολότερο στον έλεγχο, και η μετατροπή ενός συνόλου στενών κανόνων σε ελεγμένο κανόνα για όλα είναι απλούστερη από το να ανακαλύψετε ποιον ακροατή άρπαξε ένας ευρύς κανόνας. Όποιο μοντέλο κι αν διαλέξετε, κρατήστε τους κανόνες στον ιδιοκτήτη του τείχους προστασίας. Η εφαρμογή γραμμών iptables δίπλα σε μια ρύθμιση UFW ή nftables που διαχειρίζεται επίσης τις ίδιες αλυσίδες παράγει πολιτική που αλλάζει ανάλογα με τη σειρά εκκίνησης.
Αποδείξτε και τη δημοσίευση και τη διαδρομή ελέγχου
Δοκιμάστε από εξουσιοδοτημένο εξωτερικό πελάτη με το εγκεκριμένο όνομα κεντρικού υπολογιστή και πιστοποιητικό έγκυρο για αυτό. Επιβεβαιώστε ποιο backend απάντησε και μετά ελέγξτε ότι οι άσχετες δημόσιες θύρες παραμένουν απορριπτόμενες. Ένας απενεργοποιημένος έλεγχος πιστοποιητικού δεν είναι επιτυχής δοκιμή HTTPS, και μια σύνδεση που φτάνει στο λάθος backend είναι χειρότερη από μια αποτυχημένη.
Μετά από αυτό, επαληθεύστε την ίδια την πύλη: συνδέστε έναν peer WireGuard, ανοίξτε μια συνεδρία SSH και επιβεβαιώστε ότι η παρακολούθηση αναφέρει ακόμη. Η δημοσιευμένη υπηρεσία μπορεί να λειτουργεί ενώ το επίπεδο ελέγχου είναι σπασμένο, οπότε και οι δύο έλεγχοι ανήκουν στο ίδιο παράθυρο αλλαγών. Κάντε επανεκκίνηση μία φορά για να αποδείξετε ότι οι κανόνες εφαρμόζονται ξανά με την αναμενόμενη σειρά, μετά αφαιρέστε τη δημοσίευση και επιβεβαιώστε ότι η αφαίρεση ταιριάζει πραγματικά με την προσθήκη. Ένα μεγάλο σύνολο προσθηκών εκκίνησης με ελλιπή αφαίρεση είναι το πώς μια προσωρινή δοκιμή γίνεται μόνιμο άνοιγμα.