Saltar a contenido

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.

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.