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


LuaRocks Releases License

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.