Saltar a contenido

t1k: Implementación en Lua del protocolo T1K para Chaitin/SafeLine WAF

Instalación

Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.

CentOS/RHEL 7 o 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

Para usar esta biblioteca Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.

Este documento describe lua-resty-t1k v1.2.0 lanzado el 30 de julio de 2026.


LuaRocks Releases License

Sinopsis

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

        local t = {
            mode = "block",                            -- bloquear o monitorear o desactivar, por defecto desactivado
            host = "unix:/workdir/snserver.sock",      -- requerido, host del servicio de detección SafeLine WAF, se admite socket de dominio unix, IP o dominio, cadena
            port = 8000,                               -- requerido cuando el host es una IP o dominio, puerto del servicio de detección SafeLine WAF, entero
            connect_timeout = 1000,                    -- tiempo de espera de conexión, en milisegundos, entero, por defecto 1s (1000ms)
            send_timeout = 1000,                       -- tiempo de espera de envío, en milisegundos, entero, por defecto 1s (1000ms)
            read_timeout = 1000,                       -- tiempo de espera de lectura, en milisegundos, entero, por defecto 1s (1000ms)
            req_body_size = 1024,                      -- tamaño del cuerpo de la solicitud, en KB, entero, por defecto 1MB (1024KB)
            keepalive_size = 256,                      -- máximo de conexiones inactivas concurrentes al servicio de detección SafeLine WAF, entero, por defecto 256
            keepalive_timeout = 60000,                 -- tiempo de espera de conexión inactiva, en milisegundos, entero, por defecto 60s (60000ms)
            remote_addr = "http_x_forwarded_for: 1",   -- dirección remota de ngx.var.VARIABLE, cadena, por defecto de ngx.var.remote_addr
            log_resp = false,                          -- reportar la respuesta al servicio de detección SafeLine WAF, booleano, por defecto falso
            resp_body_size = 4,                        -- tamaño del cuerpo de la respuesta a reportar, en KB, entero, por defecto 4KB, solo se usa cuando log_resp es verdadero
            extra_ignored_content_types = "text/csv",  -- tipos de contenido de respuesta adicionales a omitir, separados por comas, cadena, solo se usa cuando log_resp es verdadero
        }

        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()
    }

    -- los siguientes dos bloques son solo requeridos cuando log_resp es verdadero
    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()
    }
}

Registro de Respuestas

Cuando log_resp está habilitado, la línea de estado de respuesta, los encabezados y hasta resp_body_size KB del cuerpo de la respuesta se reportan al servicio de detección SafeLine WAF después de que se completa la solicitud. El informe se envía desde un ngx.timer, por lo que no añade latencia a la respuesta en sí.

Las respuestas se omiten cuando la solicitud ya fue bloqueada, o cuando el Content-Type de la respuesta coincide con un tipo ignorado incorporado (audio, video, fuente, imagen y otros tipos de medios binarios). Usa extra_ignored_content_types para omitir tipos de contenido adicionales.

Lua Resty T1K vs. C T1K

C T1K, como parte de la edición empresarial de SafeLine, es un modo de implementación elaborado en lenguaje C para un rendimiento mejorado. Es compatible con todas las versiones de Nginx y no requiere implementación a través de OpenResty (lua_nginx_module).

Lua Resty T1K C T1K
Detección de Solicitudes
Detección de Respuestas
Chequeos de Salud*
Protección de Cookies
Protección contra Bots
Estadísticas del lado del Proxy

* APISIX implementa la funcionalidad de chequeo de salud para el plugin chaitin-waf. Para más información, consulta la documentación de chaitin-waf.

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-t1k.