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. Ensuite, vous pouvez procéder avec les é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.0 publiée le 30 juillet 2026.
Synopsis
location / {
access_by_lua_block {
local t1k = require "resty.t1k"
local t = {
mode = "block", -- block ou monitor ou off, par défaut off
host = "unix:/workdir/snserver.sock", -- requis, hôte du service de détection SafeLine WAF, socket de domaine unix, IP ou domaine est supporté, chaîne
port = 8000, -- requis lorsque l'hôte est une IP ou un domaine, port du service de détection SafeLine WAF, entier
connect_timeout = 1000, -- délai d'attente de connexion, en millisecondes, entier, par défaut 1s (1000ms)
send_timeout = 1000, -- délai d'attente d'envoi, en millisecondes, entier, par défaut 1s (1000ms)
read_timeout = 1000, -- délai d'attente de lecture, en millisecondes, entier, par défaut 1s (1000ms)
req_body_size = 1024, -- taille du corps de la requête, en Ko, entier, par défaut 1 Mo (1024 Ko)
keepalive_size = 256, -- nombre maximum de connexions inactives simultanées au service de détection SafeLine WAF, entier, par défaut 256
keepalive_timeout = 60000, -- délai d'attente de connexion inactive, en millisecondes, entier, par défaut 60s (60000ms)
remote_addr = "http_x_forwarded_for: 1", -- adresse distante de ngx.var.VARIABLE, chaîne, par défaut de ngx.var.remote_addr
log_resp = false, -- signaler la réponse au service de détection SafeLine WAF, booléen, par défaut false
resp_body_size = 4, -- taille du corps de la réponse à signaler, en Ko, entier, par défaut 4 Ko, utilisé uniquement lorsque log_resp est vrai
extra_ignored_content_types = "text/csv", -- types de contenu de réponse supplémentaires à ignorer, séparés par des virgules, chaîne, utilisé uniquement lorsque log_resp est vrai
}
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()
}
-- les deux blocs suivants ne sont requis que lorsque log_resp est vrai
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 d'état de la réponse, les en-têtes et jusqu'à resp_body_size Ko du corps de la réponse sont
signalés au service de détection SafeLine WAF après la fin de la requête. Le rapport est envoyé depuis un ngx.timer, donc il
n'ajoute 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, en tant que 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 de requête | ✅ | ✅ |
| Détection de réponse | ❌ | ✅ |
| 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 de 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 pour nginx-module-t1k.