Configura el acceso web y SSH en pfSense con la máxima seguridad

Configura el acceso web y SSH en pfSense con la máxima seguridad

Sergio De Luz

pfSense es uno de los sistemas operativos orientado a firewall y router más completos que existen hoy en día. Gracias a la gran cantidad de opciones de configuración avanzadas, pfSense es apto para usarse tanto a nivel doméstico avanzado, como también en pequeñas y medianas empresas. Hoy en RedesZone os vamos a explicar cómo configurar el acceso a pfSense vía web usando el protocolo seguro HTTPS, y también cómo configurar el servidor SSH con la mejor seguridad posible, para que la autenticación en el sistema operativo se realice de forma cifrada y segura.

Los dos principales accesos que tenemos a la administración del sistema operativo pfSense son vía web y vía SSH. En el primer caso, pfSense viene configurado por defecto para hacer uso del protocolo HTTPS en el puerto 443, pero es recomendable realizar algunos cambios para protegerlo lo mejor posible. Lo mismo ocurre con el servidor SSH incorporado en el sistema operativo, es recomendable realizar algunos cambios en la configuración para tener la mejor seguridad posible, porque vía SSH podremos configurar cualquier aspecto interno del sistema operativo, y debemos proteger estos dos accesos frente a intrusiones externas.

Configuración de la administración vía web con HTTPS

Para realizar la configuración del protocolo HTTPS, debemos irnos al menú de «System / Advanced«, y en este menú veremos el «Admin Access». Podremos elegir entre protocolo HTTP y HTTPS, es recomendable hacer siempre uso del protocolo HTTPS para asegurar nuestras comunicaciones y también su integridad. Cuando activemos el protocolo HTTPS, deberemos elegir un certificado SSL/TLS, el cual ya viene creado de manera predeterminada con el sistema operativo, no obstante, podremos nosotros crear uno nuevo sin problemas e incluso renovarlo.

En este menú también podremos elegir el puerto TCP a utilizar, si no ponemos nada, el puerto por defecto del protocolo HTTPS es siempre 443. También podremos elegir el número máximo de usuarios concurrentes administrando pfSense, por defecto es 2 pero podremos subirlo por si tenemos varios administradores. El resto de opciones de configuración deben estar con los valores que os ponemos a continuación, todos ellos son los parámetros predeterminados y están perfectamente.

En la sección de «System / Certificate Manager» es donde podremos ver el certificado SSL/TLS que utiliza el servidor web HTTPS, podremos renovarlo en cualquier momento, eliminarlo, exportar la clave pública y también la privada. En principio, esto no lo deberíamos tocar, pero si lo hacemos, podremos renovarlo o editar el nombre del propio certificado.

Si entramos en «Información de la página» con cualquier navegador, podremos ver que la conexión está cifrada con TLS 1.3, el último protocolo disponible que nos brinda la mejor seguridad y rendimiento en las conexiones seguras.

En cuanto a los datos del certificado, pfSense crea un certificado basado en RSA de 2048 bits, lo típico en estos casos donde tenemos un servidor web con HTTPS. Si queremos cambiar esta seguridad, deberemos crear una CA (Autoridad de Certificación) y posteriormente un certificado de servidor que cuelgue de dicha CA, de esta forma, podremos hacer uso de RSA de mayor longitud e incluso de curvas elípticas (ECDSA), por último, podremos configurar el algoritmo hash a utilizar.

En el caso de renovar el certificado digital correspondiente al servidor web, simplemente debemos irnos a la sección de «System / Certificate Manager», pinchar en renovar el certificado de webconfigurator y pinchar en el botón de «Renew or Reissue» para generarlo nuevamente.

Tal y como habéis visto, configurar HTTPS es realmente fácil y sencillo, esto nos permitirá autenticarnos vía web de forma segura.

Configuración de la administración vía consola con SSH

El protocolo seguro SSH nos permitirá entrar vía consola de forma remota a la administración del sistema operativo pfSense. Tendremos diferentes tipos de autenticación:

  • Clave pública SSH
  • Contraseña o clave pública (una u otra)
  • Contraseña y clave pública (ambas)

También tendremos la posibilidad de habilitar el forwarding en el servidor SSH, para realizar SSH Tunneling, por ejemplo. Por último, podremos modificar el puerto de escucha del servidor SSH, en el caso de este protocolo es el 22 TCP, pero podremos cambiarlo, de hecho, por seguridad es recomendable cambiar el puerto por defecto del servidor SSH.

Una vez que hayamos configurado la autenticación, deberemos configurar los usuarios que pueden autenticarse en el servidor SSH, y también qué claves SSH tienen dichos usuarios. Si pinchamos en el hipervínculo donde pone «user» nos llevará directamente a «System / User Manager», y aquí podremos añadir un nuevo usuario con diferentes permisos. En nuestro caso, hemos añadido un usuario nuevo que pertenece al grupo de «admins».

Si creamos un nuevo usuario o lo editamos, podremos configurar diferentes parámetros. En nuestro caso, lo hemos añadido al grupo de admins, como se puede ver en la siguiente imagen:

Para poder iniciar sesión en pfSense vía SSH, deberemos darle el permiso correspondiente en la sección de «Effective Privileges», de todo el listado de permisos que puede tener un usuario, debe tener el siguiente:

  • User – System : shell account access

Una vez que tenga este permiso, podremos iniciar sesión en el sistema operativo con su usuario. Dependiendo de lo que hayamos elegido a la hora de autenticar al usuario, tendremos que realizar una acción adicional:

  • Clave pública SSH: deberemos crearla
  • Contraseña o clave pública (una u otra): podremos usar la clave configurada, o la clave pública SSH si la creamos.
  • Contraseña y clave pública (ambas): usaremos la clave configurada más la clave pública SSH, es necesario crearla.

Como lo más seguro de cara a la autenticación es «Clave pública SSH» o «Contraseña y clave pública (ambas)», deberemos crear unas claves SSH.

Crear claves SSH con Puttygen

Actualmente estamos usando un sistema operativo Windows 10, la forma más fácil de crear unas claves SSH es utilizar el programa «Putty Key Generator» que podéis descargar de forma completamente gratis. No es necesaria ninguna instalación, al descargar el programa lo ejecutaremos y veremos el siguiente menú:

Aquí podremos configurar diferentes tipos de claves SSH, RSA y DSA son las más habituales y conocidas, pero es recomendable hacer uso de claves como ECDSA y también Ed25519 que utilizan curvas elípticas. En nuestro caso, hemos utilizado la Ed25519, la seleccionamos y pinchamos en «Generate».

Una vez que pinchemos en generate, deberemos mover el ratón para crear aleatoriedad y que las claves se generen correctamente. Ahora podremos ver en la parte superior la clave pública que deberemos pegar en el usuario de pfSense creado anteriormente. Podremos configurar un comentario en la clave, y también una contraseña de paso para descifrar la clave privada a la hora de conectarnos, esto aumenta la seguridad. Si alguien es capaz de robarnos nuestra clave privada, no podrá usarla a no ser que tenga la contraseña de paso de la clave privada generada.

Una vez que tengamos la clave generada, pinchamos en «Save public key» y también en «Save private Key» para tener la pareja de claves siempre a mano. Debemos recordar que la clave pública es la que deberemos copiar al usuario, tal y como podéis ver:

Una vez configurado el servidor SSH en el pfSense por completo, os vamos a enseñar cómo conectarnos con el popular programa Putty.

Conectarnos al pfSense con Putty y clave SSH

Abrimos el programa Putty y nos vamos a la sección de «Connection / SSH / Auth» y nos vamos a la sección de «Private key file for authentication», y pinchamos en «Browse» para cargar la clave privada que hemos guardado anteriormente.

Ahora nos vamos a la sección de «Session», ponemos la dirección IP y el puerto del servidor SSH en pfSense, una vez rellenado, pinchamos en «Open».

Ahora nos indicará que la conexión no está cacheada, por lo que es la primera vez que nos conectamos. Debemos pinchar en «Sí» para conectarnos.

Nos pedirá el nombre de usuario del login, ponemos el nombre de usuario asociado a esta clave SSH creada:

Y en cuanto introduzcamos el nombre de usuario, nos indicará que la autenticación es correcta y ya podremos empezar a ejecutar comandos vía SSH en el sistema operativo pfSense. En este ejemplo hemos usado clave pública únicamente, no hemos utilizado la combinación de contraseña y clave pública SSH, pero también podéis usarlo sin problemas, lo único que nos pedirá la contraseña a la hora de conectarnos.

Ahora que ya tenemos configurado correctamente el servidor SSH, vamos a ver unas configuraciones adicionales.

Protección del inicio de sesión y opciones de administración por consola

En la sección de «System / Advanced» podremos configurar la protección del inicio de sesión, en principio, la configuración que viene por defecto está muy bien para bloquear a los atacantes que intenten continuamente conectarse al servidor SSH. Si superamos el valor de 10 en un tiempo de 1800 segundos, se bloqueará los intentos de acceso durante 120 segundos.

En la parte inferior donde tenemos la «Pass list» podremos poner direcciones IP públicas que sí permitimos traspasar estas protecciones, esto es necesario para servicios como UptimeRobot que cada cierto tiempo está intentando verificar que el servidor SSH o web está levantado.

Otras configuraciones que deberíamos realizar, es la sección de «Console menú», es recomendable protegerla a través de una contraseña de acceso. No solamente necesitaremos tener acceso físico al equipo de pfSense, sino que nos pedirá autenticación por contraseña para el «root».

Antes de terminar, nos gustaría hablar de medidas de protección adicionales.

Reglas en el firewall y usar IDS/IPS

pfSense es un sistema operativo orientado a cortafuegos realmente potente y avanzado, gracias a las diferentes reglas que podemos configurar en las diferentes interfaces, tendremos la posibilidad de permitir o denegar el acceso tanto al servidor web como al servidor SSH. Una buena práctica de seguridad es no permitir el acceso vía web o SSH a través de Internet, si necesitamos administrar el pfSense de manera remota, una buena práctica es conectarnos vía VPN a uno de los múltiples servidores VPN que permite pfSense (OpenVPN, WireGuard, IPsec…), y posteriormente entrar vía web o SSH, pero no exponer ambos servicios a Internet, aunque los hayamos protegido correctamente.

En el caso de que no tengas más remedio que exponer ambos servicios (por alguna razón), nuestra recomendación es que instaléis y configuréis un sistema de detección y prevención de intrusiones, como Snort o Suricata. De esta forma, tendréis más control sobre las conexiones que se realicen, y bloquear automáticamente los posibles ataques por fuerza bruta, denegación de servicio etc.

Lo mismo ocurre si queremos permitir o denegar el acceso en las diferentes VLANs que podemos crear, lo más normal es que una red definida como «Invitados» no tenga acceso nunca al panel de administración de pfSense, ya sea vía web o SSH. Esto se debe hacer a través de la sección «Firewall / Rules», poniendo reglas de direcciones o redes de origen y destino el propio pfSense, como se hace habitualmente.

Esperamos que con estas recomendaciones sepáis proteger correctamente tanto el acceso web como SSH a pfSense.