OpenVPN و Active Directory (Kerberos بدون شهادات المستخدم)

تمت كتابة الكثير من الأدلة حول OpenVPN ، بما في ذلك التفويض من خلال Active Directory. معظمهم يتلخص في استخدام LDAP ، لم أجد منهجًا يستخدم Kerberos ، وهو مكتوب في مقالة كاملة. ومع ذلك ، لن يتم اختراع شيء جديد هنا ، لقد قمت فقط بتجميع ما تم فعله من قبل ، PAM يعمل بشكل جيد مع Kerberos ، و OpenVPN يحتوي على ملحق PAM أصلي. قررت أيضًا التخلي عن شهادات المستخدم ونصائحه ، حيث يوصون ببساطة بأن يصدر جميع المستخدمين شهادة واحدة ، لا يناسبني ، لذلك تم العثور على حل آخر يعمل على جميع العملاء.



قليلا عن NSS


في حالتي ، استخدمت Centos 7 مع sssd. ومع ذلك ، لا شيء يمنع استخدام winbind. الشيء الرئيسي هو امتلاك سيارة في المجال وتذكرة Kerberos. لن أكتب عن كيفية القيام بذلك ، لأنه لن أقول أي شيء جديد ، فهناك الكثير من الأدلة الجيدة على الشبكة.

سيكون من الضروري تغيير إعدادات /etc/nsswitch.conf إذا لم يتم ذلك من قبل. اعتمادًا على الوحدة النمطية التي تم استخدامها ، تحتاج إلى إدخال sss أو winbind بدلاً من module_name ، على التوالي. يمكن قراءة وصف المعلمة باستخدام man nsswitch.conf .

يجب أن تكون الإعدادات التالية كافية:

 passwd: files module_name shadow: files module_name group: files module_name 

في حالة sssd ، لا ننسى ، من بين أشياء أخرى ، أنه في /etc/sssd/sssd.conf في /etc/sssd/sssd.conf [sssd] ، يجب ذكر nss:

 services = nss, pam 

بالنسبة لـ winbind ، من الصعب علي أن أقول شيئًا ، لم أستخدمه.

الهدف النهائي هو الحصول على النتيجة الصحيحة من getent. تحقق من أن الجهاز يمكنه تلقي معلومات حول مستخدمي المجال ومجموعاته:

 > getent passwd kanlas kanlas:*:14123583:1257570:Kanlas Kanlasovich:/home/kanlas@example.com:/bin/bash > getent group VPN vpn:*:13821391:kanlas,igor,marina 

تعليق
إذا استخدمت sssd وتم الحصول على بيانات المستخدم فقط بالاسم الكامل (أي kanlas@example.com) ، فأضف use_fully_qualified_names = False معلمة use_fully_qualified_names = False في sssd.conf في كتلة المجال

تكوين PAM


أنت الآن بحاجة إلى إنشاء وحدة PAM الخاصة بك. حتى لا نستخدم نظام access.conf ، سننشئ ملفًا منفصلًا يتم من خلاله قراءة مجموعة الوصول. لست جيدًا في وحدات PAM ، لذا لا يمكنني القول ما إذا كانت جميع الخطوط مطلوبة في المثال أدناه. بشكل عام ، نحن مهتمون فقط account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/openvpn/auth/access-groups .

الخيار الأسهل هو اتخاذ ، على سبيل المثال ، وحدة تسجيل الدخول وإضافة السطر المطلوب إليها. الذي تم القيام به.

نحصل على:

 #%PAM-1.0 auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so auth substack system-auth auth include postlogin account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/openvpn/auth/access-groups account include system-auth password include system-auth session required pam_selinux.so close session required pam_loginuid.so session optional pam_console.so session required pam_selinux.so open session required pam_namespace.so session optional pam_keyinit.so force revoke session include system-auth session include postlogin -session optional pam_ck_connector.so 

وضعناها في /etc/pam.d ، /etc/pam.d حسب تقديرنا.

في /etc/openvpn/auth/access-groups ، المحددة في الوحدة ، سيتم كتابة مجموعة الوصول هنا ، يمكنك تحديد المسار الخاص بك إذا كنت ترغب في ذلك. ستحتاج إلى تحديد اسم المجموعة (الاسم الشائع) مع المجال. في حالتي ، كتبت VPN@example.com هناك.

يبقى أن نوضح لـ OpenVPN أنه يحتاج إلى استخدام PAM. نضع الأسطر التالية في تكوين الخادم:

 plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so __pam username-as-common-name 

توزيعات مختلفة قد يكون لها مسارات مختلفة! تحقق من وجود ملف حسب المسار أو استخدم find.

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

في تكوين العميل ، أضف السطر

 auth-user-pass 

على هذا الإعداد اكتمال ، يمكنك اختبار.

نزيل شهادة المستخدم


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

 verify-client-cert none 

بعد ذلك ، نضيف إلى تكوين العميل

 setenv CLIENT_CERT 0 

هذا كل شيء ، والآن لن يقسم العملاء على الشهادة. من المضحك أن هذا الخيار مخفي في قسم الأسئلة والأجوبة لنظام iOS . لم أختبر على نظام التشغيل iOS ، ولكن أندرويد ، وكذلك نظام MacOS (الإصدار التجريبي من العميل ) ونظام التشغيل Windows يقبل هذه الإعدادات مع اثارة ضجة. لا يمكن لعميل OpenVPN لجهة خارجية فقط على Android القيام بذلك بعد (بحلول وقت كتابة هذا المقال ، كان بإمكانهم إصلاحه بالفعل).

Source: https://habr.com/ru/post/ar469583/


All Articles