Створення клієнтів ESA RADIUS за допомогою API

Якщо ви інтегрували захист ESA з кількома обліковими записами настільних ПК з ОС Linux чи комп’ютерів Mac за допомогою модуля PAM і вам потрібно налаштувати кілька клієнтів RADIUS в ESA, наведений далі сценарій PowerShell допоможе полегшити роботу.

Попередні вимоги

1.Налаштуйте клієнт RADIUS в ESA Web Console.

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"