جدول محتوایی
آموزش میزبانی سایت با Cloudflare و nginx در اوبونتو 22.04
مقدمه
Cloudflare سرویسی است که بین بازدید کننده و سرور صاحب وب سایت قرار می گیرد و به عنوان یک پروکسی معکوس برای وب سایت ها عمل می کند. Cloudflare یک شبکه تحویل محتوا (CDN) و همچنین کاهش DDoS و خدمات سرور نام دامنه توزیع شده را ارائه می دهد.
Nginx یک وب سرور محبوب است که مسئول میزبانی برخی از بزرگترین و پرترافیک ترین سایت های اینترنت است.
معمولاً سازمانها به وبسایتها با Nginx سرویس میدهند و از Cloudflare به عنوان ارائهدهنده CDN و DNS استفاده میکنند.
در این آموزش، وب سایت خود را که توسط Nginx ارائه می شود با گواهی Origin CA از Cloudflare ایمن می کنید و سپس Nginx را برای استفاده از درخواست های pull تأیید شده پیکربندی می کنید.
مزایای استفاده از این روش راهاندازی این است که از CDN و وضوح DNS سریع Cloudflare بهره میبرید و در عین حال اطمینان میدهید که همه اتصالات از طریق Cloudflare عبور میکنند. این امر مانع از رسیدن هرگونه درخواست مخرب به سرور شما می شود.
در صورت نیاز به سرور مجازی، به سایت ایرانیکاسرور مراجعه کنید.
پیش نیاز ها
برای تکمیل این آموزش به موارد زیر نیاز دارید:
- یک سرور اوبونتو 22.04 راه اندازی شده، شامل یک کاربر غیر روت sudo و یک فایروال.
- Nginx روی سرور شما نصب شده است.
- یک دامنه ثبت شده به حساب Cloudflare شما اضافه شده است که به سرور Nginx شما اشاره می کند.
- یک بلوک سرور Nginx برای دامنه شما پیکربندی شده است
مرحله 1 – تولید گواهی Origin CA TLS
Cloudflare Origin CA به شما امکان می دهد یک گواهی TLS رایگان با امضای Cloudflare برای نصب روی سرور Nginx خود ایجاد کنید.
با استفاده از گواهی TLS تولید شده ، می توانید ارتباط بین سرورهای Cloudflare و سرور Nginx خود را ایمن کنید.
برای ایجاد یک گواهی با Origin CA، در یک مرورگر وب به حساب Cloudflare خود وارد شوید.
دامنه ایکه می خواهید ایمن کنید را انتخاب کنید و به بخش SSL/TLS داشبورد Cloudflare خود بروید.
از آنجا به تب Origin Server بروید و روی دکمه Create Certificate کلیک کنید:
گزینه پیش فرض Generate private key and CSR With Cloudflare را انتخاب کنید.
روی Create کلیک کنید و یک دیالوگ با Origin Certificate و Private key خواهید دید.
سپس این دو را از Cloudflare به سرور خود منتقل کنید. به دلایل امنیتی، اطلاعات Private key دیگر نمایش داده نخواهد شد، بنابراین قبل از کلیک بر روی Ok، کلید را در سرور خود کپی کنید.
شما از دایرکتوری /etc/ssl در سرور برای نگهداری گواهی مبدا و فایل های کلید خصوصی استفاده می کنید. پوشه از قبل در سرور وجود دارد.
ابتدا محتویات Origin Certificate نمایش داده شده در کادر محاوره ای در مرورگر خود را کپی کنید.
سپس، در سرور خود، /etc/ssl/cert.pem را در ویرایشگر متن دلخواه خود باز کنید:
sudo nano /etc/ssl/cert.pem
محتویات گواهی را در فایل قرار دهید. سپس ذخیره کنید و از ویرایشگر خارج شوید.
اگر از nano استفاده می کنید، Ctrl+X را فشار دهید، سپس وقتی از شما خواسته شد، Y و سپس Enter را فشار دهید.
حال به مرورگر خود بازگردید و محتویات Private Key را کپی کنید. فایل /etc/ssl/key.pem را برای ویرایش باز کنید:
sudo nano /etc/ssl/key.pem
Private Key را در فایل قرار دهید، فایل را ذخیره کنید و از ویرایشگر خارج شوید.
نکته: گاهی اوقات وقتی گواهی و کلید را از داشبورد Cloudflare کپی میکنید و در فایلهای مربوطه روی سرور قرار میدهید، خطوط خالی درج میشود. Nginx چنین گواهینامه ها و کلیدهایی را نامعتبر تلقی می کند، بنابراین مطمئن شوید که هیچ خط خالی در فایل های شما وجود ندارد.
هشدار: گواهی CA مبدا Cloudflare فقط مورد اعتماد Cloudflare است و بنابراین فقط باید توسط سرورهای مبدا که به طور فعال به Cloudflare متصل هستند استفاده شود. اگر در هر نقطه ای Cloudflare را متوقف یا غیرفعال کنید، گواهی Origin CA شما یک خطای گواهی نامعتبر ایجاد می کند.
اکنون که فایل هایprivate key و گواهی/ Origin certificate را در سرور خود کپی کردید، برای استفاده از آنها باید پیکربندی Nginx را به روز کنید.
مرحله 2 – نصب گواهی Origin CA در Nginx
در بخش قبل، با استفاده از داشبورد Cloudflare یک گواهی مبدأ و private key ایجاد کردید و فایلها را در سرور خود ذخیره کردید.
اکنون پیکربندی Nginx را برای سایت خود به روز می کنید تا از گواهی مبدا و کلید خصوصی برای ایمن کردن ارتباط بین سرورهای Cloudflare و سرور خود استفاده کند.
ابتدا مطمئن شوید که UFW به ترافیک HTTPS اجازه کار می دهد.
Nginx Full را فعال کنید که هم پورت 80 (HTTP) و هم پورت 443 (HTTPS) را باز می کند:
sudo ufw allow 'Nginx Full'
اکنون UFW را دوباره بارگیری کنید:
sudo ufw reload
در نهایت، بررسی کنید که قوانین جدید شما مجاز هستند و UFW فعال است:
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)
اکنون آماده تنظیم بلوک سرور Nginx خود هستید.
Nginx در حین نصب یک بلوک سرور پیش فرض ایجاد می کند. اگر هنوز وجود دارد، آن را حذف کنید، زیرا قبلاً یک بلوک سرور سفارشی برای دامنه خود پیکربندی کرده اید:
sudo rm /etc/nginx/sites-enabled/default
سپس فایل پیکربندی Nginx را برای دامنه خود باز کنید:
sudo nano /etc/nginx/sites-available/your_domain
فایل باید به شکل زیر باشد:
server { listen 80; listen [::]:80; root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html; server_name your_domain www.your_domain; location / { try_files $uri $uri/ =404; } }
فایل پیکربندی Nginx را برای انجام کارهای زیر تغییر میدهید:
- از پورت 80 استفاده کنید و همه درخواست ها را برای استفاده از https هدایت کنید.
- از پورت 443 استفاده کنید و از origin certifivate و private key اضافه شده در بخش قبل استفاده کنید.
فایل را طوری تغییر دهید که به شکل زیر باشد:
server { listen 80; listen [::]:80; server_name your_domain www.your_domain; return 302 https://$server_name$request_uri; } server { # SSL configuration listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem; server_name your_domain www.your_domain; root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } }
فایل را ذخیره کرده و از ویرایشگر خارج شوید.
در مرحله بعد، تست کنید تا مطمئن شوید که در هیچ یک از فایل های پیکربندی Nginx شما خطای نحوی وجود ندارد:
sudo nginx -t
اگر مشکلی پیدا نکردید، Nginx را مجددا راه اندازی کنید تا تغییرات شما فعال شود:
sudo systemctl restart nginx
اکنون به بخش SSL/TLS داشبورد Cloudflare بروید، به تب Overview بروید و حالت رمزگذاری SSL/TLS را به Full (strict) تغییر دهید.
این دستور به Cloudflare میگوید که همیشه ارتباط بین Cloudflare و سرور Nginx اصلی شما را رمزگذاری کند.
اکنون از وب سایت خود در https://your_domain دیدن کنید تا مطمئن شوید که به درستی تنظیم شده است. صفحه اصلی خود را خواهید دید و مرورگر گزارش می دهد که سایت امن است.
برای مشاهده جزئیات گواهی خود، به ابزارهای توسعه دهنده مرورگر خود دسترسی داشته باشید، برگه امنیت و سپس مشاهده گواهی را انتخاب کنید.
در بخش بعدی، Authenticated Origin Pulls را تنظیم میکنید تا تأیید کنید که سرور اصلی شما واقعاً با Cloudflare صحبت میکند و نه با سرور دیگری.
با انجام این کار، Nginx به گونهای پیکربندی میشود که فقط درخواستهایی را بپذیرد که از گواهی مشتری معتبر Cloudflare استفاده میکنند. تمام درخواست هایی که از طریق Cloudflare عبور نکرده باشند حذف خواهند شد.
مرحله 3 – راهاندازی Pulls با مبدا تأیید شده
گواهی Origin CA به Cloudflare کمک می کند تا تأیید کند که با سرور مبدا صحیح صحبت می کند.
این مرحله از تأیید اعتبار مشتری TLS برای تأیید اینکه سرور Nginx مبدا شما با Cloudflare صحبت می کند استفاده می کند.
در یک دست دادن TLS تأیید شده توسط مشتری، هر دو طرف یک گواهی را برای تأیید ارائه می کنند. سرور مبدا طوری پیکربندی شده است که فقط درخواست هایی را بپذیرد که از گواهی مشتری معتبر Cloudflare استفاده می کنند.
درخواست هایی که از طریق Cloudflare عبور نکرده باشند، حذف می شوند زیرا گواهی Cloudflare را ندارند. این بدان معنی است که مهاجمان نمی توانند اقدامات امنیتی Cloudflare را دور بزنند و مستقیماً به سرور Nginx شما متصل شوند.
Cloudflare گواهی هایی را ارائه می دهد که توسط یک CA با گواهی زیر امضا شده اند:
-----BEGIN CERTIFICATE-----
MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
+4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
fVQ6VpyjEXdiIXWUq/o=
-----END CERTIFICATE-----
همچنین میتوانید گواهی را مستقیماً از مستندات Cloudflare دانلود کنید. این گواهی را کپی کنید.
سپس فایل /etc/ssl/cloudflare.crt را برای نگهداری گواهی Cloudflare ایجاد کنید:
sudo nano /etc/ssl/cloudflare.crt
گواهی را به فایل اضافه کنید. سپس فایل را ذخیره کرده و از ویرایشگر خارج شوید.
اکنون پیکربندی Nginx خود را برای استفاده از TLS Authenticated Origin Pulls به روز کنید. فایل پیکربندی دامنه خود را باز کنید:
sudo nano /etc/nginx/sites-available/your_domain
دستورات ssl_client_certificate و ssl_verify_client را همانطور که در مثال زیر نشان داده شده است اضافه کنید:
. . . server { # SSL configuration listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem; ssl_client_certificate /etc/ssl/cloudflare.crt; ssl_verify_client on; . . .
فایل را ذخیره کرده و از ویرایشگر خارج شوید.
در مرحله بعد، Nginx را تست کنید تا مطمئن شوید که هیچ گونه خطای نحوی در پیکربندی Nginx شما وجود ندارد:
sudo nginx -t
اگر مشکلی پیدا نشد، Nginx را مجددا راه اندازی کنید تا تغییرات شما فعال شود:
sudo systemctl restart nginx
در نهایت، برای فعال کردن Authenticated Pulls، بخش SSL/TLS را در داشبورد Cloudflare باز کنید، به تب Origin Server بروید و گزینه Authenticated Origin Pulls را تغییر دهید:
اکنون از وب سایت خود در https://your_domain دیدن کنید تا مطمئن شوید که به درستی تنظیم شده است. مانند قبل، صفحه اصلی خود را خواهید دید.
برای تأیید اینکه سرور شما فقط درخواستهای امضا شده توسط CA Cloudflare را میپذیرد، گزینه Authenticated Origin Pulls را تغییر دهید تا آن را غیرفعال کنید و سپس وبسایت خود را مجدداً بارگیری کنید. حالا باید پیغام خطای زیر را دریافت کنید:
اگر CA Cloudflare درخواستی را امضا نکند، سرور اصلی شما با خطا مواجه میشود.
توجه: بیشتر مرورگرها درخواستها را حافظه پنهان میکنند، بنابراین برای مشاهده تغییر بالا میتوانید از حالت مرور ناشناس/خصوصی در مرورگر خود استفاده کنید. برای جلوگیری از Cloudflare از ذخیره درخواستها در هنگام راهاندازی وبسایت خود، به نمای کلی در داشبورد Cloudflare بروید و حالت توسعه را تغییر دهید.
اکنون که مطمعن شدید به درستی کار می کند به بخش SSL/TLS در داشبورد Cloudflare برگردید، به تب Origin Server بروید و دوباره گزینه Authenticated Origin Pulls را تغییر دهید تا آن را فعال کنید.
جمع بندی
در این آموزش، شما با رمزگذاری ترافیک بین Cloudflare و سرور Nginx با استفاده از گواهی Origin CA از Cloudflare، وبسایت دارای Nginx خود را ایمن کردید. سپس Authenticated Origin Pulls را روی سرور Nginx راهاندازی میکنید تا مطمئن شوید که فقط درخواستهای سرورهای Cloudflare را میپذیرد و از اتصال مستقیم دیگران به سرور Nginx جلوگیری میکند.
ای والا کارمون راه افتاد
عالی عالی ممنون
سلام به تیم ایرانکاسرور ممنون از پست خوبتون