Sử dụng RADIUS Simulator
Trình mô phỏng RADIUS có sẵn dưới dạng tập lệnh Python (python pez.py -c ise_dot1x_{username}.cfg) trên máy chủ CentOS Linux để thực hiện các yêu cầu Xác thực RADIUS thực đối với ISE. Điều này cho phép bạn kiểm tra cấu hình chính sách của mình với cả người dùng nội bộ ISE và người dùng Active Directory.
1. SSH đến RADIUS Simulator VM bằng mật khẩu C1sco12345, chấp nhận mọi key fingerprints:
ssh developer@10.10.20.32
developer@10.10.20.32's password: C1sco12345
2. Lệnh đơn giản để xác thực một user là:
��� Nhấn phím ↑ để quay trở lại câu lệnh trước để tiết kiệm công sức, khỏi cần phải gõ lại.
python pez.py -c ise_dot1x_{username}.cfg
3. Output của script sẽ cho biết việc xác thực đã nhận được phản hồi Access-Accept hay Access-Reject: [developer@hcllinux pez]$ python pez.py -c ise_dot1x_tme.cfg
('acc_enable:', True)
host ipv4 address detected
10.10.20.77
Total time: 1.001
Average TPS: 1
Current TPS: 1
Access-Accept: 1
Access-Reject: 0
Errors: 0
Timeouts: 0
End: False
Total time: 1.001
Average TPS: 1
Current TPS: 1
Access-Accept: 1
Access-Reject: 0
Errors: 0
Timeouts: 0
End: True
[developer@hcllinux pez]$
Nếu bạn không nhận được output như trên, bạn phải xem lại cấu hình ISE cho policy, internal users, network devices, và Active Directory.
4.Những file ise_*.cfg có sẵn trong RADIUS simulator cho users trong Active Directory: ise_dot1x_analyst.cfg
ise_dot1x_cio.cfg
ise_dot1x_contractor.cfg
ise_dot1x_cxo.cfg
ise_dot1x_devops.cfg
ise_dot1x_engineer.cfg
ise_dot1x_helpdesk.cfg
ise_dot1x_netadmin.cfg
ise_dot1x_netops.cfg
ise_dot1x_pm.cfg
ise_dot1x_secadmin.cfg
ise_dot1x_se.cfg
ise_dot1x_secops.cfg
ise_dot1x_tme.cfg
ise_dot1x_vendor.cfg
ise_dot1x_webops.cfg
5.Hai file configs này dành cho users không nằm trong Active Directory nên bạn có thể thử tài khoản internal user trong ISE: ise_dot1x_probe.cfg # probe:C1sco12345
ise_vpn.cfg # employee:C1sco12345
6.Bạn có thể xem thử xem có xác thực và ủy quyền nào từ simulator trong ISE LiveLogs ở GUI theo ≣》 Operations 》 RADIUS 》 Live Logs.
7. Bạn cũng có thể sử dụng Cisco ISE API - MNT để xem cùng một phiên làm việc (sessions). Trong Postman Collections pane, chọn Cisco ISE API - MNT 》 GET ActiveList (all).��� Tất cả MNT API output đều ở dưới dạng XML.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<activeList noOfActiveSession="1">
<activeSession>
<user_name>tme</user_name>
<calling_station_id>95:70:2B:E4:00:00</calling_station_id>
<nas_ip_address>10.10.20.32</nas_ip_address>
<acct_session_id>95:70:2b:e4:00:00</acct_session_id>
<server>ise-1</server>
<framed_ip_address>21.0.0.2</framed_ip_address>
<framed_ipv6_address/>
</activeSession>
</activeList>
Sử dụng ciscoisesdk Python Package
Những gì bạn đã thấy với tập lệnh Postman Python là các URL thô được sử dụng để gửi các đoạn JSON tĩnh để cấu hình ISE. Nó không linh hoạt và không cung cấp các đối tượng và thuộc tính truyền thống có thể được vận hành theo cách lập trình. Sẽ thật tuyệt nếu bạn có thể đọc, tạo, cập nhật và xóa tài nguyên ISE của mình hoàn toàn bằng Python phải không?
Đó chính xác là những gì ciscoisesdk làm. Chúng tôi đã xây dựng gói Python ciscoisesdk để cung cấp các mô-đun Python để tương tác theo chương trình với các tài nguyên ISE. Cuối cùng không chỉ để bạn nghịch mà nó còn là nền tảng của bộ sưu tập cisco.ise Ansible. Nếu bạn muốn biết thêm về ciscoisesdk:
��� Đừng quên bật Python virtual environment bằng câu lệnh pipenv shell nếu bạn không thấy chữ (developer)ở prompt terminal.
pipenv install ciscoisesdk
Tạo một Network Device
Hãy tạo một network device khác nhưng lần này sử dụng ciscoisesdk.
import json
from ciscoisesdk import api, ApiError
api_ = api.IdentityServicesEngineAPI(
username='admin',
password='C1sco12345',
base_url='https://ise-1.lab.devnetsandbox.local',
verify=False)
try:
response = api_.network_device.create_network_device(
name="test_device",
description="",
profile_name="Cisco",
authentication_settings={
"networkProtocol": "RADIUS",
"radiusSharedSecret": "C1sco12345"
},
tacacs_settings={
"sharedSecret": "C1sco12345",
"connectModeOptions": "OFF"
},
network_device_iplist=[
{
"ipaddress": "10.10.20.33",
"mask": 32
}
],
network_device_group_list=[
"Location#All Locations",
"IPSEC#Is IPSEC Device#No",
"Device Type#All Device Types"
]
)
if (response.headers["Location"]) :
print(response.headers["Location"])
else :
print(json.dumps(response.response, indent=2))
except ApiError as e:
print(e)
3.Đổi quyền cho file để có thể chạy được:
chmod 755 isesdk_post_networkdevice.py
4. Chạy script và bạn có thể thấy id của network device ở sau cùng của URL. ./isesdk_post_networkdevice.py
��� Nếu bạn thấy cảnh báo như là InsecureRequestWarning: Unverified HTTPS request is being made to host, bỏ qua nó bằng các thêm vào biến môi trường (environment) giá trị sau:
export PYTHONWARNINGS="ignore:Unverified HTTPS request"
Lấy thông tin Network Device
Chúng ta đã tạo một network device với script trước đó. Với script đầu tiên của bạn với ciscoisesdk, hãy thử lấy thông tin chi tiết hơn.
import json
from ciscoisesdk import api
api_ = api.IdentityServicesEngineAPI(username='admin',
password='C1sco12345',
base_url='https://ise-1.lab.devnetsandbox.local',
verify=False)
try:
response = api_.network_device.get_network_device_by_name('te st_device').response
print(json.dumps(response, indent=2))
except ApiError as e:
print(e)
Lưu script.
Cho script quyền được thực thi: chmod 755 isesdk_get_networkdevice.py.
Chạy script với câu lệnh ./isesdk_get_networkdevice.py và bạn sẽ thấy tất cả các thuộc tính như ở trong Postman.
{
"NetworkDevice": {
"id": "3d3c90b0-d253-11eb-a22c-723e1f0dfb0b",
"name": "test_device",
"description": "",
"authenticationSettings": {
"networkProtocol": "RADIUS",
"radiusSharedSecret": "C1sco12345",
"enableKeyWrap": false,
"dtlsRequired": false,
"keyInputFormat": "ASCII",
"enableMultiSecret": "false"
},
"tacacsSettings": {
"sharedSecret": "C1sco12345",
"connectModeOptions": "OFF"
},
"profileName": "Cisco",
"coaPort": 0,
"link": {
"rel": "self",
"href": "https://ise-1.lab.devnetsandbox.local/ers/config/networkdevice/name/test_device",
"type": "application/json"
},
"NetworkDeviceIPList": [
{
"ipaddress": "10.10.20.33",
"mask": 32
}
],
"NetworkDeviceGroupList": [
"Location#All Locations",
"IPSEC#Is IPSEC Device#No",
"Device Type#All Device Types"
]
}
}
Đó là phần cuối của chuyến tham quan nhanh ciscoisesdk để chỉ cho bạn những điều cơ bản về cách sử dụng nó. Tham khảo tài liệu nếu bạn có bất kỳ câu hỏi nào về cách sử dụng bất kỳ đối tượng cụ thể nào trong các tập lệnh của riêng bạn.
Trình mô phỏng RADIUS có sẵn dưới dạng tập lệnh Python (python pez.py -c ise_dot1x_{username}.cfg) trên máy chủ CentOS Linux để thực hiện các yêu cầu Xác thực RADIUS thực đối với ISE. Điều này cho phép bạn kiểm tra cấu hình chính sách của mình với cả người dùng nội bộ ISE và người dùng Active Directory.
1. SSH đến RADIUS Simulator VM bằng mật khẩu C1sco12345, chấp nhận mọi key fingerprints:
ssh developer@10.10.20.32
developer@10.10.20.32's password: C1sco12345
2. Lệnh đơn giản để xác thực một user là:
��� Nhấn phím ↑ để quay trở lại câu lệnh trước để tiết kiệm công sức, khỏi cần phải gõ lại.
python pez.py -c ise_dot1x_{username}.cfg
3. Output của script sẽ cho biết việc xác thực đã nhận được phản hồi Access-Accept hay Access-Reject: [developer@hcllinux pez]$ python pez.py -c ise_dot1x_tme.cfg
('acc_enable:', True)
host ipv4 address detected
10.10.20.77
Total time: 1.001
Average TPS: 1
Current TPS: 1
Access-Accept: 1
Access-Reject: 0
Errors: 0
Timeouts: 0
End: False
Total time: 1.001
Average TPS: 1
Current TPS: 1
Access-Accept: 1
Access-Reject: 0
Errors: 0
Timeouts: 0
End: True
[developer@hcllinux pez]$
Nếu bạn không nhận được output như trên, bạn phải xem lại cấu hình ISE cho policy, internal users, network devices, và Active Directory.
4.Những file ise_*.cfg có sẵn trong RADIUS simulator cho users trong Active Directory: ise_dot1x_analyst.cfg
ise_dot1x_cio.cfg
ise_dot1x_contractor.cfg
ise_dot1x_cxo.cfg
ise_dot1x_devops.cfg
ise_dot1x_engineer.cfg
ise_dot1x_helpdesk.cfg
ise_dot1x_netadmin.cfg
ise_dot1x_netops.cfg
ise_dot1x_pm.cfg
ise_dot1x_secadmin.cfg
ise_dot1x_se.cfg
ise_dot1x_secops.cfg
ise_dot1x_tme.cfg
ise_dot1x_vendor.cfg
ise_dot1x_webops.cfg
5.Hai file configs này dành cho users không nằm trong Active Directory nên bạn có thể thử tài khoản internal user trong ISE: ise_dot1x_probe.cfg # probe:C1sco12345
ise_vpn.cfg # employee:C1sco12345
6.Bạn có thể xem thử xem có xác thực và ủy quyền nào từ simulator trong ISE LiveLogs ở GUI theo ≣》 Operations 》 RADIUS 》 Live Logs.
7. Bạn cũng có thể sử dụng Cisco ISE API - MNT để xem cùng một phiên làm việc (sessions). Trong Postman Collections pane, chọn Cisco ISE API - MNT 》 GET ActiveList (all).��� Tất cả MNT API output đều ở dưới dạng XML.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<activeList noOfActiveSession="1">
<activeSession>
<user_name>tme</user_name>
<calling_station_id>95:70:2B:E4:00:00</calling_station_id>
<nas_ip_address>10.10.20.32</nas_ip_address>
<acct_session_id>95:70:2b:e4:00:00</acct_session_id>
<server>ise-1</server>
<framed_ip_address>21.0.0.2</framed_ip_address>
<framed_ipv6_address/>
</activeSession>
</activeList>
Sử dụng ciscoisesdk Python Package
Những gì bạn đã thấy với tập lệnh Postman Python là các URL thô được sử dụng để gửi các đoạn JSON tĩnh để cấu hình ISE. Nó không linh hoạt và không cung cấp các đối tượng và thuộc tính truyền thống có thể được vận hành theo cách lập trình. Sẽ thật tuyệt nếu bạn có thể đọc, tạo, cập nhật và xóa tài nguyên ISE của mình hoàn toàn bằng Python phải không?
Đó chính xác là những gì ciscoisesdk làm. Chúng tôi đã xây dựng gói Python ciscoisesdk để cung cấp các mô-đun Python để tương tác theo chương trình với các tài nguyên ISE. Cuối cùng không chỉ để bạn nghịch mà nó còn là nền tảng của bộ sưu tập cisco.ise Ansible. Nếu bạn muốn biết thêm về ciscoisesdk:
- Package có thể được lấy từ PyPI: https://pypi.org/project/ciscoisesdk/
- Tài liệu tại đây https://ciscoisesdk.readthedocs.io
- Source code được lưu trữ tại https://github.com/CiscoISE/ciscoisesdk
��� Đừng quên bật Python virtual environment bằng câu lệnh pipenv shell nếu bạn không thấy chữ (developer)ở prompt terminal.
pipenv install ciscoisesdk
Tạo một Network Device
Hãy tạo một network device khác nhưng lần này sử dụng ciscoisesdk.
- Trong DevBox, tạo một file mới, đặt là isesdk_post_networkdevice.py.
- Copy script dưới vào file mới tạo trong DevBox.
import json
from ciscoisesdk import api, ApiError
api_ = api.IdentityServicesEngineAPI(
username='admin',
password='C1sco12345',
base_url='https://ise-1.lab.devnetsandbox.local',
verify=False)
try:
response = api_.network_device.create_network_device(
name="test_device",
description="",
profile_name="Cisco",
authentication_settings={
"networkProtocol": "RADIUS",
"radiusSharedSecret": "C1sco12345"
},
tacacs_settings={
"sharedSecret": "C1sco12345",
"connectModeOptions": "OFF"
},
network_device_iplist=[
{
"ipaddress": "10.10.20.33",
"mask": 32
}
],
network_device_group_list=[
"Location#All Locations",
"IPSEC#Is IPSEC Device#No",
"Device Type#All Device Types"
]
)
if (response.headers["Location"]) :
print(response.headers["Location"])
else :
print(json.dumps(response.response, indent=2))
except ApiError as e:
print(e)
3.Đổi quyền cho file để có thể chạy được:
chmod 755 isesdk_post_networkdevice.py
4. Chạy script và bạn có thể thấy id của network device ở sau cùng của URL. ./isesdk_post_networkdevice.py
��� Nếu bạn thấy cảnh báo như là InsecureRequestWarning: Unverified HTTPS request is being made to host, bỏ qua nó bằng các thêm vào biến môi trường (environment) giá trị sau:
export PYTHONWARNINGS="ignore:Unverified HTTPS request"
Lấy thông tin Network Device
Chúng ta đã tạo một network device với script trước đó. Với script đầu tiên của bạn với ciscoisesdk, hãy thử lấy thông tin chi tiết hơn.
- Trong DevBox, tạo file với tên là isesdk_get_networkdevice.py.
- Copy script sau và dán nó vào file vừa tạo trong DevBox.
import json
from ciscoisesdk import api
api_ = api.IdentityServicesEngineAPI(username='admin',
password='C1sco12345',
base_url='https://ise-1.lab.devnetsandbox.local',
verify=False)
try:
response = api_.network_device.get_network_device_by_name('te st_device').response
print(json.dumps(response, indent=2))
except ApiError as e:
print(e)
Lưu script.
Cho script quyền được thực thi: chmod 755 isesdk_get_networkdevice.py.
Chạy script với câu lệnh ./isesdk_get_networkdevice.py và bạn sẽ thấy tất cả các thuộc tính như ở trong Postman.
{
"NetworkDevice": {
"id": "3d3c90b0-d253-11eb-a22c-723e1f0dfb0b",
"name": "test_device",
"description": "",
"authenticationSettings": {
"networkProtocol": "RADIUS",
"radiusSharedSecret": "C1sco12345",
"enableKeyWrap": false,
"dtlsRequired": false,
"keyInputFormat": "ASCII",
"enableMultiSecret": "false"
},
"tacacsSettings": {
"sharedSecret": "C1sco12345",
"connectModeOptions": "OFF"
},
"profileName": "Cisco",
"coaPort": 0,
"link": {
"rel": "self",
"href": "https://ise-1.lab.devnetsandbox.local/ers/config/networkdevice/name/test_device",
"type": "application/json"
},
"NetworkDeviceIPList": [
{
"ipaddress": "10.10.20.33",
"mask": 32
}
],
"NetworkDeviceGroupList": [
"Location#All Locations",
"IPSEC#Is IPSEC Device#No",
"Device Type#All Device Types"
]
}
}
Đó là phần cuối của chuyến tham quan nhanh ciscoisesdk để chỉ cho bạn những điều cơ bản về cách sử dụng nó. Tham khảo tài liệu nếu bạn có bất kỳ câu hỏi nào về cách sử dụng bất kỳ đối tượng cụ thể nào trong các tập lệnh của riêng bạn.