چگونه Nginx را با نصب SSL رایگان در Debian 10 ایمن کنیم؟
Let’s Encrypt مرجع صدور گواهی (CA) است که به شما امکان میدهد تا بهرایگان و بهسادگی گواهی SSL/TLS دریافت کنید و بتوانید از پروتکل رمزگذاریشده HTTPS روی وبسایت خود استفاده کنید. سادهسازی این فرایند بهدلیل استفاده از Certbot است که تلاش میکند تا تمام مراحل این فرایند را بهطورخودکار انجام دهد.
پیشنیازها
برای اینکه بتوانید مراحل گفتهشده در این مطلب را گامبهگام طی کنید و از آن بهترین استفاده را ببرید، باید پیشنیازهای زیر را داشته باشید:
۱. سروری با توزیع Debian 10 نصبشده روی آن بههمراه کاربر غیر Root با دسترسی Sudo و فایروال راهاندازیشده
۲. دامین اختصاصی
۳. هر دو رکورد DNS زیر باید روی سرور شما راهاندازی شده باشد:
- رکورد your_domain که به آدرس IP عمومی سرور شما اشاره میکند.
- رکورد www.your_domain که به آدرس IP عمومی سرور شما اشاره میکند.
۴. مطمئن شوید که Nginx روی Debian 10 نصب شده است و نیز دامنهتان بلوک سرور دارد.
گام اول: نصب Certbot
اولین گام برای دریافت گواهی SSL رایگان از Let’s Encrypt، نصب نرمافزار Certbot روی سرور است. نصب پکیج python3-certbot-nginx از ریپوزیتوری Debian 10 به شما امکان نصب و استفاده از پلاگین Nginx Certbot را خواهد داد.
توجه کنید که Debian 10 درحالحاضر از Python 2.0 و Python 3.0 پشتیبانی میکند؛ اما Python 2.0 در ژانویه۲۰۲۰ منسوخ شده است. بنابراین، واضح است که استفاده از Python 3 و پکیج python3-certbot-nginx گزینه بهتری محسوب خواهد شد.
قبل از نصب پکیج python3-certbot-nginx، ابتدا باید پکیج لیست خود را بهروز کنید. برای این منظور، از دستور زیر استفاده کنید:
sudo apt update $
سپس، باید وابستگیهای پکیج python3-certbot-nginx را نصب کنید. این وابستگیها عبارتاند از:
- python3-acme
- python3-certbot
- python3-mock
- python3-openssl
- python3-pkg-resources
- python3-pyparsing
- python3-zope.interface
برای این منظور نیز، میتوانید از دستور زیر استفاده کنید:
درنهایت، پکیج python3-certbot-nginx نیز با استفاده از دستور زیر نصب خواهد شد:
sudo apt install python3-certbot-nginx $
Certbot حالا فعال و آماده استفاده است. بااینحال، بهمنظور پیکربندی SSL برای Nginx، باید برخی تنظیمات را روی Nginx انجام دهید و تأیید کنید.
گام دوم: تأیید پیکربندی Nginx
Certbot برای اینکه بتوانید SSL را بهطورخودکار پیکربندی کنید، باید بلوک سرور صحیح را در پیکربندی Nginx شما پیدا کند. بهطورخاص این کار با جستوجوی یک دایرکتیو Server_name که با نام دامنه درخواستیتان مطابقت دارد، انجام خواهد شد.
پیشفرض ما این است که از قبل Nginx را روی سرورتان نصب کردهاید. در این صورت، قاعدتاً باید بلوک سروری برای دامنه خود در مسیر /etc/nginx/sites-available/your_domain داشته باشید که در آن، دایرکتیو Server_name از قبل بهخوبی تنظیم شده باشد.
برای بررسی این موضوع، فایل بلوک سرور دامنه خود را با کمک ویرایشگر متن دلخواه و استفاده از کد زیر باز کنید. در این مثال، میخواهیم از ویرایشگر nano برای بازکردن این فایل استفاده کنیم:
sudo nano /etc/nginx/sites-available/your_domain $
حالا خط server_name را در این فایل پیدا کنید. احتمالاً چیزی شبیه به این باشد:
;server_name your_domain www.your_domain
اگر این خط را پیدا کردید، میتوانید از ویرایشگر خود خارج شوید؛ اما درصورتیکه این خط در فایل شما موجود نبود، ابتدا باید این خط را درون فایل خود قرار دهید و فایل را ذخیره کنید و سپس از ویرایشگر خارج شوید. بعد از اینکه ویرایشگر خود را بستید، باید سینتکس ویرایشهای اِعمالشده روی فایل پیکربندی را تأیید کنید. انجام این کار با استفاده از دستور زیر امکانپذیر است:
sudo nginx -t $
درصورتیکه پس از صدور این دستور با خطایی روبهرو شدید، باید فایل پیکربندی را مجدداً با استفاده از روش عنوانشده در بالا باز و مشکل را برطرف کنید. این مشکل ممکن است بهدلیل اشتباههای تایپی یا جاانداختن کاراکتر ایجاد شده باشد. پس از رفع مشکل، باید Nginx را مجدداً لود کنید تا تغییرات پیکربندی جدید اِعمال شود:
sudo systemctl reload nginx $
حالا Certbot میتواند بلوک سرور صحیح را پیدا و آن را بهروز کند. در گام بعدی، باید فایروال را بهروز کنید تا ترافیک HTTPS مجاز شود.
گام سوم: مجوزدادن به ترافیک HTTPS با استفاده از فایروال
در این مرحله، با استفاده از فایروال باید ترافیک HTTPS را مجاز کنید؛ اما قبلازآن باید تنظیمات فعلی فایروال را بررسی کنید. برای انجام این کار، از دستور زیر استفاده کنید:
sudo ufw status $
در این صورت، احتمالاً با متنی شبیه به متن زیر مواجه خواهید شد. همانطورکه مشخص است، تنظیمات در این مثال بهگونهای است که فقط ترافیک HTTP مجاز شده است:
گام چهارم: دریافت گواهی SSL
Certbot با استفاده از پلاگینها راهحلهای مختلفی را برای دریافت گواهی SSL ارائه میدهد. بهعنوان نمونه، پلاگین Nginx میتواند پیکربندی دوباره Nginx و بارگیری مجدد پیکربندی را درصورت لزوم انجام دهد. برای استفاده از این پلاگین، دستور زیر را بهکار ببرید:
sudo certbot –nginx -d your_domain -d www.your_domain $
این دستور Certbot را با استفاده از پلاگین Nginx اجرا میکند. همچنین، از -d برای تعیین دامنههایی استفاده کنیم که میخواهیم گواهی SSL برای آنها معتبر باشد.
اگر برای اولینبار است که از Certbot استفاده میکنید، از شما خواسته میشود که آدرس ایمیلی را وارد و با شرایط خدمات موافقت کنید. بعد از انجام این کار، Certbot با سرور Let’s Encrypt ارتباط برقرار و سپس روندی را ایجاد میکند تا مطمئن شود که کنترل کامل دامنهای را در دست دارید که درخواست دریافت گواهی SSL برای آن دادهاید.
درصورتیکه این روند موفقیتآمیز باشد، شما باید تعیین کنید که چطور میخواهید تنظیمات HTTPS خود را پیکربندی کنید:
روش پیکربندی تنظیمات HTTPS را با تایپ یک عدد (۱ یا ۲) انتخاب کنید و سپس کلید Enter را فشار دهید. در این صورت، پیکربندی بهروزرسانی و Nginx نیز برای استفاده از تنظیمات جدید مجدداً بارگیری میشود.
درنهایت، روند عملیاتی Certbot با نمایش پیغامی بهپایان خواهد رسید که به شما میگوید این فرایند موفقیتآمیز بوده است و گواهیهای موردنیاز شما در کجا ذخیره شدهاند.
بدینترتیب، گواهیهای شما دانلود و نصب و Load خواهند شد. حالا وبسایت خود را با استفاده از پروتکل https باز و به نشانگر امنیتی قرارگرفته در ابتدای URL وبسایت توجه کنید. اگر آیکون قفلی که معمولاً به رنگ سبز نشان داده میشود، در ابتدای URL قرار گرفته باشد، یعنی این فرایند بهدرستی انجام شده و حالا وبسایتتان ایمن است. همچنین، درصورتیکه سرور خود را با استفاده از SSL Labs آزمایش کنید، درجه A را دریافت خواهید کرد. حالا همهچیز مرتب است؛ اما اجازه دهید بهعنوان آخرین قدم، روند تمدید گواهی را نیز امتحان کنیم.
گام پنجم: تأیید تمدید خودکار گواهی با Certbot
گواهینامههای SSL صادرشده Let’s Encrypt فقط ۹۰ روز اعتبار دارند و پسازآن باید آن را تمدید کنید. در این مقاله آموزشی از بلاگ پارس پک، بسته Certbot نصبشده با افزودن اسکریپت تمدید /etc/cron.d. این کار را بهطورخودکار برایتان انجام خواهد داد. روش کار نیز بدینترتیب است که این اسکریپت دو بار در طول روز اجرا میشود و بهصورت کاملاً خودکار گواهیهایی را تمدید میکند که تاریخ انقضای آنها کمتر از ۳۰ روز باشد.
برای امتحان این اسکریپت، میتوانید از دستور زیر استفاده کنید:
sudo certbot renew –dry-run $
درصورتیکه پس از اجرای این دستور هیچ خطایی برایتان بهنمایش درنیامد، یعنی همهچیز درست است و Certbot درصورت لزوم، گواهی شما را تمدید و Nginx را مجدداً بارگیری میکند تا تغییرات مدنظر اِعمال شود. اگر فرایند تمدید خودکار گواهی SSL ناموفق باشد، پیغامی به آدرس ایمیلتان ارسال و به شما هشدار داده خواهد شد که گواهی SSL در حال انقضاست.
نتیجه گیری
استفاده از پروتکل HTTPS برای ایمنسازی وبسایت ازجمله نکات مهمی است که هر وبسایتی باید به آن توجه کند. این کار با استفاده از نصب گواهی SSL معتبر روی سرور انجام میشود. در این مقاله نحوه ایمنسازی سرور با توزیع Debian 10 را توضیح دادیم. این روند شامل نصب Certbot، دریافت گواهی SSL و نصب آن و نحوه فعالسازی تمدید خودکار گواهی SSL است.
امیدوارم که از این آموزش لذت برده باشد.