اختار المؤلف مؤسسة Electronic Frontier Foundation لتلقي تبرع كجزء من برنامج Write for Donations.
مقدمة
Cloudflare هو خدمة تجلس بين الزائر وخادم مالك الموقع على الويب، حيث تعمل كبروكسي عكسي للمواقع. يوفر Cloudflare شبكة توزيع المحتوى (CDN)، بالإضافة إلى حماية DDoS وخدمات خادم أسماء النطاقات الموزعة.
Nginx هو خادم ويب شهير مسؤول عن استضافة بعض من أكبر وأعلى حركة مرور المواقع على الإنترنت. ومن الشائع أن تخدم المؤسسات المواقع عبر Nginx واستخدام Cloudflare كخدمة CDN ومزود DNS.
في هذا البرنامج التعليمي، ستأمن موقع الويب الذي يخدمه Nginx باستخدام شهادة Origin CA من Cloudflare ثم تكون Nginx لاستخدام طلبات السحب المصادق عليها. مزايا استخدام هذه الإعدادات هي أنك تستفيد من CDN لـ Cloudflare وحل العناوين DNS السريعة بينما تضمن أن جميع الاتصالات تمر عبر Cloudflare. وهذا يمنع وصول أي طلبات خبيثة إلى خادمك.
المتطلبات الأولية
لإكمال هذا البرنامج التعليمي، ستحتاج إلى ما يلي:
- خادم Ubuntu 22.04 والذي تم إعداده باتباع دليل إعداد الخادم الأولي Ubuntu 22.04، بما في ذلك مستخدم غير جذري بصلاحيات
sudo
وجدار نار. - Nginx مثبت على خادمك. يمكنك اتباع دليلنا حول كيفية تثبيت Nginx على Ubuntu 22.04.
- A Cloudflare account.
- A registered domain added to your Cloudflare account that points to your Nginx server. Our guide on how to mitigate DDoS attacks against your website with Cloudflare can help you set this up. Our introduction to DNS terminology, components, and concepts can also provide assistance.
- قطعة خادم Nginx مكونة لنطاقك، ويمكنك فعل ذلك عن طريق اتباع الخطوة 5 في كيفية تثبيت Nginx على Ubuntu 22.04.
الخطوة 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
في محرر النص المفضل لديك:
قم بلصق محتويات الشهادة في الملف. ثم احفظ وأغلق محرر النص. إذا كنت تستخدم nano
، اضغط على Ctrl+X
، ثم عندما يُطلب منك، Y
ثم Enter.
ثم عد إلى متصفحك وانسخ محتويات المفتاح الخاص. افتح ملف /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):
الآن أعد تحميل UFW:
أخيرًا، تحقق من أن قواعدك الجديدة مسموح بها وأن UFW فعال:
سترى ناتجًا يبدو كالتالي:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
الآن أنت مستعد لتعديل كتلة خادم Nginx الخاصة بك. ينشئ Nginx كتلة خادم افتراضية أثناء التثبيت. ازلها إذا ما كانت لا تزال موجودة، حيث قمت بالفعل بتكوين كتلة خادم مخصصة لموقعك:
بعد ذلك، افتح ملف تكوين Nginx لموقعك:
يجب أن يبدو الملف هكذا:
ستقوم بتعديل ملف تكوين Nginx للقيام بما يلي:
- الاستماع على المنفذ
80
وتوجيه جميع الطلبات لاستخدامhttps
. - الاستماع على المنفذ
443
واستخدام شهادة الأصل ومفتاح الخصوصية المضافة في القسم السابق.
قم بتعديل الملف بحيث يبدو كما يلي:
احفظ الملف وأغلق محرر النص.
بعد ذلك، اختبر للتأكد من عدم وجود أخطاء منطقية في أي من ملفات تكوين Nginx الخاصة بك:
إذا لم تجد مشكلات، قم بإعادة التشغيل لـ 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:
أضف الشهادة إلى الملف. ثم احفظ الملف وأغلق محرر النص.
الآن قم بتحديث تكوين Nginx الخاص بك لاستخدام سحب مصدقة TLS. افتح ملف التكوين لمجالك:
أضف تعليمات ssl_client_certificate
و ssl_verify_client
كما هو موضح في المثال التالي:
احفظ الملف وأغلق محرر النص.
بعد ذلك، اختبر Nginx للتأكد من عدم وجود أخطاء نحوية في تكوين Nginx الخاص بك:
إذا لم يتم العثور على أي مشاكل، قم بإعادة تشغيل 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.