Android

Säkra nginx med låt oss kryptera på debian 10 linux

Защита от DoS-атак с помощью Nginx

Защита от DoS-атак с помощью Nginx

Innehållsförteckning:

Anonim

Let's Encrypt är en gratis, automatiserad och öppen certifikatutfärdare utvecklad av Internet Security Research Group (ISRG) som tillhandahåller gratis SSL-certifikat.

Certifikat som utfärdats av Let's Encrypt är betrodda av alla större webbläsare och gäller i 90 dagar från utfärdatum.

Denna handledning visar hur du installerar ett gratis Let's Encrypt SSL-certifikat på Debian 10, Buster som kör Nginx som en webbserver. Vi kommer också att visa hur man konfigurerar Nginx för att använda SSL-certifikatet och aktivera HTTP / 2.

förutsättningar

Se till att följande förutsättningar uppfylls innan du fortsätter med guiden:

  • Loggad in som root eller användare med sudo-privilegier. Domänen som du vill få SSL-certifikatet för måste peka på din offentliga IP-server. Vi använder exempel.com. Nginx installerat.

Installera Certbot

Vi använder certbotverktyget för att få och förnya certifikaten.

Certbot är ett fullt utrustat och lättanvänt verktyg som automatiserar uppgifterna för att få och förnya Let's Encrypt SSL-certifikat och konfigurera webbservrar för att använda certifikaten.

Certbot-paketet ingår i Debians standardförvar. Kör följande kommandon för att installera certbot:

sudo apt update sudo apt install certbot

Generera Dh (Diffie-Hellman) -gruppen

Diffie – Hellman nyckelutbyte (DH) är en metod för att säkert utbyta kryptografiska nycklar över en osäker kommunikationskanal.

Vi kommer att generera en ny uppsättning 2048-bitars DH-parametrar för att stärka säkerheten:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Du kan också ändra storleken upp till 4096 bitar, men genereringen kan ta mer än 30 minuter beroende på systemets entropi.

Få ett SSL-certifikat för Let's Encrypt

För att få ett SSL-certifikat för domänen kommer vi att använda plugin Webroot. Det fungerar genom att skapa en tillfällig fil för validering av den begärda domänen i ${webroot-path}/.well-known/acme-challenge . Let's Encrypt-servern gör HTTP-förfrågningar till den tillfälliga filen för att bekräfta att den begärda domänen löses till servern där certbot körs.

Vi kommer att kartlägga alla HTTP-förfrågningar för .well-known/acme-challenge till en enda katalog, /var/lib/letsencrypt .

Kör följande kommandon för att skapa katalogen och göra den skrivbar för Nginx-servern:

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

För att undvika duplikeringskod skapar vi två utdrag som kommer att inkluderas i alla Nginx-serverblockfiler.

Öppna din textredigerare och skapa det första utdraget, 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; }

Det andra snippet ssl.conf innehåller de flishuggare som rekommenderas av Mozilla, möjliggör OCSP-häftappning, HTTP Strict Transport Security (HSTS) och upprätthåller få säkerhetsfokuserade

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.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; 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=63072000" always; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;

När du är klar öppnar du blockeringsfilen för domänservern och inkluderar letsencrypt.conf som visas nedan:

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; }

Skapa en symbolisk länk till den sites-enabled katalogen för att aktivera domänserverblocket:

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

Starta om Nginx-tjänsten så att ändringarna träder i kraft:

sudo systemctl restart nginx

Du är nu redo att skaffa SSL-certifikatfiler genom att köra följande kommando:

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

Om SSL-certifikatet framgångsrikt erhålls kommer följande meddelande att skrivas ut på din terminal:

IMPORTANT NOTES: 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 2020-02-22. 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" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:

Redigera domänserverblocket och inkludera SSL-certifikatfilerna enligt följande:

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 }

Konfigurationen ovan berättar för Nginx att omdirigera från HTTP till HTTPS och från www till icke-www-version.

Starta om eller ladda Nginx-tjänsten på nytt för att ändringarna ska träda i kraft:

sudo systemctl restart nginx

Öppna din webbplats med https:// så ser du en grön låsikon.

Automatisk förnyelse av Let's Encrypt SSL-certifikat

Let's Encrypts certifikat är giltiga i 90 dagar. För att automatiskt förnya certifikaten innan de löper ut skapar certbot-paketet en cronjob som körs två gånger om dagen och automatiskt förnyar alla certifikat 30 dagar innan dess utgång.

Vid förnyelse måste nginx-tjänsten laddas om för servern att ladda certifikatet. Lägg till --renew-hook "systemctl reload nginx" till filen /etc/cron.d/certbot så det ser ut så här:

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"

Testa den automatiska förnyelseprocessen genom att köra det här kommandot:

sudo certbot renew --dry-run

Om det inte finns några fel betyder det att förnyelseprocessen var framgångsrik.

Slutsats

Att ha ett SSL-certifikat är ett måste nuförtiden. Det säkrar din webbplats, ökar SERP-rankingpositionen och låter dig aktivera HTTP / 2 på din webbserver.

I denna handledning har vi visat dig hur du genererar och förnyar SSL-certifikat med certbot-skriptet. Vi har också visat dig hur du konfigurerar Nginx för att använda certifikaten.

För att lära dig mer om Certbot, besök Certbot-dokumentationen.

nginx debian låt oss kryptera certbot ssl