تسعى مجموعة الوثائق لهذا المنتج جاهدة لاستخدام لغة خالية من التحيز. لأغراض مجموعة الوثائق هذه، يتم تعريف "خالية من التحيز" على أنها لغة لا تعني التمييز على أساس العمر، والإعاقة، والجنس، والهوية العرقية، والهوية الإثنية، والتوجه الجنسي، والحالة الاجتماعية والاقتصادية، والتمييز متعدد الجوانب. قد تكون الاستثناءات موجودة في الوثائق بسبب اللغة التي يتم تشفيرها بشكل ثابت في واجهات المستخدم الخاصة ببرنامج المنتج، أو اللغة المستخدمة بناءً على وثائق RFP، أو اللغة التي يستخدمها منتج الجهة الخارجية المُشار إليه. تعرّف على المزيد حول كيفية استخدام Cisco للغة الشاملة.
ترجمت Cisco هذا المستند باستخدام مجموعة من التقنيات الآلية والبشرية لتقديم محتوى دعم للمستخدمين في جميع أنحاء العالم بلغتهم الخاصة. يُرجى ملاحظة أن أفضل ترجمة آلية لن تكون دقيقة كما هو الحال مع الترجمة الاحترافية التي يقدمها مترجم محترف. تخلي Cisco Systems مسئوليتها عن دقة هذه الترجمات وتُوصي بالرجوع دائمًا إلى المستند الإنجليزي الأصلي (الرابط متوفر).
يصف هذا المستند كيفية تخصيص سلوك Cisco Prime Access Registrar (CPAR) 8.0 باستخدام البرامج النصية ونقاط الملحق.
توصي Cisco بأن تكون لديك معرفة بالمواضيع التالية:
تستند المعلومات الواردة في هذا المستند إلى إصدارات البرامج والمكونات المادية التالية:
تم إنشاء المعلومات الواردة في هذا المستند من الأجهزة الموجودة في بيئة معملية خاصة. بدأت جميع الأجهزة المُستخدمة في هذا المستند بتكوين ممسوح (افتراضي). إذا كانت شبكتك قيد التشغيل، فتأكد من فهمك للتأثير المحتمل لأي أمر.
يمكن تعديل CPAR بواسطة البرامج النصية الداخلية والخارجية على حد سواء. يمكن كتابة البرامج النصية في C/C++/Java/TCL. يمكن إستخدام البرامج النصية لتعديل معالجة حزم RADIUS و TACACS والقطر. يمكن الإشارة إلى البرامج النصية في CPAR في نقاط الامتداد. نقاط الامتداد هي إعداد/سمة تظهر تحت بعض عناصر التكوين وتسمح بالإشارة إلى برنامج نصي. وفقا للدليل المرجعي فإن حماية مستوى التحكم (CPAR) ليست مسؤولة عن أي فقد للبيانات أو تلفيات أو غير ذلك بسبب البرامج النصية المخصصة.
هنا مثال من إثنان امتداد نقطة تحت شبكة أداة تشكيل
[ //localhost/Radius/Clients/piborowi ] Name = piborowi Description = Protocol = tacacs-and-radius IPAddress = 192.168.255.15 SharedSecret = <encrypted> Type = NAS Vendor = IncomingScript~ = // Extension point for incomming traffic OutgoingScript~ = // Extension point for outgoing traffic EnableDynamicAuthorization = FALSE NetMask = EnableNotifications = FALSE EnforceTrafficThrottling = TRUE
وفقا لدليل إدارة حماية مستوى التحكم (CPAR)، هناك العديد من نقاط الامتداد المتاحة. يمكن الإشارة إلى برنامج نصي وارد في كل من نقاط الملحق التالية:
يمكن الإشارة إلى برنامج نصي للمصادقة أو التخويل في كل نقطة من نقاط الملحق التالية:
يمكن الرجوع إلى البرنامج النصي الصادر في كل من نقاط الملحق التالية:
من المهم فهم الترتيب الذي يتم من خلاله تنفيذ البرامج النصية بواسطة حماية مستوى التحكم (CPAR) نظرا لوجود نقاط امتداد متعددة. ارجع إلى الجدول 7-1 من دليل المسؤول للاطلاع على ترتيب 29 نقطة برمجة/امتداد متوفرة.
إن البرنامج النصي الداخلي هو الذي يتم تكوينه مباشرة في واجهة سطر الأوامر (CLI) لمعرف فئة المورد (CPAR) (aregcmd). إنه لا يتطلب أي ملفات خارجية و الكثير من المعرفة في البرمجة. البرنامج النصي الخارجي هو الذي يتم تخزينه في ملف في نظام التشغيل (CENTOS أو RHEL) ويشار إليه فقط في واجهة سطر الأوامر (CLI) الخاصة بمعالجات CPAR.
في النصوص التفاعلية الداخلية يمكنك إستخدام هذه المعدلات:
1. +RSP: - إضافة وسمة للرد
2. -rsp: - يزيل السمة من الاستجابة
3. #rsp: - يستبدل السمة بقيمة جديدة
4. يمكن إستخدام أعلاه ل req (طلب/إستقبال الحزمة و env، وهو قاموس البيئة). الأمثلة +req: أو -env:
إضافة نص تنفيذي داخلي تحت /RADIUS/النصوص التنفيذية. قم بتكوين إثنين من AVP الإضافيين ليتم إرجاعهم مع حزمة قبول الوصول: filter-id و vendor-specific (للانضمام إلى مجال الصوت).
--> ls -R [ //localhost/Radius/Scripts/addattr ] Name = addattr Description = Language = internal Statements/ 1. +rsp:Filter-Id=PhoneACL 2. +rsp:Cisco-AVPair=device-traffic-class=voice --> ls -R [ Services/local-users ] Name = local-users Description = Type = local IncomingScript~ = OutgoingScript~ = addattr OutagePolicy~ = RejectAll OutageScript~ = UserList = Default EnableDeviceAccess = True DefaultDeviceAccessAction~ = DenyAll DeviceAccessRules/ 1. switches
إختبار باستخدام رادclient المحلي:
--> simplep011 --> p011 send p014 --> p014 Packet: code = Access-Accept, id = 18, length = 64, attributes = Filter-Id = PhoneACL Cisco-AVPair = device-traffic-class=voice
التأثيرات:
07/31/2019 10:31:26.254: P2363: Running Service local-users's OutgoingScript: addattr 07/31/2019 10:31:26.254: P2363: Internal Script for 1 +rsp:Filter-Id=PhoneACL : Filter-Id = PhoneACL 07/31/2019 10:31:26.254: P2363: Setting value PhoneACL for attribute Filter-Id 07/31/2019 10:31:26.254: P2363: Trace of Response Dictionary 07/31/2019 10:31:26.254: P2363: Trace of Access-Request packet 07/31/2019 10:31:26.254: P2363: identifier = 18 07/31/2019 10:31:26.254: P2363: length = 30 07/31/2019 10:31:26.254: P2363: respauth = fb:63:14:3f:c1:fb:ac:03:7d:16:29:61:ba:ef:13:4f 07/31/2019 10:31:26.254: P2363: Filter-Id = PhoneACL 07/31/2019 10:31:26.254: P2363: Internal Script for 2 +rsp:Cisco-AVPair=device-traffic-class=voice : Cisco-AVPair = device-traffic-class=voice 07/31/2019 10:31:26.254: P2363: Setting value device-traffic-class=voice for attribute Cisco-AVPair 07/31/2019 10:31:26.254: P2363: Trace of Response Dictionary 07/31/2019 10:31:26.254: P2363: Trace of Access-Request packet 07/31/2019 10:31:26.254: P2363: identifier = 18 07/31/2019 10:31:26.254: P2363: length = 64 07/31/2019 10:31:26.254: P2363: respauth = fb:63:14:3f:c1:fb:ac:03:7d:16:29:61:ba:ef:13:4f 07/31/2019 10:31:26.254: P2363: Filter-Id = PhoneACL 07/31/2019 10:31:26.254: P2363: Cisco-AVPair = device-traffic-class=voice
قم بإنشاء نص تنفيذي جديد يستبدل كل أسماء المستخدمين في التنسيق user@domain إلى مجهول وقم بتطبيقه كبرنامج نصي مضمن للخدمة التي تستخدمها.
التكوين:
--> cd /Radius/Scripts
--> add test
--> set language internal
--> cd Statements
--> add 1
--> cd 1
--> set statements "#req:User-Name=~(.*)(@[a-z]+.[a-z]+)~\anonymous"
--> ls -R [ //localhost/Radius/Scripts/test ] Name = test Description = Language = internal Statements/ 1. #env:User-Name=~(.*)~anonymous --> ls -R /Radius/Services/employee-service/ [ /Radius/Services/employee-service ] Name = employee-service Description = Type = local IncomingScript~ = test OutgoingScript~ = OutagePolicy~ = RejectAll OutageScript~ = UserList = default EnableDeviceAccess = FALSE DefaultDeviceAccessAction~ = DenyAll
إختبار مع RADCLIENT (تم رفض الطلب على الأرجح لأنه تم تغيير اسم المستخدم إلى مجهول):
--> simple@cisco.com p01e
--> p01e
Packet: code = Access-Request, id = 27, length = 72, attributes =
User-Name = <username>@cisco.com
User-Password = <password>
NAS-Identifier = localhost
NAS-Port = 7
--> p01e send p020 --> p020 Packet: code = Access-Reject, id = 27, length = 35, attributes = Reply-Message = Access Denied
التتبع:
قبل تنفيذ خدمة الموظف، يتم إستدعاء ثلاثة برامج نصية. تستدعي حماية مستوى التحكم (CPAR) الأولى CiscoIncomingScript، ثم تقوم باستدعاء ParseServiceHints المرفق بتكوين عميل/جهاز الشبكة المحلية. يستخرج اسم المستخدم من الحزمة ويضعه في قاموس البيئة. البرنامج النصي الثاني، تم إستدعاء الاختبار وتم تغيير اسم المستخدم في قاموس البيئة من <username> إلى مجهول
عميل المضيف المحلي:
[ //localhost/Radius/Clients/localhost ] Name = localhost Description = Protocol = radius IPAddress = 127.0.0.1 SharedSecret = <encrypted> Type = NAS+Proxy Vendor = Cisco IncomingScript~ = ParseServiceHints OutgoingScript~ = EnableDynamicAuthorization = FALSE NetMask = EnableNotifications = FALSE EnforceTrafficThrottling = TRUE
تتبع الإخراج:
07/31/2019 11:38:53.522: P2855: PolicyEngine: [SelectPolicy] Successful 07/31/2019 11:38:53.522: P2855: Using Client: localhost 07/31/2019 11:38:53.522: P2855: Using Vendor: Cisco 07/31/2019 11:38:53.522: P2855: Running Vendor Cisco's IncomingScript: CiscoIncomingScript 07/31/2019 11:38:53.522: P2855: Running Client localhost IncomingScript: ParseServiceHints 07/31/2019 11:38:53.522: P2855: Rex: environ->get( "Request-Type" ) -> "Access-Request" 07/31/2019 11:38:53.522: P2855: Rex: environ->get( "Request-Type" ) -> "Access-Request" 07/31/2019 11:38:53.522: P2855: Rex: environ->get( "User-Name" ) -> "<username>" 07/31/2019 11:38:53.522: P2855: Authenticating and Authorizing with Service employee-service 07/31/2019 11:38:53.522: P2855: Running Service employee-service's IncomingScript: test 07/31/2019 11:38:53.522: P2855: Numbered attribute got for the radius / tacacs packet. ignoring # User-Name 07/31/2019 11:38:53.523: P2855: Numbered attribute got for the radius / tacacs packet. ignoring # User-Name 07/31/2019 11:38:53.523: P2855: Numbered attribute got for the radius / tacacs packet. ignoring # User-Name 07/31/2019 11:38:53.523: P2855: Internal Script for 1 #env:User-Name=~(.*)~anonymous : User-Name = anonymous 07/31/2019 11:38:53.523: P2855: Setting value anonymous for attribute User-Name 07/31/2019 11:38:53.523: P2855: Trace of Environment Dictionary 07/31/2019 11:38:53.523: P2855: User-Name = anonymous 07/31/2019 11:38:53.523: P2855: NAS-Name-And-IPAddress = localhost (127.0.0.1) 07/31/2019 11:38:53.523: P2855: Authorization-Service = employee-service 07/31/2019 11:38:53.523: P2855: Source-Port = 51169 07/31/2019 11:38:53.523: P2855: Authentication-Service = employee-service 07/31/2019 11:38:53.523: P2855: Trace-Level = 1000 07/31/2019 11:38:53.523: P2855: Destination-Port = 1812 07/31/2019 11:38:53.523: P2855: Destination-IP-Address = 127.0.0.1 07/31/2019 11:38:53.523: P2855: Source-IP-Address = 127.0.0.1 07/31/2019 11:38:53.523: P2855: Enforce-Traffic-Throttling = TRUE 07/31/2019 11:38:53.523: P2855: Request-Type = Access-Request 07/31/2019 11:38:53.523: P2855: Script-Level = 6 07/31/2019 11:38:53.523: P2855: Provider-Identifier = Default 07/31/2019 11:38:53.523: P2855: Request-Authenticator = 5f:62:5a:72:0f:7b:a2:2a:9c:06:ba:2e:bd:f4:e4:4b 07/31/2019 11:38:53.523: P2855: Realm = cisco.com 07/31/2019 11:38:53.523: P2855: Getting User anonymous's UserRecord from UserList Default 07/31/2019 11:38:53.523: P2855: Failed to get User anonymous's UserRecord from UserList Default 07/31/2019 11:38:53.523: P2855: Running Vendor Cisco's OutgoingScript: CiscoOutgoingScript 07/31/2019 11:38:53.523: P2855: Trace of Access-Reject packet 07/31/2019 11:38:53.523: P2855: identifier = 27 07/31/2019 11:38:53.523: P2855: length = 35 07/31/2019 11:38:53.523: P2855: respauth = d3:7d:b3:f6:05:47:2c:66:d9:c0:01:7d:67:d7:93:99 07/31/2019 11:38:53.523: P2855: Reply-Message = Access Denied 07/31/2019 11:38:53.523: P2855: Sending response to 127.0.0.1
إضافة ملف nadip.tcl إلى /opt/ciscoAr/scripts/radius/tcl/ دليل وإضافة هذا المحتوى:
[root@piborowi-cpar80-16 tcl]# cat /opt/CSCOar/scripts/radius/tcl/nadip.tcl
proc UpdateNASIP {request response environ} {
$request trace 2 "TCL CUSTOM_SCRIPT Updating NAS IP ADDRESS"
$request trace 2 "Before put: " [ $request get NAS-IP-Address ]
$request put NAS-IP-Address 1.2.3.4
$request trace 2 "After put: " [ $request get NAS-IP-Address ]
}
شرح محتوى nadip.tcl سطرا بسطر:
السطر الأول تعريف الإجراء والوسيطات. الطلب والاستجابة والضواحي وثلاثة قواميس متوفرة حيث يمكنك تعديل بيانات جلسة العمل/الحزمة.
السطر رقم 2 سطر تصحيح الأخطاء للنص النصي الذي سيتم طباعته كمستوى تتبع 2.
السطر رقم 3 محتوى سمة عنوان NAS-IP في قاموس الطلب قبل تعيين هذه القيمة.
السطر رقم 4 قم بتعيين سمة عنوان NAS-IP في قاموس الطلب على القيمة 1.2.3.4.
السطر رقم 5 طباعة سمة عنوان NAS-IP مرة أخرى.
بمجرد إنشاء البرنامج النصي وحفظه في نظام التشغيل، قم بتكوين مرجع CPAR إلى البرنامج النصي. تعيين اللغة ك TCL، يجب أن يكون اسم الملف دقيقا مع ملحق (في هذه الحالة هو nadip.tcl). EntryPoint هو اسم الإجراء في الملف الذي تريد تنفيذه كبرنامج نصي. قام المرجع بإنشاء برنامج نصي ل CPAR تحت الخدمة (IncomingScript) واختباره باستخدام Radclient.
يمكن ملاحظة الأسطر رقم 2، رقم 3، رقم 5 في التتبع:
--> ls -R /Radius/scripts/nadipaddress/ [ /Radius/Scripts/nadipaddress ] Name = nadipaddress Description = Language = tcl <<<<<<<< Filename = nadip.tcl <<<<<<<< EntryPoint = UpdateNASIP <<<<<<<< InitEntryPoint = InitEntryPointArgs = --> ls -R /Radius/services/employee-service/ [ /Radius/Services/employee-service ] Name = employee-service Description = Type = local IncomingScript~ = nadipaddress <<<<<<<< OutgoingScript~ = OutagePolicy~ = RejectAll OutageScript~ = UserList = default EnableDeviceAccess = FALSE DefaultDeviceAccessAction~ = DenyAll
التتبع:
07/31/2019 13:40:53.615: P3490: Running Service employee-service's IncomingScript: nadipaddress 07/31/2019 13:40:53.615: P3490: TCL CUSTOM_SCRIPT Updating NAS IP ADDRESS 07/31/2019 13:40:53.616: P3490: Tcl: request trace 2 TCL CUSTOM_SCRIPT Updating NAS IP ADDRESS -> OK 07/31/2019 13:40:53.616: P3490: Tcl: request get NAS-IP-Address -> <empty> 07/31/2019 13:40:53.616: P3490: Before put: 07/31/2019 13:40:53.616: P3490: Tcl: request trace 2 Before put: -> OK 07/31/2019 13:40:53.616: P3490: Tcl: request put NAS-IP-Address 1.2.3.4 -> OK 07/31/2019 13:40:53.616: P3490: Tcl: request get NAS-IP-Address -> 1.2.3.4 07/31/2019 13:40:53.616: P3490: After put: 1.2.3.4 07/31/2019 13:40:53.616: P3490: Tcl: request trace 2 After put: 1.2.3.4 -> OK