Pular para conteúdo

pta: Módulo de Autenticação por Período de Tempo para NGINX

Instalação

Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:

  • RedHat Enterprise Linux 7, 8, 9 e 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 e 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

Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:

load_module modules/ngx_http_pta_module.so;

Este documento descreve o nginx-module-pta v1.0.2 lançado em 07 de janeiro de 2025.


Visão Geral

O módulo PTA (Period of Time Authentication) é um módulo para NGINX. Usando o PTA, você pode controlar o acesso ao seu conteúdo. O PTA calcula uma string de consulta criptografada ou um parâmetro de cookie que inclui um tempo de expiração e um caminho do conteúdo.

Uso

Aqui está um exemplo de nginx.conf abaixo.

  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

  • Sintaxe : pta_1st_key keystring
  • Padrão : -
  • Contexto : server

pta_1st_iv

  • Sintaxe : pta_1st_iv ivstring;
  • Padrão : -
  • Contexto : server

pta_2nd_key

  • Sintaxe : pta_2nd_key keystring;
  • Padrão : -
  • Contexto : server

pta_2nd_iv

  • Sintaxe : pta_2nd_iv ivstring;
  • Padrão : -
  • Contexto : server

pta_enable

  • Sintaxe : pta_enable on | off;
  • Padrão : pta_enable off;
  • Contexto : location

pta_auth_method

  • Sintaxe : pta_auth_method qs | cookie | qs cookie;
  • Padrão : pta_auth_method qs;
  • Contexto : location

Como funciona

O módulo PTA descriptografa uma string de consulta ou um parâmetro de cookie começando com `pta=...' e verifica CRC32, tempo de expiração e caminho URI solicitado embutido nele. Portanto, você precisa gerar um token PTA e adicioná-lo a um link como string de consulta ou parâmetro de cookie. Existem alguns códigos no diretório samples para gerar PTA.

formato

Este fluxo de bytes é criptografado com o AES AES 128 bits em modo CBC.

  +---------------+-------------------------+----------+-----------------+
  | CRC32 (4bytes)| Tempo de Expiração (8bytes) | Caminho URI | Padding         |
  |               | formato Unix Time       |          | formato pkcs #7 |
  +---------------+-------------------------+----------+-----------------+

CRC32

É big endian. É calculado a partir do Tempo de Expiração e do Caminho URI. Esta parte é usada para verificar se a descriptografia AES é válida.

Tempo de expiração

É big endian. É comparado com o tempo em que a solicitação chegou e, se o tempo for menor ou igual ao tempo de expiração contido no token PTA, a solicitação é permitida.

Caminho URI

Basicamente, deve ser idêntico ao caminho do conteúdo solicitado.

e.g. http://example.com/index.html -> /index.html

Deve começar com a barra `/'.

O caractere asterisco `*' significa curinga.

  • O caractere `*' deve ser apenas um. e.g. /foo/*/bar/*.jpg não é permitido.

  • Você pode usar o caractere `*' em qualquer parte, como parte do nome do diretório, nome do arquivo ou sufixo do nome do arquivo.

  • Se você usar o caractere `*' literalmente, deve escapá-lo com a barra invertida.

A diretiva pta_auth_method pode especificar o método de autenticação. Você pode escolher o tipo de string de consulta, cookie ou ambos como método.

No caso de ambos, a string de consulta é avaliada primeiro, e depois o cookie é avaliado se o parâmetro pta não estiver incluído na string de consulta. Quando o parâmetro pta na string de consulta não é válido, a autenticação falha, não retornando para avaliar o cookie. Apenas na ausência do parâmetro pta na string de consulta, o cookie é avaliado.

GitHub

Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório GitHub para nginx-module-pta.