Створення клієнтів ESA RADIUS за допомогою API
Якщо ви інтегрували захист ESA з кількома обліковими записами настільних ПК з ОС Linux чи комп’ютерів Mac за допомогою модуля PAM і вам потрібно налаштувати кілька клієнтів RADIUS в ESA, наведений далі сценарій PowerShell допоможе полегшити роботу.
Попередні вимоги
1.Налаштуйте клієнт RADIUS в ESA Web Console.
•Basic Settings > IP address: уведіть IP-адресу комп’ютера, на якому розміщено модуль PAM, з яким може зв’язатися сервер ESA RADIUS
•Basic Settings > Shared Secret: уведіть той самий спільний секрет, що й для модуля VPN
•Authentication > Client Type > Client validates user name and password - use Access-Challenge (Клієнт перевіряє ім’я користувача та пароль - використовувати Access-Challenge)
2.Увімкніть API ESA і додайте облікові дані API для Management API в ESA Web Console.
3.Укажіть IP-адреси та значення Shared Secret для кожного модуля VPN у файлі з розширенням .csv як пари <IP address>;<Shared Secret>.
Приклад:
192.168.0.11;test1
192.168.0.12;test2
192.168.0.13;test3
Якщо сценарій виконується на іншій машині, де розташовано компонент Authentication Server, виконайте наведені далі дії.
1.Переконайтеся, що цей комп’ютер довіряє сертифікату ESA.
2.Переконайтеся, що сертифікат містить повне доменне ім’я (FQDN) компонента Authentication Server в списку альтернативних імен DNS.
Принцип роботи сценарію
Сценарій читає кожен рядок файлу з розширенням .csv та створює клієнт RADIUS для кожної знайденої пари IP-адреси та спільного секретного ключа. Розділ Authentication (Автентифікація) кожного клієнта RADIUS буде налаштовано відповідно до попередньо налаштованого клієнта RADIUS.
Зразок сценарію PowerShell для створення нового клієнта ESA RADIUS за допомогою API ESA – назва файлу: create_radius_clients.ps1
# configuration
# Management API credentials - username:password $credentials = "kjssgmarkm:dapweburnx"
# IP address or FQDN of the Authentication Server $esaAuthenticationServer = "127.0.0.1:8001"
# Name of ESA RADIUS Server foudn in ESA Web Console at Componets > RADIUS $radiusServerName = "BTSH00049D (Authentication Server computer)"
# Name of the pre-configured ESA RADIUS client $baseRadiusClientName = "Base Client"
# List of IP Address and Shared Secret of each VPN appliance is saved in the clients.csv file. # The clients.csv file is in the same directory where the this PowerShell script resides $csvImportFilePath = $PSScriptRoot + "\\clients.csv"
# headers preparation
$ErrorActionPreference = "Stop"
$encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($credentials)) $basicAuthHeader = "Basic $encodedCredentials" $headers = @{Authorization = $basicAuthHeader}
# find RADIUS server
$body = @{ componentType = "radius" } $bodyStr = $body | ConvertTo-Json $response = Invoke-WebRequest -Uri https://$esaAuthenticationServer/manage/v2/GetComponentSettings -Method POST -Body $bodyStr -ContentType "application/json" -Headers $headers
$components = $response.Content | ConvertFrom-Json
$radiusServerKey = $null foreach ($component in $components) { if ($component.Info.Name -ceq $radiusServerName) { $radiusServerKey = $component.Info.Key } }
if ($radiusServerKey -ceq $null) { Throw "RADIUS server not found: " + $radiusServerName }
# base RADIUS client
$body = @{ componentKey = $radiusServerKey } $bodyStr = $body | ConvertTo-Json $response = Invoke-WebRequest -Uri https://$esaAuthenticationServer/manage/v2/GetRadiusClients -Method POST -Body $bodyStr -ContentType "application/json" -Headers $headers
$clients = $response.Content | ConvertFrom-Json
$baseRadiusClientSettings = $null foreach ($client in $clients) { if ($client.ClientName -ceq $baseRadiusClientName) { $baseRadiusClientSettings = $client } }
if ($baseRadiusClientSettings -ceq $null) { Throw "RADIUS client not found: " + $baseRadiusClientName }
# create clients
foreach($line in [System.IO.File]::ReadLines($csvImportFilePath)) { $fields = $line.Split(';') if ($fields.Count -cne 2) { Throw "Invalid fields count: " + $line }
$ip = $fields[0] $sharedSecret = $fields[1]
$newClientSettings = $baseRadiusClientSettings | ConvertTo-Json | ConvertFrom-Json $newClientSettings.Id = [guid]::NewGuid().ToString("d") $newClientSettings.ClientName = "Generated - " + $ip $newClientSettings.ClientIp = $ip $newClientSettings.SharedSecret = $sharedSecret
$body = @{ componentKey = $radiusServerKey; client = $newClientSettings } $bodyStr = $body | ConvertTo-Json $response = Invoke-WebRequest -Uri https://$esaAuthenticationServer/manage/v2/CreateRadiusClient -Method POST -Body $bodyStr -ContentType "application/json" -Headers $headers }
echo "success" |