ITSkillsCenter
الأمن السيبراني

ACL Headscale لفريق موزع: تأمين mesh داكار/أبيدجان/الدار البيضاء

2 min de lecture

📍 المقالة الرئيسية: Headscale 2026: الدليل الكامل.

دون ACL، Headscale الخاص بك شبكة مسطحة حيث كل جهاز يمكنه الوصول إلى كل آخر على جميع المنافذ. لفريق من 30 شخصاً موزع بين داكار وأبيدجان والدار البيضاء، هذا anti-pattern أمني كبير. هذا الدرس يفصل تنفيذ سياسات HuJSON قوية: مستخدمون، مجموعات، tags، تراخيص دقيقة، أمثلة جاهزة للنسخ.

المتطلبات

Headscale في الإنتاج، 5 أجهزة مسجلة على الأقل، فهم RBAC. المستوى: متوسط/متقدم. الوقت: 2 إلى 3 ساعات.

الخطوة 1 — فهم بنية HuJSON

سياسة Headscale تحتوي على خمسة أقسام رئيسية: groups (مجموعات المستخدمين، مكافئة لمجموعات RBAC)، tagOwners (من يمكنه تعيين أي tags)، autoApprovers (طرق و exit nodes معتمدة مسبقاً)، acls (قواعد التراخيص الفعلية)، ssh (قواعد SSH خاصة عبر Tailscale SSH).

الخطوة 2 — تعريف المستخدمين والمجموعات

في /etc/headscale/policy.hujson، نُعرِّف المجموعات حسب الأدوار في الشركة. كل مستخدم ينتمي إلى مجموعة أو أكثر. المسؤولون يحصلون على وصول كامل، المطورون على staging و prod، التسويق على Vaultwarden فقط.

{
  "groups": {
    "group:admins": ["amadou@votre-entreprise.com"],
    "group:devs": ["amadou@...", "fatou@...", "ousmane@..."],
    "group:marketing": ["aicha@...", "moussa@..."],
    "group:finance": ["khadija@..."],
    "group:freelances": ["consultant1@external.com"]
  },
  "tagOwners": {
    "tag:server-prod": ["group:admins"],
    "tag:server-staging": ["group:devs"],
    "tag:database-prod": ["group:admins"],
    "tag:office-dakar": ["group:admins"]
  }
}

الخطوة 3 — تعريف ACL الرئيسية

القواعد التالية تطبق مبدأ الامتياز الأدنى. المسؤولون لديهم وصول إلى كل شيء، المطورون مقيدون بـ staging و SSH على prod، التسويق محدود بثلاثة تطبيقات، المستقلون يصلون فقط إلى staging.

"acls": [
  // المسؤولون لديهم وصول كامل
  {
    "action": "accept",
    "src": ["group:admins"],
    "dst": ["*:*"]
  },
  // المطورون: SSH على staging و prod، وصول للتطبيقات الداخلية
  {
    "action": "accept",
    "src": ["group:devs"],
    "dst": ["tag:server-staging:22,80,443,5432,6379"]
  },
  {
    "action": "accept",
    "src": ["group:devs"],
    "dst": ["tag:server-prod:443"]
  },
  // التسويق: وصول إلى Vaultwarden، Outline، Plausible فقط
  {
    "action": "accept",
    "src": ["group:marketing"],
    "dst": ["100.64.0.10:443", "100.64.0.11:443", "100.64.0.12:443"]
  },
  // المستقلون: staging فقط
  {
    "action": "accept",
    "src": ["group:freelances"],
    "dst": ["tag:server-staging:80,443"]
  }
]

الخطوة 4 — SSH مع Tailscale SSH

Tailscale SSH (و Headscale SSH) يسمح بـ SSH دون مفتاح عام، حيث المصادقة يديرها mesh. هذا يبسط إدارة المفاتيح ويحسن الأمن.

"ssh": [
  // المسؤولون يمكنهم SSH في كل مكان كـ root
  {
    "action": "accept",
    "src": ["group:admins"],
    "dst": ["tag:server-prod", "tag:server-staging"],
    "users": ["root", "ubuntu", "debian"]
  },
  // المطورون يمكنهم SSH على staging بـ user الخاص بهم
  {
    "action": "accept",
    "src": ["group:devs"],
    "dst": ["tag:server-staging"],
    "users": ["autogroup:nonroot"]
  },
  // المطورون يمكنهم SSH على prod مع check 2FA
  {
    "action": "check",
    "src": ["group:devs"],
    "dst": ["tag:server-prod"],
    "users": ["autogroup:nonroot"],
    "checkPeriod": "1h"
  }
]

الخطوة 5 — اختبار السياسة قبل التطبيق

قبل تطبيق سياسة جديدة، نختبر صحتها. السياسة الفاسدة يمكن أن تحظر كل الوصول.

headscale policy check -f /etc/headscale/policy.hujson
# يعيد: Policy is valid

headscale policy set -f /etc/headscale/policy.hujson
# يعيد: Policy applied successfully

الخطوة 6 — تعيين tags للخوادم

على خادم Postgres الإنتاج، نُعلن عن tags المناسبة. ثم في Headscale، نعتمد التعيين.

tailscale up --login-server=https://headscale.votre-entreprise.com \
  --auth-key=PREAUTH \
  --advertise-tags=tag:server-prod,tag:database-prod
headscale nodes tag -i ID_DU_NODE -t tag:server-prod,tag:database-prod

الخطوة 7 — التدقيق والامتثال

كل عمليات Headscale مسجلة. للتدقيق الشهري، استخرج العمليات المتعلقة بالسياسات والتسجيلات. لشركة خاضعة لـ RGPD أو ARTCI، صدِّر هذه السجلات إلى Loki + Grafana مع احتفاظ سنة على الأقل.

journalctl -u headscale --since "1 month ago" | grep -i "policy\|tag\|register"

حالة خاصة: فريق متعدد المواقع

لفريق موزع على 3 مدن (داكار، أبيدجان، الدار البيضاء)، تعريف tags جغرافية يسمح بكتابة قواعد من نوع «مطورو داكار يمكنهم SSH خوادم داكار، نفس الشيء أبيدجان».

"groups": {
  "group:devs-dakar": [...],
  "group:devs-abidjan": [...],
  "group:devs-casa": [...]
},
"tagOwners": {
  "tag:server-dakar": ["group:devs-dakar"],
  "tag:server-abidjan": ["group:devs-abidjan"],
  "tag:server-casa": ["group:devs-casa"]
},
"acls": [
  {"action": "accept", "src": ["group:devs-dakar"], "dst": ["tag:server-dakar:*"]},
  {"action": "accept", "src": ["group:devs-abidjan"], "dst": ["tag:server-abidjan:*"]},
  {"action": "accept", "src": ["group:admins"], "dst": ["*:*"]}
]

الأخطاء الشائعة

الخطأ السبب الحل
سياسة فارغة تحظر كل شيء لا قاعدة accept افتراضية أضف قاعدة accept للاختبار
خطأ HuJSON syntax فاصلة مفقودة headscale policy check يشير إلى السطر
Tag مرفوض tagOwners مفقود أضف tag في tagOwners
المستقل لا يزال متصلاً الحساب غير محذوف headscale users destroy nom
SSH per tag مرفوض tag غير مُعيَّن من جانب server تحقق tailscale status على الخادم

التكيف مع السياق المغاربي وغرب إفريقيا

ثلاث تعديلات ملموسة. المستقلون والمتدربون: متكررون جداً في إفريقيا، أنشئ مجموعة مخصصة group:temporaires مع ACL صارمة (staging only، منافذ محدودة، SSH للقراءة فقط). المواقع الموزعة: لمكتب محاماة في الدار البيضاء/طنجة/مراكش، tagging كل موقع يسمح بعزل الموارد المحلية. التوافق مع ARTCI: اطلب ACL في القراءة/الكتابة على خوادم الإنتاج فقط للحسابات القابلة للتتبع.

دروس الإخوة

الأسئلة المتكررة

كم قاعدة ACL يدعم Headscale؟ عدة مئات دون تأثير ملحوظ.

كيفية تدقيق من وصل إلى ماذا؟ سجلات Headscale + سجلات SSH من جانب الخوادم. تقاطع الاثنين يعطي أثراً كاملاً.

سياسة HuJSON Tailscale Cloud متوافقة؟ 95% نعم.

للاستزادة

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité