Перейти к содержанию

pta: Модуль аутентификации по времени для NGINX

Установка

Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:

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

Включите модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:

load_module modules/ngx_http_pta_module.so;

Этот документ описывает nginx-module-pta v1.0.2, выпущенный 7 января 2025 года.


Обзор

Модуль PTA (Period of Time Authentication) — это модуль для NGINX. С помощью PTA вы можете контролировать доступ к вашему контенту. PTA вычисляет зашифрованную строку запроса или параметр cookie, который включает время истечения и путь к контенту.

Использование

Вот пример конфигурации 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

  • Синтаксис : pta_1st_key keystring
  • По умолчанию : -
  • Контекст : server

pta_1st_iv

  • Синтаксис : pta_1st_iv ivstring;
  • По умолчанию : -
  • Контекст : server

pta_2nd_key

  • Синтаксис : pta_2nd_key keystring;
  • По умолчанию : -
  • Контекст : server

pta_2nd_iv

  • Синтаксис : pta_2nd_iv ivstring;
  • По умолчанию : -
  • Контекст : server

pta_enable

  • Синтаксис : pta_enable on | off;
  • По умолчанию : pta_enable off;
  • Контекст : location

pta_auth_method

  • Синтаксис : pta_auth_method qs | cookie | qs cookie;
  • По умолчанию : pta_auth_method qs;
  • Контекст : location

Как это работает

Модуль PTA расшифровывает строку запроса или параметр cookie, начиная с `pta=...' и проверяет CRC32, время истечения и запрашиваемый URI путь, встроенные в него. Поэтому вам нужно сгенерировать токен PTA и добавить его в ссылку в качестве строки запроса или параметра cookie. В каталоге samples есть несколько кодов для генерации PTA.

формат

Этот байтовый поток зашифрован с использованием AES в режиме CBC на 128 бит.

  +---------------+-------------------------+----------+-----------------+
  | CRC32 (4byte) | Время истечения (8byte) | URI Path | Padding         |
  |               | Формат Unix Time       |          | формат pkcs #7  |
  +---------------+-------------------------+----------+-----------------+

CRC32

Это big endian. Он вычисляется на основе времени истечения и URI пути. Эта часть используется для проверки, что расшифровка AES действительна.

Время истечения

Это big endian. Оно сравнивается с временем, когда запрос поступил, и если время меньше или равно времени истечения, содержащемуся в токене PTA, запрос разрешается.

URI Path

В основном он должен совпадать с путем запрашиваемого контента.

например. http://example.com/index.html -> /index.html

Он должен начинаться со слэша `/'.

Символ `*' означает подстановочный знак.

  • Символ `*' должен быть только один. например, /foo/*/bar/*.jpg не допускается.

  • Вы можете использовать символ `*' в любой части, такой как часть имени каталога, имя файла или суффикс имени файла.

  • Если вы используете символ `*' в буквальном смысле, вы должны экранировать его с помощью обратного слэша.

Директива pta_auth_method может указывать метод аутентификации. Вы можете выбрать тип строки запроса, cookie или оба в качестве метода.

В случае обоих методов сначала оценивается строка запроса, а затем cookie, если параметр pta не включен в строку запроса. Когда параметр pta в строке запроса недействителен, аутентификация не проходит, и не происходит возврат к оценке cookie. Только если параметр pta отсутствует в строке запроса, оценивается cookie.

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-pta.