宝塔面板6.X免费版 开启隐藏的ngx_lua_waf防火墙 宝塔面板5.9版本nginx中的过滤器

云服务器教程 aliyun 80℃ 0评论

很多人可能不知道,跟宝塔面板5.9版本一样,其实宝塔面板6.x系列的免费版其实是有个nginx防火墙(5.9版本中Nginx设置里的过滤器)的,只不过到6.x系列之后,这个功能的相关设置界面阉割掉了。

下面小编给大家说下如何在宝塔面板6.X免费版中开启隐藏的nginx防火墙。

第一:NGINX配置修改

1、打开 软件管理 > Nginx > 设置 > 配置修改

2、找到大约在第 13 行的 #include luawaf.conf;,去掉前面的 # 符号(“#”代表注释),保存并重启 Nginx。如图:

3、恭喜你,已经成功开启了防火墙!可以试着访问 http://你的网址/?id=../etc/passwd,页面会弹出拦截提示,如下图:

第二:配置规则

既然,已经开启了防火墙,那么规则在哪里?

打开面板的文件管理,进入 /www/server/nginx/waf 目录,里面的 config.lua 文件就是防火墙的配置文件。每一项的具体含义如下所示:

RulePath = "/www/server/panel/vhost/wafconf/"   --waf 详细规则存放目录(一般无需修改)
attacklog = "on"                                --是否开启攻击日志记录(on 代表开启,off 代表关闭。下同)
logdir = "/www/wwwlogs/waf/"                    --攻击日志文件存放目录(一般无需修改)
UrlDeny="on"                                    --是否开启恶意 url 拦截
Redirect="on"                                   --拦截后是否重定向
CookieMatch="off"                               --是否开启恶意 Cookie 拦截
postMatch="off"                                 --是否开启 POST 攻击拦截
whiteModule="on"                                --是否开启 url 白名单
black_fileExt={"php","jsp"}                     --文件后缀名上传黑名单,如有多个则用英文逗号分隔。如:{"后缀名1","后缀名2","后缀名3"……}
ipWhitelist={"127.0.0.1"}                       --白名单 IP,如有多个则用英文逗号分隔。如:{"127.0.0.1","127.0.0.2","127.0.0.3"……} 下同
ipBlocklist={"1.0.0.1"}                         --黑名单 IP
CCDeny="off"                                    --是否开启 CC 攻击拦截
CCrate="300/60"                                 --CC 攻击拦截阈值,单位为秒。"300/60" 代表 60 秒内如果同一个 IP 访问了 300 次则拉黑

配置文件中,RulePath 项对应的文件夹里存放的是具体的拦截规则。打开这个文件夹,可以看到里面有一些无后缀名的规则文件。其中每一个文件的作用如下:

  1. args GET 参数拦截规则
  2. blockip –无作用
  3. cookie Cookie 拦截规则
  4. denycc –无作用
  5. post POST 参数拦截规则
  6. returnhtml –被拦截后的提示页面(HTML
  7. url url 拦截规则
  8. useragent UA 拦截规则
  9. whiteip –无作用
  10. whiteurl –白名单网址

这些文件里,除了 returnhtml(拦截提示页面)以外,其它的内容都最好不要改动,除非你正则学的比较好……否则很容易改出问题来。如图:

宝塔面板6.X开启隐藏的 waf 防火墙的方法

如果改动了其中的内容,记得要重启 Nginx 才会生效哦!!!!

第三:修改过滤器的IP获取规则

拿到的都是CDN的IP就没有太大意义了,所以必须拿到真实IP,所以得改造一下获取规则。在根目录/www/server/nginx/waf下面,找到init.lua文件,点编辑,第18行是IP=ngx.var.remote_addr。很显然,直接去拿remote_addr的IP来用了,那些被CDN代理后的IP全被隐匿了。所以这里需要把函数getClientIp给改一下,如下图。

function getClientIp()
        local headers=ngx.req.get_headers()
        local IP=headers["X-REAL-IP"] or headers["X_FORWARDED_FOR"] or ngx.var.remote_addr
        if IP == nil then
                IP  = "unknown"
        end
        return IP
end

 

改完保存后,这样可以能获取到真实IP了。

其实这个免费的防火墙就是 ngx_lua_waf。宝塔面板那个收费的防火墙跟这个是完全不一样的。功能上更加完善,使用起来更加方便。如果你有钱,也可以直接买个收费版,没必要用这个了,而且用起来还挺麻烦的。

转载请注明:老水云服务器博客 » 宝塔面板6.X免费版 开启隐藏的ngx_lua_waf防火墙 宝塔面板5.9版本nginx中的过滤器

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址