כיצד לאבטח Nginx עם Let's Encrypt ב- Ubuntu 20.04

הקדמה

Let’s Encrypt הוא רשות אישורים (CA) שמספקת דרך קלה לקבל ולהתקין תעודות TLS/SSL בחינם, וכך לאפשר HTTPS מוצפן על שרתי האינטרנט. הוא פשוט את התהליך על ידי ספקת לקוח תוכנה, Certbot, המנסה לאוטומט רוב (אם לא את כל) השלבים הנדרשים. כרגע, כל התהליך של קבלת והתקנת תעודה הוא מאובטמן לחלוטין על שני Apache ו-Nginx.

במדריך זה, תשתמש ב-Certbot כדי לקבל תעודת SSL בחינם עבור Nginx ב-Ubuntu 20.04 ותגדיר את התעודה שלך כך שתתחדש באופן אוטומטי.

מדריך זה ישתמש בקובץ הגדרות שרת Nginx נפרד במקום הקובץ ברירת המחדל. אנו ממליצים על יצירת קבצי בלוק שרת Nginx חדשים עבור כל דומיין מפני שזה עוזר למנוע טעויות נפוצות ולשמור על הקבצים המוגדרים כברירת מחדל כתצורת גיבוי.

תן ל-DigitalOcean לדאוג לניהול Nginx ול-Let’s Encrypt. פלטפורמת היישומים של DigitalOcean תאפשר לך להתקין ישירות מ-GitHub בדקות. הפלטפורמה תתעסק גם בתעודות SSL ובניתוב עבורך.

דרישות

כדי לעקוב אחרי המדריך הזה, יש לך צורך ב:

  • שרת Ubuntu 20.04 אחד הוקם על ידי הפעלת המדריך התקנת השרת הראשונית עבור Ubuntu 20.04, כולל משתמש עם הרשאות sudo וגישה ללא משתמש ראשי, וגם חומת אש.

  • שם דומיין מורשה. המדריך ישתמש ב־example.com לכל אורך. ניתן לרכוש שם דומיין מ־Namecheap, לקבל אחד בחינם מ־Freenom, או להשתמש ברשם הדומיינים שלך לבחירתך.

  • שני רשומות DNS הבאות צריכות להיות מוגדרות עבור השרת שלך. אם אתה משתמש ב־DigitalOcean, ראה את תיעוד ה-DNS שלנו לפרטים נוספים על כיצד להוסיף אותם.

  • רשומת A עם example.com שמצביעה לכתובת ה-IP הציבורית של השרת שלך.
  • רשומת A עם www.example.com שמצביעה לכתובת ה-IP הציבורית של השרת שלך.
  • ה-Nginx מותקן על ידי מעקב אחרי איך להתקין Nginx על Ubuntu 20.04. הוודא שיש לך בלוק שרת עבור הדומיין שלך. המדריך הזה ישתמש ב־/etc/nginx/sites-available/example.com כדוגמה.

שלב 1 — התקנת Certbot

השלב הראשון לשימוש ב-Let’s Encrypt לקבלת תעודת SSL הוא להתקין את תוכנת Certbot על השרת שלך.

התקן את Certbot ואת תוסף ה-Nginx שלו באמצעות apt:

  1. sudo apt install certbot python3-certbot-nginx

כעת Certbot מוכן לשימוש, אך כדי שיוכל להגדיר את SSL באופן אוטומטי עבור Nginx, עלינו לוודא חלק מהתצורה של Nginx.

שלב 2 — אימות תצורת Nginx

יש ל-Certbot להיות מסוגל למצוא את הבלוק server הנכון בתצורת ה-Nginx שלך כדי שיוכל להגדיר את SSL באופן אוטומטי. בדיוק כך הוא עושה זאת על ידי חיפוש אחר הוראת server_name שמתאימה לדומיין שבו אתה מבקש תעודה.

אם עקבת אחרי שלב הגדרת בלוק השרת במדריך להתקנת Nginx, עליך להניח שיש לך בלוק שרת עבור הדומיין שלך ב- /etc/nginx/sites-available/example.com עם ההוראה server_name הוגדרת כבר באופן מתאים.

כדי לבדוק, פתח את קובץ התצורה עבור הדומיין שלך באמצעות nano או העורך הטקסט המועדף עליך:

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

מצא את השורה הקיימת server_name. זה צריך להיראות כמו כך:

/etc/nginx/sites-available/example.com
...
server_name example.com www.example.com;
...

אם כן, צא מהעורך והמשך לשלב הבא.

אם זה לא, עדכן אותו כך שיתאים. לאחר מכן שמור את הקובץ, צא מהעורך שלך, ווודא את תחביר העריכות בתצורה שלך:

  1. sudo nginx -t

אם תקבל שגיאה, פתח מחדש את קובץ בלוק השרת ובדוק אם יש טעויות כתיב או תווים חסרים. לאחר שתחביר הקובץ הוא נכון, הטען מחדש את Nginx כדי לטעון את התצורה החדשה:

  1. sudo systemctl reload nginx

אפשר ל-Certbot למצוא את בלוק השרת הנכון ולעדכן אותו באופן אוטומטי:

לבסוף, נעדכן את הגישה השרתית כדי לאפשר תעבורת HTTPS:

שלב 3 — מאפשרים HTTPS דרך הגישה האש

אם יש לך את חומת האש ufw מאופשרת, כפי שמומלץ במדריכי הדרישות המקדימות, יהיה עליך להתאים את ההגדרות כדי לאפשר תעבורת HTTPS. במזל, Nginx רשום מספר פרופילים עם ufw בעת התקנה:

ניתן לראות את ההגדרה הנוכחית על ידי כתיבת:

  1. sudo ufw status

זה ייראה כך כנראה, הקנייה שאך HTTP תעבורת מותרת לשרת האינטרנט:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

כדי לאפשר גם תעבורת HTTPS, נאפשר לפרופיל המלא של Nginx ונמחק את ההרשאה המיותרת לפרופיל HTTP של Nginx:

  1. sudo ufw allow 'Nginx Full'
  2. sudo ufw delete allow 'Nginx HTTP'

הסטטוס שלך צריך להיראות כך כעת:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

לבסוף, בוא נפעיל את Certbot ונביא את התעודות שלנו.

שלב 4 — קבלת תעודת SSL

צוות Certbot מספק מגוון דרכים לקבלת תעודות SSL דרך תוספים. תוסף ה-Nginx יטפל בשינוי התצורה של ה-Nginx ובטעינה מחדש של התצורה כל פעם שנדרש. כדי להשתמש בתוסף זה, הקלד את הפקודה הבאה:

  1. sudo certbot --nginx -d example.com -d www.example.com

זה מפעיל את certbot עם התוסף --nginx, באמצעות -d לציין את שמות הדומיין שברצוננו שהתעודה תהיה תקפה עבורם.

אם זה הפעם הראשונה שלך בהפעלה של certbot, יתבקש ממך להזין כתובת דוא"ל ולהסכים לתנאי השירות. לאחר עשיית זאת, certbot יתקשר עם שרת ה-Let’s Encrypt, ולאחר מכן יריץ את אתגר האימות כדי לוודא שאתה שולט בדומיין שבשבילו אתה מבקש תעודה.

אם הכל מתבצע בהצלחה, certbot ישאל איך תרצה להגדיר את ההגדרות שלך עבור HTTPS.

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

בחר את בחירתך ואז לחץ על ENTER. ההגדרה תתעדכן, וה-Nginx יטען מחדש כדי לאסוף את ההגדרות החדשות. certbot יסיים עם הודעה שאומרת שהתהליך הושלם בהצלחה והתעודות שלך נשמרות:

Output
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-08-18. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. 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: https://eff.org/donate-le

התעודות שלך ירדו, הותקנו ונטענו. נסה לטעון מחדש את האתר שלך באמצעות https:// ושים לב לאינדיקטור האבטחה של הדפדפן שלך. הוא צריך לציין כי האתר מאובטח בצורה תקינה, בדרך כלל עם סמל מנעול. אם תבדוק את השרת שלך באמצעות מבחן השרת של SSL Labs, הוא יקבל ציון A.

בוא נסיים בבדיקה של תהליך החידוש.

שלב 5 — אימות חידוש אוטומטי של Certbot

תעודות של Let’s Encrypt תקפות למשך תשעים יום בלבד. זה על מנת לעודד משתמשים לאוטומט תהליך החידוש של התעודות שלהם. החבילה certbot שהותקנה תטפל בכך עבורנו על ידי הוספת טיימר systemd שיריץ פעמיים ביום ויחדש באופן אוטומטי כל תעודה שבעתים לה פחות של לפגות.

ניתן לשאול על מצב הטיימר באמצעות systemctl:

  1. sudo systemctl status certbot.timer
Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left Triggers: ● certbot.service

כדי לבדוק את תהליך החידוש, ניתן לבצע ניסיון יבש עם certbot:

  1. sudo certbot renew --dry-run

אם לא רואים שגיאות, הכל מוכן. כאשר נדרש, Certbot יחדש את התעודות שלך ויטען מחדש את Nginx כדי לאסוף את השינויים. אם תהליך החידוש האוטומטי נכשל, Let’s Encrypt ישלח הודעה לכתובת הדוא"ל שציינת, ויזהה כאשר התעודה שלך מתקרבת לתוקף.

מסקנה

במדריך זה, התקנת את לקוח Let’s Encrypt certbot, הורדת תעודות SSL עבור הדומיין שלך, הגדרת Nginx להשתמש בתעודות אלה, והתקנת חידוש אוטומטי של התעודות. אם יש לך שאלות נוספות על שימוש ב־Certbot, התיעוד הרשמי הוא המקום המתאים להתחיל.

Source:
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04