Nos complace anunciar la disponibilidad de NGINX Plus Release 23 (R23) . Basado en NGINX de código abierto, NGINX Plus es el único equilibrador de carga de software, proxy inverso y puerta de enlace API.
Las nuevas características de NGINX Plus R23 incluyen:
root
). Esta solución totalmente compatible se alinea con la tendencia creciente hacia modelos de seguridad de confianza cero.Para completar esta versión se incluyen un control más detallado sobre SSL/TLS, un método nativo para configurar indicadores de cookies y una configuración de variables en el módulo Stream. Las actualizaciones del ecosistema NGINX Plus incluyen los nuevos módulos Buffer y Query String para el módulo JavaScript de NGINX, el nuevo módulo dinámico SPNEGO para Kerberos y mejoras en el módulo dinámico Prometheus-njs.
proxy_cookie_flags
. El módulo se eliminará en NGINX Plus R26 . Para obtener más detalles, consulte Método nativo para configurar indicadores de cookies .Cuando se implementa como balanceador de carga, NGINX Plus puede monitorear el estado de los servidores backend (ascendentes) al realizar controles de estado activos . NGINX Plus R23 admite el protocolo de verificación del estado de gRPC , lo que le permite probar con precisión si los servidores gRPC backend pueden manejar nuevas solicitudes. Esto es particularmente valioso en entornos dinámicos y en contenedores. Al crear nuevas instancias de un servicio gRPC, es importante enviar solicitudes solo una vez que el servicio esté "completamente activo". Esto requiere una comprobación de estado que vaya más allá de mirar el puerto TCP o verificar la disponibilidad del URI HTTP: una comprobación en la que el propio servicio indique si está listo para recibir solicitudes.
Para los servicios gRPC que implementan el protocolo de verificación del estado de gRPC, la configuración es sencilla.
Esta configuración equilibra la carga de todas las solicitudes al grupo ascendente grpc_backend . La directiva health_check
incluye el parámetro type=grpc
para invocar el método Check
del servicio Health
de cada servidor ascendente. Los servicios que responden con SERVIR
se consideran saludables. El parámetro obligatorio
garantiza que cuando se inicia NGINX Plus, o se introduce un nuevo servidor al grupo ascendente, el tráfico no se reenvía hasta que se aprueba una verificación de estado (de lo contrario, se asume que los nuevos servicios están en buen estado de manera predeterminada).
Si hay varios servicios gRPC expuestos en cada servidor ascendente, entonces el servicio más significativo (uno con servicios dependientes o subordinados) se puede monitorear especificando su nombre como valor del parámetro grpc_service
como en este ejemplo:
Para los servicios gRPC que no implementan el protocolo de verificación de estado de gRPC, podemos probar si el servidor ascendente al menos responde a las solicitudes de gRPC, porque en ese caso envía un código de estado de error en respuesta al método Check
. Con la configuración en grpc_health.conf , esperamos que un servicio que no implementa el protocolo gRPC responda con el código de estado 12
(NO IMPLEMENTADO)
.
También podemos comprobar que un servicio gRPC es capaz de responder a las solicitudes entrantes sin necesidad de modificar el código del backend. Podemos utilizar este enfoque para supervisar cualquier servicio gRPC:
En versiones anteriores, NGINX Plus funcionaba con un mínimo de procesos ejecutándose como el usuario privilegiado root
. Por ejemplo, las instrucciones de instalación en la Guía de administración de NGINX Plus crean estos procesos:
$ ps auxf | grep nginx root ... 9068 888 ? Ss 21:44 0:00 nginx: proceso maestro nginx nginx ... 9712 3572 ? S 21:44 0:00 \_ nginx: proceso de trabajo
Como se muestra, el proceso maestro se ejecuta con privilegios de root
. Todos los demás procesos (trabajadores y gestión de caché) utilizan la cuenta de usuario sin privilegios nginx
.
Es posible que los sistemas críticos que manejan datos confidenciales no quieran utilizar el usuario root
. En este caso, NGINX Plus R23 se puede instalar y ejecutar como un usuario sin privilegios. Proporcionamos un script de instalación, ngxunprivinst.sh
, en nuestro repositorio de GitHub para su uso en los siguientes sistemas operativos:
Nota: Si hay algún oyente de NGINX Plus configurado en puertos inferiores a 1024 (por ejemplo, 80 o 443), el proceso maestro debe tener privilegios de root
(pero aún puede instalar NGINX Plus con una cuenta de usuario sin privilegios).
Para utilizar el script de instalación, ejecute los siguientes comandos. (Para ver todos los comandos ngxunprivinst.sh
disponibles, ejecute el script sin un parámetro de nombre de comando o consulte el código del script en el repositorio de GitHub).
Descargue el script y asegúrese de que sea ejecutable:
$ chmod +x ngxunprivinst.sh
-c
y -k
están incluidas en todos los comandos ngxunprivinst.sh
para identificarlos.Enumere las versiones de NGINX Plus disponibles en el repositorio de NGINX Plus.
$ ./ngxunprivinst.sh lista -c nginx-repo.crt -k nginx-repo.key
18-1
18-2
19-1
20-1
21-1
22-1
23-1
Obtenga el paquete deseado (aquí estamos obteniendo NGINX Plus R23-1 ). La opción -p
especifica el directorio de instalación:
$ ./ngxunprivinst.sh fetch -c nginx-repo.crt -k nginx-repo.key -p /home/nginxrun -v 23-1
Instale los paquetes que necesita (aquí estamos instalando NGINX Plus y el módulo JavaScript de NGINX, njs).
$ ./ngxunprivinst.sh install -c nginx-repo.crt -k nginx-repo.key -p /home/nginxrun -v 23.1 nginx-plus-23-1.el8.ngx.x86_64.rpm nginx-plus-module-njs-23%2B0.4.6-1.el8.ngx.x86_64.rpm
Inicie NGINX, incluida la opción -p
para especificar la ruta, -c
para nombrar el archivo de configuración y -e
para nombrar el registro de errores.
$ /home/nginxrun/usr/sbin/nginx -p /home/nginxrun/etc/nginx -c nginx.conf -e /home/nginxrun/var/log/error.log
Incluimos la opción -e
para suprimir el mensaje de advertencia que de lo contrario aparece. Antes de que NGINX Plus haya leído su configuración durante el inicio, escribe en el registro de errores predeterminado, /var/log/nginx/error.log . Los usuarios sin privilegios no tienen permiso para crear ni escribir en este archivo, lo que genera una advertencia. Una vez que se lee la configuración, la directiva error_log
establece el registro de errores en una ubicación en la que el usuario sin privilegios puede escribir.
(Opcional) Para verificar que NGINX Plus se esté ejecutando como un usuario no root
, ejecute este comando:
$ ps auxf | grep nginx nginxrun ... 9068 888 ? Ss 21:55 0:00 nginx: proceso maestro nginxrun ... 9712 3572 ? S 21:55 0:00 \_ nginx: proceso de trabajo
Proof Key for Code Exchange ( PKCE ) es una extensión agregada recientemente al flujo de código de autorización de OpenID Connect (OIDC) para prevenir varios tipos de ataques y asegurar el intercambio de OAuth con clientes públicos. Para NGINX Plus R23 , hemos actualizado nuestra implementación de referencia de OpenID Connect para admitir la extensión. PKCE será obligatorio con OAuth 2.1 .
El cambio específico es reemplazar client_secret
con dos nuevos valores en el desafío del código:
desafío de código
verificador de código
Para abordar diferentes ataques, especialmente en dispositivos móviles, el desafío para un token (ya sea un token de acceso, ID o actualización) se ha ajustado de la siguiente manera:
code_verifier
.code_verifier
denominada code_challenge
.código de autenticación
para el usuario a NGINX Plus.code_verifier
generado y enviar la solicitud para intercambiar el código de autorización por un conjunto de tokens desde el punto final del token del IdP.Antes de agregar PKCE, era suficiente que NGINX Plus compartiera un secreto de cliente estático con el IdP.
En la implementación de referencia OIDC actualizada, NGINX Plus puede manejar flujos de códigos de autorización tanto para PKCE como para la metodología de secreto del cliente.
A continuación se muestra una configuración de ejemplo que habilita el flujo de código de autorización extendido con PKCE:
La nueva variable $oidc_pkce_enable
actúa como un interruptor para el flujo PKCE. Si se establece en1
Para un dominio específico, se utiliza el flujo PKCE. Si se establece en0
(predeterminado), se utiliza el flujo de código de autorización que no es PKCE.
TLS v1.3 permite una seguridad más fuerte que las versiones TLS anteriores, con cifrado de extremo a extremo entre servidores y entre servidores y sus clientes. NGINX Plus R23 proporciona acceso directo a la configuración de OpenSSL para un control detallado sobre TLS v1.3.
En versiones anteriores, el bloque de servidor
predeterminado para el tráfico HTTPS protegido con TLS tenía que incluir las directivas ssl_certificate
y ssl_certificate_key
, lo que requería la creación de un certificado y una clave autofirmados “ficticios”.
La directiva ssl_reject_handshake
elimina el requisito de un certificado y una clave, como en esta configuración de ejemplo:
NGINX Plus R23 le brinda un control más preciso sobre cómo NGINX Plus maneja SSL/TLS con OpenSSL 1.0.2 y versiones posteriores.
Los siguientes casos de uso aprovechan el nuevo nivel de control:
Cifrados ChaCha – NGINX Plus usa ChaCha20 cuando un cliente (generalmente móvil) especifica ese cifrado en la parte superior de su lista de preferencias. ChaCha20 mejora notablemente el rendimiento de los clientes que lo admiten.
Configuración de cifrado TLS v1.3 : en versiones anteriores, se usaba la directiva ssl_ciphers
para establecer la lista de cifrados SSL/TLS preferidos de NGINX Plus, como en este ejemplo:
Sin embargo, esta directiva no se aplica a TLS v1.3 porque la implementación de cifrados OpenSSL para TLS v1.3 no es compatible con las interfaces más antiguas. Para establecer la lista de cifrados para TLS v1.3, utilice la nueva directiva ssl_conf_command
como en este ejemplo:
Para configurar cifrados para TLS v1.2 y v1.3, incluya ambas directivas en la configuración:
Actualización de conexiones proxy : basándose en el mecanismo de configuración de cifrado implementado por la directiva ssl_conf_command
, NGINX Plus R23 le brinda el mismo control sobre los conjuntos de cifrado para conexiones proxy con estos protocolos:
proxy_ssl_conf_command
comando grpc_ssl_conf
uwsgi_ssl_conf_comando
El siguiente ejemplo muestra cómo configurar NGINX Plus para actualizar las solicitudes de clientes que usan versiones anteriores de TLS para usar servidores back-end que se sabe que admiten TLS v1.3.
Cuando NGINX Plus se configura como un proxy de almacenamiento en caché, el proceso del administrador de caché garantiza que el tamaño de la caché no exceda el límite establecido por el parámetro max_size
en la directiva proxy_cache_path
, eliminando el contenido al que se accedió menos recientemente.
Con NGINX Plus R23 , el administrador de caché también puede monitorear la cantidad de espacio disponible en disco en el sistema de archivos que alberga el caché y eliminar contenido cuando el espacio disponible es menor que el nuevo parámetro min_free
de la directiva proxy_cache_path
.
Esto significa que incluso cuando el caché comparte el mismo sistema de archivos que otros procesos, NGINX Plus garantiza que al completar el caché no se llene el disco inadvertidamente.
Las cookies no seguras siguen siendo un vector de ataque de alto riesgo. Como se señala en Mozilla Developer Network (MDN), una forma de garantizar que terceros o scripts no accedan a las cookies es establecer indicadores como HttpOnly
y Secure
en el encabezado Set-Cookie
.
En versiones anteriores, proporcionamos la directiva set_cookie_flag
para este propósito, tal como se implementó en el módulo de terceros Cookie-Flag disponible en nuestro repositorio de módulos dinámicos. NGINX Plus R23 presenta la directiva proxy_cookie_flags
para reemplazar esa directiva y módulo.
El módulo obsoleto Cookie‑Flag se eliminará en NGINX Plus R26 , por lo que le recomendamos que ubique cualquier directiva set_cookie_flag
en su configuración y las reemplace con la directiva proxy_cookie_flags
lo antes posible.
A continuación se muestra una configuración de ejemplo para realizar un proxy a una aplicação backend simple que no configura ningún indicador de protección de cookies:
En este ejemplo, agregamos los indicadores HttpOnly
, Secure
y SameSite
para proteger la cookie de sesión appcookie creada por el servidor ascendente, que NGINX Plus usa para la persistencia de la sesión como se describe en la Guía de administración de NGINX Plus .
Si utiliza el comando curl
o la herramienta para desarrolladores de su navegador, podrá ver que los indicadores HttpOnly
, Secure
y SameSite
ahora están configurados para appcookie .
< HTTP/1.1 200 OK< Servidor: nginx/1.19.4
< Fecha: Jueves, 08 de diciembre de 2020 14:46:12 GMT
< Tipo de contenido: aplicação/octet-stream
< Longitud del contenido: 9
< Conexión: keep-alive
< Establecer cookie: appcookie=appserver1; Segura; Solo HTTPS; Mismo sitio=Estricto
< Tipo de contenido: text/html
Con NGINX Plus R23 , también puedes agregar la bandera SameSite
a las cookies con la directiva sticky
, como en este ejemplo (los parámetros httponly
y secure
son compatibles desde NGINX Plus R6):
NGINX Plus R23 presenta la directiva set
para configurar variables en configuraciones TCP/UDP, ampliando la capacidad comúnmente utilizada para el procesamiento del tráfico HTTP .
A continuación se muestra un ejemplo que construye valores compuestos complejos a partir de múltiples variables.
Un caso de uso más sofisticado emplea la directiva set
para actualizar el almacén de clave-valor . En esta configuración para el equilibrio de carga de DNS, el almacén de clave-valor registra el momento en que cada dirección IP del cliente realiza una solicitud de DNS y conserva cada registro durante 24 horas.
Luego puede utilizar la API NGINX Plus para saber cuándo cada cliente realizó su solicitud de DNS más reciente durante las 24 horas anteriores.
$ curl http://localhost:8080/api/6/stream/keyvals/dns_timestamp { "172.17.0.1": "2020-12-08T15:51:28+00:00", "172.17.0.2": "2020-12-08T12:36:08+00:00", "172.17.0.7": "2020-12-08T15:15:42+00:00"
El módulo JavaScript de NGINX (njs) se ha actualizado a0.5.0 . Esta versión presenta el módulo Buffer , que es análogo al módulo Buffer de Node.js. Los objetos de búfer facilitan el trabajo con datos binarios, en lugar de depender de cadenas.
Otras mejoras notables del módulo son el módulo de cadena de consulta para un acceso fácil a los pares clave-valor pasados en la URL y soporte de seguimiento inverso a nivel de línea para depuración.
El soporte para la autenticación Kerberos SPNEGO ahora está disponible en el repositorio de módulos dinámicos NGINX Plus. Para obtener instrucciones de instalación y sugerencias para obtener más información, consulte la Guía de administración de NGINX Plus .
Como se detalla en Método nativo para configurar indicadores de cookies más arriba, la nueva directiva proxy_cookie_flags
reemplaza la directiva set_cookie_flag
implementada en el módulo de terceros Cookie-Flag, que ahora está obsoleto y está programado para su eliminación en NGINX Plus R26 . Si su configuración incluye la directiva set_cookie_flag
, reemplácela con proxy_cookie_flags
lo antes posible.
El módulo Prometheus-njs ahora expone métricas adicionales. También se ha actualizado para adaptarse a implementaciones que utilizan el módulo JavaScript NGINX (njs). Al actualizar Prometheus‑njs a la versión 1.3.1 y superiores, es importante actualizar el archivo de configuración de NGINX para evitar referencias a la configuración de njs obsoleta:
js_include
está obsoleta y ha sido reemplazada por la directiva js_import
js_content
y js_set
pueden hacer referencia a una función del móduloEs posible que las comprobaciones de estado que usaron la directiva require
en un bloque de coincidencia
para probar que las variables no estuvieran vacías no hayan detectado servidores ascendentes en mal estado si la respuesta fue mayor que el valor de la directiva proxy_buffer_size
.
Si está utilizando NGINX Plus, le recomendamos encarecidamente que actualice a NGINX Plus R23 lo antes posible. También recibirás varias correcciones y mejoras adicionales, y ayudará a NGINX a ayudarte cuando necesites generar un ticket de soporte.
Si aún no ha probado NGINX Plus, le recomendamos que lo haga por cuestiones de seguridad, equilibrio de carga y puerta de enlace de API, o como servidor web totalmente compatible con API de administración y monitoreo mejoradas. Puede comenzar hoy con una prueba gratuita de 30 días . Vea usted mismo cómo NGINX Plus puede ayudarle a entregar y escalar sus aplicações.
"Esta publicación de blog puede hacer referencia a productos que ya no están disponibles o que ya no reciben soporte. Para obtener la información más actualizada sobre los productos y soluciones F5 NGINX disponibles, explore nuestra familia de productos NGINX . NGINX ahora es parte de F5. Todos los enlaces anteriores de NGINX.com redirigirán a contenido similar de NGINX en F5.com.