Administración de FortiGate desde PowerShell

Hace un tiempo comencé a ver temas relacionados con Fortinet, en particular con el producto FortiGate. Lo divertido de esto fue que al verme frente a la consola web de administración de FortiGate, lo primero que dijeron fue: “¿Por qué no administras FortiGate sobre PowerShell?”. Luego de esa pregunta es que me puse a escribir este artículo intentando armar algo para trabajar con FortiGate desde PowerShell.

En primer lugar voy comentar que Fortigate es una solución de networking que contiene, entre otros, firewall, filtrado de contenido, VPN, antivirus y antispam. Y una de las formas que tenemos para acceder a este appliance es vía SSH.

No voy a entrar en la forma que debemos configurar nuestro FortiGate para que cumpla con las buenas prácticas recomendadas. Para este laboratorio va a estar configurado el puerto 2223 para SSH y va a existir un usuario superadmin como usuario de acceso.

Conexión al FortiGate

Lo primero que vamos a ver como resolver es la conexión al equipo en sí, utilizando SSH. Tal como habíamos mencionado hace un momento, es requisito contar con SSH en nuestro equipo. Para ello hace un tiempo en este blog escribí una entrada sobre como instalar SSH en PowerShell (enlace).

Luego contar con el requerimiento anterior vamos a hacer una simple prueba: Desde la consola de PowerShell vamos a comprobar que no tenemos respuesta de ping a la interface que queremos acceder y luego vamos a habilitarla por medio de la conexión SSH.

Así que lo primero ejecutamos:

ping 192.168.200.1 -n 1

Con el parámetro -n indicamos la cantidad de paquetes que vamos a utilizar. Luego nos conectamos por SSH, ejecutando e ingresando la contraseña correspondiente:

ssh superadmin@192.168.200.1 -p 2223

La estructura anterior indica que al host 192.168.200.1 nos vamos a conectar con el usuario superadmin utilizando el puerto 2223 como habíamos definido anteriormente.

Ya conectados a nuestro equipo Fortigate vamos a ejecutar el siguiente bloque de código para habilitar el ping en la interface que estamos utilizando para conectarnos:

config system interface
edit port1
set allowaccess ping https ssh
end

Y por último vamos a comprobar que ahora tenemos respuesta al ping, ejecutando nuevamente:

ping 192.168.200.1 -n 1

Fortigate desde PowerShell

Primer función en PowerShell

Ahora que tenemos un poco más claro como conectarnos a nuestro FortiGate, vamos a definir una función para definir acciones sobre el equipo. Una acción que es necesaria al momento de comenzar a configurar el dispositivo es habilitar los diferentes accesos en las interfaces. Para ello definimos la siguiente función:

function Set-FortigateAccess {
    [OutputType([String])]
    param
    (
        [Parameter(Mandatory=$true)]
        [String]$HostAddress,
        [Parameter(Mandatory=$false)]
        [Int]$HostPort = 22,
        [Parameter(Mandatory=$true)]
        [String]$Credential,
        [Parameter(Mandatory=$false)]
        [String]$Interface,
        [Parameter(Mandatory=$false)]
        [String]$AllowAccessOptions
    )

$Command = @"
config system interface
edit $Interface
set allowaccess $AllowAccessOptions
end
"@

try {
    ssh $HostAddress -p $HostPort -l $Credential $Command | Out-Null
} catch {
    Write-Warning -Message $error[0].exception.message
}
}

En la que básicamente armamos un bloque con los comandos para habilitar las opciones por medio de allowaccesspara permitir el acceso desde SSH, HTTPS o HTTP, por ejemplo.

Y listo! con lo anterior tenemos nuestra primer función para comenzar a trabajar sobre nuestro módulo de FortiGate desde PowerShell.

Happy scripting!

Comments