تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

آموزش نصب و پیکربندی Nginx با Let’s Encrypt در Debian 12 برای امنیت وب‌سایت


۱۴ اسفند ۱۴۰۳

امنیت وب‌سایت یکی از مهم‌ترین بخش‌های مدیریت هر سروری است و هیچ چیز به اندازه یک گواهی SSL معتبر نمی‌تواند ارتباطات شما را برای مدیریت این بخش ها ایمن تر کند. Let’s Encrypt یک ارائه‌دهنده گواهی SSL رایگان است که به شما کمک می‌کند تا بدون هیچ هزینه و دردسری سایت خود را از HTTP به HTTPS ارتقا دهید.

برای این کار از Certbot استفاده خواهیم کرد، ابزاری که فرایند دریافت، نصب و تمدید خودکار گواهی SSL را برای Nginx در Debian 12 ساده می‌کند. این آموزش را مرحله‌به‌مرحله انجام دهید و یاد بگیرید که چگونه بتوانید وب‌سایت خود را ایمن کنید و نگران انقضای گواهی هم نباشید!

در ادامه با آن ها آشنا خواهید شد:

  • پیش‌ نیازها
  • مرحله اول: نصب Certbot
  • مرحله دوم: بررسی تنظیمات Nginx
  • مرحله سوم: اجازه دادن به ترافیک HTTPS در فایروال
  • مرحله چهارم: دریافت گواهی SSL با Certbot
  • مرحله پنجم: دریافت گواهی SSL (ادامه)
  • مرحله ششم: بررسی تمدید خودکار گواهی SSL
  • سوالات متدوال
  • جمع بندی

پیش‌ نیازها:

برای اجرای این آموزش، به موارد زیر نیاز پیدا خواهید کرد:

  • یک سرور Debian 12: که طبق تنظیمات اولیه راه‌اندازی شده باشد و شامل کاربر غیرریشه با دسترسی sudo و فایروال فعال باشد.
  • یک دامنه ثبت‌شده: در این آموزش از example.com استفاده خواهیم کرد.
  • تنظیم دو رکورد DNS برای سرور:
    • A Record: که example.com را به آی‌پی عمومی سرور متصل کند.
    • A Record: که www.example.com را به آی‌پی عمومی سرور متصل کند.
  • نصب Nginx: طبق راهنمای نصب Nginx در Debian 12 و تنظیم یک Server Block مخصوص دامنه.

نکته مهم: به جای فایل پیش‌فرض Nginx، از یک فایل پیکربندی مجزا برای دامنه خود استفاده کنید. این کار باعث کاهش خطاها و داشتن یک پیکربندی پیش‌فرض به‌عنوان نسخه پشتیبان می‌شود. در ادامه، نحوه نصب و پیکربندی Certbot را بررسی خواهیم کرد.

Nginx

مرحله اول: نصب Certbot

برای دریافت گواهی SSL از Let’s Encrypt، ابتدا باید Certbot را بر روی سرور تان نصب کنید. این ابزار فرایند دریافت و پیکربندی گواهی را خودکار می‌کند.

برای نصب Certbot و افزونه Nginx، این دستور را اجرا کنید.

sudo apt install certbot python3-certbot-nginx

پس از نصب، Certbot شما آماده استفاده است، اما قبل از آن باید تنظیمات Nginx را بررسی خواهیم کرد.

مرحله دوم: بررسی تنظیمات Nginx

Certbot برای پیکربندی خودکار SSL، باید بتواند server block درست را در تنظیمات Nginx پیدا کند. این کار را با جستجوی server_name مرتبط با دامنه انجام می‌دهد.

اگر قبلاً یک server block برای دامنه خود ساخته‌اید، فایل تنظیمات شما باید در مسیر زیر قرار داشته باشد.

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

خطی مشابه زیر پیدا کنید.

server_name example.com www.example.com;

✅ اگر این خط وجود دارد، ادامه دهید.
❌ اگر وجود ندارد، آن را اضافه کنید و فایل را ذخیره کنید.

سپس، برای بررسی صحیح بودن تنظیمات، این دستور را اجرا کنید.

sudo nginx -t

اگر خطایی دریافت کردید، فایل را باز کرده و مشکلات احتمالی (مانند غلط‌های املایی) را برطرف کنید. پس از اطمینان از صحت تنظیمات وارد شده تان، Nginx را دوباره بارگذاری کنید.

sudo systemctl reload nginx

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

مرحله سوم: اجازه دادن به ترافیک HTTPS در فایروال

اگر UFW را فعال کرده‌ باشید، باید تنظیمات آن را برای پذیرش ترافیک HTTPS نیز تغییر دهید. هنگام نصب Nginx، پروفایل‌های مرتبط به‌صورت خودکار در UFW ثبت می‌شوند.

ابتدا وضعیت فعلی فایروال را بررسی کنید.

sudo ufw status

معمولاً خروجی به این شکل است، که نشان می‌دهد فقط HTTP مجاز است.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)
Nginx

برای فعال کردن HTTPS، این دستورات را اجرا کنید.

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

دوباره وضعیت را بررسی کنید.

sudo ufw status

خروجی باید شبیه خروجی زیر باشد.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

حالا فایروال شما آماده پذیرش ترافیک امن HTTPS است. 🚀

مرحله چهارم: دریافت گواهی SSL با Certbot

Certbot چند روش مختلف برای دریافت گواهی SSL را ارائه می‌دهد. در این بخش ما از افزونه Nginx استفاده خواهیم کرد که به‌طور خودکار تنظیمات Nginx را پیکربندی و ریستارت می‌کند.

دستور زیر را اجرا کنید.

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

توضیحات:

  • --nginx باعث می‌شود Certbot به‌صورت خودکار تنظیمات Nginx را به‌روزرسانی کند.
  • -d example.com -d www.example.com دامنه‌هایی را مشخص می‌کند که برای آن‌ها گواهی صادر می‌شود.

اگر اولین بار است که Certbot را اجرا می‌کنید:

  • باید ایمیل خود را وارد کنید.
  • با شرایط سرویس‌دهی موافقت کنید.

سپس، Certbot با سرور Let’s Encrypt ارتباط برقرار می‌کند و با اجرای یک چالش، مالکیت دامنه را تأیید می‌کند.

در نهایت، تنظیمات Nginx به‌روزرسانی شده و سرویس ریستارت می‌شود. مسیر ذخیره گواهی‌ها نیز نمایش داده خواهد شد.

مرحله پنجم: دریافت گواهی 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 2022-08-08. 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
Debian 12

حالا گواهی SSL شما نصب شده و فعال است!

مرورگر خود را باز کنید و سایت را با https://example.com بررسی کنید. باید قفل امنیتی در کنار آدرس سایت نمایش داده شود.

برای تست امنیت، می‌توانید از ابزار SSL Labs Server Test استفاده کنید که معمولاً به شما نمره A می‌دهد.

مرحله ششم: بررسی تمدید خودکار گواهی SSL

گواهی Let’s Encrypt فقط ۹۰ روز اعتبار دارد، اما Certbot به‌طور خودکار تمدید را انجام می‌دهد. این کار با یک systemd timer انجام می‌شود که روزانه دو بار اجرا می‌شود.

برای بررسی وضعیت تایمر Certbot، این دستور را اجرا کنید.

sudo systemctl status certbot.timer

خروجی باید مشابه خروجی زیر باشد.

● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Mon 2022-08-08 19:05:35 UTC; 11s ago
    Trigger: Tue 2022-08-09 07:22:51 UTC; 12h left
   Triggers: ● certbot.service

🔹 مطالعه کنید: نحوه تنظیم لاگ و rotation در Nginx در سرور مجازی لینوکس

برای تست تمدید دستی گواهی‌ها بدون ایجاد تغییر، از حالت آزمایشی (dry-run) استفاده کنید.

sudo certbot renew --dry-run

اگر خطایی مشاهده نکردید، یعنی همه‌چیز به درستی کار می‌کند و Certbot به‌طور خودکار گواهی شما را تمدید کرده و Nginx را ریستارت خواهد کرد.

اگر فرایند تمدید خودکار ناموفق باشد، Let’s Encrypt به ایمیلی که وارد کردید، هشدار انقضای گواهی را ارسال می‌کند.

“حالا سایت شما با HTTPS امن شده و به‌طور خودکار گواهی آن تمدید خواهد شد!”

سوالات متدوال:

در ادامه به سوالاتی که امکان دارد برای شما در هنگام مطالعه این مقاله پیش آمده باشد خواهیم پرداخت.

چرا باید از گواهی SSL استفاده کرد؟

گواهی SSL باعث می‌شود ارتباطات بین سرور و مرورگر به‌صورت امن و رمزگذاری‌شده انجام شود. این امر از شنود و تغییر اطلاعات جلوگیری کرده و برای سئو و اعتبار سایت شما بسیار مهم است.

آیا Certbot رایگان است؟

بله، Certbot یک ابزار رایگان است که برای دریافت و نصب گواهی‌های SSL از Let’s Encrypt استفاده می‌شود.

چگونه می‌توان مطمئن شد که گواهی SSL به‌درستی نصب شده است؟

بعد از نصب گواهی SSL، می‌توانید سایت خود را با https:// باز کنید و در مرورگر نماد قفل را ببینید. همچنین، برای بررسی بیشتر، می‌توانید از ابزار SSL Labs Server Test استفاده کنید.

گواهی SSL هر چند وقت یک‌بار باید تمدید شود؟

گواهی‌های SSL از Let’s Encrypt هر ۹۰ روز منقضی می‌شوند. اما ابزار Certbot به‌طور خودکار گواهی شما را تمدید می‌کند.

آیا Certbot به‌طور خودکار گواهی‌های SSL را تمدید می‌کند؟

بله، Certbot یک systemd timer دارد که دو بار در روز بررسی می‌کند که آیا گواهی SSL شما نیاز به تمدید دارد یا نه و در صورت لزوم آن را تمدید می‌کند.

Let’s Encrypt

چگونه می‌توان گواهی SSL خود را به‌طور دستی تمدید کرد؟

برای تمدید دستی گواهی SSL، کافی است دستور زیر را اجرا کنید.

sudo certbot renew

“شاید به دنبال این مطلب بوده‌اید: نحوه میزبانی وبسایت با استفاده از Cloudflare و Nginx در اوبونتو 22.04

آیا برای استفاده از Let’s Encrypt به تنظیمات خاصی DNS نیاز دارد؟

بله، شما باید مطمئن شوید که رکوردهای A برای دامنه شما به درستی به آدرس IP سرور شما اشاره می‌کنند تا Certbot بتواند گواهی SSL را برای دامنه شما دریافت کند.

آیا می‌توان چند دامنه را با یک گواهی SSL از Let’s Encrypt امن کرد؟

بله، می‌توانید از یک گواهی SSL برای چندین دامنه استفاده کنید. کافی است هنگام اجرای Certbot از گزینه -d برای اضافه کردن دامنه‌های اضافی استفاده کنید، مانند:

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

آیا Certbot از Nginx به‌طور خودکار پشتیبانی می‌کند؟

بله، Certbot به‌طور خودکار تنظیمات Nginx را پیکربندی کرده و سرور شما را پس از نصب گواهی SSL به‌روز می‌کند.

آیا می‌توان از Let’s Encrypt برای سایت‌های تجاری استفاده کرد؟

بله، گواهی‌های SSL از Let’s Encrypt برای استفاده در هر نوع سایت، از جمله سایت‌های تجاری و فروشگاهی، کاملاً معتبر و مطمعن هستند.

جمع بندی

در این مقاله، نحوه امن‌سازی وب‌سرور Nginx در Debian 12 با استفاده از گواهی SSL رایگان از Let’s Encrypt را آموخته اید. ابتدا Certbot و افزونه Nginx آن را نصب کرده و گواهی SSL برای دامنه خود دریافت کنید. سپس، تنظیمات سرور بلاک‌های Nginx را بررسی و به‌روزرسانی کنید و فایروال را برای اجازه دادن به ترافیک HTTPS تنظیم کنید. در نهایت، فرآیند تمدید خودکار گواهی‌های SSL را بررسی کرده و اطمینان حاصل کنید که Certbot به صورت خودکار گواهی‌ها را هر ۹۰ روز تمدید کند. این مراحل به شما کمک می‌کند تا سایت خود را به‌راحتی امن کرده و از اتصال رمزگذاری‌شده HTTPS بهره‌مند شوید.