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.
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.