Fortigate: securizar SSL en modo Load Balancing

En Fortigate/FortiOS, si se crea un nuevo balanceo HTTPS desde la consola web de administración no tendremos la opción de modificar (ni siquiera observar) los parámetros establecidos para los algoritmos de cifrado, los protocolos permitidos de negociación y más configuraciones que afectan directamente a la seguridad del servicio que estamos ofreciendo por SSL a través del balanceador.

La configuración por defecto será, probablemente insuficiente para nuestros requerimientos y cumplir las medidas de seguridad que hoy en día se requieren para cualquier sitio web. Para poder ajustar al detalle toda esta configuración hay que gestionar la configuración a través de CLI por ssh.

Securización SSL en balanceo de carga

En el siguiente ejemplo vamos a configurar parámetros SSL para un balanceo llamado https-lb1:

FortiOS # config firewall vip
FortiOS (vip) # edit https-lb1
FortiOS (https-lb1) #

Una vez en la sección del balanceo, podemos ejecutar un show para ver la configuración actual:

FortiOS (https-lb1) # show
set id 0
set uuid f3176d88-36b7-51d6-2d3d-afc66cb5xa62
set comment "Virtual Server HTTPS foo.com"
set type server-load-balance
set extip 10.120.0.10
set extintf "if1"
[...]
set ssl-mode half
set ssl-certificate "ssl_foo_cert"
set ssl-dh-bits 2048
set ssl-algorithm high
set ssl-pfs allow
set ssl-min-version tls-1.0
set ssl-max-version tls-1.1
set ssl-send-empty-frags enable
set ssl-client-renegotiation allow
set ssl-client-session-state-type both
set ssl-client-session-state-timeout 30
set ssl-client-session-state-max 1000
set ssl-http-location-conversion disable
[...]

Como podéis observar, aquí si que visualizamos unos cuantos parámetros de configuración específica de SSL. Si echáis un ojo a la documentación podréis ver con detalle lo que hace cada uno. Para lo que nos interesa a nosotros algunos a destacar serían:

FortiOS (https-lb1) # set ssl-dh-bits 2048
FortiOS (https-lb1) # end

Enter the number of bits of the prime number used in the Diffie-Hellman exchange for RSA encryption of the SSL connection. Larger prime numbers are associated with greater cryptographic strength.

Configurando el valor a 2048 bits conseguimos un cifrado más robusto durante el intercambio DH para RSA. Este es uno de los puntos importante que saltan durante un chequeo en ssllabs.com.

FortiOS (https-lb1) # set ssl-algorithm ?
high      Use AES or 3DES.
medium    Use AES, 3DES, or RC4.
low       Use AES, 3DES, RC4, or DES.
custom    Use custom cipher suite algorithms.

FortiOS (https-lb1) # set ssl-algorithm high
FortiOS (https-lb1) # end

A la hora de especificar los algoritmos de cifrado podemos hacer uso de unos valores predeterminados o especificar manualmente los algoritmos que queremos ofrecer. Ante la dura «high» es la mejor opción.

FortiOS (https-lb1) # set ssl-min-version tls-1.0
FortiOS (https-lb1) # set ssl-max-version tls-1.1
FortiOS (https-lb1) # end

Versión máxima y mínima de protocolo SSL que permitimos. Con esta configuración evitamos publicar bajo SSLv3.

Con estos cuatro parámetros veréis que se consigue una muy buena puntuación en ssllabs.com, lo que implica tener un servicio SSL seguro. Para afinar más la configuración revisad el enlace a la documentación que he puesto más arriba.

Securización SSL en consola web de administración

Para securizar la consola web de administración HTTPS basta con habilitar a nivel global strong-crypto

config system global
   set strong-crypto enable
end

Con esta configuración únicamente se permitirán los cifrados AES, 3DES y digest SHA1.