Redis هو مخزن قيم-مفاتيح قوي في الذاكرة يمكن استخدامه كخادم قاعدة بيانات، وذاكرة تخزين مؤقت، ووسيط رسائل. وهو معروف على نطاق واسع بأدائه السريع ومرونته ودعمه لمجموعة واسعة من اللغات. إنه برنامج مجاني ومفتوح المصدر مكتوب بلغة لغة البرمجة C. في هذا الدليل، تعرف على كيفية تثبيت وتأمين Redis على Ubuntu 18.04.
المتطلبات الأساسية
من أجل اتباع هذا الدليل، ستحتاج إلى إعداد بعض الأشياء مسبقًا. يجب أن يكون لديك خادم Ubuntu 18.04، والذي يمكنك تثبيته بسهولة باتباع البرنامج التعليمي الخاص بنا. بالإضافة إلى ذلك، يجب أن يكون لديك مستخدم غير جذري (non-root) يتمتع بامتيازات sudo وجدار حماية أساسي مهيأ. يمكنك إعداد ذلك باتباع أدلتنا حول تكوين ملف Linux sudoers و إعداد UFW على خادم سحابي يعمل بنظام Ubuntu و Debian.
الآن، لنبدأ!
تثبيت Redis
يتوفر Redis مباشرة من مستودع Ubuntu الرسمي. هذه هي أبسط طريقة لتثبيته وتكوينه. نوصي باتباع هذا المسار ما لم تكن هناك أسباب محددة لعدم القيام بذلك. نظرًا لأن الكود المصدري لـ Redis متاح مجانًا، فمن الممكن أيضًا بناء Redis من المصدر. ومع ذلك، لا نوصي بذلك لأنه من الصعب إدارته وتحديثه.
تثبيت Redis من مستودع Ubuntu
أولاً، قم بتحديث ذاكرة التخزين المؤقت لحزم APT المحلية:
|
1 |
sudo apt update |
بعد ذلك، قم بتثبيت Redis باستخدام الأمر التالي:
|
1 |
sudo apt install redis-server |
تثبيت Redis من المصدر
لا يأتي Ubuntu مع أدوات البناء والمكتبات اللازمة بشكل افتراضي. سيقوم الأمر التالي بتثبيت جميع الأدوات اللازمة لبناء Redis:
|
1 |
sudo apt install git build-essential |
هناك تبعيتان إضافيتان لبناء Redis. هذه التبعيات ضرورية لتجميع Redis بميزات إضافية، على سبيل المثال، دعم TLS، وتكامل systemd، وما إلى ذلك. لتجميع Redis مع دعم TLS، قم بتثبيت حزمة “libssl-dev”. لتجميع Redis لدعم systemd، قم بتثبيت حزمة “libsystemd-dev”:
|
1 |
sudo apt install libssl-dev libsystemd-dev |
يتوفر الكود المصدري لـ Redis على GitHub. تحقق من صفحة Redis على GitHub. بعد ذلك، احصل على الكود المصدري:
|
1 |
git clone https://github.com/redis/redis.git |
قم بتغيير الدليل النشط الحالي إلى دليل الكود المصدري لـ Redis:
|
1 |
cd redis/ |
بعد ذلك، قم بتشغيل أداة make لبدء التجميع. سيقوم بتجميع Redis دون أي عناصر إضافية:
|
1 |
make -j$(nproc) |
لتمكين دعم TLS (بافتراض تثبيت “libssl-dev”)، استخدم الأمر التالي بدلاً من ذلك:
|
1 |
make -j$(nproc) BUILD_TLS=yes |
لتمكين دعم systemd (بافتراض تثبيت “libsystemd-dev”)، استخدم الأمر التالي:
|
1 |
make -j$(nproc) USE_SYSTEMD=yes |
بعد ذلك، اختبر ما إذا كان التجميع ناجحًا. لاحظ أنه قد يتطلب حزمة إضافية “tcl-dev” والتبعيات المرتبطة بها لتشغيل الاختبار:
|
1 |
make test |
أخيرًا، قم بتثبيت Redis عن طريق تشغيل الأمر التالي:
|
1 |
sudo make install |
إذا تم بناء Redis باستخدام TLS، فيجب تشغيل الخادم بالطريقة التالية:
|
1 2 |
./utils/gen-test-certs.sh ./runtest --tls |
تكوين Redis
بمجرد اكتمال التثبيت، يحين وقت تكوين Redis. افتح ملف تكوين Redis في محرر نصوص وانتقل لأسفل إلى قسم “supervised”:
|
1 |
sudo vim /etc/redis/redis.conf |
قم بتغيير قيمة “supervised” إلى “systemd”. سيضمن ذلك إدارة خدمة Redis بواسطة systemd. لتطبيق التغييرات، أعد تشغيل خدمة Redis:
|
1 |
sudo systemctl restart redis.service |
اختبار Redis
من الجيد دائمًا اختبار ما إذا كان Redis يعمل بشكل صحيح قبل استخدامه بشكل أكبر. إليك بعض الطرق لاختبار سلوك Redis. الخطوة الأولى هي التحقق مما إذا كانت خدمة Redis قيد التشغيل:
|
1 |
sudo systemctl status redis |
هنا، يعمل Redis بالفعل. بشكل افتراضي، سيبدأ تشغيل خدمة Redis عند الإقلاع. إذا كان سيتم تشغيل خدمة Redis يدويًا، فقم بتعطيلها:
|
1 |
sudo systemctl disable redis |
الاختبار التالي هو التحقق باستخدام وحدة تحكم Redis. قم بتشغيل عميل سطر أوامر Redis:
|
1 |
redis-cli |
قم بتشغيل الأمر “ping”:
|
1 |
ping |
يؤكد المخرج أن الاتصال بالخادم لا يزال نشطًا. الاختبار التالي هو معرفة ما إذا كان يسمح بتعيين المفاتيح. قم بإنشاء مفتاح “temp” بالقيمة “hello world”:
|
1 |
set temp “hello world” |
استرجع القيمة باستخدام الأمر “get”:
|
1 |
get temp |
إذا كان كل شيء يعمل بشكل جيد حتى الآن، فيجب أن يعيد Redis قيمة المفتاح دون أي مشكلة. أغلق عميل سطر أوامر Redis:
|
1 |
exit |
الاختبار النهائي هو التحقق مما إذا كان بإمكان Redis حفظ البيانات حتى لو تم إيقافه أو إعادة تشغيله. أعد تشغيل خدمة Redis:
|
1 |
sudo systemctl restart redis |
إذا واجهت خطأ أثناء تشغيل الأمر أعلاه، فاستخدم الأمر “systemctl enable redis-server”:
|
1 |
sudo systemctl enable redis-server |
قم بتشغيل عميل سطر أوامر Redis واسترجع قيمة المفتاح “temp” الذي أنشأناه سابقًا:
|
1 2 |
redis-cli get temp |
بهذا ينتهي اختبار Redis. أصبح خادم Redis الخاص بك جاهزًا الآن للاستخدام في الغرض المطلوب.
تأمين Redis
في هذه المرحلة، يعمل Redis بكامل طاقته. ومع ذلك، فإن بعض تكويناته الافتراضية لا توفر أفضل أمان. إذا لم يتم تحديثها، يمكن لأي جهة ضارة استغلال الفرصة للوصول إلى الخادم وبياناته. سيعرض هذا القسم كيفية التخفيف من هذه الثغرات الأمنية. على الرغم من أن هذه الخطوات اختيارية، إلا أنه يوصى بشدة باتباعها لتعزيز أمن النظام.
الربط بـ localhost
بشكل افتراضي، لا يمكن الوصول إلى Redis إلا من localhost. ومع ذلك، إذا تم تكوين Redis على خادم بعيد، فيجب تحديث التكوين للسماح بالاتصال من أي مكان. ومع ذلك، قد لا يكون ذلك آمنًا مثل الربط بـ localhost. لإعادة ربط Redis بـ localhost، افتح ملف تكوين Redis في محرر نصوص:
|
1 |
sudo vim /etc/redis/redis.conf |
قم بالتمرير لأسفل وابحث عن السطر التالي. تأكد من أنه ليس معلقًا:
|
1 |
bind 127.0.0.1 ::1 |
احفظ الملف وأغلقه. ثم أعد تشغيل خدمة Redis للتأكد من أن التغيير ساري المفعول على الفور:
|
1 |
sudo systemctl restart redis |
تحقق من نجاح التغيير:
|
1 |
sudo netstat -lnp | grep redis |
إذا واجهت خطأ مثل ‘netstat: command not found’، فاستخدم الأمر لتثبيت net-tools وهو “sudo apt-get install net-tools”. يتحقق المخرج من أن “redis-server” مرتبط بنجاح بـ localhost (127.0.0.1)، مما يعكس التغيير الذي تم إجراؤه مؤخرًا. إذا كان هناك أي عنوان IP آخر (على سبيل المثال، 0.0.0.0)، فأعد التحقق من ملف التكوين وأعد تشغيل خادم Redis مرة أخرى.
تكوين كلمة مرور Redis
يتيح تكوين كلمة المرور استخدام ميزة أمان مدمجة في Redis – الأمر “AUTH”. وهو يتطلب من العملاء المصادقة للوصول إلى قاعدة البيانات. بشكل افتراضي، لا توجد كلمة مرور مكونة لـ Redis. يجب الإعلان عن كلمة المرور في ملف تكوين Redis. افتح ملف التكوين في محرر نصوص:
|
1 |
sudo vim /etc/redis/redis.conf |
ثم قم بالتمرير لأسفل إلى السطر التالي وألغِ التعليق عنه:
|
1 |
requirepass foobared |
بعد إلغاء التعليق، ستكون “foobared” هي كلمة المرور الافتراضية. قم بتغييرها إلى كلمة المرور التي تختارها. عندما يتعلق الأمر بـ Redis، فإن قوة كلمة المرور هي عامل قلق كبير. نظرًا لأن Redis خادم سريع الأداء، فمن المحتمل أن يكون من السهل استغلاله باستخدام هجمات القوة الغاشمة (brute-force). هذا هو السبب في أن ملف التكوين يحتوي مباشرة على التحذير التالي. إليك مثال سريع لإنشاء كلمة مرور عشوائية قوية جدًا. سنستخدم أمر OpenSSL لإنشاء سلسلة عشوائية:
|
1 |
echo $(openssl rand 60 | openssl base64 -A) |
بعد تكوين كلمة مرور جديدة، أعد تشغيل خدمة Redis لتطبيق التغييرات:
|
1 |
sudo systemctl restart redis.service |
حان الوقت لاختبار ما إذا تم تطبيق كلمة المرور بنجاح. قم بتشغيل وحدة تحكم سطر أوامر Redis:
|
1 |
redis-cli |
ثم، حاول تعيين مفتاح جديد:
|
1 |
set user “cloudsigma” |
سيرفض Redis الطلب لعدم وجود مصادقة لهذا الإجراء. لتنفيذ أي إجراء على الخادم، يجب تفويض المستخدم أولاً. قم بتفويض المستخدم باستخدام الأمر التالي:
|
1 |
auth <password> |
إذا كانت كلمة المرور صحيحة، فسيقر Redis بالإجراء. الآن، سيسمح Redis بالوصول إلى وظائف الخادم الخاصة به:
|
1 2 |
set user “cloudsigma” get user |
في الوقت الحالي، انتهى عملنا مع وحدة تحكم Redis. يمكنك إغلاق وحدة التحكم:
|
1 |
exit |
إعادة تسمية الأوامر الخطيرة
يتيح Redis إعادة تسمية أو تعطيل بعض الأوامر التي تعتبر خطيرة تمامًا. هذه ميزة أمان مدمجة مهمة أخرى في Redis. لماذا تعتبر الأوامر خطيرة؟ إذا تم تشغيلها بواسطة مستخدم غير مصرح له، يمكن لهذه الأوامر إعادة تكوين البيانات أو تدميرها أو مسحها في الخادم. من الممارسات الشائعة تعطيل/إعادة تسمية مجموعة من أوامر Redis الخطيرة. لاحظ أن التهديد الأمني للأمر يعتمد على الموقف. على سبيل المثال، قد تكون بعض الأوامر التالية ضرورية بشكل منتظم. في مثل هذه الحالات، لا يوصى بتعطيلها. في مثل هذا الموقف، قد يكون إعادة تسمية الأمر أكثر فائدة. إليك قائمة سريعة بالأوامر التي تعتبر خطيرة. هذه نقطة بداية جيدة لتعزيز أمان خادم Redis:
- FLUSHDB
- FLUSHALL
- KEYS
- PEXPIRE
- DEL
- CONFIG
- SHUTDOWN
- BGREWRITEAOF
- BGSAVE
- SAVE
- SPOP
- SREM
- RENAME
- DEBUG
لإعادة تسمية أمر أو تعطيله، يجب الإعلان عنه في ملف تكوين Redis. افتح ملف تكوين Redis، وأضف السطور التالية. هنا، يتم استخدام “rename-command” لإعادة تسمية الأوامر إلى سلسلة فارغة. أضف أكبر عدد ممكن من الإدخالات حسب الضرورة:
|
1 |
sudo vim /etc/redis/redis.conf |
|
1 2 3 4 |
$ rename-command FLUSHDB "" $ rename-command FLUSHALL "" $ rename-command SHUTDOWN "" $ rename-command CONFIG "" |
وبالمثل، من الممكن أيضًا إعادة تسمية الأوامر إلى اسم مختلف. في مواقف معينة، قد يوفر هذا مرونة أكبر:
|
1 2 3 4 |
$ rename-command FLUSHDB "command_1" $ rename-command FLUSHALL "command_2" $ rename-command SHUTDOWN "command_3" $ rename-command CONFIG "command_4" |
احفظ الملف واخرج من المحرر. لتطبيق التغييرات، أعد تشغيل خدمة Redis:
|
1 |
sudo systemctl restart redis.service |
تحقق من التغييرات. بعد ذلك، قم بتشغيل وحدة تحكم Redis وقم بمصادقة الوصول:
|
1 2 |
redis-cli auth <password> |
دعنا نفترض أنه تم تعطيل أمر “CONFIG” أو إعادة تسميته. حاول استخدام أمر “CONFIG” التالي. سيفشل:
|
1 |
config get requirepass |
إذا تم تعطيل الأمر، فلا يمكن الوصول إليه حتى يتم تمكينه مرة أخرى. ومع ذلك، إذا تمت إعادة تسميته، فاستخدم الاسم المستعار الجديد:
|
1 |
command_4 get requirepass |
الخاتمة
يوضح هذا البرنامج التعليمي كيفية تثبيت وتأمين وتكوين والتحقق من صحة تثبيت Redis. كما يوضح كيفية استخدام ميزات الأمان المدمجة في Redis لجعله أقل عرضة للهجمات. ومع ذلك، إذا كان شخص ما قد قام بالفعل بتسجيل الدخول إلى الخادم، فمن السهل جدًا التحايل على ميزات الأمان الخاصة بـ Redis. هذا هو السبب في أن وجود جدار حماية لحماية الوصول إلى خادم Redis أمر بالغ الأهمية.
حوسبة سعيدة!






التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.