t1k: Implementación en Lua del protocolo T1K para Chaitin/SafeLine WAF
Instalación
Si aún no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes continuar 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 librería Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.
Este documento describe lua-resty-t1k v1.2.1 publicado el 05 de agosto de 2026.
Sinopsis
location / {
access_by_lua_block {
local t1k = require "resty.t1k"
local t = {
mode = "block", -- block o monitor o off, por defecto off
host = "unix:/workdir/snserver.sock", -- requerido, host del servicio de detección SafeLine WAF, 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 desde ngx.var.VARIABLE, cadena, por defecto desde ngx.var.remote_addr
log_resp = false, -- reportar la respuesta al servicio de detección SafeLine WAF, booleano, por defecto false
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 true
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 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()
}
-- los siguientes dos bloques solo se requieren cuando log_resp es 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()
}
}
Registro de Respuestas
Cuando log_resp está habilitado, la línea de estado de la 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 la solicitud se completa. 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 creado 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 | ❌ | ✅ |
| Comprobaciones de Salud* | ❌ | ✅ |
| Protección de Cookies | ❌ | ✅ |
| Protección contra Bots | ❌ | ✅ |
| Estadísticas del Lado del Proxy | ❌ | ✅ |
* APISIX implementa la funcionalidad de comprobación 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.