Создание клиентов ESA RADIUS с помощью API
Если вы выполнили интеграцию защиты ESA для многих имен входа в компьютеры Linux/Mac посредством модулей PAM и вам требуется настроить большое количество клиентов RADIUS в ESA, следующий сценарий PowerShell облегчит вашу работу.
Обязательные условия
1.Настройте клиент RADIUS в веб-консоли ESA.
•Основные настройки > IP-адрес: введите IP-адрес компьютера, на котором размещен модуль PAM, с помощью которого сервер ESA RADIUS может с ним связаться.
•Основные настройки > Общий секрет: введите тот же общий секрет, который задан на вашем устройстве VPN.
•Аутентификация > Тип клиента > Клиент проверяет имя пользователя и пароль — использовать вызов доступа.
2.Включите API ESA и добавьте учетные данные API для Management API (API управления) в веб-консоли ESA.
3.Добавьте IP-адрес и общий секрет каждого устройства VPN в файл .csv в виде пар <IP address>;<Shared Secret> (<IP-адрес>;<общий секрет>).
Например:
192.168.0.11;test1
192.168.0.12;test2
192.168.0.13;test3
Если сценарий выполняется на компьютере, на котором не установлен сервер Authentication Server, выполните следующие действия.
1.Убедитесь, что сертификат ESA является доверенным на этом компьютере.
2.Убедитесь, что в списке альтернативных имен DNS данного сертификата содержится полное доменное имя сервера Authentication Server.
Как работает сценарий
Сценарий считывает каждую строку .csv-файла и создает столько клиентов RADIUS, сколько будет найдено строк, содержащих пару IP-адреса и общего секрета. Настройка раздела Аутентификация каждого клиента 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" |