المحتويات

المقدمة

المتطلبات الأساسية

المتطلبات

المكونات المستخدمة

معلومات أساسية

التكوين

برنامج نصي داخلي لحركة المرور الصادرة

برنامج نصي داخلي لحركة المرور الواردة

إنشاء برنامج نصي خارجي

المقدمة

يصف هذا المستند كيفية تخصيص سلوك Cisco Prime Access Registrar (CPAR) 8.0 باستخدام البرامج النصية ونقاط الملحق.

المتطلبات الأساسية

المتطلبات

توصي Cisco بأن تكون لديك معرفة بالمواضيع التالية:

- إدارة CPAR 8.0

المكونات المستخدمة

تستند المعلومات الواردة في هذا المستند إلى إصدارات البرامج والمكونات المادية التالية:

- CPAR 8.0 المثبت على CentOS 6.5 إصدار 64 بت

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

معلومات أساسية

يمكن تعديل 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)، هناك العديد من نقاط الامتداد المتاحة. يمكن الإشارة إلى برنامج نصي وارد في كل من نقاط الملحق التالية:

- خادم RADIUS

- المورد (للعميل المباشر)

- العميل (وحدات التخزين المتصلة بالشبكة (NAS) الفردية)

- NAS-Vendor-behind-proxy

- العميل وراء الوكيل

- الخادم البعيد (من النوع RADIUS)

- الخدمة

يمكن الإشارة إلى برنامج نصي للمصادقة أو التخويل في كل نقطة من نقاط الملحق التالية:

- مصادقة المجموعة

- مصادقة المستخدم

- تفويض المجموعة

- تفويض المستخدم

يمكن الرجوع إلى البرنامج النصي الصادر في كل من نقاط الملحق التالية:

- الخدمة

- العميل وراء الوكيل

- NAS-Vendor-behind-proxy

- العميل (وحدات التخزين المتصلة بالشبكة (NAS) الفردية)

- مورد NAS

- خادم RADIUS

من المهم فهم الترتيب الذي يتم من خلاله تنفيذ البرامج النصية بواسطة حماية مستوى التحكم (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 المحلي:

--> simple

p011

--> 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