t1k: Lua реализация протокола T1K для WAF Chaitin/SafeLine
Установка
Если вы еще не подписались на RPM репозиторий, зарегистрируйтесь. Затем вы можете продолжить с следующими шагами.
CentOS/RHEL 7 или 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
Чтобы использовать эту библиотеку Lua с NGINX, убедитесь, что nginx-module-lua установлен.
Этот документ описывает lua-resty-t1k v1.2.0, выпущенную 30 июля 2026 года.
Синопсис
location / {
access_by_lua_block {
local t1k = require "resty.t1k"
local t = {
mode = "block", -- block или monitor или off, по умолчанию off
host = "unix:/workdir/snserver.sock", -- обязательно, хост службы обнаружения SafeLine WAF, поддерживается unix domain socket, IP или домен, строка
port = 8000, -- обязательно, когда хост является IP или доменом, порт службы обнаружения SafeLine WAF, целое число
connect_timeout = 1000, -- таймаут подключения, в миллисекундах, целое число, по умолчанию 1с (1000мс)
send_timeout = 1000, -- таймаут отправки, в миллисекундах, целое число, по умолчанию 1с (1000мс)
read_timeout = 1000, -- таймаут чтения, в миллисекундах, целое число, по умолчанию 1с (1000мс)
req_body_size = 1024, -- размер тела запроса, в КБ, целое число, по умолчанию 1МБ (1024КБ)
keepalive_size = 256, -- максимальное количество одновременно неактивных соединений с службой обнаружения SafeLine WAF, целое число, по умолчанию 256
keepalive_timeout = 60000, -- таймаут неактивного соединения, в миллисекундах, целое число, по умолчанию 60с (60000мс)
remote_addr = "http_x_forwarded_for: 1", -- удаленный адрес из ngx.var.VARIABLE, строка, по умолчанию из ngx.var.remote_addr
log_resp = false, -- отправлять ответ в службу обнаружения SafeLine WAF, логическое значение, по умолчанию false
resp_body_size = 4, -- размер тела ответа для отчета, в КБ, целое число, по умолчанию 4КБ, используется только когда log_resp равно true
extra_ignored_content_types = "text/csv", -- дополнительные типы контента ответа для пропуска, через запятую, строка, используется только когда 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()
}
-- следующие два блока необходимы только когда 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()
}
}
Логирование ответов
Когда log_resp включен, строка состояния ответа, заголовки и до resp_body_size КБ тела ответа отправляются в службу обнаружения SafeLine WAF после завершения запроса. Отчет отправляется из ngx.timer, поэтому это не добавляет задержку к самому ответу.
Ответы пропускаются, если запрос уже был заблокирован или если Content-Type ответа соответствует встроенному игнорируемому типу (аудио, видео, шрифт, изображение и другие бинарные медиа типы). Используйте extra_ignored_content_types, чтобы пропустить дополнительные типы контента.
Lua Resty T1K против C T1K
C T1K, как часть корпоративной версии SafeLine, является режимом развертывания, созданным на языке C для повышения производительности. Он совместим со всеми версиями Nginx и не требует развертывания через OpenResty (lua_nginx_module).
| Lua Resty T1K | C T1K | |
|---|---|---|
| Обнаружение запроса | ✅ | ✅ |
| Обнаружение ответа | ❌ | ✅ |
| Проверки состояния* | ❌ | ✅ |
| Защита куки | ❌ | ✅ |
| Защита от ботов | ❌ | ✅ |
| Статистика на стороне прокси | ❌ | ✅ |
* APISIX реализует функциональность проверки состояния для плагина chaitin-waf. Для получения дополнительной информации смотрите документацию chaitin-waf.
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-t1k.