امنیت آپاچی با ابزار mod_md Let’s Encrypt در اوبونتو 20.04 چگونه انجام میگیرد؟ چگونه یک گواهی رایگان TLS/SSL دریافت کنیم؟ چگونه امنیت آپاچی 2 را در سرور اوبونتو 20.04 LTS برقرار کنیم؟ اینها سؤالاتی است که میخواهیم در این مطلب به آنها پاسخ دهیم.
سرور آپاچی با ماژولی به نام mod_md همراه است. امکان استفاده از این ماژول برای تأیید گواهی با استفاده از پروتکل ACME وجود دارد. در این مطلب نحوه نصب و تنظیمات آپاچی را با یک ماژول mod_md برای تأمین امنیت ترافیک با گواهی TLS/SSL رایگان Let’s Encrypt در سرور اوبونتو 20.04 LTS را مرور خواهیم کرد.
پیشنیازهای کلی
سیستمعامل: لینوکس اوبونتو همراه با آپاچی 2
مجوّزهای کاربری روت
امنیت آپاچی با ابزار mod_md Let’s Encrypt در اوبونتو 20.04
Let’s Encrypt یک گواهی تأیید ورود یا CA است که از پروتکل ACME پیروی میکند. امکان استفاده از این ابزار برای ارائه گواهی TLS/SSL برای سرورهای آپاچی، Nginx و سایر سرورها وجود دارد. در این آموزش، شما از ماژول mod_md برای دستیابی به گواهی رایگان TLS/SSL برای آپاچی 2 در اوبونتو 20.04 استفاده خواهید کرد. همچنین گواهی را به گونهای تنظیم میکنید که به صورت خودکار، تجدید شود.
پروژه نمونه ما به صورت زیر خواهد بود:
دامین – www42.ariaservice.net
پورت اچتیتیپیاس – 443
فایل تنظیمات دامین مجازی -/etc/apache2/sites-available/www42.ariaservice.net.conf
حتماً دقت کنید که سرور آپاچی به صورت استاندارد در سیستم شما نصب شده باشد.
گام ۱) نصب mod_md برای Let’s Encrypt
ابتدا باید بروزرسانیها را با استفاده از فرمان apt انجام دهیم.
sudo apt update sudo apt upgrade
سپس با اجرای فرمان زیر، ماژول mod_md را نصب کنید.
sudo apt install libapache2-mod-md
فعالسازی ماژول mod_md در اوبونتو 20.04 LTS
برای فعال کردن این ماژول به صورت زیر عمل کنید.
sudo a2enmod md
نمونه خروجی
Enabling module md. To activate the new configuration, you need to run: systemctl restart apache2
حتماً دقت کنید که mod_ssl را نیز فعال کرده باشید. برای این منظور فرمان زیر را اجرا کنید.
sudo a2enmod ssl
خروجی
Considering dependency setenvif for ssl: Module setenvif already enabled Considering dependency mime for ssl: Module mime already enabled Considering dependency socache_shmcb for ssl: Enabling module socache_shmcb. Enabling module ssl. See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates. To activate the new configuration, you need to run: systemctl restart apache2
آپاچی 2 میبایست دوباره راهاندازی و یا ریاستارت شود. این کار با کمک فرمان mod_ssl انجام میگیرد.
sudo systemctl reload apache2.service
گام ۲) تنظیمات گواهی SSL
حتماً مطمئن شوید که آپاچی 2 عملکرد خود را دارد و ورودیهای پورت 80 را دریافت میکند. برای برررسی این موضوع میتوانید از فرمان ss یا netstat استفاده کنید.
sudo netstat -tulpn | grep ':80' ## or ## sudo ss -tulpn | grep ':80'
نمونه خروجی
tcp LISTEN 0 128 *:80 *:* users:(("apache2",pid=2550,fd=4),("apache2",pid=2549,fd=4),("apache2",pid=2548,fd=4))
تمام کلاینتها میبایست از طریق پورت 80 به سرور شما متصل باشند. در غیر این صورت، گواهی Let’s Encrypt برای شما تأیید نخواهد شد.
curl -I http://www42.ariaservice.net
خروجی فرمان curl برای ما مشخص میکند که اتصال به پورت TCP شماره 80 برقرار است.
HTTP/1.1 200 OK Date: Wed, 06 May 2020 19:30:43 GMT Server: Apache/2.4.41 (Ubuntu) Last-Modified: Wed, 06 May 2020 19:15:29 GMT ETag: "15e-5a4ff965902a3" Accept-Ranges: bytes Content-Length: 350 Vary: Accept-Encoding Connection: close Content-Type: text/html
حالا نوبت ویرایش فایل /etc/apache2/sites-available/www42.ariaservice.net.conf است. برای این منظور داریم:
sudo nano /etc/apache2/sites-available/www42.ariaservice.net.conf
در بالای این فایل، سه پارامتر زیر را برای mod_md وارد کنید.
## Secure Apache with mod_md Let's Encrypt directives ## ServerAdmin webmaster@ariaservice.net MDCertificateAgreement accepted MDomain www42.ariaservice.net MDPrivateKeys RSA 4096
که در آن:
- ServerAdmin webmaster@ariaservice.net : ماژول mod_md از این آدرس ایمیل برای ثبت دامینهای شما در Let’s Encrypt استفاده خواهد کرد.
- MDCertificateAgreement accepted[donotprint][/donotprint] : باید شرایط خدمات ارائه شده توسط Let’s Encrypt را تأیید کنید.
- MDomain www42.ariaservice.net: نام دامینی که بر اساس آن ماژول mod_md برای ارائه و تجدید گواهیها استفاده میکند. شما میتوانید نام کامل دامین مانند ariaservice.net یا ariaservice.net یا www42.ariaservice.net را وارد کنید. در هر صورت دقت کنید که این دامین با ServerName منطبق باشد.
- MDPrivateKeys RSA 4096: تنظیم اندازه و نوع کلیدهای اختصاصی که تولید میشوند.
در اینجا فایل تنظیمات را به صورت کلی مشاهده میکنید.
## Apache with mod_md Let's Encrypt ## ## mod_md config for Let's Encrypt ## ServerAdmin webmaster@cyberciti.biz MDCertificateAgreement accepted MDomain www42.cyberciti.biz MDPrivateKeys RSA 4096 ## HTTP port 80 config ## <VirtualHost *:80> ServerAdmin webmaster@ariaservice.net ServerName www42.ariaservice.net DocumentRoot /home/ariaservice.net/html DirectoryIndex index.html ErrorLog ${APACHE_LOG_DIR}/www42.ariaservice.net-error.log CustomLog ${APACHE_LOG_DIR}/www42.ariaservice.net-access.log combined # Redirect all http requests to HTTPS (uncomment the following two lines when HTTPS issued) # RewriteEngine On # RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L] </VirtualHost> ## HTTPS Config ## <VirtualHost *:443> SSLEngine on ServerAdmin webmaster@ariaservice.net ServerName www42.ariaservice.net DocumentRoot /home/ariaservice.net/html DirectoryIndex index.html ErrorLog ${APACHE_LOG_DIR}/www42.ariaservice.net-ssl-error.log CustomLog ${APACHE_LOG_DIR}/www42.ariaservice.net-ssl-access.log combined # Turn on HTTP/2 Protocols h2 http/1.1 # Set HTTP Strict Transport Security Header always set Strict-Transport-Security "max-age=63072000" </VirtualHost> ## Only enable TLS v1.3 and avoid older protocols ## SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2 SSLHonorCipherOrder off SSLSessionTickets off ## Turn on OCSP Stapling ## SSLUseStapling On SSLStaplingCache "shmcb:logs/ssl_stapling(32768)" ## Permission for our DocumentRoot ## <Directory /home/ariaservice.net/html> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
فعالسازی mod_rewrite و mod_headers در اوبونتو
قبلاً یک فراخوانی برای دستور صدور مجدد گواهی در تنظیماتمان داشتهایم. اکنون نیاز به ابزار mod_rewrite داریم. برای این منظور فرمان زیر را تایپ کنید.
sudo a2enmod rewrite
Enabling module rewrite. To activate the new configuration, you need to run: systemctl restart apache2
فعالسازی ماژول mod_headers
sudo a2enmod headers Enabling module headers. To activate the new configuration, you need to run: systemctl restart apache2
بررسی خطاهای تنظیمات
sudo apache2ctl configtest
Syntax OK
گام ۳) باز کردن HTTPS (به صورت TCP با پورت شماره 443) با استفاده از فایروال UFW در اوبونتو
فرمان ufw زیر را اجرا کنید تا پورت TCP شماره 443 برای همه باز شود.
sudo ufw allow 443/tcp comment 'accept secure Apache connections'
برای بررسی تنظیمات به صورت زیر عمل کنید.
sudo ufw status
گام ۴) دریافت یک گواهی SSL با استفاده از ماژول mod_md در اوبونتو
تا به اینجا ماژول mod_md را برای آپاچی در اوبونتو نصب کردیم، تمام ماژول اصلی را فعال کردیم و پورتهای TCP موردنیاز برای فایروال تعریف شد. حالا نوبت به راهاندازی دوباره سرور آپاچی 2 برای دسترسی به گواهی رایگان TLS/SSL با استفاده از Let’s Encrypt است. برای این منظور از فرمان زیر استفاده میشود.
sudo systemctl restart apache2.service
به محض اینکه آپاچی 2 ریاستارت شد، ماژول mod_md با Let’s Encrypt ارتباط برقرار میکند و درخواست یک گواهی برای دامین شما میدهد. معمولاً این روند تا یک دقیقه زمان میبرد. برای بررسی موفقیتآمیز بودن این موضوع میتوانید به فایل تاریخچه خطاهای سرور یا صفحه mod_status آپاچی مراجعه کنید. این چیزی است که در فایل erro.log مشاهده خواهید کرد.
sudo tail -f /var/log/apache2/error.log
امکان استفاده از فرمان grep نیز برای این منظور وجود دارد.
sudo grep 'The Managed Domain' /var/log/apache2/error.log
نمونه خروجی نشان میدهد که Let’s Encrypt یک گواهی رایگان TLS/SSL ارائه داده است.
[Wed May 06 20:17:38.112849 2020] [md:notice] [pid 21777:tid 139807872861952] AH10059: The Managed Domain www42.ariaservice.net has been setup and changes will be activated on next (graceful) server restart.
البته میتوان از آدرس وضعیت سرور نیز دیدن کنیم. برای این منظور داریم:
http://www42.ariaservice.net/server-status http://your-public-ip-here/server-status
برای فعالسازی گواهی، راهاندازی دوباره سرور آپاچی 2 در اینجا توصیه میشود.
sudo systemctl reload apache2.service
گام ۵) بررسی امنیت ارتباط آپاچی 2
تنها کاری که باید انجام دهید، تایپ فرمان زیر یا استفاده از مرورگری مانند کروم یا فایرفوکس است. در هر صورت، شما باید از دریافت یک اتصال HTTPS مطمئن باشید.
curl -I https://www42.ariaservice.net
و این هم خروجی آزمون SSL Lab
سرور آپاچی با گواهی Let’s Encrypt TLS/SSL در اوبونتو 20.04 LTS ایمن شده و توسط آزمون SSL Lab تأیید شده است.
گام ۶) تجدید خودکار گواهی SSL با استفاده از ماژول mod_md و watchdog_module
mod_md از ماژول mod_watchdog استفاده میکند که یک ابزار پروگراماتیک برای سایر ماژول برای انجام کارکردهایی مانند تجدید گواهیهای TLS/SSL به صورت دورهای است. به عبارت دیگر، حالت auto-renew نیازمند فعالبودن mod_watchdog در سرور شما خواهد بود. برای آگاهی از فعالبودن ماژول mod_watchdog میتوانید از فرمان زیر استفاده کنید.
sudo apache2ctl -M sudo apache2ctl -M | grep mod_watchdog
ماژولهای بارگذاری شده
core_module (static) so_module (static) watchdog_module (static) http_module (static) unixd_module (static) access_compat_module (shared) alias_module (shared) auth_basic_module (shared) authn_core_module (shared) .... .. ... ssl_module (shared) status_module (shared)
گام ۷) بررسی و پایش وضعیت گواهی
حالا نوبت به مانیتورینگ گواهی ما میرسد. دو روش برای این منظور وجود دارد. اول اینکه میتوانید آدرس وضعیت سرور را باز کنید.
https://www42.ariaservice.net/server-status https://your-public-ip-here/server-status
برای ویرایش فایل تنظیمات سرور به صورت زیر عمل کنید.
sudo nano /etc/apache2/sites-available/www42.ariaservice.net.conf
موارد زیر را اضافه کنید.
<Location "/md-status"> SetHandler md-status </Location>
فایل را ذخیره کرده و ببندید. سپس باید سرور را دوباره اندازی کنید.
sudo systemctl restart apache2.service curl https://www42.ariaservice.net /md-status
نمونه خروجی
{ "version": "2.0.10", "managed-domains": [ { "name": "www42.cyberciti.biz", "domains": [ "www42.cyberciti.biz", "www43.cyberciti.biz" ], "contacts": [ "mailto:webmaster@cyberciti.biz" ], "transitive": 1, "ca": { "proto": "ACME", "url": "https://acme-v02.api.letsencrypt.org/directory", "agreement": "accepted" }, "state": 2, "renew-mode": 1, "renew-window": "33%", "warn-window": "10%", "must-staple": false, "cert": { "valid-from": "Wed, 06 May 2020 19:17:37 GMT", "valid-until": "Tue, 04 Aug 2020 19:17:37 GMT", "serial": "040E339A0A7D2224819A550BBB4596279F67", "sha256-fingerprint": "d78933fa946cb71810111876049defa4feb6820c319c69918ba925b463bbd11c" }, "renew": false } ] }
جمعبندی
در این آموزش، نحوه ایمن کردن آپاچی با استفاده از ماژول mod_md Let’s Encrypt و ایجاد گواهی خودکار TLS/SSL را در سرور اوبونتو 20.04 LTS را فرا گرفتیم. برای اطلاعات بیشتر میتوانید به صفحه رسمی mod_md در اینجا مراجعه کنید.
منبع: Cybercity.biz