ایمن کردن Nginx با Let’s Encrypt در Ubuntu 20.04

Let’s Encrypt یک مجوز رسمی است که روشی آسان برای به دست آوردن و نصب مجوزهای رایگان TLS / SSL فراهم می کند ، در نتیجه HTTPS رمزگذاری شده را روی سرورهای وب فعال می کند. در واقع با ارائه یک کلاینت نرم افزاری ،یعنی Certbot ، که سعی در خودکارسازی اکثر مراحل لازم دارد ، فرایند را ساده می کند. در حال حاضر ، کل مراحل اخذ و نصب گواهینامه هم در Apache و هم در Nginx کاملا به صورت اتوماتیک انجام می شود.در این آموزش از Certbot برای دریافت گواهینامه رایگان SSL برای Nginx روی Ubuntu 20.04 استفاده می کنید و گواهی خود را برای تمدید خودکار تنظیم می کنید.در این آموزش به جای فایل پیکربندی پیش فرض از یک فایل میزبان مجازی Nginx جداگانه استفاده خواهد شد. توصیه می کنیم برای هر دامنه فایل های جدید میزبان مجازی Nginx ایجاد کنید زیرا این امر به جلوگیری از اشتباهات رایج کمک می کند و فایل های پیش فرض را به عنوان پیکربندی برگشت پذیر حفظ می کند.پیش نیازهابرای دنبال کردن این آموزش ، به موارد زیر نیاز دارید:• یک سرور Ubuntu 20.04 که با دنبال کردن راهنمای ستاپ اولیه سرور برای Ubuntu 20.04 تنظیم شده و شامل یک کاربر غیر root با امتیازات sudo و فایروال باشد.• نام دامنه کاملاً ثبت شده. در این آموزش ، از example.comاستفاده می شود. می توانید نام دامنه را در Namecheap خریداری کنید ، یکی را به صورت رایگان در Freenom دریافت کنید ، یا از ثبت دامنه مورد نظر خود استفاده کنید.• هر دو رکورد DNS زیر برای سرور شما تنظیم شده باشند.o یک رکورد A با example.com که به آدرس IP عمومی سرور شما اشاره کند.o یک رکورد 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 نصب کنید.$ sudo apt install certbot python3-certbot-nginxCertbot اکنون آماده استفاده است اما برای اینکه SSL را به طور خودکار برای Nginx پیکربندی کند ، باید تأیید کنیم که Nginx به درستی پیکربندی شده است.مرحله 2 – تأیید پیکربندی NginxCertbot باید بتواند بلوک سرور صحیح را در تنظیمات 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 nginxCertbot اکنون می تواند بلوک سرور صحیح را پیدا کرده و به طور خودکار آن را به روز کند.در مرحله بعد ، بیایید ترافیک HTTPS فایروال را به روز کنیم.مرحله 3 – اجازه عبور HTTPS از طریق فایروالاگر فایروال ufw را فعال کرده باشید ، همانطور که توسط راهنماهای پیش نیاز توصیه شده است ، برای تنظیم ترافیک HTTPS ، باید تنظیماتی را انجام دهید. خوشبختانه ، Nginx چند پروفایل را از طریق نصب ufw ثبت میکند .با تایپ دستور زیر می توانید تنظیم فعلی را مشاهده کنید:$ sudo ufw statusاحتمالا خروجی دستور اینگونه خواهد بود ، نشان می دهد که فقط ترافیک HTTP به سرور وب مجاز است:OutputStatus: activeTo Action From— —— —-OpenSSH ALLOW AnywhereNginx HTTP ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)Nginx HTTP (v6) ALLOW Anywhere (v6)برای اجازه دادن به ترافیک HTTPS ، به پروفایل کامل Nginx دسترسی بدهید و اجازه پروفایل HTTP Nginx اضافی را حذف کنید:$ sudo ufw allow ‘Nginx Full’$ sudo ufw delete allow ‘Nginx HTTP’وضعیت شما اکنون باید به این شکل باشد:$ sudo ufw statusOutputStatus: activeTo Action From— —— —-OpenSSH ALLOW AnywhereNginx Full ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)Nginx Full (v6) ALLOW Anywhere (v6)سپس ، بیایید Certbot را اجرا کنیم و گواهینامه هایمان را دریافت کنیم.مرحله 4 – اخذ گواهینامه SSLCertbot روشهای مختلفی برای گرفتن گواهینامه های SSL از طریق افزونه ها ارائه می دهد. افزونه Nginx از تنظیم مجدد Nginx و بارگیری مجدد تنظیمات در صورت لزوم مراقبت خواهد کرد. برای استفاده از این افزونه ، دستور زیر را تایپ کنید:$ sudo certbot –Nginx -d example.com -d www.example.comاین کار Certbot را با افزونه –Nginx با استفاده از -d برای مشخص کردن نام هایی که معتبر آن هستند اجرا میکند.اگر اولین بار است که Certbot را اجرا میکنید ، از شما خواسته می شود که آدرس ایمیل را وارد کنید و با شرایط سرویس ها موافقت کنید. بعد از انجام این کار ، certbot با سرور Let’S Encrypt ارتباط برقرار می کند ، سپس برای تأیید اینکه دامنه مورد نظر خود را کنترل می کنید ، یک چالش اجرا کنید.اگر موفقیت آمیز باشد ، certbot از شما می پرسد که چگونه می خواهید تنظیمات HTTPS خود را پیکربندی کنید:OutputPlease 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 fornew sites, or if you’re confident your site works on HTTPS. You can undo thischange by editing your web server’s configuration.– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel):گزینه خود را انتخاب کنید و سپس ENTER بزنید. پیکربندی به طور خودکار به روز می شود ، و Nginx برای انتخاب تنظیمات جدید مجدد لود می شود. certbot با پیغامی همراه خواهد بود که به شما می گوید روند موفقیت آمیز بوده و گواهی نامه های شما در کجا ذخیره شده است:OutputIMPORTANT NOTES:– Congratulations! Your certificate and chain have been saved at:/etc/letsencrypt/live/example.com/fullchain.pemYour key file has been saved at:/etc/letsencrypt/live/example.com/privkey.pemYour cert will expire on 2020-08-18. To obtain a new or tweakedversion of this certificate in the future, simply run certbot againwith the “certonly” option. To non-interactively renew *all* ofyour certificates, run “certbot renew”– If you like Certbot, please consider supporting our work by:Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donateDonating to EFF: https://eff.org/donate-leگواهینامه های شما دانلود ، نصب و لود می شوند. سعی کنید وب سایت خود را با استفاده از https: // مجدد لود کنید و به نشانگر امنیتی مرورگر خود توجه کنید. باید نشان دهد که سایت به طور صحیح ایمن است ، معمولاً با نماد قفل سبز نشانه داده میشود. اگر سرور خود را با استفاده از SSL Labs Server Test آزمایش کنید ، درجه A دریافت می کند.بیایید با آزمایش روند تجدید، کار را به پایان برسانیم.مرحله 5 – تأیید تمدید خودکار Certbotگواهی های Let’s Encrypt فقط برای نود روز اعتبار دارند. این امر برای ترغیب کاربران به اتوماسیون کردن فرایند تجدید گواهینامه میباشد. بسته certbot که نصب کردیم با اضافه کردن یک اسکریپت تجدید به /etc/cron.d از این امر مراقبت می کند. این اسکریپت روزانه دو بار اجرا می شود و به طور خودکار هر مدرکی را که کمتر از سی روز از انقضای آن مانده ، تمدید می کند.برای بررسی وضعیت تایمر، می توانید از systemctl استفاده کنید:$ sudo systemctl status certbot.timerOutput● certbot.timer – Run certbot twice dailyLoaded: 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 agoTrigger: Thu 2020-05-21 05:22:32 UTC; 9h leftTriggers: ● certbot.serviceبرای آزمایش فرآیند تجدید، میتوانید یک اجرای خالی با certbot انجام دهید$ sudo certbot renew –dry-runاگر خطایی نمی بینید ، همه تنظیمات انجام شده است. در صورت لزوم ، Certbot گواهی های شما را تمدید کرده و Nginx را مجدد لود می کند تا تغییرات را اعمال کند. اگر فرایند تمدید خودکار زمانی از کار بیفتد ، Let’s Encrypt پیامی را به ایمیلی که مشخص کرده اید ، ارسال می کند و به شما هشدار می دهید که گواهی شما رو به پایان است.نتیجهدر این آموزش ، کلاینت lets Encrypt certbot را نصب کردید ، گواهینامه های SSL را برای دامنه خود دانلود کردید ، Nginx را برای استفاده از این گواهینامه ها پیکربندی کرده و تمدید خودکار گواهی نامه را فعال نمودید. اگر سؤال دیگری در مورد استفاده از Certbot دارید ، مراجعه به مطالب مربوطه آنها توصیه میشود.برچسب‌ها:Certbot, Nginx