pta: Módulo de Autenticación por Período de Tiempo para NGINX
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-pta
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-pta
Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:
load_module modules/ngx_http_pta_module.so;
Este documento describe nginx-module-pta v1.0.2 lanzado el 07 de enero de 2025.
Descripción general
El módulo PTA (Autenticación por Período de Tiempo) es un módulo para NGINX. Usando PTA puedes controlar el acceso a tus contenidos. PTA calcula una cadena de consulta encriptada o un parámetro de cookie que incluye un tiempo de expiración y una ruta del contenido.
Uso
A continuación se muestra un ejemplo de nginx.conf.
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
pta_1st_key 0102030405060708090a0b0c0d0e0f00;
pta_1st_iv 00000000000000000000000000000000;
pta_2nd_key 11111111111111111111111111111111;
pta_2nd_iv 22222222222222222222222222222222;
location / {
root html;
index index.html index.htm;
}
location /foo/ {
pta_enable on;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
pta_1st_key
- Sintaxis : pta_1st_key keystring
- Predeterminado : -
- Contexto : servidor
pta_1st_iv
- Sintaxis : pta_1st_iv ivstring;
- Predeterminado : -
- Contexto : servidor
pta_2nd_key
- Sintaxis : pta_2nd_key keystring;
- Predeterminado : -
- Contexto : servidor
pta_2nd_iv
- Sintaxis : pta_2nd_iv ivstring;
- Predeterminado : -
- Contexto : servidor
pta_enable
- Sintaxis : pta_enable on | off;
- Predeterminado : pta_enable off;
- Contexto : location
pta_auth_method
- Sintaxis : pta_auth_method qs | cookie | qs cookie;
- Predeterminado : pta_auth_method qs;
- Contexto : location
Cómo funciona
El módulo PTA desencripta una cadena de consulta o un parámetro de cookie comenzando desde `pta=...' y verifica CRC32, el tiempo de expiración y la ruta URI solicitada incrustada en ella. Por lo tanto, necesitas generar un token PTA y añadirlo a un enlace como cadena de consulta o parámetro de cookie. Hay algunos códigos en el directorio de ejemplos para generar PTA.
formato
Este flujo de bytes está encriptado con el modo CBC de AES de 128 bits.
+---------------+-------------------------+----------+-----------------+
| CRC32 (4byte) | Tiempo de Expiración (8byte) | Ruta URI | Relleno |
| | Formato de Tiempo Unix | | formato pkcs #7 |
+---------------+-------------------------+----------+-----------------+
CRC32
Es big endian. Se calcula a partir del Tiempo de Expiración y la Ruta URI. Esta parte se utiliza para verificar que la desencriptación AES es válida.
Tiempo de expiración
Es big endian. Se compara con el tiempo en que se recibe la solicitud y si el tiempo es menor o igual al tiempo de expiración que está contenido en el token PTA, se permite la solicitud.
Ruta URI
Básicamente debe ser idéntica a la ruta del contenido solicitado.
p.ej. http://example.com/index.html -> /index.html
Debe comenzar con la barra /.
El carácter asterisco * significa comodín.
-
El carácter
\*debe ser solo uno. p.ej. /foo/*/bar/*.jpg no está permitido. -
Puedes usar el carácter
*en cualquier parte, como parte del nombre del directorio, nombre del archivo o sufijo del nombre del archivo. -
Si usas el carácter
*literalmente, debes escaparlo con la barra invertida.
Cadena de consulta y Cookie
La directiva pta_auth_method puede especificar el método para autenticar. Puedes elegir el tipo de cadena de consulta, cookie, o ambos como método.
En el caso de ambos, la cadena de consulta se evalúa primero, y luego se evalúa la cookie si el parámetro pta no está incluido en la cadena de consulta. Cuando el parámetro pta en la cadena de consulta no es válido, la autenticación falla, sin retroceder para evaluar la cookie. Solo sin el parámetro pta en la cadena de consulta se evalúa la cookie.
GitHub
Puedes encontrar consejos adicionales de configuración y documentación para este módulo en el repositorio de GitHub para nginx-module-pta.