Πώς να ενεργοποιήσετε το HTTPS για την κρυφή μνήμη βερνικιού χρησιμοποιώντας το Hitch στο CentOS-RHEL 8


Η Varnish Cache δεν διαθέτει εγγενή υποστήριξη για SSL/TLS και άλλα πρωτόκολλα που σχετίζονται με τη θύρα 443. Εάν χρησιμοποιείτε την Varnish Cache για να ενισχύσετε την απόδοση της εφαρμογής ιστού σας, πρέπει να εγκαταστήσετε και να διαμορφώσετε ένα άλλο λογισμικό που ονομάζεται SSL/TLS τερματικός διακομιστής, ώστε να λειτουργεί παράλληλα με το Varnish Cache για να ενεργοποιήσετε το HTTPS.

Το Hitch είναι ένας δωρεάν διακομιστής μεσολάβησης ανοιχτού κώδικα, βασισμένος σε libev και επεκτάσιμος διακομιστής SSL/TLS, σχεδιασμένος για Varnish Cache, ο οποίος επί του παρόντος λειτουργεί σε Linux, OpenBSD, FreeBSD και MacOSX. Τερματίζει τις συνδέσεις TLS/SSL ακούγοντας στη θύρα 443 (την προεπιλεγμένη θύρα για συνδέσεις HTTPS) και προωθεί την μη κρυπτογραφημένη κίνηση στο Varnish Cache, ωστόσο , θα πρέπει να λειτουργεί και με άλλα backend.

Υποστηρίζει TLS1.2 και TLS1.3 και παλαιού τύπου TLS 1.0/1.1, υποστηρίζει ALPN (Διαπραγμάτευση πρωτοκόλλου επιπέδου εφαρμογής) και NPN (Επόμενη διαπραγμάτευση πρωτοκόλλου) για το HTTP/2, ένα πρωτόκολλο PROXY για σηματοδότηση πελάτη IP/θύρα σε ένα backend, συνδέσεις υποδοχής τομέα UNIX στην προέλευση, SNI (Ένδειξη ονόματος διακομιστή), με και χωρίς πιστοποιητικά μπαλαντέρ. Επιπλέον, λειτουργεί καλά για μεγάλες εγκαταστάσεις που απαιτούν έως και 15.000 υποδοχές ακρόασης και 500.000 πιστοποιητικά.

Ως συνέχεια των δύο προηγούμενων άρθρων μας σχετικά με την εγκατάσταση Varnish Cache για διακομιστές Nginx και Apache HTTP, αυτός ο οδηγός δείχνει ότι ενεργοποιεί το HTTPS< για Varnish Cache χρησιμοποιώντας Hitch TLS Proxy στο CentOS/RHEL 8.

Αυτός ο οδηγός προϋποθέτει ότι έχετε εγκαταστήσει το Varnish για διακομιστή ιστού Nginx ή Apache, διαφορετικά, δείτε:

  • Πώς να εγκαταστήσετε το Varnish Cache 6 για τον διακομιστή Web Nginx στο CentOS/RHEL 8
  • Πώς να εγκαταστήσετε το Varnish Cache 6 για διακομιστή Web Apache σε CentOS/RHEL 8

Βήμα 1: Εγκαταστήστε το Hitch στο CentOS/RHEL 8

1. Το πακέτο Hitch παρέχεται στο χώρο αποθήκευσης EPEL (Επιπλέον πακέτα για Enterprise Linux). Για να το εγκαταστήσετε, ενεργοποιήστε πρώτα το EPEL στο σύστημά σας και στη συνέχεια εγκαταστήστε το πακέτο. Εάν δεν έχετε εγκαταστήσει το πακέτο OpenSSL, εγκαταστήστε το επίσης.

dnf install epel-release
dnf install hitch openssl

2. Όταν ολοκληρωθεί η εγκατάσταση του πακέτου, θα πρέπει να διαμορφώσετε την Varnish Cache ώστε να λειτουργεί το Hitch. Πρέπει επίσης να διαμορφώσετε το Hitch για να χρησιμοποιήσετε τα πιστοποιητικά SSL/TLS και το Varnish ως backend. Το κύριο αρχείο διαμόρφωσης του Hitch βρίσκεται στη διεύθυνση /etc/hitch/hitch.conf, το οποίο εξηγείται παρακάτω.

Βήμα 2: Διαμόρφωση κρυφής μνήμης Varnish για Hitch

3. Στη συνέχεια, ενεργοποιήστε το Varnish για να ακούσετε μια πρόσθετη θύρα (8443 στην περίπτωσή μας) χρησιμοποιώντας το πρωτόκολλο PROXY υποστήριξη, για επικοινωνίες με το Hitch.

Ανοίξτε λοιπόν το αρχείο υπηρεσίας systemd του Varnish για επεξεργασία.

systemctl edit --full varnish

Αναζητήστε τη γραμμή ExecStart και προσθέστε μια επιπλέον σημαία -a με την τιμή 127.0.0.1:8443, διακομιστής μεσολάβησης. Η χρήση τιμής 127.0.0.1:8443 σημαίνει ότι το Varnish θα δέχεται μόνο την εσωτερική σύνδεση (από διεργασίες που εκτελούνται στον ίδιο διακομιστή, π.χ. κοτσαδόρο σε αυτήν την περίπτωση) αλλά όχι εξωτερικές συνδέσεις.

ExecStart=/usr/sbin/varnishd -a :80 -a 127.0.0.1:8443,proxy -f /etc/varnish/default.vcl -s malloc,256m 

Αποθηκεύστε το αρχείο και, στη συνέχεια, επανεκκινήστε την υπηρεσία Varnish για να εφαρμόσετε τις τελευταίες αλλαγές.

systemctl restart varnish

Βήμα 3: Λήψη πιστοποιητικών SSL/TLS

4. Σε αυτήν την ενότητα, θα εξηγήσουμε πώς να δημιουργήσετε το πακέτο πιστοποιητικών SSL/TLS που θα χρησιμοποιηθεί στην ενότητα Hitch. Για αυτόν τον οδηγό, θα εξηγήσουμε τις διάφορες επιλογές σχετικά με τον τρόπο χρήσης ενός αυτουπογεγραμμένου πιστοποιητικού, ενός εμπορικού πιστοποιητικού ή ενός από το Let’s Encrypt.

Για να δημιουργήσετε ένα αυτο-υπογεγραμμένο πιστοποιητικό (το οποίο θα πρέπει να χρησιμοποιείτε μόνο σε τοπικό περιβάλλον δοκιμών), μπορείτε να χρησιμοποιήσετε το εργαλείο OpenSSL.

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout  tecmint.lan.key -out tecmint.lan.crt

Στη συνέχεια, δημιουργήστε μια δέσμη πιστοποιητικού και κλειδιού ως εξής.

cat tecmint.crt tecmint.key >tecmint.pem

Σημείωση: Για χρήση στην παραγωγή, μπορείτε είτε να αγοράσετε ένα πιστοποιητικό από μια εμπορική Αρχή έκδοσης πιστοποιητικών (CA) ή αποκτήστε ένα δωρεάν, αυτοματοποιημένο και πλήρως αναγνωρισμένο πιστοποιητικό από το Let's Encrypt. Στη συνέχεια, δημιουργήστε ένα πακέτο PEM.

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

cat example.com.key example.com.crt example.com-ca-bundle.crt > /etc/ssl/example.com.pem 

Για το Let's Encrypt, το πιστοποιητικό, το ιδιωτικό κλειδί και η πλήρης αλυσίδα θα αποθηκευτούν στο /etc/letsencrypt/live/example.com/, επομένως δημιουργήστε το πακέτο όπως φαίνεται .

cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem >/etc/letsencrypt/live/example.com/example.com_bundle.pem

Βήμα 4: Διαμόρφωση και εκκίνηση του Hitch

5. Στη συνέχεια, διαμορφώστε το Varnish ως backend για το Hitch και καθορίστε τα αρχεία πιστοποιητικού SSL/TLS που θα χρησιμοποιηθούν για HTTPS, στο κύριο αρχείο διαμόρφωσης Hitch, ανοίξτε το για επεξεργασία.

vi /etc/hitch/hitch.conf

Η ενότητα frontend ορίζει τις διευθύνσεις IP και τη θύρα που θα ακούσει το Hitch. Η προεπιλεγμένη διαμόρφωση είναι η ακρόαση σε όλες τις διεπαφές IPv4 και IPv6 που είναι συνδεδεμένες στον διακομιστή και εκτελούνται στη θύρα 443 και χειρίζονται εισερχόμενα HTTPS< αιτήματα, παραδίδοντάς τα στο Varnish.

Αλλάξτε την προεπιλεγμένη θύρα διακομιστή μεσολάβησης backend από 6086 σε 8443 (η θύρα που χρησιμοποιείται για την προώθηση αιτημάτων στο Varnish) στο Αρχείο διαμόρφωσης Hitch, χρησιμοποιώντας την παράμετρο backend. Επίσης, καθορίστε το αρχείο πιστοποιητικού χρησιμοποιώντας την παράμετρο pem-file όπως φαίνεται.

backend = "[127.0.0.1]:8443"
#pem-dir = "/etc/pki/tls/private"
pem-file = "/etc/ssl/tecmint.lan/tecmint.pem"

Αποθηκεύστε το αρχείο και κλείστε το.

6. Τώρα ξεκινήστε την υπηρεσία hitch και ενεργοποιήστε την αυτόματη εκκίνηση κατά την εκκίνηση του συστήματος. Σημειώστε ότι ο διακόπτης --now όταν χρησιμοποιείται με το enable, ξεκινά επίσης μια υπηρεσία systemd και, στη συνέχεια, ελέγξτε την κατάσταση για να δείτε εάν είναι ενεργοποιημένη και εκτελείται ως εξής.

systemctl enable --now hitch
systemctl status hitch

7. Προτού προχωρήσετε στον έλεγχο εάν ο ιστότοπος/η εφαρμογή σας εκτελείται τώρα σε HTTPS, πρέπει να επιτρέψετε τη θύρα υπηρεσίας HTTPS 443 το τείχος προστασίας για να επιτρέπει στα αιτήματα που προορίζονται για τη συγκεκριμένη θύρα του διακομιστή να περνούν μέσα από το τείχος προστασίας.

firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

Βήμα 5: Δοκιμή τερματισμού SSL/TLS με Varnish Cache-Hitch Setup

8. Είναι τώρα ώρα να δοκιμάσετε τη ρύθμιση Varnish Cache-Hitch. Ανοίξτε ένα πρόγραμμα περιήγησης ιστού και χρησιμοποιήστε τη διεύθυνση IP του τομέα ή του διακομιστή σας για πλοήγηση σε HTTPS.

https://www.example.com
OR
https://SERVER_IP/

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

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

Βήμα 6: Ανακατεύθυνση HTTP σε HTTPS στην κρυφή μνήμη του Varnish

9. Για να εκτελέσετε τον ιστότοπό σας μόνο σε HTTPS, πρέπει να ανακατευθύνετε όλη την επισκεψιμότητα HTTP στο HTTPS. Μπορείτε να το κάνετε αυτό προσθέτοντας την ακόλουθη διαμόρφωση στο αρχείο διαμόρφωσης Hitch.

vi /etc/hitch/hitch.conf 

Πρώτα, προσθέστε τη γραμμή import std; ακριβώς κάτω από το vlc 4.0; και, στη συνέχεια, αναζητήστε την υπορουτίνα vlc_recv, η οποία είναι η πρώτη υπορουτίνα VCL που εκτελείται αμέσως αφού το Varnish Cache έχει αναλύσει το αίτημα πελάτη στη βασική του δομή δεδομένων. Είναι όπου μπορούμε να τροποποιήσουμε τις κεφαλίδες αιτημάτων και να εκτελέσουμε ένα synth για να ανακατευθύνουμε αιτήματα πελατών.

Τροποποιήστε το για να μοιάζει με αυτό.

sub vcl_recv {
    if (std.port(server.ip) != 443) {
        set req.http.location = "https://" + req.http.host + req.url;
        return(synth(301));
    }
}

Λάβετε υπόψη ότι το πρωτόκολλο PROXY επιτρέπει στο Varnish να βλέπει τη θύρα ακρόασης Hitch 443 από τον server.ip< μεταβλητή. Έτσι, η γραμμή std.port(server.ip) επιστρέφει τον αριθμό θύρας στην οποία ελήφθη η σύνδεση πελάτη.

Εάν η θύρα δεν είναι 443 για HTTPS (όπως ελέγχεται από το (std.port(server.ip) != 443)), η υπορουτίνα θα ορίσει την κεφαλίδα τοποθεσίας HTTP αιτήματος (ορισμός req.http.location) σε ένα ασφαλές αίτημα (“https://” + req.http.host< + req.url) απλά ζητώντας από το πρόγραμμα περιήγησης ιστού να φορτώσει μια έκδοση HTTPS της ιστοσελίδας (δηλ. ανακατεύθυνση URL).

Η κεφαλίδα Τοποθεσία θα σταλεί στην υπορουτίνα vcl_synth (η οποία καλείται χρησιμοποιώντας το return(synth(301))) με κωδικό κατάστασης HTTP 301 (Μετακινήθηκε οριστικά).

10. Στη συνέχεια, προσθέστε την ακόλουθη υπορουτίνα vcl_synth (μία από τις πολλές περιπτώσεις χρήσης της είναι η ανακατεύθυνση χρηστών), για να επεξεργαστείτε την παραπάνω σύνθεση.

sub vcl_synth {
        if (resp.status == 301) {
                set resp.http.location = req.http.location;
		  set resp.status = 301;
                return (deliver);
        }
}

Ελέγχει εάν η κατάσταση απόκρισης είναι 301, η κεφαλίδα Τοποθεσία HTTP στην απόκριση ορίζεται στην κεφαλίδα Τοποθεσία HTTP στο αίτημα που στην πραγματικότητα είναι μια ανακατεύθυνση στο HTTPS και εκτελεί μια ενέργεια παράδοσης.

Η ενέργεια παράδοσης δημιουργεί μια απάντηση με την απόκριση από το backend, αποθηκεύει την απάντηση στην κρυφή μνήμη και τη στέλνει στον πελάτη.

Αποθηκεύστε το αρχείο και κλείστε το.

11. Εφαρμόστε ξανά τις νέες αλλαγές στη διαμόρφωση του Varnish επανεκκινώντας την υπηρεσία. Στη συνέχεια, χρησιμοποιήστε το εργαλείο γραμμής εντολών curl για να επιβεβαιώσετε την ανακατεύθυνση από HTTP σε HTTPS.

systemctl restart varnish
curl -I http://eaxmple.com/

Από το πρόγραμμα περιήγησης, η απόκριση είναι επίσης η ίδια όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης.

Ελπίζουμε ότι όλα έχουν λειτουργήσει μια χαρά μέχρι αυτό το σημείο. Εάν όχι, στείλτε ένα σχόλιο ή ερωτήσεις μέσω της παρακάτω φόρμας σχολίων. Για τυχόν σύνθετες επιλογές διαμόρφωσης, μεταβείτε στην τεκμηρίωση της προσωρινής μνήμης βερνικιού και στην τεκμηρίωση Hitch.