چگونه 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