Aller au contenu

pta: Module d'authentification par période de temps pour NGINX

Installation

Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :

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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_http_pta_module.so;

Ce document décrit nginx-module-pta v1.0.2 publié le 07 janvier 2025.


Vue d'ensemble

Le module PTA (Period of Time Authentication) est un module pour NGINX. En utilisant PTA, vous pouvez contrôler l'accès à vos contenus. PTA calcule une chaîne de requête ou un paramètre de cookie chiffré qui inclut une date d'expiration et un chemin du contenu.

Utilisation

Voici un exemple de nginx.conf ci-dessous.

  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

  • Syntaxe : pta_1st_key keystring
  • Par défaut : -
  • Contexte : serveur

pta_1st_iv

  • Syntaxe : pta_1st_iv ivstring;
  • Par défaut : -
  • Contexte : serveur

pta_2nd_key

  • Syntaxe : pta_2nd_key keystring;
  • Par défaut : -
  • Contexte : serveur

pta_2nd_iv

  • Syntaxe : pta_2nd_iv ivstring;
  • Par défaut : -
  • Contexte : serveur

pta_enable

  • Syntaxe : pta_enable on | off;
  • Par défaut : pta_enable off;
  • Contexte : location

pta_auth_method

  • Syntaxe : pta_auth_method qs | cookie | qs cookie;
  • Par défaut : pta_auth_method qs;
  • Contexte : location

Comment ça fonctionne

Le module PTA déchiffre une chaîne de requête ou un paramètre de cookie commençant par `pta=...' et vérifie le CRC32, la date d'expiration et le chemin URI demandé qui y sont intégrés. Vous devez donc générer un jeton PTA et l'ajouter à un lien en tant que chaîne de requête ou paramètre de cookie. Il y a quelques codes dans le répertoire samples pour générer PTA.

format

Ce flux d'octets est chiffré avec l'AES en mode CBC 128 bits.

  +---------------+-------------------------+----------+-----------------+
  | CRC32 (4octets) | Date d'expiration (8octets) | Chemin URI | Remplissage     |
  |               | format Unix            |          | format pkcs #7  |
  +---------------+-------------------------+----------+-----------------+

CRC32

C'est en big endian. Il est calculé à partir de la date d'expiration et du chemin URI. Cette partie est utilisée pour vérifier que le déchiffrement AES est valide.

Date d'expiration

C'est en big endian. Elle est comparée au moment où la requête arrive et si le temps est inférieur ou égal à la date d'expiration contenue dans le jeton PTA, la requête est autorisée.

Chemin URI

En gros, il doit être identique au chemin du contenu demandé.

par ex. http://example.com/index.html -> /index.html

Il doit commencer par la barre oblique `/'.

Le caractère astérisque `*' signifie un caractère générique.

  • Le caractère `*' doit être unique. par ex. /foo/*/bar/*.jpg n'est pas autorisé.

  • Vous pouvez utiliser le caractère `*' à n'importe quelle partie, comme une partie du nom de répertoire, du nom de fichier ou du suffixe du nom de fichier.

  • Si vous utilisez le caractère `*' littéralement, vous devez l'échapper avec le backslash.

La directive pta_auth_method peut spécifier la méthode d'authentification. Vous pouvez choisir le type de chaîne de requête, de cookie ou les deux comme méthode.

Dans le cas des deux, la chaîne de requête est évaluée en premier, puis le cookie est évalué si le paramètre pta n'est pas inclus dans la chaîne de requête. Lorsque le paramètre pta dans la chaîne de requête n'est pas valide, l'authentification échoue, sans revenir à l'évaluation du cookie. Ce n'est que sans le paramètre pta dans la chaîne de requête que le cookie est évalué.

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-pta.