Интернет-справка ESET

Поиск Русский
Выберите тему

Создание клиентов 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"