t1k : Implémentation Lua du protocole T1K pour Chaitin/SafeLine WAF
Installation
Si vous n'avez pas encore configuré l'abonnement au dépôt RPM, inscrivez-vous. Vous pouvez ensuite procéder aux étapes suivantes.
CentOS/RHEL 7 ou 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
Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.
Ce document décrit lua-resty-t1k v1.2.1 publié le 05 août 2026.
Synopsis
location / {
access_by_lua_block {
local t1k = require "resty.t1k"
local t = {
mode = "block", -- block or monitor or off, default off
host = "unix:/workdir/snserver.sock", -- required, SafeLine WAF detection service host, unix domain socket, IP, or domain is supported, string
port = 8000, -- required when the host is an IP or domain, SafeLine WAF detection service port, integer
connect_timeout = 1000, -- connect timeout, in milliseconds, integer, default 1s (1000ms)
send_timeout = 1000, -- send timeout, in milliseconds, integer, default 1s (1000ms)
read_timeout = 1000, -- read timeout, in milliseconds, integer, default 1s (1000ms)
req_body_size = 1024, -- request body size, in KB, integer, default 1MB (1024KB)
keepalive_size = 256, -- maximum concurrent idle connections to the SafeLine WAF detection service, integer, default 256
keepalive_timeout = 60000, -- idle connection timeout, in milliseconds, integer, default 60s (60000ms)
remote_addr = "http_x_forwarded_for: 1", -- remote address from ngx.var.VARIABLE, string, default from ngx.var.remote_addr
log_resp = false, -- report the response to the SafeLine WAF detection service, boolean, default false
resp_body_size = 4, -- response body size to report, in KB, integer, default 4KB, only used when log_resp is true
extra_ignored_content_types = "text/csv", -- extra response content types to skip, comma separated, string, only used when log_resp is 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()
}
-- the following two blocks are only required when log_resp is 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()
}
}
Journalisation des réponses
Lorsque log_resp est activé, la ligne de statut de la réponse, les en-têtes et jusqu'à resp_body_size Ko du corps de la réponse sont
transmis au service de détection SafeLine WAF après la fin de la requête. Le rapport est envoyé depuis un ngx.timer, il
n'ajoute donc pas de latence à la réponse elle-même.
Les réponses sont ignorées lorsque la requête a déjà été bloquée, ou lorsque le Content-Type de la réponse correspond à un
type ignoré intégré (audio, vidéo, police, image et autres types de médias binaires). Utilisez extra_ignored_content_types pour ignorer
des types de contenu supplémentaires.
Lua Resty T1K vs. C T1K
C T1K, faisant partie de l'édition entreprise de SafeLine, est un mode de déploiement conçu en langage C pour des performances améliorées. Il est compatible avec toutes les versions de Nginx et ne nécessite pas de déploiement via OpenResty (lua_nginx_module).
| Lua Resty T1K | C T1K | |
|---|---|---|
| Détection des requêtes | ✅ | ✅ |
| Détection des réponses | ❌ | ✅ |
| Vérifications de santé* | ❌ | ✅ |
| Protection des cookies | ❌ | ✅ |
| Protection contre les bots | ❌ | ✅ |
| Statistiques côté proxy | ❌ | ✅ |
* APISIX implémente la fonctionnalité de vérification de santé pour le plugin chaitin-waf. Pour plus d'informations, veuillez consulter la documentation chaitin-waf.
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub de nginx-module-t1k.