كيفية استضافة موقع على الويب باستخدام Cloudflare و Nginx على Ubuntu 22.04

اختار المؤلف مؤسسة Electronic Frontier Foundation لتلقي تبرع كجزء من برنامج Write for Donations.

مقدمة

Cloudflare هو خدمة تجلس بين الزائر وخادم مالك الموقع على الويب، حيث تعمل كبروكسي عكسي للمواقع. يوفر Cloudflare شبكة توزيع المحتوى (CDN)، بالإضافة إلى حماية DDoS وخدمات خادم أسماء النطاقات الموزعة.

Nginx هو خادم ويب شهير مسؤول عن استضافة بعض من أكبر وأعلى حركة مرور المواقع على الإنترنت. ومن الشائع أن تخدم المؤسسات المواقع عبر Nginx واستخدام Cloudflare كخدمة CDN ومزود DNS.

في هذا البرنامج التعليمي، ستأمن موقع الويب الذي يخدمه Nginx باستخدام شهادة Origin CA من Cloudflare ثم تكون Nginx لاستخدام طلبات السحب المصادق عليها. مزايا استخدام هذه الإعدادات هي أنك تستفيد من CDN لـ Cloudflare وحل العناوين DNS السريعة بينما تضمن أن جميع الاتصالات تمر عبر Cloudflare. وهذا يمنع وصول أي طلبات خبيثة إلى خادمك.

المتطلبات الأولية

لإكمال هذا البرنامج التعليمي، ستحتاج إلى ما يلي:

الخطوة 1 — إنشاء شهادة TLS من Origin CAشهادة Cloudflare Origin CA تتيح لك إنشاء شهادة TLS مجانية موقعة بواسطة Cloudflare لتثبيتها على خادم Nginx الخاص بك. من خلال استخدام الشهادة TLS التي تم إنشاؤها بواسطة Cloudflare يمكنك تأمين الاتصال بين خوادم Cloudflare وخادم Nginx الخاص بك.

الخادم الأصلي لـ Cloudflare CA يتيح لك إنشاء شهادة TLS مجانية موقعة بواسطة Cloudflare لتثبيتها على خادم Nginx الخاص بك. باستخدام شهادة TLS المولدة بواسطة Cloudflare يمكنك ضمان أمان الاتصال بين خادم 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 في محرر النص المفضل لديك:

  1. sudo nano /etc/ssl/cert.pem

قم بلصق محتويات الشهادة في الملف. ثم احفظ وأغلق محرر النص. إذا كنت تستخدم nano، اضغط على Ctrl+X، ثم عندما يُطلب منك، Y ثم Enter.

ثم عد إلى متصفحك وانسخ محتويات المفتاح الخاص. افتح ملف /etc/ssl/key.pem للتحرير:

  1. sudo nano /etc/ssl/key.pem

قم بلصق المفتاح الخاص في الملف، احفظ الملف، وأغلق محرر النص.

ملاحظة: في بعض الأحيان، عندما تنسخ الشهادة والمفتاح من tableau Cloudflare وتلصقها في الملفات المعنية على الخادم، يتم إدخال سطور فارغة. سيعامل Nginx مثل هذه الشهادات والمفاتيح غير الصحيحة، لذا تأكد من عدم وجود سطور فارغة في ملفاتك.

تحذير: يتم الوفاء بشهادة Cloudflare’s Origin CA فقط من قبل Cloudflare وبالتالي يجب أن يستخدم فقط من قبل خادم الأصل الذي يتصل بشكل نشط مع Cloudflare. إذا توقفت أو أعادت تعطيل Cloudflare في أي نقطة، ستلقي شهادة Origin CA الخاصة بك خطأ لا يثق به.

الآن بعد أن نسخت ملفات المفتاح والشهادة إلى خادمك، تحتاج إلى تحديث تكوين Nginx لاستخدامها.

الخطوة 2 – تثبيت شهادة Origin CA في Nginx

في القسم السابق، قمت بإنشاء شهادة الأصل ومفتاح خاصه باستخدام لوحة التحكم في Cloudflare وحفظت الملفات إلى خادمك. الآن ستقوم بتحديث تكوين Nginx لموقعك لاستخدام شهادة الأصل ومفتاح الخصوصية لتأمين الاتصال بين خوادم Cloudflare وخادمك.

أولاً، تأكد من أن UFW سيسمح بالمرور التالفي عبر HTTPS. قم بتمكين Nginx Full، والذي سيفتح كل من المنفذ 80 (HTTP) والمنفذ 443 (HTTPS):

  1. sudo ufw allow 'Nginx Full'

الآن أعد تحميل UFW:

  1. sudo ufw reload

أخيرًا، تحقق من أن قواعدك الجديدة مسموح بها وأن UFW فعال:

  1. sudo ufw status

سترى ناتجًا يبدو كالتالي:

Output
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 كتلة خادم افتراضية أثناء التثبيت. ازلها إذا ما كانت لا تزال موجودة، حيث قمت بالفعل بتكوين كتلة خادم مخصصة لموقعك:

  1. sudo rm /etc/nginx/sites-enabled/default

بعد ذلك، افتح ملف تكوين Nginx لموقعك:

  1. sudo nano /etc/nginx/sites-available/your_domain

يجب أن يبدو الملف هكذا:

/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 واستخدام شهادة الأصل ومفتاح الخصوصية المضافة في القسم السابق.

قم بتعديل الملف بحيث يبدو كما يلي:

/etc/nginx/sites-available/your_domain
server {
    listen 80;
    listen [::]:80;
    server_name your_domain www.your_domain;
    return 302 https://$server_name$request_uri;
}

server {

    # تكوين SSL

    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 الخاصة بك:

  1. sudo nginx -t

إذا لم تجد مشكلات، قم بإعادة التشغيل لـ Nginx لتمكين التغييرات:

  1. sudo systemctl restart nginx

الآن انتقل إلى لوحة التحكم في Cloudflare SSL/TLS، وانتقل إلى علامة التبويب نظرة عامة، وقم بتغيير وضع تشفير SSL/TLS إلى كامل (صارم). هذا يعني Cloudflare أن يشفر دائمًا الاتصال بين Cloudflare وخادم Nginx الأصلي لديك.

الآن زر موقعك على الويب على عنوان https://اسم_المجال_الخاص_بك للتحقق من أنه معد بشكل صحيح. سترى صفحتك الرئيسية معروضة، وسيعلن المتصفح أن الموقع آمن.

لعرض تفاصيل الشهادة الخاصة بك، قم بالوصول إلى أدوات المطور في متصفحك، وحدد علامة التبويب الأمان، ثم عرض الشهادة.

ملاحظة: قد تلاحظ أن شهادتك لا تذكر Cloudflare كمصدر. هذا لأن Cloudflare قد تستخدم سلاسل أخرى من سلطات الشهادة، مثل Let’s Encrypt. للحصول على قائمة كاملة، تحقق من وثائق Cloudflare لسلطات الشهادة.

في القسم التالي، ستقوم بإعداد الإجراءات التي تحقق من أن خادم الأصل لديك يتحدث فعلًا إلى Cloudflare وليس إلى خادم آخر. بالقيام بذلك، سيتم تكوين Nginx لقبول الطلبات فقط التي تستخدم شهادة عميل صالحة من Cloudflare؛ ستتم إسقاط جميع الطلبات التي لم تمر عبر Cloudflare.

الخطوة 3 – إعداد سحوبات الأصل المصدقة

سيساعدك شهادة المصدق الأصلي Origin CA على التأكد من أن Cloudflare يتحدث إلى الخادم الأصلي الصحيح. ستستخدم هذه الخطوة توافق TLS Client Authentication للتحقق من أن خادم 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:

  1. sudo nano /etc/ssl/cloudflare.crt

أضف الشهادة إلى الملف. ثم احفظ الملف وأغلق محرر النص.

الآن قم بتحديث تكوين Nginx الخاص بك لاستخدام سحب مصدقة TLS. افتح ملف التكوين لمجالك:

  1. sudo nano /etc/nginx/sites-available/your_domain

أضف تعليمات ssl_client_certificate و ssl_verify_client كما هو موضح في المثال التالي:

/etc/nginx/sites-available/your_domain
. . .

server {

    # تكوين SSL

    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 الخاص بك:

  1. sudo nginx -t

إذا لم يتم العثور على أي مشاكل، قم بإعادة تشغيل Nginx لتمكين التغييرات الخاصة بك:

  1. sudo systemctl restart nginx

أخيرًا، لتمكين سحب مصدقة، افتح قسم SSL/TLS في لوحة التحكم Cloudflare، انتقل إلى علامة الخادم الأصلي وقم بتبديل خيار سحب الأصل المصدق .

الآن زر موقعك على https://your_domain للتحقق من أنه تم تعيينه بشكل صحيح. كما كان من قبل، سترى صفحة الويب الرئيسية الخاصة بك.

للتحقق من أن خادمك سيقبل طلبات فقط موقعة بواسطة مصدق CA Cloudflare، قم بتبديل خيار سحب الأصل المصدق لإلغائه ثم قم بتحديث موقعك. يجب أن تحصل على رسالة الخطأ التالية :

يثير خادم الأصل الخاص بك خطأ إذا لم يوقع مصدق CA Cloudflare طلبًا.

ملاحظة: ستستورد معظم المتصفحات الطلبات، لذا لرؤية التغيير أعلاه يمكنك استخدام وضع Incognito/Private في متصفحك. لمنع Cloudflare من تخزين الطلبات أثناء إعداد موقعك، انتقل إلى ملخص في لوحة التحكم Cloudflare وقم بتبديل وضع التطوير.

الآن بعد أن تعرف أنه يعمل بشكل صحيح ، ارجع إلى قسم SSL/TLS في لوحة التحكم في Cloudflare ، وانتقل إلى علامة التبويب Origin Server وقم بتشغيل خيار Authenticated Origin Pulls مرة أخرى لتمكينه.

الاستنتاج

في هذا البرنامج التعليمي ، حصرت موقعك الذي يعمل بواسطة Nginx عن طريق تشفير حركة المرور بين Cloudflare وخادم Nginx باستخدام شهادة CA Origin من Cloudflare. ثم قمت بإعداد سحب الأصل المصدق عليه على خادم Nginx للتأكد من أنه يقبل فقط طلبات خوادم Cloudflare ، مما يمنع أي شخص آخر من الاتصال مباشرة بخادم Nginx.

Source:
https://www.digitalocean.com/community/tutorials/how-to-host-a-website-using-cloudflare-and-nginx-on-ubuntu-22-04