phpMyAdmin تُعد أداة رائعة لإدارة قاعدة بيانات MySQL، ولكن وضع الوصول إلى قاعدة البيانات الخاصة بك خلف واجهة ويب يمثل مشكلة أمنية كبيرة. فيما يلي بعض الطرق للتخفيف من المخاطر المرتبطة بتشغيل phpMyAdmin.
لماذا يعتبر phpMyAdmin مشكلة أمنية؟
عادةً، سيكون لديك قاعدة بيانات تعمل على الخادم الخاص بك وتقبل الاتصالات من
localhost
أو ربما من خادم موثوق آخر. إذا كان لديك تطبيق يعمل أيضًا على هذا الخادم، فسوف يتواصل مباشرة. لا توجد طريقة للمهاجم للوصول إلى الخادم بالكامل.
يتحايل phpMyAdmin على هذا الأمر ليوفر لك واجهة ويب لإدارة قاعدة البيانات الخاصة بك. إنها أداة مفيدة للغاية، لكنها كارثة من الناحية الأمنية. يتمتع phpMyAdmin بإمكانية الوصول الكامل غير المقيد إلى قاعدة البيانات الخاصة بك، حيث تم تصميمه ليحل محل الوصول المباشر عبر سطر الأوامر. إذا تمكن المهاجم من الوصول إلى لوحة التحكم على الويب، فسيكون لديه إمكانية الوصول إلى كل شيء. وعادةً ما يتم تأمين phpMyAdmin بكلمة مرور بسيطة فقط.
تثبيت phpMyAdmin وتأمين MySQL
phpMyAdmin يعمل على مجموعة LAMP (Linux وApache وMySQL وPHP). قبل أن تبدأ حتى في تثبيت phpMyAdmin، يجب أن تكون نسخة MySQL الخاصة بك آمنة. يوفر MySQL أداة مساعدة مفيدة لأداء بعض مهام الأمان الأساسية:
sudo mysql_secure_installation
سيساعدك هذا في تغيير كلمة مرور الجذر، وتعطيل عمليات تسجيل الدخول عن بعد، وإزالة قاعدة بيانات الاختبار.
بعد ذلك، يمكنك تثبيت phpMyAdmin كما هو الحال عادة. أثناء التثبيت، سيُطلب منك إدخال كلمة مرور مستخدم مسؤول قاعدة البيانات (الذي يجب أن تكون قد قمت بتعيينه أثناء التثبيت). mysql_secure_installation
)، وكلمة مرور جديدة لتأمين phpMyAdmin بها. تأكد من أن كلمة المرور هذه طويلة وآمنة، فهي نقطة الدفاع الأخيرة قبل أن يتمكن المهاجمون من الوصول إليها.
من الناحية المثالية، لا ينبغي لأي مهاجم أن يحصل على فرصة لتخمين كلمة المرور الخاصة بك، لذا قد ترغب في وضع phpMyAdmin خلف شيء آخر حتى تتمكن من تأمينه بشكل أكبر.
الخيار 1: قفل Apache واستخدام إعادة توجيه المنفذ SSH
هذا هو الخيار الأكثر أمانًا، ولكنه مناسب حقًا لوصول المستخدم الفردي فقط، وخاصةً للمستخدمين الفرديين الذين لديهم حق الوصول الإداري الكامل إلى الخادم بأكمله، لأنه يتطلب منك الاتصال عبر SSH.
إعادة توجيه منفذ SSH هي طريقة لإعادة توجيه المنافذ المحلية إلى نظام بعيد. على سبيل المثال، سيكون لديك Apache قيد التشغيل على الخادم الخاص بك، ويستمع إلى المنفذ 80. إذا قمت بربط هذا المنفذ، فيمكنك الوصول إليه بالانتقال إلى:
… في أي متصفح ويب. بمعنى ما، الأمر أشبه بتشغيل Apache على نظامك. ولكن ليس من الضروري أن يكون المنفذ 80 مفتوحًا على الخادم؛ حيث يتم توجيه كل حركة المرور عبر المنفذ القياسي 22 المستخدم لـ SSH. ستحتاج إلى التأكد من تأمين SSH بمفاتيح SSH، ومن الأفضل عدم تشغيله على المنفذ القياسي، حيث أن هذه الطريقة آمنة فقط بقدر أمان اتصال SSH الخاص بك.
للقيام بذلك، ستحتاج إلى ربط Apache بـ localhost، والتأكد من أنه غير مفتوح للإنترنت. افتح /etc/apache2/ports.conf
، وتغيير عبارات الاستماع الثلاثة للاستماع فقط على المضيف المحلي (المعروف أيضًا باسم 127.0.0.1
):
Listen 127.0.0.1:80Listen 127.0.0.1:443
Listen 127.0.0.1:443
أعد تشغيل Apache باستخدام:
sudo service apache2 restart
ويجب أن يكون phpMyAdmin غير قابل للوصول. وهذا أمر متوقع. بمجرد تكوين Apache، يمكنك توجيه المنفذ 80 باستخدام الأمر التالي:
ssh -L 80:localhost:80 user@server
ومن ثم يمكنك الوصول إلى phpMyAdmin من localhost:80
في أي متصفح ويب. وفي الوقت نفسه، يمكن تكوين الخادم الخاص بك بجدار حماية صارم لمنع أي شيء باستثناء SSH.
لو ssh
لا يمكن الارتباط بالمنفذ 80، حاول تغيير المنفذ الأول إلى رقم مختلف والوصول إليه من هناك على localhost. سيظل المنفذ 80 متصلاً بالجهاز البعيد. يتم الحفاظ على هذا الاتصال حتى الخروج ssh
إذا كنت تريد تشغيله في الخلفية، استخدم -f
علَم.
إذا كنت تريد فقط أن يستمع phpMyAdmin على localhost، فيمكنك بدلاً من ذلك تحرير /etc/apache2/conf-enabled/phpmyadmin.conf
وأضف الأسطر التالية إلى Directory
حاجز:
Order deny,allowDeny from all
Allow from 127.0.0.1
سيؤدي هذا إلى منع أي شيء باستثناء localhost من الوصول إلى تثبيت phpMyAdmin، على الرغم من أنك ستظل بحاجة إلى فتح المنفذ 80 في جدار الحماية الخاص بك للسماح بحركة المرور العادية.
الخيار 2: إغلاق Apache واستخدام VPN
إذا كنت بحاجة إلى السماح بالوصول إلى عدة أشخاص دون منحهم حق الوصول عبر SSH، فيمكنك إعداد Apache للاستماع إلى عنوان IP الخاص بجهازك وقبول الاتصالات من نفس السحابة فقط. يعمل هذا بشكل جيد بشكل خاص مع خدمات مثل شبكة AWS VPCحيث يتم إنشاء كل خادم تقوم بتشغيله في شبكة افتراضية.
للعثور على عنوان IP الخاص بك، يمكنك تشغيل ifconfig
وابحث عن inet
العنوان الموجود على محول الشبكة الأساسي الخاص بك:
هذا العنوان مرئي أيضًا من وحدة التحكم AWS EC2بمجرد نسخ العنوان، افتح /etc/apache2/ports.conf
، وتحرير الثلاثة Listen
التوجيهات للاستماع على عنوان IP الخاص:
Listen 172.31.87.118:8Listen 172.31.87.118:443
Listen 172.31.87.118:443
بدلاً من ذلك، إذا كنت تريد فقط تأمين phpMyAdmin، يمكنك تعديل /etc/apache2/conf-enabled/phpmyadmin.conf
والسماح فقط من عنوان IP الخاص:
Order deny,allowDeny from all
Allow from 172.31.87.118
وأعد تشغيل Apache.
الآن، للوصول إلى phpMyAdmin، ستحتاج إلى إعداد خادم VPN مثل OpenVPNسيسمح لك هذا بتوصيل جهاز الكمبيوتر العميل الخاص بك بالسحابة الخاصة الافتراضية التي تعمل بها خوادم الويب لديك، والوصول إلى الخادم الذي يعمل بنظام phpMyAdmin على عنوان IP الخاص كما لو كنت خادمًا آخر. بالطبع، ستحتاج إلى تكوين إعدادات جدار الحماية للسماح بالوصول من خادم OpenVPN إلى مثيل phpMyAdmin.
الخيار 3: تأمين Apache باستخدام HTTPS والمصادقة الأساسية
إذا كنت بحاجة حقًا إلى استخدام DNS عام وإتاحة الوصول إلى خادمك، فيمكنك استخدام المصادقة الأساسية مع Apache. هذه ببساطة كلمة مرور أخرى أمام phpMyAdmin تمنع الغرباء من تقديم أي طلبات إلى تطبيق phpMyAdmin. يمكنك استخدام هذه إلى جانب الخيارات الأخرى في هذه القائمة، حيث إنها مجرد طبقة إضافية من الدفاع.
إنشاء ملف كلمة مرور جديد باستخدام htpasswd
، والذي يجب أن يكون مثبتًا بالفعل إلى جانب Apache (إذا لم يكن كذلك، فهو في apache2-utils
):
sudo htpasswd /etc/apache2/.htpasswd phpadmin
يتيح لك هذا تعيين كلمة مرور جديدة للمستخدم phpadmin
ويخزنها في /etc/apache2/.htpasswd
.
إفتح /etc/apache2/conf-enabled/phpmyadmin.conf
، وقم بتكوينه لاستخدام المصادقة الأساسية باستخدام ملف كلمة المرور الذي تم إنشاؤه حديثًا:
AuthType BasicAuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
أعد تشغيل Apache باستخدام:
sudo service apache2 restart
وعندما تحاول الوصول إلى phpMyAdmin في متصفحك، سيُطلب منك اسم مستخدم وكلمة مرور. أدخل phpadmin
وكلمة المرور التي أنشأتها، ويجب أن يُسمح لك بالوصول. وإلا، فكل ما ستراه هو 401 Unauthorized
إجابة.