Ιστότοπος NGINX μόνο για VPN: ακροατής, τείχος προστασίας και λίστα επιτρεπόμενων HTTP
Ένας ιδιωτικός ιστότοπος NGINX χρειάζεται δεσμευμένο socket VPN, περιορισμένο κανόνα εισόδου υπολογιστή και άθικτη λίστα πρόσβασης HTTP. Δοκιμάστε και τα τρία, όχι ένα μπλοκ διακομιστή.
Τρεις ανεξάρτητες αποφάσεις στέκονται ανάμεσα σε έναν ιδιωτικό ιστότοπο και το διαδίκτυο: ποιο socket δέχεται τη σύνδεση, ποια διαδρομή μπορεί να την παραδώσει και σε ποιους πελάτες HTTP απαντά ο επιλεγμένος διακομιστής. Ένα μπλοκ διακομιστή παίρνει μόνο την πρώτη απόφαση. Αντιμετωπίστε τις άλλες δύο ως ξεχωριστά μέτρα ελέγχου, αλλιώς ο ιστότοπος θα φαίνεται ιδιωτικός ενώ μια παλιά είσοδος παραμένει ανοιχτή. Οι περισσότερες αστοχίες NGINX μόνο για VPN προέρχονται από τη δοκιμή μόνο του πρώτου στρώματος.
Το παράδειγμα χρησιμοποιεί πύλη OpenVPN σε Linux στη διεύθυνση 10.90.0.1 στο tun0, πελάτες στο 10.90.0.0/24, διατηρημένες πηγές και TCP 8443 δεσμευμένο για αυτή την είσοδο. Προσαρμόστε τις τιμές, κρατήστε τα στρώματα.
Ξεκινήστε από το socket, όχι από το όνομα υπολογιστή
Δέστε τον ακροατή HTTPS στη διεύθυνση της σήραγγας και σε αποκλειστική θύρα. Μια συγκεκριμένη διεύθυνση είναι ευκολότερο να σκεφτείς από ένα socket μπαλαντέρ μαζί με έλεγχο ονόματος, γιατί ο πυρήνας δεν θα δώσει τη θύρα σε άλλη τοπική διεύθυνση.
server {
listen 10.90.0.1:8443 ssl;
server_name admin.corp.example;
ssl_certificate /etc/nginx/tls/admin-fullchain.pem;
ssl_certificate_key /etc/nginx/tls/admin-key.pem;
root /srv/private-site;
allow 10.90.0.0/24;
deny all;
location / {
try_files $uri $uri/ =404;
}
}
Το πιστοποιητικό πρέπει να ονομάζει το όνομα υπολογιστή της υπηρεσίας που πληκτρολογούν οι πελάτες, και η ιδιωτική όψη DNS πρέπει να επιλύει αυτόν τον υπολογιστή στη δεσμευμένη διεύθυνση. Το server_name επιλέγει μόνο έναν εικονικό υπολογιστή· δεν πιστοποιεί κανέναν. Μια εγγραφή DNS που λείπει παράγει σφάλμα πιστοποιητικού που μοιάζει με βλάβη TLS. Ελέγξτε το όνομα πριν αντικαταστήσετε το πιστοποιητικό.
Διαβάστε την ενεργή διαμόρφωση πριν προσθέσετε το αρχείο. Τα includes και οι ακροατές μπαλαντέρ μπορούν να εξυπηρετούν την ίδια ρίζα αλλού, και ένας προεπιλεγμένος διακομιστής μπορεί να απαντά σε αιτήματα που το νέο μπλοκ δεν βλέπει ποτέ.
Κλείστε κάθε άλλον ακροατή για αυτό το περιεχόμενο
Καταγράψτε τις οδηγίες listen και συγκρίνετε τις ρίζες που εξυπηρετούν. Ένα μπλοκ που προστέθηκε για άλλη εφαρμογή μπορεί να προωθεί στο ίδιο upstream, και ένας παλιός προεπιλεγμένος διακομιστής μπορεί να συνεχίζει να απαντά αφού στηθεί ο νέος. Αυτή η έξοδος είναι το πραγματικό απόθεμα, όχι το αρχείο που μόλις επεξεργαστήκατε. Συγκρίνετε κάθε ρίζα που εξυπηρετεί το ίδιο περιεχόμενο.
sudo nginx -T | grep -n "listen\|server_name\|root\|proxy_pass"
Ελέγξτε και τις δύο οικογένειες διευθύνσεων. Μια δέσμευση IPv4 αφήνει ένα socket IPv6 ανέπαφο, και μια νέα εγγραφή A δεν αποσύρει μια παλιά απάντηση AAAA που δείχνει ακόμη σε δημόσια διαδρομή.
Αποσύρετε τον παλιό εικονικό υπολογιστή ως ξεχωριστή αλλαγή. Η αφαίρεση του δημόσιου δίδυμου του νέου μπλοκ είναι συνήθως το βήμα που κλείνει πραγματικά την είσοδο· ο ιδιωτικός ακροατής προσθέτει μόνο τον προβλεπόμενο.
Περιορίστε την εισερχόμενη διαδρομή στον υπολογιστή
Η διεύθυνση ακρόασης περιορίζει το socket, όχι τη διεπαφή εισόδου. Ένα πακέτο που δρομολογείται σε αυτή τη διεύθυνση από αλλού φτάνει ακόμη ως τοπική είσοδος, γι' αυτό το τείχος προστασίας του υπολογιστή χρειάζεται τη δική του δήλωση για το από πού επιτρέπεται να έρθει η σύνδεση. Γι' αυτό η δέσμευση μόνη της σπάνια ικανοποιεί έναν έλεγχο.
Με πολιτική εισερχομένων εξ ορισμού απόρριψης και χωρίς ευρύτερη άδεια για αυτή την υπηρεσία, ένας περιορισμένος κανόνας ονομάζει μαζί τη σήραγγα, το εύρος πηγής, τον προορισμό και τη θύρα:
sudo ufw allow in on tun0 proto tcp from 10.90.0.0/24 to 10.90.0.1 port 8443
Διαβάστε την ενεργή σειρά του τείχους προστασίας πριν την εφαρμόσετε. Μια προγενέστερη ευρεία αποδοχή μπορεί να ακυρώσει τον περιορισμό, και μια προγενέστερη τελική απόρριψη μπορεί να εμποδίσει να φτάσει ποτέ αυτή η άδεια. Μην καθαρίζετε άσχετους κανόνες και μην απενεργοποιείτε το τείχος προστασίας για να ταιριάξει το παράδειγμα.
Ο κανόνας αυτός είναι είσοδος στον υπολογιστή, όχι διαδρομή προς άλλο μηχάνημα LAN, και ο εξωτερικός ακροατής OpenVPN της πύλης παραμένει ξεχωριστή υπηρεσία. Αν ο ιστότοπος ήταν δημόσιος πριν, σχεδιάστε πώς αποσύρεται η παλιά είσοδος και πώς χειρίζονται οι υπάρχουσες συνεδρίες.
Κρατήστε τη λίστα HTTP άθικτη καθώς αλλάζουν οι τοποθεσίες
Το NGINX αξιολογεί τις εγγραφές allow και deny με σειρά, και η λίστα σε επίπεδο διακομιστή παραπάνω επιτρέπει τη δηλωμένη ομάδα πριν από το τελικό deny. Η μονάδα πρόσβασης καταγράφει επίσης ότι μια τοποθεσία που ορίζει οποιαδήποτε εγγραφή πρόσβασης χρησιμοποιεί τη δική της λίστα αντί της γονικής. Η σειρά έχει τόση σημασία όση και οι ίδιες οι εγγραφές.
Αυτή η επαναφορά είναι η συνήθης παλινδρόμηση. Μια νέα τοποθεσία μεταφόρτωσης, API ή υγείας που προσθέτει μία εγγραφή αντικαθιστά σιωπηλά τον περιορισμό σε επίπεδο διακομιστή, και ο ιστότοπος γίνεται ευρύτερος στη διαδρομή που προστέθηκε τελευταία.
Εξετάστε κάθε τοποθεσία, ψευδώνυμο και εναλλακτικό μπλοκ ως μέρος της ίδιας πολιτικής. Αν οι έλεγχοι IP συνδυάζονται με πιστοποίηση NGINX, κατανοήστε το satisfy: μια ρύθμιση any μπορεί να περάσει έναν πελάτη μέσω ενός μηχανισμού ενώ ο άλλος δεν έχει περάσει. Βάλτε τη λίστα πρόσβασης στη λίστα ελέγχου τοποθεσιών.
Μια άρνηση HTTP συμβαίνει αφού η σύνδεση TCP φτάσει στο NGINX. Συμπληρώνει τον περιορισμό δικτύου, και η δική του εξουσιοδότηση της εφαρμογής ισχύει ακόμη για κάθε χρήστη.
Επαληθεύστε τη ζωντανή διαδρομή και την περίπτωση αποτυχίας
Εκτελέστε τον αναλυτή διαμόρφωσης, επιθεωρήστε τα sockets που ακούν και μετά κάντε ένα νέο ονομαστικό αίτημα από προβλεπόμενο πελάτη. Επιβεβαιώστε ότι το πιστοποιητικό επικυρώνεται, το όνομα DNS επιλύεται στη δεσμευμένη διεύθυνση και η απάντηση προέρχεται από την αναμενόμενη ρίζα.
Δοκιμάστε έπειτα μια εξαιρούμενη πηγή και μια εναλλακτική είσοδο. Ένα επιτυχές επιτρεπόμενο αίτημα δεν λέει τίποτε για τις διαδρομές που θέλατε να κλείσετε, και στην εξαιρούμενη δοκιμή εμφανίζεται ένας εναπομείνας ακροατής ή μια ευρεία αποδοχή του τείχους προστασίας.
Επαναλάβετε την περίπτωση εκκίνησης ή ανάκτησης VPN. Αν το NGINX ξεκινά πριν υπάρξει η διεύθυνση της σήραγγας, η δέσμευση μπορεί να αποτύχει ακόμη και με τέλειο αρχείο. Συντονίστε την ετοιμότητα της διεύθυνσης και κρατήστε τοπική διαδρομή ανάκτησης πριν αλλάξετε έναν κοινόχρηστο διακομιστή web.
Καταγράψτε το socket, τη θύρα, το εύρος πηγής και τη λίστα HTTP που πέρασαν. Η επόμενη αλλαγή VPN ή DNS μπορεί να μετακινήσει οποιοδήποτε από αυτά, και τέσσερις ονομαστικές τιμές συγκρίνονται ευκολότερα από μια καρτέλα περιηγητή που λειτουργεί.