Aide en ligne ESET

Rechercher Français
Sélectionner la rubrique

Créer des clients RADIUS ESA via l’API

Si vous avez intégré la protection ESA pour de nombreuses connexions de bureau Linux/Mac via des modules PAM et que vous devez configurer de nombreux clients RADIUS dans ESA, le script PowerShell suivant vous facilitera la tâche.

Conditions préalables requises

1.Configurez un client RADIUS dans ESA Web Console.

Basic Settings (Paramètres de base) > IP address (Adresse IP) : saisissez l’adresse IP de l’ordinateur hébergeant le module PAM pour que le serveur RADIUS ESA puisse y accéder.

Basic Settings (Paramètres de base) > Shared Secret (Secret partagé) : saisissez le même secret partagé que celui que vous avez défini dans votre appliance VPN.

Authentication (Authentification) > Client Type (Type de client) > Client validates user name and password - use Access-Challenge (Le client valide le nom d’utilisateur et le mot de passe - Utiliser la fonction Access-Challenge)

2.Activez l’API ESA et ajoutez les identifiants d’API pour Management API (API de gestion) dans ESA Web Console.

3.Répertoriez l’adresse IP et le secret partagé de chaque appliance VPN dans un fichier .csv en tant que paires <adresse IP>;<secret partagé> (<IP address>;<Shared Secret>).

par exemple

192.168.0.11;test1

192.168.0.12;test2

192.168.0.13;test3
 

Si vous exécutez le script sur une autre machine que celle qui héberge le serveur d’authentification, procédez comme suit :

1.Assurez-vous que le certificat ESA est approuvé sur cet ordinateur.

2.Assurez-vous que le certificat inclut le nom de domaine complet du serveur d’authentification dans la liste des autres noms DNS.

Comment fonctionne le script ?

Le script lit chaque ligne du fichier .csv et crée autant de clients RADIUS que le nombre de lignes de paires Adresse IP/Secret partagé trouvées. La section Authentication (Authentification) de chaque client RADIUS sera configurée en fonction du client RADIUS préconfiguré.

Exemple de script PowerShell permettant de créer des clients RADIUS ESA via l’API ESA. Ce fichier est nommé 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"