چگونه Nginx را در اوبونتو 22.04 با Let's Encrypt ایمن کنیم

Let’s Encrypt یک مرجع صدور گواهینامه (CA) است که روشی قابل دسترس برای دریافت و نصب گواهینامه های رایگان TLS/SSL را ارائه می دهد و در نتیجه HTTPS رمزگذاری شده را در سرورهای وب فعال می کند. این فرآیند با ارائه یک سرویس گیرنده نرم افزاری، Certbot، که تلاش می کند بیشتر (البته نه همه) مراحل مورد نیاز را خودکار کند، فرآیند را ساده می کند. در حال حاضر، کل فرآیند دریافت و نصب گواهی بر روی Apache و Nginx کاملاً خودکار است.

 

در این آموزش، شما از Certbot برای دریافت گواهینامه SSL رایگان برای Nginx در اوبونتو 22.04 و تنظیم گواهینامه خود برای تمدید خودکار استفاده خواهید کرد.

این آموزش از یک فایل پیکربندی سرور Nginx جداگانه به جای فایل پیش فرض استفاده می کند. ما توصیه می‌کنیم فایل‌های بلوک سرور Nginx جدید برای هر دامنه را ایجاد کنید زیرا به جلوگیری از اشتباهات رایج کمک می‌کند و فایل‌های پیش‌فرض را به‌عنوان پیکربندی بازگشتی حفظ می‌کند.

پیش نیاز ها

برای دنبال کردن این آموزش، شما به لیست زیر نیاز دارید:

  • یک سرور اوبونتو 22.04 که با آموزش راه‌اندازی اولیه سرور برای اوبونتو 22.04 راه‌اندازی شده است، از جمله یک کاربر غیر ریشه فعال sudo و یک فایروال.
  • یک نام دامنه ثبت شده که در این آموزش از example.com در سرتاسر مقاله استفاده خواهد شد. می توانید یک نام دامنه را از Namecheap خریداری کنید، یا یک نام دامنه را به صورت رایگان از Freenom دریافت کنید، یا از ثبت کننده دامنه انتخابی خود استفاده کنید.
  • هر دو رکورد DNS زیر را برای سرور شما تنظیم شده است. اگر از DigitalOcean استفاده می کنید، لطفاً اسناد DNS ما را برای جزئیات در مورد نحوه افزودن آنها مشاهده کنید.
  • یک رکورد با example.com که به آدرس IP عمومی سرور شما اشاره می کند.
  • یک رکورد با www.example.com که به آدرس IP عمومی سرور شما اشاره می کند.
  • Nginx ای که از طریق نحوه نصب Nginx در اوبونتو 22.04 نصب شده است. مطمئن شوید که یک بلوک سرور برای دامنه خود دارید. این آموزش از /etc/nginx/sites-available/example.com به عنوان مثال استفاده می کند.

مرحله 1 - نصب Certbot

Certbot استفاده از بسته اسنپ خود را برای نصب توصیه می کند. بسته‌های اسنپ تقریباً روی همه توزیع‌های لینوکس کار می‌کنند، اما برای مدیریت بسته‌های snap نیاز دارند که ابتدا snapd را نصب کرده باشید. Ubuntu 22.04 با پشتیبانی از snaps out of box ارائه می شود، بنابراین می توانید با اطمینان از به روز بودن هسته snapd خود شروع کنید:

 

sudo snap install core; sudo snap refresh core

 

اگر روی سروری کار می‌کنید که قبلاً نسخه قدیمی‌تری از certbot را نصب کرده بود، قبل از ادامه کار باید آن را حذف کنید:

 

sudo apt remove certbot

 

پس از آن، می توانید بسته certbot را نصب کنید:

 

sudo snap install --classic certbot

 

در نهایت، می‌توانید دستور certbot را از دایرکتوری نصب snap به مسیر خود پیوند دهید، بنابراین فقط با تایپ certbot قادر خواهید بود آن را اجرا کنید. این فرایند برای همه بسته‌ها ضروری نیست، اما snap‌ ها به‌طور پیش‌فرض کمتر مزاحم هستند، بنابراین به‌طور تصادفی با هیچ‌یک از بسته‌های سیستمی در تضاد نیستند:

 

sudo ln -s /snap/bin/certbot /usr/bin/certbot

 

اکنون که Certbot را نصب کرده ایم، اجازه دهید آن را اجرا کنیم تا گواهینامه خود را دریافت کنیم.

مرحله 2 - تأیید پیکربندی Nginx

Certbot باید بتواند بلوک server  صحیح را در پیکربندی Nginx شما پیدا کند تا بتواند SSL را به طور خودکار پیکربندی کند. به طور خاص، این کار را با جستجوی یک دستورالعمل server_name انجام می دهد که با دامنه ای که برای آن درخواست گواهی می دهید مطابقت داشته باشد.

اگر مرحله راه اندازی بلوک سرور را در آموزش نصب Nginx دنبال کردید، باید یک بلوک سرور برای دامنه خود در /etc/nginx/sites-available/example.com با دستور server_name از قبل به طور مناسب تنظیم شده باشد.

برای بررسی، فایل پیکربندی دامنه خود را با استفاده از nano یا ویرایشگر متن دلخواه خود باز کنید:

 

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

 

خط server_name موجود را پیدا کنید. که می بایست شبیه به این باشه:

 

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

...
server_name example.com www.example.com;
...

 

اگر چنین شد، از ویرایشگر خود خارج شوید و به مرحله بعدی بروید.

اگر اینطور نیست، آن را به روز کنید تا متن مطابقت داشته باشد. سپس فایل را ذخیره کنید، از ویرایشگر خود خارج شوید و نحو ویرایش های پیکربندی خود را تأیید کنید:

 

sudo nginx -t

 

اگر خطایی دریافت کردید، فایل بلوک سرور را دوباره باز کنید و اشتباهات تایپی یا نویسه های گم شده را بررسی کنید. هنگامی که نحو فایل پیکربندی شما درست شد، Nginx را دوباره بارگیری کنید تا پیکربندی جدید بارگیری شود:

 

sudo systemctl reload nginx

 

Certbot اکنون می تواند بلوک سرور صحیح را پیدا کرده و به طور خودکار آن را به روز کند.

در مرحله بعد، اجازه دهید فایروال را به روز کنیم تا ترافیک HTTPS مجاز باشد.

مرحله 3 - اجازه دادن به HTTPS از طریق فایروال

اگر فایروال ufw را فعال کرده اید، همانطور که توسط راهنماهای پیش نیاز توصیه شده است، باید تنظیمات را برای اجازه دادن به ترافیک HTTPS تنظیم کنید. خوشبختانه، Nginx پس از نصب، چند نمایه را با ufw ثبت می کند.

می توانید تنظیمات فعلی را با تایپ کردن دستور زیر ببینید:

 

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 Full را مجاز کنید و مجوز اضافی Nginx HTTP را حذف کنید:

 

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

 

وضعیت شما اکنون باید به شکل زیر باشد:

 

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 را اجرا کنیم و گواهی های خود را واکشی (fetch) کنیم.

مرحله 4 - دریافت گواهی SSL

Certbot راه های مختلفی را برای دریافت گواهینامه SSL از طریق افزونه ها ارائه می دهد. افزونه Nginx پیکربندی مجدد Nginx و بارگیری مجدد پیکربندی را در صورت لزوم انجام می دهد. برای استفاده از این افزونه، عبارت زیر را تایپ کنید:

 

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

 

این فرایند ربات certbot را با افزونه --nginx اجرا می کند و از -d برای تعیین نام دامنه ای که می خواهیم گواهینامه برای آنها معتبر باشد استفاده می کند.

هنگام اجرای دستور، از شما خواسته می شود که یک آدرس ایمیل وارد کنید و با شرایط خدمات موافقت کنید. پس از انجام این کار، باید پیامی را مشاهده کنید که به شما می گوید فرآیند موفقیت آمیز بوده و گواهینامه های شما در کجا ذخیره می شوند:

 

Output
IMPORTANT NOTES:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-06-01.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

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

 

گواهی‌های شما دانلود، نصب و بارگیری می‌شوند و پیکربندی Nginx شما اکنون به طور خودکار تمام درخواست‌های وب را به https:// هدایت می‌کند. سعی کنید وب سایت خود را دوباره بارگیری کنید و به نشانگر امنیتی مرورگر خود توجه کنید. باید نشان دهد که سایت به درستی ایمن شده است، معمولاً با نماد قفل. اگر سرور خود را با استفاده از تست سرور SSL Labs تست کنید، نمره A می گیرد.

بیایید با آزمایش روند تمدید به پایان برسانیم.

مرحله 5 - تأییدیه تمدید خودکار Certbot

گواهینامه های Let’s Encrypt فقط برای نود روز معتبر هستند. این برای تشویق کاربران به خودکارسازی فرآیند تمدید گواهی است. بسته certbot که ما نصب کرده ایم با افزودن یک تایمر systemd که دو بار در روز اجرا می شود و به طور خودکار هر گواهی را که ظرف سی روز پس از  تاریخ انقضا باشد را تمدید می کند و به این موضوع رسیدگی میکند.

می توانید وضعیت تایمر را با systemctl جویا شوید:

 

sudo systemctl status snap.certbot.renew.service

 

Output○ snap.certbot.renew.service - Service for snap application certbot.renew
     Loaded: loaded (/etc/systemd/system/snap.certbot.renew.service; static)
     Active: inactive (dead)
TriggeredBy: ● snap.certbot.renew.timer

 

برای آزمایش فرآیند تمدید، می‌توانید یک اجرا خشک با certbot انجام دهید:

 

sudo certbot renew --dry-run

 

اگر هیچ خطایی نمی بینید، همه چیز آماده است. در صورت لزوم، Certbot گواهی‌های شما را تمدید می‌کند و Nginx را دوباره بارگیری می‌کند تا تغییرات را دریافت کند. اگر فرآیند تمدید خودکار شکست بخورد، Let’s Encrypt پیامی به ایمیلی که مشخص کرده‌اید ارسال می‌کند و به شما هشدار می‌دهد در چه زمانی گواهی شما در شرف انقضا است.

نتیجه

در این آموزش، شما Certbot کلاینت Let’s Encrypt را نصب، گواهینامه های SSL را برای دامنه خود دانلود، Nginx را برای استفاده از این گواهی ها پیکربندی و تمدید خودکار گواهی را تنظیم کردید. اگر سوالات بیشتری در مورد استفاده از Certbot دارید، اسناد رسمی محل خوبی برای شروع است.

 

منبع Digitalocean

۱۷۰۰
۱۴۰۲/۳/۱۸