Vytvorenie klientov ESA RADIUS cez API
Ak máte integrovanú ochranu ESA pre viaceré prihlásenia z desktopového prostredia Linux/Mac prostredníctvom modulov PAM a potrebujete v programe ESA nakonfigurovať veľa klientov RADIUS, nasledujúci skript PowerShell vám uľahčí prácu.
Prerekvizity
1.Nakonfigurujte klienta RADIUS v nástroji ESA Web Console.
•Basic Settings > IP address: zadajte IP adresu počítača hosťujúceho modul PAM, pomocou ktorej sa k nemu server ESA RADIUS dostane.
•Basic Settings > Shared Secret: zadajte rovnakú zdieľanú tajnú informáciu, akú ste nastavili v zariadení VPN.
•Authentication > Client Type > Client validates user name and password - use Access-Challenge.
2.Povoľte ESA API a pridajte prihlasovacie údaje API pre Management API v nástroji ESA Web Console.
3.V súbore .csv uveďte IP adresu a Shared Secret každého VPN zariadenia v tomto formáte: <IP address>;<Shared Secret>.
Napríklad:
192.168.0.11;test1
192.168.0.12;test2
192.168.0.13;test3
Ak spúšťate skript na inom počítači, než na ktorom je nainštalovaný autentifikačný server:
1.Uistite sa, že certifikát ESA na danom počítači je dôveryhodný.
2.Uistite sa, že certifikát obsahuje úplný názov domény (FQDN) autentifikačného servera v zozname alternatívnych názvov DNS.
Ako skript funguje?
Skript prečíta každý riadok súboru .csv a vytvorí toľko klientov RADIUS, koľko riadkov IP adries so zdieľanými tajnými informáciami nájde. Sekcia Authentication každého klienta RADIUS bude nakonfigurovaná podľa prednastaveného klienta RADIUS.
Príklad skriptu PowerShell na vytvorenie nového klienta ESA RADIUS cez ESA API – súbor sa volá 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" |