# Ironchip RADIUS server

> Instalar el Ironchip RADIUS server para proteger servicios compatibles con RADIUS con una API key, sin NPS ni contraseñas: aplicación, instalación y ejemplo.

URL: https://docs.ironchip.com/identidad/integraciones/red/radius-server/

El **Ironchip RADIUS server** es un servidor RADIUS propio de Ironchip que permite integrar servicios compatibles con [RADIUS](https://docs.ironchip.com/identidad/protocolos/radius/) mediante una API key, sin necesidad de usar [NPS](https://docs.ironchip.com/identidad/integraciones/red/nps/). Esta guía es para quien administra el servicio y lo instala en Windows o Linux. Funciona sin contraseñas: el usuario aprueba el acceso en su dispositivo.

## Requisitos

- Acceso a la consola de administración de Ironchip.
- Un servidor Windows (64 bits) o Linux (64 bits) donde ejecutar el servidor RADIUS.
- Que el equipo o servicio que quieres proteger (VPN, cortafuegos, wifi) pueda enviar peticiones RADIUS al puerto UDP `1812` de ese servidor.
- Los usuarios dados de alta en Ironchip, o la [sincronización de identidades](https://docs.ironchip.com/identidad/administracion/sincronizacion/) configurada.

## Configuración en Ironchip

Crea una aplicación **Passwordless RADIUS**. La consola te da una API key que el servidor RADIUS usa para hablar con Ironchip.

1. Ve a **Applications** y haz clic en **New application**.
2. En la sección **Standard authentication protocols**, elige **Passwordless RADIUS**.
3. Ponle un nombre identificativo (mínimo 3 caracteres) y haz clic en **Add**.
4. Copia la API key o haz clic en **Download credentials** para descargarla en el fichero `credentials.json`.

:::caution
La consola no vuelve a mostrar la API key. Descárgala o guárdala ahora.
:::

## Configuración del Ironchip RADIUS server

1. Descarga el ejecutable de la [última versión](https://github.com/Ironchip-Security/Ironchip-Radius-Server/releases/latest): `ironchip_lbauth_radius_server.exe` para Windows o `ironchip_lbauth_radius_server` para Linux.
2. Cópialo a una carpeta definitiva del servidor. El servicio se ejecuta desde esa ubicación, así que no la muevas después.
3. Crea junto al ejecutable un fichero de configuración con el mismo nombre que el ejecutable y extensión `.json`: `ironchip_lbauth_radius_server.json`. Si renombras el ejecutable, renombra también el fichero.
4. Pega este contenido y sustituye los valores entre `<>`:

   ```json title="ironchip_lbauth_radius_server.json"
   {
     "radius_address": "0.0.0.0:1812",
     "radius_key": "<SHARED_SECRET>",
     "ironchip_api_host": "https://api.ironchip.com",
     "ironchip_api_secret": "<API_KEY>",
     "log_level": "info"
   }
   ```

5. Abre una terminal con permisos de administrador (PowerShell en Windows, o `sudo` en Linux) y ve a la carpeta del ejecutable.
6. Instala el servicio:

   ```powershell title="Windows"
   .\ironchip_lbauth_radius_server.exe service install
   ```

   ```bash title="Linux"
   chmod +x ironchip_lbauth_radius_server
   sudo ./ironchip_lbauth_radius_server service install
   ```

7. Inicia el servicio:

   ```powershell title="Windows"
   .\ironchip_lbauth_radius_server.exe service start
   ```

   ```bash title="Linux"
   sudo ./ironchip_lbauth_radius_server service start
   ```

8. Configura el servicio que quieres proteger para que use este servidor como servidor RADIUS: la dirección del equipo donde corre, el puerto `1812` y el mismo secreto compartido que pusiste en `radius_key`.

### Campos del fichero de configuración

| Campo                        | Obligatorio | Valor por defecto          | Descripción                                                                                                                           |
| ---------------------------- | ----------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `radius_address`             | No          | `0.0.0.0:1812`             | Dirección y puerto UDP en los que escucha el servidor.                                                                                |
| `radius_key`                 | Sí          |                            | Secreto compartido con el equipo que envía las peticiones RADIUS. Lo eliges tú, pero debe ser el mismo en el fichero y en ese equipo. |
| `ironchip_api_host`          | No          | `https://api.ironchip.com` | URL de la API de Ironchip.                                                                                                            |
| `ironchip_api_secret`        | Sí          |                            | La API key de la aplicación **Passwordless RADIUS**.                                                                                  |
| `log_level`                  | No          | `info`                     | Nivel de registro: `debug`, `info`, `warning`, `error` o `fatal`.                                                                     |
| `attributes`                 | No          |                            | Atributos RADIUS estándar que se añaden a la respuesta de acceso aceptado. Mira [Atributos de respuesta](#atributos-de-respuesta).    |
| `vendor-specific_attributes` | No          |                            | Atributos específicos de fabricante que se añaden a la respuesta. Mira [Atributos de respuesta](#atributos-de-respuesta).             |

El ejecutable lee este fichero con cualquier comando, también con `service install`, así que créalo antes de instalar el servicio. Si no lo encuentra, falta un campo obligatorio o `log_level` no es válido, termina con un error.

### Atributos de respuesta

Algunos equipos necesitan atributos en la respuesta RADIUS, por ejemplo para asignar a cada usuario un grupo de la VPN. Defínelos en `attributes` (atributos estándar del [RFC 2865](https://datatracker.ietf.org/doc/html/rfc2865#section-5)) y en `vendor-specific_attributes` (atributos de fabricante, que el servidor envía dentro del atributo 26). Cada atributo tiene tres campos:

- `number`: el número del atributo. En `vendor-specific_attributes` es el número de fabricante (Vendor-Id).
- `type`: el tipo del dato: `string`, `short`, `integer` o `integer64`.
- `data`: un valor fijo o una plantilla con datos del usuario que acaba de autenticarse.

Puedes repetir el mismo `number` en varios atributos. La plantilla tiene que ser todo el valor de `data`, como en el ejemplo de abajo: si la mezclas con otro texto, el atributo no se envía. Estas son las plantillas disponibles:

| Plantilla                  | Dato                                                     |
| -------------------------- | -------------------------------------------------------- |
| `{{.subject}}`             | Identificador del usuario.                               |
| `{{.name}}`                | Nombre del usuario.                                      |
| `{{.email}}`               | Correo electrónico del usuario.                          |
| `{{.timestamp}}`           | Marca de tiempo de la autorización.                      |
| `{{.external_username}}`   | Nombre de usuario en el servicio externo.                |
| `{{.external_service_id}}` | Identificador del servicio externo.                      |
| `{{.customer_name}}`       | Nombre de la compañía.                                   |
| `{{.group_names}}`         | Grupos del usuario. Se envía un atributo por cada grupo. |
| `{{.location_name}}`       | Nombre de la ubicación desde la que accede.              |
| `{{.location_score}}`      | Puntuación de la ubicación.                              |

```json title="ironchip_lbauth_radius_server.json"
{
  "radius_address": "0.0.0.0:1812",
  "radius_key": "<SHARED_SECRET>",
  "ironchip_api_host": "https://api.ironchip.com",
  "ironchip_api_secret": "<API_KEY>",
  "log_level": "info",
  "attributes": [{ "number": 11, "type": "string", "data": "{{.group_names}}" }],
  "vendor-specific_attributes": [{ "number": 43, "type": "string", "data": "1304" }]
}
```

En este ejemplo, el atributo `Filter-Id` (11) lleva el nombre de cada grupo del usuario. Usa el tipo `string` salvo que el equipo exija otro.

## Comprobación

1. Comprueba que el servicio está en marcha:

   ```powershell title="Windows"
   .\ironchip_lbauth_radius_server.exe service status
   ```

   ```bash title="Linux"
   sudo ./ironchip_lbauth_radius_server service status
   ```

   La salida incluye `status: running`.

2. Inicia sesión desde el servicio protegido con un usuario de Ironchip. El usuario recibe la petición de aprobación en su dispositivo y, al aprobarla, el servidor responde con acceso aceptado. Si Ironchip no autoriza al usuario, responde con acceso rechazado.

El servidor usa solo el nombre de usuario de la petición; la contraseña se ignora. Aun así, algunos equipos exigen rellenarla, como se ve en el ejemplo siguiente.

## Comandos del servicio

El ejecutable se maneja con `service` (alias `s`). `service status` también tiene el alias `s`, así que `s s` equivale a `service status`.

| Comando             | Qué hace                                                                                                                       |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `service install`   | Instala el servicio `IronchipRADIUS` (nombre visible: Ironchip RADIUS server).                                                 |
| `service start`     | Inicia el servicio.                                                                                                            |
| `service stop`      | Detiene el servicio.                                                                                                           |
| `service restart`   | Reinicia el servicio. Hazlo tras cambiar el fichero de configuración.                                                          |
| `service status`    | Muestra si el servicio está en marcha (`running`) o detenido (`stopped`).                                                      |
| `service uninstall` | Desinstala el servicio.                                                                                                        |
| `service run`       | Ejecuta el servidor en la terminal, fuera del gestor de servicios. Falla si el servicio no está instalado o ya está en marcha. |

## Registros

En Windows, el servidor escribe en el Visor de eventos, en el registro **Application**, con el origen `Ironchip RADIUS Server`. En Linux escribe en la salida del proceso, que recoge el gestor de servicios del sistema (con systemd, consúltala con `journalctl -u IronchipRADIUS`). Sube `log_level` a `debug` para ver el detalle de cada autorización, y vuelve a `info` cuando termines.

## Problemas frecuentes

- **El servicio no arranca**: comprueba que existe el fichero `.json` con el mismo nombre que el ejecutable, en la misma carpeta, y que `radius_key` e `ironchip_api_secret` tienen valor.
- **El equipo no recibe respuesta**: abre el puerto UDP `1812` (o el de `radius_address`) en el cortafuegos del servidor y comprueba que el equipo apunta a la IP correcta.
- **Acceso rechazado para un usuario que existe**: comprueba que `ironchip_api_secret` es la API key de la aplicación **Passwordless RADIUS** y que el nombre de usuario de la petición es el que Ironchip conoce. El servidor anota el error de autorización en el registro.
- **El secreto compartido no coincide**: el equipo descarta las respuestas. Usa exactamente el mismo valor en `radius_key` y en el equipo.
- **Faltan atributos en la respuesta**: comprueba que cada `data` es un valor fijo o una sola plantilla y que el dato es del tipo indicado en `type`. Si un atributo falla, el servidor acepta el acceso igualmente, pero no envía ese atributo ni los siguientes, y anota el error en el registro.

## Ejemplo de autenticación

El vídeo muestra el acceso a una VPN de [WatchGuard](https://docs.ironchip.com/identidad/integraciones/red/watchguard/) con el Ironchip RADIUS server en funcionamiento.

En el vídeo se escribe una contraseña porque WatchGuard no permite campos vacíos. El texto de ese campo puede ser aleatorio, como en los dos ejemplos del vídeo.

Vídeo: [Acceso a una VPN de WatchGuard con el Ironchip RADIUS server](https://play.hubspotvideo.com/v/7745202/id/147408409421)
