t1k: Implementação Lua do protocolo T1K para Chaitin/SafeLine WAF
Instalação
Se você ainda não configurou a assinatura do repositório RPM, inscreva-se. Em seguida, você pode prosseguir com os seguintes passos.
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
Para usar esta biblioteca Lua com NGINX, certifique-se de que o nginx-module-lua esteja instalado.
Este documento descreve lua-resty-t1k v1.2.0 lançado em 30 de julho de 2026.
Sinopse
location / {
access_by_lua_block {
local t1k = require "resty.t1k"
local t = {
mode = "block", -- block ou monitor ou off, padrão off
host = "unix:/workdir/snserver.sock", -- obrigatório, host do serviço de detecção SafeLine WAF, socket de domínio unix, IP ou domínio são suportados, string
port = 8000, -- obrigatório quando o host é um IP ou domínio, porta do serviço de detecção SafeLine WAF, inteiro
connect_timeout = 1000, -- tempo limite de conexão, em milissegundos, inteiro, padrão 1s (1000ms)
send_timeout = 1000, -- tempo limite de envio, em milissegundos, inteiro, padrão 1s (1000ms)
read_timeout = 1000, -- tempo limite de leitura, em milissegundos, inteiro, padrão 1s (1000ms)
req_body_size = 1024, -- tamanho do corpo da solicitação, em KB, inteiro, padrão 1MB (1024KB)
keepalive_size = 256, -- número máximo de conexões ociosas simultâneas com o serviço de detecção SafeLine WAF, inteiro, padrão 256
keepalive_timeout = 60000, -- tempo limite de conexão ociosa, em milissegundos, inteiro, padrão 60s (60000ms)
remote_addr = "http_x_forwarded_for: 1", -- endereço remoto de ngx.var.VARIABLE, string, padrão de ngx.var.remote_addr
log_resp = false, -- reportar a resposta ao serviço de detecção SafeLine WAF, booleano, padrão false
resp_body_size = 4, -- tamanho do corpo da resposta a ser reportado, em KB, inteiro, padrão 4KB, usado apenas quando log_resp é true
extra_ignored_content_types = "text/csv", -- tipos de conteúdo de resposta adicionais a serem ignorados, separados por vírgula, string, usado apenas quando log_resp é 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()
}
-- os dois blocos a seguir são necessários apenas quando log_resp é 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()
}
}
Registro de Respostas
Quando log_resp está habilitado, a linha de status da resposta, cabeçalhos e até resp_body_size KB do corpo da resposta são reportados ao serviço de detecção SafeLine WAF após a conclusão da solicitação. O relatório é enviado de um ngx.timer, portanto, não adiciona latência à própria resposta.
As respostas são ignoradas quando a solicitação já foi bloqueada ou quando o Content-Type da resposta corresponde a um tipo ignorado embutido (áudio, vídeo, fonte, imagem e outros tipos de mídia binária). Use extra_ignored_content_types para ignorar tipos de conteúdo adicionais.
Lua Resty T1K vs. C T1K
C T1K, como parte da edição empresarial da SafeLine, é um modo de implantação desenvolvido em linguagem C para desempenho aprimorado. É compatível com todas as versões do Nginx e não requer implantação via OpenResty (lua_nginx_module).
| Lua Resty T1K | C T1K | |
|---|---|---|
| Detecção de Solicitação | ✅ | ✅ |
| Detecção de Resposta | ❌ | ✅ |
| Verificações de Saúde* | ❌ | ✅ |
| Proteção de Cookies | ❌ | ✅ |
| Proteção contra Bots | ❌ | ✅ |
| Estatísticas do lado do Proxy | ❌ | ✅ |
* APISIX implementa funcionalidade de verificação de saúde para o plugin chaitin-waf. Para mais informações, consulte a documentação do chaitin-waf.
GitHub
Você pode encontrar dicas de configuração adicionais e documentação para este módulo no repositório do GitHub para nginx-module-t1k.