إعداد استيثاق كلمة السر مع خادوم Nginx على Ubuntu: دليل شامل ومفصل
في سياق تأمين خدمات الويب، يمثل استخدام استيثاق كلمة السر (Basic Authentication) إحدى أبسط وأكثر الطرق فعالية لحماية المسارات والموارد الحساسة على الخادوم. يعتبر Nginx أحد أكثر خوادم الويب استخداماً واستقراراً، ويُستخدم بشكل واسع كخادوم HTTP وProxy عكسي Reverse Proxy. ومن خلال إعداد استيثاق كلمة السر على خادوم Nginx في نظام Ubuntu، يمكن للمستخدمين التحكم في الوصول إلى مواقعهم أو واجهاتهم الإدارية بكل بساطة، دون الحاجة إلى إعداد نظم معقدة للمصادقة.
يتناول هذا المقال بشكل مفصل جميع الخطوات اللازمة لإعداد استيثاق كلمة السر مع خادوم Nginx على نظام Ubuntu، مع شرح شامل للمتطلبات والأوامر والملفات المستخدمة. كما يتضمن ملاحظات أمنية وتوصيات لتحسين الحماية.
المتطلبات الأساسية
لإتمام هذه العملية بنجاح، يجب توفر بعض المتطلبات الأساسية:
-
نظام تشغيل Ubuntu (يفضل إصدار LTS حديث مثل 20.04 أو 22.04).
-
صلاحيات الجذر (root) أو استخدام الأمر
sudo. -
خادوم Nginx مثبت ومُشغل.
-
معرفة بأساسيات أوامر سطر الأوامر في Linux.
-
حزمة
apache2-utilsلتوليد ملفات كلمات المرور المشفرة.
المرحلة الأولى: تثبيت الحزم المطلوبة
الخطوة الأولى تتمثل في تثبيت حزمة apache2-utils، وهي الحزمة التي تحتوي على الأداة htpasswd المسؤولة عن إنشاء ملفات كلمات المرور المشفرة.
bashsudo apt update sudo apt install apache2-utils
المرحلة الثانية: إنشاء ملف كلمات المرور
يقوم Nginx باستخدام ملف يحتوي على قائمة بأسماء المستخدمين وكلمات المرور الخاصة بهم، تكون هذه الأخيرة مشفرة لضمان الأمان. لإنشاء هذا الملف، يمكن تنفيذ الأمر التالي:
bashsudo htpasswd -c /etc/nginx/.htpasswd admin
-
الخيار
-cيُستخدم فقط عند إنشاء الملف لأول مرة. إذا كنت تريد إضافة مستخدمين آخرين لاحقاً، أزل هذا الخيار. -
adminهو اسم المستخدم الذي ترغب في إنشائه.
سيُطلب منك إدخال كلمة المرور وتأكيدها. بعد ذلك، سيتم إنشاء ملف .htpasswd يحتوي على اسم المستخدم وكلمة المرور المشفرة.
لإضافة مستخدم جديد لاحقاً:
bashsudo htpasswd /etc/nginx/.htpasswd user2
المرحلة الثالثة: تكوين Nginx لاستخدام الاستيثاق
الخطوة التالية هي تعديل ملف إعدادات Nginx لإضافة التوجيهات الخاصة بالاستيثاق. يمكن تطبيق الحماية على مستوى الخادوم، أو مجلد معين، أو موقع (location) محدد.
مثال على تكوين الحماية لمجلد محدد
nginxserver {
listen 80;
server_name example.com;
location /protected/ {
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
# إعدادات إضافية
try_files $uri $uri/ =404;
}
}
-
auth_basic: يحدد رسالة التوضيح التي تظهر في نافذة تسجيل الدخول. -
auth_basic_user_file: يحدد مسار ملف كلمات المرور.
إعادة تحميل إعدادات Nginx
بعد الانتهاء من تعديل الملف، من الضروري التحقق من صحة التكوين وإعادة تحميل الخدمة:
bashsudo nginx -t sudo systemctl reload nginx
المرحلة الرابعة: اختبار النظام
عند زيارة المسار المحمي (مثل http://example.com/protected/)، يجب أن تظهر نافذة منبثقة تطلب اسم المستخدم وكلمة المرور. في حال كانت البيانات صحيحة، يُسمح بالوصول إلى المحتوى، وإلا فسيتم رفض الدخول.
توصيات وملاحظات أمنية
1. استخدام HTTPS
من الضروري للغاية تأمين الاتصال باستخدام بروتوكول HTTPS، لأن استيثاق Basic Authentication لا يشفر البيانات في حد ذاتها، بل يعتمد على أمان طبقة النقل. بدون HTTPS، يمكن اعتراض كلمات المرور.
2. صلاحيات ملف .htpasswd
يجب تقييد صلاحيات الملف لضمان عدم قراءته من طرف غير مصرح به:
bashsudo chmod 640 /etc/nginx/.htpasswd
sudo chown root:www-data /etc/nginx/.htpasswd
3. تسجيل الدخول الفاشل
لتحسين الأمان، يُنصح بإعداد أنظمة كشف الدخول الفاشل مثل Fail2ban لتعطيل الوصول من عناوين IP تقوم بمحاولات متكررة.
جدول مقارنة بين طرق الاستيثاق المختلفة في Nginx
| نوع المصادقة | الأمان | التشفير | يتطلب قاعدة بيانات | سهولة الإعداد | حالات الاستخدام |
|---|---|---|---|---|---|
| Basic Authentication | منخفض إلى متوسط (بدون HTTPS) | يعتمد على HTTPS | لا | سهل جداً | حماية مجلدات بسيطة |
| JWT (JSON Web Token) | عالي | نعم | نعم | متوسط | API و SPA |
| OAuth2 | عالي جداً | نعم | نعم | معقد | تطبيقات ويب كبيرة |
| Client Certificate | عالي | نعم | لا | معقد | أنظمة مؤسسات عالية الأمان |
التعامل مع أكثر من مستخدم
يمكنك إدارة عدة مستخدمين داخل نفس الملف .htpasswd. عند استخدام htpasswd بدون خيار -c، سيتم إضافة المستخدم إلى الملف الحالي أو تعديل كلمة مروره في حال وجوده مسبقاً.
تقييد عدد المحاولات باستخدام Nginx
بالإضافة إلى استخدام أدوات خارجية مثل fail2ban، يمكن استخدام وحدات Nginx مثل limit_req لتقييد عدد الطلبات:
nginxhttp {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /protected/ {
limit_req zone=one burst=5;
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
}
السجلات والتتبع
يمكن تتبع محاولات الدخول من خلال سجل الدخول الخاص بـ Nginx، وعادة ما يوجد في:
lua/var/log/nginx/access.log
/var/log/nginx/error.log
يساعد تحليل هذه السجلات على اكتشاف الأنشطة المشبوهة ومحاولات الاختراق.
إزالة أو تعديل الاستيثاق لاحقاً
في حال قررت لاحقاً إزالة الحماية أو تعديلها، يكفي حذف أو تعديل التوجيهات التالية من ملف إعدادات Nginx:
nginxauth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
ثم تنفيذ:
bashsudo nginx -t sudo systemctl reload nginx
التوافق مع أدوات DevOps
يُمكن دمج ملفات .htpasswd مع أدوات إدارة التهيئة مثل Ansible أو Chef أو Terraform باستخدام مهام تلقائية لإنشاء الملفات أو إدارتها. كما يمكن تخزين كلمات المرور مشفرة ضمن ملفات سرية (Secrets) داخل بيئات CI/CD لتحديث الوصول الديناميكي.
الخلاصة التقنية
يُعد إعداد استيثاق كلمة السر باستخدام Basic Authentication في Nginx وسيلة فعالة وسهلة لتأمين المسارات والخدمات على خوادم Ubuntu. من خلال إنشاء ملف .htpasswd وتحديث ملفات إعدادات Nginx بشكل سليم، يمكن فرض الحماية دون الحاجة إلى أنظمة معقدة. ومع ذلك، يبقى الاعتماد على HTTPS ونظام تسجيل المحاولات الفاشلة من أهم العوامل لتعزيز الأمان وتجنب الهجمات الشائعة كالهجمات القائمة على التخمين (Brute-force). إن الجمع بين سهولة التهيئة وفعالية الحماية يجعل من هذه الآلية خياراً مناسباً لكثير من الحالات التي تتطلب أماناً بسيطاً وسريع النشر.
المراجع:
-
Nginx Documentation: https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html
-
Apache2-utils Package Reference: https://manpages.ubuntu.com/manpages/htpasswd

