-- http-guard 安装目录,修改为实际安装到的目录。-- http-guard 安装目录,修改为实际安装到的目录。 baseDir = '/data/www/waf/'
local Config = { -- key 是否动态生成, 可选 static,dynamic, 如果选 dynamic, 下面所有的 keySecret 不需要更改, 如果选 static, 修改手动修改下面的 keySecret keyDefine = "dynamic",
-- 被动防御, 限制请求模块。根据在一定时间内统计到的请求次数作限制, 建议始终开启 -- state : 为此模块的状态,表示开启或关闭,可选值为 On 或 Off; -- maxReqs,amongTime : 在 amongTime 秒内允许请求的最大次数 maxReqs,如默认的是在 10s 内最大允许请求 50 次。 -- urlProtect : 指定限制请求次数的 url 正则表达式文件,默认值为\.php$,表示只限制 php 的请求 (当然,当 urlMatchMode = "uri"时,此正则才能起作用) limitReqModules = { state = "On" , maxReqs = 50 , amongTime = 10, urlProtect = baseDir.."url-protect/limit.txt" },
-- 主动防御,302 响应头跳转模块。利用 cc 控制端不支持解析响应头的特点,来识别是否为正常用户,当有必要时才建议开启。 -- state : 为此模块的状态,表示开启或关闭,可选值为 On 或 Off; -- verifyMaxFail amongTime : 因为此模块会发送带有 cckey 及 keyexpire 的 302 响应头,如果访客在 amongTime 时间内超过 verifyMaxFail 次没有跳转到 302 响应头里的 url,就会被添加到黑名单,默认值为 5 次。 -- keySecret : 用于生成 token 的密码, 如果上面的 keyDefine 为 dynamic,就不需要修改 -- urlProtect 同 limitReqModules 模块中的 urlProtect 的解释。 redirectModules = { state = "Off" ,verifyMaxFail = 5, keySecret = 'yK48J276hg', amongTime = 60 ,urlProtect = baseDir.."url-protect/302.txt"},
-- 主动防御, 发送 js 跳转代码模块。利用 cc 控制端无法解析 js 跳转的特点,来识别是否为正常用户,当有必要时才建议开启。 -- state : 为此模块的状态,表示开启或关闭,可选值为 On 或 Off; -- verifyMaxFail amongTime : 因为此模块会发送带有 js 跳转代码的响应体,如果访客在 amongTime 时间内超过 verifyMaxFail 次没有跳转到 js 跳转代码里的 url,就会被添加到黑名单,默认值为 5 次。 -- keySecret : 用于生成 token 的密码, 如果上面的 keyDefine 为 dynamic,就不需要修改 -- urlProtect 同 limitReqModules 模块中的 urlProtect 的解释。 JsJumpModules = { state = "Off" ,verifyMaxFail = 5, keySecret = 'QSjL6p38h9', amongTime = 60 , urlProtect = baseDir.."url-protect/js.txt"},
-- 主动防御, 发送 cookie 验证模块。此模块会向访客发送 cookie,然后等待访客返回正确的 cookie,此模块利用 cc 控制端无法支持 cookie 的特点,来识别 cc 攻击, 当有必要时才建议开启 -- state : 为此模块的状态,表示开启或关闭,可选值为 On 或 Off; -- verifyMaxFail amongTime : 因为此模块会发送 cookie,如果访客在 amongTime 时间内超过 verifyMaxFail 次没有返回正确的 cookie,就会被添加到黑名单,默认值为 5 次。 -- keySecret : 用于生成 token 的密码, 如果上面的 keyDefine 为 dynamic,就不需要修改 -- urlProtect 同 limitReqModules 模块中的 urlProtect 的解释。 cookieModules = { state = "Off" ,verifyMaxFail = 5, keySecret = 'bGMfY2D5t3', amongTime = 60 , urlProtect = baseDir.."url-protect/cookie.txt"},
-- 自动开启主动防御, 原理是根据 protectPort 端口的已连接数超过 maxConnection 来确定 -- state : 为此模块的状态,表示开启或关闭,可选值为 On 或 Off; -- interval 间隔 30 秒检查一次连接数,默认为 30 秒。 -- protectPort,maxConnection,normalTimes,exceedTimes : enableModule 中的模块为关闭状态时,当端口 protectPort 的连接数连续 exceedTimes 次超过 maxConnection 时,开启 enableModule 中的模块; -- enableModule 中的模块为开启状态时,当端口 protectPort 的连接数连续 normalTimes 次低于 maxConnection 时,关闭 enableModule 中的模块。 -- ssCommand : 我们是使用 ss 命令来检查特定端口的已连接的连接数,ss 命令比同类的命令 netstat 快得多。请把 ss 命令的路径改为自己系统上的路径。 -- enableModules : 自动启动哪个主动防御模块, 可选值为 redirectModules JsJumpModules cookieModules autoEnable = { state = "off", protectPort = "80", interval = 30, normalTimes = 3,exceedTimes = 2,maxConnection = 500, ssCommand = "/usr/sbin/ss" ,enableModule = "redirectModules"},
-- 用于当输入验证码验证通过时, 生成 key 的密码. 如果上面的 keyDefine 为 dynamic,就不需要修改 captchaKey = "K4QEaHjwyF",
-- ip 在黑名单时执行的动作 (可选值 captcha,forbidden,iptables) -- 值为 captcha 时, 表示 ip 在黑名单后返回带有验证码的页面, 输入正确的验证码才允许继续访问网站 -- 值为 forbidden 时, 表示 ip 在黑名单后, 服务器会直接断开与用户的连接. -- 值为 iptables 时, 表示 ip 在黑名单后,http-guard 会用 iptables 封锁此 ip 的连接 -- 当值为 iptables 时, 需要为 nginx 运行用户设置密码及添加到 sudo 以便能执行 iptables 命令。假设 nginx 运行用户为 www, 设置方法为: -- 1. 设置 www 密码,命令为 passwd www -- 2. 以根用户执行 visudo 命令,添加 www ALL=(root) /sbin/iptables -I INPUT -p tcp -s [0-9.]* --dport 80 -j DROP -- 3. 以根用户执行 visudo 命令,找到 Default requiretty 注释,即更改为 #Default requiretty,如果找不到此设置,就不需要改。 blockAction = "captcha",
-- nginx 运行用户的 sudo 密码,blockAction 值为 iptables 需要设置, 否则不需要 sudoPass = '',
-- 表示 http-guard 封锁 ip 的时间 blockTime = 600,
-- JsJumpModules redirectModules cookieModules 验证通过后,ip 在白名单的时间 whiteTime = 600,
-- 用于生成 token 密码的 key 过期时间 keyExpire = 600,
-- 匹配 url 模式,可选值 requestUri,uri -- 值 requestUri 时,url-protect 目录下的正则匹配的是浏览器最初请求的地址且没有被 decode, 带参数的链接 -- 值为 uri 时, url-protect 目录下的正则匹配的是经过重写过的地址, 不带参数, 且已经 decode. urlMatchMode = "uri", -- 验证码页面路径, 一般不需要修改 captchaPage = baseDir.."html/captcha.html",
-- 输入验证码错误时显示的页面路径, 一般不需要修改 reCaptchaPage = baseDir.."html/reCatchaPage.html",
-- 白名单 ip 文件, 文件内容为正则表达式。 whiteIpModules = { state = "Off", ipList = baseDir.."url-protect/white_ip_list.txt" },
-- 如果需要从请求头获取真实 ip, 此值就需要设置, 如 x-forwarded-for -- 当 state 为 on 时, 此设置才有效 realIpFromHeader = { state = "Off", header = "x-forwarded-for"},
-- 指定验证码图片目录, 一般不需要修改 captchaDir = baseDir.."captcha/",
-- 是否开启 debug 日志 debug = false,
--日志目录, 一般不需要修改. 但需要设置 logs 所有者为 nginx 运行用户,如 nginx 运行用户为 www,则命令为 chown www logs logPath = baseDir.."logs/",}
return Config
文章评论