Aller au contenu

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.


LuaRocks Releases License

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.