Android

Ασφαλίστε nginx με την κρυπτογράφηση του ubuntu 18.04

Application Security with NGINX

Application Security with NGINX

Πίνακας περιεχομένων:

Anonim

Το Let's Encrypt είναι μια ελεύθερη και ανοιχτή αρχή πιστοποίησης που αναπτύχθηκε από την ομάδα έρευνας για την ασφάλεια στο Internet (ISRG). Τα πιστοποιητικά που εκδίδονται από το Let's Encrypt εμπιστεύονται σήμερα σχεδόν όλα τα προγράμματα περιήγησης.

Σε αυτό το σεμινάριο, θα παρέχουμε οδηγίες βήμα προς βήμα σχετικά με τον τρόπο ασφάλειας του Nginx με το Let's Encrypt χρησιμοποιώντας το εργαλείο certbot στο Ubuntu 18.04.

Προϋποθέσεις

Βεβαιωθείτε ότι πληρούνται οι ακόλουθες προϋποθέσεις πριν συνεχίσετε με αυτό το σεμινάριο:

  • Έχετε ένα όνομα τομέα που δείχνει στον δημόσιο διακομιστή IP σας. Σε αυτό το σεμινάριο θα χρησιμοποιήσουμε το example.com . Έχετε εγκαταστήσει το Nginx ακολουθώντας αυτές τις οδηγίες. Έχετε ένα μπλοκ διακομιστή για τον τομέα σας. Μπορείτε να ακολουθήσετε αυτές τις οδηγίες για λεπτομέρειες σχετικά με τον τρόπο δημιουργίας ενός.

Εγκαταστήστε το Certbot

Το Certbot είναι ένα πλήρως εξοπλισμένο και εύκολο στη χρήση εργαλείο που μπορεί να αυτοματοποιήσει τις εργασίες για την απόκτηση και την ανανέωση του Let's Encrypt SSL certificates και της διαμόρφωσης web servers για τη χρήση των πιστοποιητικών. Το πακέτο certbot περιλαμβάνεται στις προεπιλεγμένες αποθήκες του Ubuntu.

Ενημερώστε τη λίστα των πακέτων και εγκαταστήστε το πακέτο certbot:

sudo apt update sudo apt install certbot

Δημιουργήστε ομάδα ισχυρών Dh (Diffie-Hellman)

Η ανταλλαγή πλήκτρων Diffie-Hellman (DH) είναι μια μέθοδος ασφαλούς ανταλλαγής κρυπτογραφικών κλειδιών πάνω σε ένα μη ασφαλισμένο κανάλι επικοινωνίας. Θα δημιουργήσουμε ένα νέο σύνολο παραμέτρων 2048 bit DH για την ενίσχυση της ασφάλειας:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 Εάν θέλετε μπορείτε να αλλάξετε το μέγεθος έως και 4096 bits, αλλά στην περίπτωση αυτή, η παραγωγή μπορεί να διαρκέσει περισσότερο από 30 λεπτά, ανάλογα με την εντροπία του συστήματος.

Αποκτώντας πιστοποιητικό SSL

Για να αποκτήσετε ένα πιστοποιητικό SSL για τον τομέα μας, θα χρησιμοποιήσουμε την προσθήκη Webroot, η οποία λειτουργεί δημιουργώντας ένα προσωρινό αρχείο για την επικύρωση του ζητούμενου τομέα στο ${webroot-path}/.well-known/acme-challenge του ${webroot-path}/.well-known/acme-challenge . Ο διακομιστής "Ας κρυπτογραφήσει" κάνει αιτήσεις HTTP στο προσωρινό αρχείο για να επιβεβαιώσει ότι ο ζητούμενος τομέας επιλύεται στο διακομιστή όπου τρέχει το certbot.

Για να γίνει πιο απλό, θα χαρτογραφήσουμε όλα τα αιτήματα HTTP για .well-known/acme-challenge σε ένα μόνο κατάλογο, /var/lib/letsencrypt .

Οι ακόλουθες εντολές θα δημιουργήσουν τον κατάλογο και θα το καταστήσουν εγγράψιμο για τον διακομιστή Nginx.

mkdir -p /var/lib/letsencrypt/.well-known chgrp www-data /var/lib/letsencrypt chmod g+s /var/lib/letsencrypt

Για να αποφύγετε την αναπαραγωγή κώδικα δημιουργήστε τα ακόλουθα δύο αποσπάσματα τα οποία πρόκειται να συμπεριλάβουμε σε όλα τα αρχεία μπλοκ διακομιστή Nginx.

Ανοίξτε τον επεξεργαστή κειμένου και δημιουργήστε το πρώτο απόσπασμα, letsencrypt.conf :

sudo nano /etc/nginx/snippets/letsencrypt.conf /etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }

Δημιουργήστε το δεύτερο snippet ssl.conf οποίο περιλαμβάνει τα τσιπς που συνιστώνται από το Mozilla, επιτρέπει τη σύνδεση στο OCSP, το HTTP Strict Transport Security (HSTS) και επιβάλλει ελάχιστες κεφαλίδες HTTP με εστίαση στην ασφάλεια.

sudo nano /etc/nginx/snippets/ssl.conf /etc/nginx/snippets/ssl.conf

ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 30s; add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload"; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;

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

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com

server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }

Για να ενεργοποιήσουμε το νέο αρχείο block server πρέπει να δημιουργήσουμε μια συμβολική σύνδεση από το αρχείο στον κατάλογο με sites-enabled που διαβάζεται από το Nginx κατά την εκκίνηση:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Κάντε επανεκκίνηση της υπηρεσίας Nginx για να εφαρμοστούν οι αλλαγές:

sudo systemctl restart nginx

Τώρα μπορείτε να εκτελέσετε το Certbot με το plugin webroot και να αποκτήσετε τα αρχεία πιστοποιητικών SSL εκδίδοντας:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Εάν το πιστοποιητικό SSL έχει ληφθεί με επιτυχία, η certbot θα εκτυπώσει το ακόλουθο μήνυμα:

IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2018-07-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:

Τώρα που έχετε τα αρχεία πιστοποιητικών, μπορείτε να επεξεργαστείτε το μπλοκ διακομιστή τομέα σας ως εξής:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com

server { listen 80; server_name www.example.com example.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; return 301 https://example.com$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; #… other code }

Με την παραπάνω διαμόρφωση αναγκάζουμε το HTTPS και ανακατευθύνουμε από www σε μη www έκδοση.

Επαναφόρτωση της υπηρεσίας Nginx για να εφαρμοστούν οι αλλαγές:

sudo systemctl reload nginx

Αυτόματη ανανέωση Ας κρυπτογραφήσουμε το πιστοποιητικό SSL

Τα πιστοποιητικά της Κρυπτογράφησης ισχύουν για 90 ημέρες. Για να ανανεώσει αυτόματα τα πιστοποιητικά πριν λήξει, το πακέτο certbot δημιουργεί ένα cronjob που τρέχει δύο φορές την ημέρα και θα ανανεώσει αυτόματα οποιοδήποτε πιστοποιητικό 30 ημέρες πριν από τη λήξη του.

Δεδομένου ότι χρησιμοποιούμε την προσθήκη certbot webroot μόλις το πιστοποιητικό ανανεωθεί, πρέπει επίσης να φορτώσουμε ξανά την υπηρεσία nginx. Προσθέστε --renew-hook "systemctl reload nginx" στο αρχείο /etc/cron.d/certbot έτσι ώστε να μοιάζει με αυτό:

sudo nano /etc/cron.d/certbot /etc/cron.d/certbot

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

Για να ελέγξετε τη διαδικασία ανανέωσης, μπορείτε να χρησιμοποιήσετε το διακόπτη certbot - --dry-run :

sudo certbot renew --dry-run

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

συμπέρασμα

Σε αυτό το σεμινάριο, χρησιμοποιήσατε τον πελάτη Let's Encrypt, certbot για να κατεβάσετε τα πιστοποιητικά SSL για τον τομέα σας. Έχετε επίσης δημιουργήσει αποσπάσματα Nginx για να αποφύγετε την αναπαραγωγή κώδικα και να ρυθμίσετε το Nginx για να χρησιμοποιήσετε τα πιστοποιητικά. Στο τέλος του μαθήματος έχετε ρυθμίσει ένα cronjob για αυτόματη ανανέωση πιστοποιητικού.

nginx ubuntu ας κρυπτογραφήσουμε το certbot ssl

Αυτή η ανάρτηση αποτελεί μέρος της σειράς how-to-install-lemp-stack-on-ubuntu-18-04.

Άλλες θέσεις αυτής της σειράς:

• Πώς να εγκαταστήσετε το Nginx στο Ubuntu 18.04 • Πώς να δημιουργήσετε μπλοκ διακομιστή Nginx στο Ubuntu 18.04 • Ασφαλής Nginx με την κρυπτογράφηση του Ubuntu 18.04 • Πώς να εγκαταστήσετε τη MySQL στο Ubuntu 18.04 • Πώς να εγκαταστήσετε την PHP στο Ubuntu 18.04