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

t1k: Lua-реализация протокола T1K для Chaitin/SafeLine WAF

Установка

Если вы ещё не настроили подписку на RPM-репозиторий, зарегистрируйтесь. Затем вы можете выполнить следующие шаги.

CentOS/RHEL 7 или Amazon Linux 2

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 lua-resty-t1k

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-t1k

Для использования этой Lua-библиотеки с NGINX убедитесь, что установлен nginx-module-lua.

В этом документе описывается lua-resty-t1k v1.2.1, выпущенный 5 августа 2026 года.


LuaRocks Releases License

Краткий обзор

location / {
    access_by_lua_block {
        local t1k = require "resty.t1k"

        local t = {
            mode = "block",                            -- block или monitor или off, по умолчанию off
            host = "unix:/workdir/snserver.sock",      -- обязательно, хост службы обнаружения SafeLine WAF, поддерживаются unix domain socket, IP или домен, строка
            port = 8000,                               -- обязательно, если host является IP-адресом или доменом, порт службы обнаружения SafeLine WAF, целое число
            connect_timeout = 1000,                    -- таймаут подключения, в миллисекундах, целое число, по умолчанию 1с (1000мс)
            send_timeout = 1000,                       -- таймаут отправки, в миллисекундах, целое число, по умолчанию 1с (1000мс)
            read_timeout = 1000,                       -- таймаут чтения, в миллисекундах, целое число, по умолчанию 1с (1000мс)
            req_body_size = 1024,                      -- размер тела запроса, в КБ, целое число, по умолчанию 1МБ (1024КБ)
            keepalive_size = 256,                      -- максимальное количество одновременных простаивающих соединений со службой обнаружения SafeLine WAF, целое число, по умолчанию 256
            keepalive_timeout = 60000,                 -- таймаут простаивающего соединения, в миллисекундах, целое число, по умолчанию 60с (60000мс)
            remote_addr = "http_x_forwarded_for: 1",   -- удалённый адрес из ngx.var.VARIABLE, строка, по умолчанию из ngx.var.remote_addr
            log_resp = false,                          -- отправлять ответ службе обнаружения SafeLine WAF, логическое значение, по умолчанию false
            resp_body_size = 4,                        -- размер тела ответа для отправки, в КБ, целое число, по умолчанию 4КБ, используется только когда log_resp равно true
            extra_ignored_content_types = "text/csv",  -- дополнительные типы содержимого ответа для пропуска, через запятую, строка, используется только когда log_resp равно true
        }

        local ok, err, _ = t1k.do_access(t, true)
        if not ok then 
            ngx.log(ngx.ERR, err)
        end
    }

    header_filter_by_lua_block {
        local t1k = require "resty.t1k"
        t1k.do_header_filter()
    }

    -- следующие два блока требуются только когда log_resp равно true
    body_filter_by_lua_block {
        local t1k = require "resty.t1k"
        t1k.do_body_filter()
    }

    log_by_lua_block {
        local t1k = require "resty.t1k"
        t1k.do_log()
    }
}

Журналирование ответов

Когда log_resp включён, строка состояния ответа, заголовки и до resp_body_size КБ тела ответа отправляются службе обнаружения SafeLine WAF после завершения запроса. Отчёт отправляется из ngx.timer, поэтому он не добавляет задержку к самому ответу.

Ответы пропускаются, когда запрос уже был заблокирован, или когда Content-Type ответа соответствует встроенному игнорируемому типу (аудио, видео, шрифты, изображения и другие бинарные медиатипы). Используйте extra_ignored_content_types, чтобы пропускать дополнительные типы содержимого.

Lua Resty T1K против C T1K

C T1K, как часть корпоративной версии SafeLine, — это режим развёртывания, реализованный на языке C для повышения производительности. Он совместим со всеми версиями Nginx и не требует развёртывания через OpenResty (lua_nginx_module).

Lua Resty T1K C T1K
Обнаружение запросов
Обнаружение ответов
Проверки здоровья*
Защита cookie
Защита от ботов
Статистика на стороне прокси

* APISIX реализует функциональность проверки здоровья для плагина chaitin-waf. Для получения дополнительной информации обратитесь к документации chaitin-waf.

GitHub

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