كيفية أداء تثبيت Redis الآمن على نظام Linux

Redis مفيد لأشياء كثيرة، واحدة منها هي التخزين المؤقت. يمكنك أيضًا استخدام Redis كمتجر بيانات أساسي أو حتى كبديل لقاعدة بيانات. ولكن كيف يمكنك تنفيذ تثبيت آمن لـ Redis؟ قد يكون تثبيت Redis مؤلمًا، وإذا لم تكن حذرًا، قد تواجه العديد من الأخطاء. محظوظًا بالنسبة لك، يغطي هذا البرنامج التعليمي كل شيء تقريبًا.

في هذا البرنامج التعليمي، ستتعلم كيفية تثبيت Redis بشكل آمن على نظام Linux الخاص بك، بالإضافة إلى بعض النصائح لتجنب الأخطاء الشائعة.

استمر في القراءة وتجنب الصداع الناتج عن مشاكل تثبيت Redis!

المتطلبات المسبقة

سيكون هذا البرنامج التعليمي عرضًا تطبيقيًا عمليًا. إذا كنت ترغب في متابعة الدروس، تأكد من أن لديك ما يلي:

  • جهاز Ubuntu 20.04 LTS – يستخدم هذا البرنامج التعليمي Ubuntu 20.04 LTS، ولكن التعليمات مماثلة لمعظم توزيعات Linux.

تثبيت Redis باستخدام مدير الحزم APT

هناك بعض الطرق لتثبيت Redis على أوبونتو، ولكن في هذا البرنامج التعليمي، ستختار استخدام مدير الحزم APT لتثبيت Redis.

Redis مكتوب بلغة C، لذلك ستحتاج إلى تجميع Redis من مصدره يدوياً. سيتطلب ذلك تثبيت عدة تبعيات، وعملية البناء ليست مضمونة بالكامل.

تجميع Redis من المصدر ليس مستحسناً، ولكن الجانب الإيجابي هو أنه يمكنك تخصيص التثبيت حسب رغبتك. تقوم بتنزيل مصدر الشفرة، ثم تقوم بتكوينه يدوياً.

افتح الطرفية الخاصة بك وقم بتشغيل الأمر apt update أدناه لـ ضمان أن لديك أحدث قوائم الحزم.

sudo apt update -y
Updating the Linux system

الآن، قم بتشغيل الأمر apt install أدناه لتثبيت Redis على جهازك.

الأمر أدناه يستخدم مدير الحزم apt لتنزيل وتثبيت حزمة redis-server من مستودعات أوبونتو على جهازك. علامة -y تخبر apt بقبول النوافذ المنبثقة أثناء عملية التثبيت تلقائياً.

sudo apt install redis-server -y
Installing Redis on your machine

تكوين ملف Redis.conf لتشغيل Redis كخدمة

لقد قمت للتو بتثبيت Redis، ولكنه ليس جاهزًا للاستخدام بعد. قبل أن تتمكن من بدء استخدام Redis، ستحتاج أولاً إلى تكوين ملف redis.conf.

ملف التكوين redis.conf مضمن مع حزمة Redis التي قمت بتثبيتها ويتم تخزينه في الدليل /etc/redis/ افتراضيًا. يحتوي هذا الملف على جميع خيارات التكوين لـ Redis.

امتداد الملف .conf منطقي، حيث يتبع نمطًا تقليديًا. تستخدم العديد من البرامج نفس النمط. على سبيل المثال، يستخدم خادم الويب Apache امتداد ملف .conf لملف التكوين الرئيسي الخاص به.

1. قم بتشغيل الأمر systemctl التالي لـ إيقاف خدمة redis-server. إيقاف تشغيل خدمة Redis هو ممارسة موصى بها عند بدء الاستخدام مع Redis للمرة الأولى.

sudo systemctl stop redis.service

2. بعد ذلك، افتح ملف /etc/redis/redis.conf في محرر النص المفضل لديك.

ابحث عن التوجيه supervised ثم قم بتعيينه إلى systemd، كما هو موضح أدناه، واحفظ التغييرات. من خلال ذلك، يخبر النظام التشغيل بتشغيل Redis كخدمة.

Setting up the systemd directive

3. الآن، قم بتشغيل الأمر systemctl restart أدناه لإعادة تشغيل خدمة Redis (redis.service) حيث أن الخدمة Redis لا تعلم بالتغييرات بعد.

sudo systemctl restart redis.service

4. في النهاية، قم بتشغيل الأمر systemctl status أدناه لمعرفة ما إذا كان Redis قيد التشغيل.

sudo systemctl status redis.service

كما يمكنك رؤية أدناه، يُظهر الإخراج أن خدمة Redis قيد التشغيل.

Checking if Redis Service is Running

اختبار ما إذا كان خادم Redis يعمل بشكل صحيح

لقد قمت بتكوين والتحقق من أن خدمة Redis قيد التشغيل بنشاط، لكن ذلك لا يعني أن خادم Redis يعمل. كيفية اختبار ما إذا كان خادم Redis يعمل بشكل صحيح؟ قم بالاتصال بخادم Redis وإرسال الأوامر لرؤية ما إذا كان الخادم يستجيب.

1. قم بتشغيل الأمر redis-cli أدناه للاتصال بخادم Redis. redis-cli هو واجهة سطر الأوامر لـ Redis، والتي تسمح لك بإرسال الأوامر إلى الخادم وفحص حالته.

redis-cli

يمكنك ملاحظة أنك الآن في موجه خادم Redis (127.0.0.1:6379>). يحاول الأمر redis-cli الاتصال بخادم Redis على 127.0.0.1:6379 افتراضيًا.

Connecting to the Redis Server

2. بعد ذلك، قم بتشغيل الأمر ping أدناه للتحقق مما إذا كان خادم Redis قابلًا للوصول.

ping

كما ترى، استجاب الخادم بـ PONG، مما يشير إلى أن خادم Redis قابل للوصول ويمكنه الآن التواصل بنجاح مع الخدمة.

Pinging the Redis server

ربما تكون لا تزال متشككًا؛ قم بتشغيل الأمر set أدناه. الأمر set هو أمر Redis يضع زوجًا من المفتاح والقيمة في قاعدة البيانات.

set test "This is a test"

كما يمكنك رؤية، يعيد الأمر set “OK”، مما يشير إلى أن خدمة Redis تعمل بشكل صحيح.

Testing the Redis server

3. قم بتشغيل الأمر exit أدناه للخروج من redis-cli. وبذلك يتم إغلاق الاتصال بخادم Redis.

exit

ربط خادم Redis بـ Localhost

لقد قمت للتو بفحص عمل خادم Redis بشكل صحيح، ولكن قد يكون متاحًا أيضًا لأجهزة أخرى على شبكتك. هذا السلوك غير مرغوب فيه، وعادةً ما ترغب في حماية خادم Redis الخاص بك من الغرباء.

ربط خادم Redis بـ localhost يضبط سلوكًا يتيح فقط للجهاز الذي قمت بتثبيت Redis عليه الوصول إلى خادم Redis.

1. افتح الملف /etc/redis/redis.conf في محرر النص الخاص بك.

2. ابحث عن السطر الذي يقول bind 127.0.0.1 ::1 وألغِ تعليق السطر عن طريق حذف علامة العدد (#) في بداية السطر.

Uncommenting the bind 127.0.0.1 ::1 line

3. الآن، قم بتشغيل الأمر أدناه لإعادة تشغيل خدمة redis-server.

sudo systemctl restart redis-server

4. في النهاية، قم بتشغيل الأمر التالي للتحقق مما إذا كان خادم Redis مرتبطًا بـ localhost. يقوم الأمر netstat -lnp بعرض قائمة بجميع الاتصالات الشبكية النشطة، وجزء grep redis يقوم بتصفية النتائج للأسطر التي تحتوي على “redis”.

-lnp يعني بروتوكول الاسم المحلي، وهو بروتوكول للشبكات يستخدمه أنظمة UNIX مشابهة لحل أسماء المضيفين إلى عناوين IP.

sudo netstat -lnp | grep redis

يمكنك أن ترى أدناه أن خادم Redis يستمع الآن فقط على واجهة المضيف المحلية (127.0.0.1:6379). مع انعكاس التغيير في ملف التكوين، يمكنك أن ترى أن واجهة المضيف المحلية فقط هي المُدرجة تحت اتصالاتك الإنترنت النشطة (tcp).

الآن، لا يمكن لأي أجهزة أخرى في شبكتك الاتصال بخادم Redis الخاص بك.

Listing all active network connections

تأمين اتصال خادم Redis بكلمة مرور

في هذه النقطة، لم يتم ضبط Redis ليطلب من المستخدمين المصادقة بكلمة مرور. أي شخص يعرف عنوان IP أو اسم المضيف الخاص بخادم Redis الخاص بك يمكنه الاتصال به وتغيير بياناته.

كيف يمكنك حماية خادم Redis الخاص بك؟ قم بتعيين كلمة مرور لطلب المصادقة من المستخدمين عند الاتصال بخادم Redis الخاص بك.

1. أعد فتح ملف التكوين redis.conf في محرر نصوص/كود الخاص بك.

2. بعد ذلك، قم بتعيين كلمة مرور قوية باستخدام الخطوات التالية:

  • ابحث عن requirepass foobared تحت القسم SECURITY
  • احذف علامة النجمة (#) من بداية السطر.
  • استبدل foobared بكلمة مرور قوية من اختيارك واحفظ التغييرات.
Providing a secure password

3. قم بتشغيل الأوامر التالية لإعادة تشغيل والاتصال بخادم Redis الخاص بك.

sudo systemctl restart redis-server
redis-cli

4. الآن، قم بتشغيل الأمر ping لمعرفة ما إذا كان ستحصل على استجابة من الخادم.

ping

أدناه، يمكنك رؤية رسالة خطأ تقول NOAUTH يتطلب المصادقة. تشير هذه الرسالة إلى أنه يجب عليك استخدام كلمة مرور المصادقة للوصول إلى خادم Redis الخاص بك عن بعد.

Testing connection with the server

5. قم بتشغيل الأمر auth المذكور أدناه متبوعًا بكلمة المرور الخاصة بك للمصادقة على اتصالك بخادم Redis الخاص بك.

auth Qae9p_fY:YjdtJ7k

سوف تحصل على استجابة OK عندما تكون عملية المصادقة ناجحة، مثلما هو موضح أدناه.

Authenticating Redis Server Connection

6. في النهاية، قم بإعادة تشغيل الأمر ping لاختبار ما إذا كنت قد قمت بالمصادقة على اتصالك بخادم Redis الخاص بك.

ping

سوف تحصل الآن على استجابة PONG، كما هو موضح أدناه، بعد مصادقة اتصالك. في هذه النقطة، لقد حميت خادم Redis الخاص بك بنجاح بكلمة مرور.

Pinging the Redis server

تعطيل الأوامر الخطرة لحماية خادم Redis الخاص بك

تعيين كلمة مرور للمصادقة على الاتصال بخادم Redis الخاص بك لا يعني أنه يتمتع بحماية بنسبة 100%. بشكل افتراضي، يتضمن Redis العديد من الأوامر الخطرة التي تسمح للمستخدمين بتغيير البيانات في قاعدة البيانات الخاصة بك.

عند تشغيلها بواسطة مستخدمين غير مصرح لهم، تسمح هذه الأوامر للمتسللين بقراءة، وتعديل، وتدمير، وحتى محو بيانات قاعدة بيانات Redis الخاصة بك.

فيما يلي قائمة غير شاملة حيث قد تحتوي خادم Redis الخاص بك على أوامر خطرة إضافية، ولكن في معظم الحالات، هذه هي الأوامر الخطرة:

FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF
BGSAVE, SAVE, SPOP, SREM, RENAME, DEBUG, EVAL

لتأمين خادم Redis الخاص بك بشكل أكبر، قم بتغيير أسماء هذه الأوامر الخطرة في ملف redis.conf:

1. قم بفتح ملف redis.conf في محرر النصوص الخاص بك وابحث عن قسم إعادة تسمية الأوامر.

أعد تسمية الأوامر إلى سلسلة فارغة لتعطيلها وفقًا للصيغة التالية. استبدل الأمر بالأمر الفعلي للتعطيل.

rename-command the-command ""

على سبيل المثال، قم بتعطيل الأمر CONFIG بإعادة تسمية CONFIG إلى سلسلة فارغة، كما هو موضح أدناه، ثم احفظ التغييرات. العلامات التعريفية (“”) تشير إلى سلسلة فارغة تعني تعطيل أمر.

Renaming the CONFIG command

2. اخرج من محرر النصوص وقم بتشغيل الأمر التالي لإعادة تشغيل خادم Redis.

sudo systemctl restart redis-server

3. الآن قم بتشغيل الأوامر التالية للاتصال بخادم Redis الخاص بك.

redis-cli
auth Qae9p_fY:YjdtJ7k

4. في النهاية، قم بتشغيل الأمر config get لاختبار تعطيل الأمر CONFIG.

config get requirepass

ستحصل على استجابة ERR unknown command config كما هو موضح أدناه، مما يشير إلى تعطيل الأمر CONFIG.

Checking the CONFIG command

إذا نجح الأمر config get requirepass، يطلب كلمة مرور خادم Redis الخاص بك لمصادقة الاتصال بخادم Redis الخاص بك.

لقد قمت الآن بنجاح بإعادة تسمية أمر خطير في Redis لحماية خادم Redis الخاص بك. الآن قم بتعطيل الأوامر الخطيرة الأخرى في ملف redis.conf.

حجب طلبات الاتصال بخادم Redis باستخدام جدار ناري

طريقة أخرى لتأمين خادم Redis الخاص بك هي إعداد جدار ناري. يتطلب إعداد جدار ناري منك السماح بالسماح بالمنفذ المطلوب فقط لكل الخدمات الجاري تشغيلها على خادمك.

على سبيل المثال، إذا كنت تقوم بتشغيل Redis على الخادم الخاص بك على المنفذ 6379، فإن هذا المنفذ هو كل ما تحتاج إلى فتحه. إذا كنت بحاجة إلى السماح بالوصول من عنوان IP معين أو مجموعة من العناوين، يمكنك إضافة تلك العناوين إلى قواعد جدار الحماية.

لإعداد جدار حماية، ستقوم أولاً بتثبيت أداة تكوين جدار الحماية. يستخدم هذا المثال أداة UFW، وهي أداة تكوين جدار حماية شائعة الاستخدام على نظام Linux. ولكن يمكنك أيضًا استخدام أداة أخرى مثل iptables لإعداد جدار حماية.

1. قم بتشغيل الأمر التالي لتثبيت UFW على جهازك.

sudo apt install ufw -y

2. بعد ذلك، قم بتشغيل الأمر أدناه لتمكين UFW.

sudo ufw enable

أدخل “Y” عندما تحصل على الرسالة المبينة أدناه لمتابعة تشغيل الأمر.

Enabling UFW

3. قم بتشغيل الأمر ufw أدناه لإضافة قاعدة، تسمح (allow) بحركة المرور على المنفذ 6379 لخادم Redis الخاص بك. قم بتبديل عنوان الـ IP 11.22.33.44 بعناوين IP للمستخدمين المعنيين لديك.

sudo ufw allow from 11.22.33.44 to any port 6379
Adding a firewall rule to allow traffic on port 6379

4. أخيرًا، قم بتشغيل الأمر أدناه للتحقق من أنك قمت بإضافة قاعدة جدار الحماية بنجاح. يتحقق الأمر من status جدار الحماية الخاص بك.

sudo ufw status

يمكنك رؤية في الناتج أدناه أن جدار الحماية نشط ولديه قاعدة للسماح بحركة المرور على المنفذ 6379 لـ Redis من عنوان الـ IP 11.22.33.44.

Checking the UFW rules

الآن ، يمكن للمستخدمين الذين يمتلكون عنوان IP 11.22.33.44 الاتصال بـ Redis عبر البوابة 6379 وسيحتاجون إلى المصادقة بكلمة مرور. يمكنك إضافة منافذ إضافية لخدمات أخرى بنفس الطريقة.

الاستنتاج

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

بهذه المعرفة الجديدة ، يمكنك الاستمتاع بفوائد Redis بالكامل دون القلق بشأن تعريض خادمك لمخاطر غير ضرورية.

تود تعلم المزيد؟ لماذا لا تبدأ بـ تأمين خادم Redis في Kubernetes؟

Source:
https://adamtheautomator.com/redis-install/