traefik 通过插件配置WAF

图片[1]-traefik 通过插件配置WAF-RSG-人生观

前言:

由于我用了穿透,有了80 和443 穿透到了内网,在日志上问题,通过ai分析日志是XSS攻击和一些sql攻击,然后我想起来了网站上使用的WAF,至于什么是WAF新手自行百度吧,我这里就不过多解释 了。

在以前的traefik中,是没有办法配置WAF来给反代的web进行防御的,后期traefik推出了插件功能,这时候有大神做出来了相应的插件,来进行配置WAF防御。

配置之前,要知道,如果你配置了WAF,是会影响你的请求的整个流程的速度的,因为多了一些处理过程,所以大家对速度比较敏感的就不用继续往下去配置了。

这里配置的方法,是基于我之前写的几篇教程的基础上做的,如果你不是按照我的方法搭建的traefik,教程你就不可能完全照抄,只能是借鉴,需要根据自己的环境进行相应的修改。

注意:

教程本身是有时效性的,在未来的时间,可能因为版本更新,或者其他不可抗力的问题导致失效,如后期有更新我会尽力进行内容追加。

更新:

由于modsecurity更新,导致原有配置有问题,所以更新一下waf的链接地址

      – “traefik.http.middlewares.waf.plugin.traefik-modsecurity-plugin.modSecurityUrl=http://waf:8080

教程:

添加插件,这个步骤可以在容器启动的CMD追加参数,或者是写静态文件,这里我选择写静态文件,就不去写cmd了,如果后期还有其他插件在追加写CMD 有点麻烦,不如静态文件来的方便。

experimental:
  plugins:
    traefik-modsecurity-plugin:
      moduleName: “github.com/acouvreur/traefik-modsecurity-plugin”
      version: “v1.3.0”

把上面的配置写入到traefik的静态配置文件中,traefik.yml

图片[2]-traefik 通过插件配置WAF-RSG-人生观粘贴的时候,注意缩进,切勿弄错,粘贴完成后重启traefik的容器,可以用命令或者其他工具。

docker restart traefik

到此插件就安装完成了,我们写中间件,在traefik启动的容器上增加两个labels。

      – “traefik.http.middlewares.waf.plugin.traefik-modsecurity-plugin.modSecurityUrl=http://waf:8080”
      – “traefik.http.middlewares.waf.plugin.traefik-modsecurity-plugin.maxBodySize=10485760”

完成后重新生成容器,docker compose up  -d即可。

接下来我们配置waf容器,和dummy,这里我还加了一个website的一个测试用的容器,大家可以酌情选择是否添加,如果不需要可以不要website部分。

####waf
  waf:
    image: owasp/modsecurity-crs:apache
    container_name: “waf”
    environment:
      – TZ=Asia/Shanghai
      – PARANOIA=1
      – ANOMALY_INBOUND=10
      – ANOMALY_OUTBOUND=5
      – BACKEND=http://dummy
####dummy
  dummy:
    image: containous/whoami
    container_name: “dummy”
    environment:
      – “TZ=Asia/Shanghai”
####website
  website:
    image: containous/whoami
    container_name: “website”  
    environment:
      – “TZ=Asia/Shanghai”
    labels:
      – “traefik.enable=true”
      – “traefik.http.routers.website.rule=Host(`website.xxxx.com`)”
      – “traefik.http.services.website.loadbalancer.server.port=80”
      – “traefik.http.routers.website.middlewares=waf@docker”

这里website.xxxx.com是示例域名,需要修改为你的,如果你不喜欢用labels来发现反代,你也可以用动态文件,书写方法我之前写过,在中间件配置中配置就可以了,示例如下。

      middlewares:
        – waf@docker

图片[3]-traefik 通过插件配置WAF-RSG-人生观

我这里用的是compose,所以使用docker compose up -d 直接启动即可。

启动后用域名访问一下看看内容

图片[4]-traefik 通过插件配置WAF-RSG-人生观

看到这里表示访问没问题可以正常反代和访问,下面我们来试试简单一点的xss攻击,来测试一下waf 会不会拒绝我们的请求,在访问的地址后面加上

?test=../etc

在进行访问测试,如果waf功能正常,就会得到下面的反馈。

图片[5]-traefik 通过插件配置WAF-RSG-人生观这里看到了拒绝访问,说明waf已经生效。

下面我们来说说如何把waf添加到反代中,因为这个配置不是所有反代都是有waf防御的功能,添加方法有两种,其实这两种我在上面的部署教程都说出来了,单独摘出来是方便大家后期添加方便查找。

第一种就是我比较喜欢的labels的方式了

    labels:
      – “traefik.http.routers.website.middlewares=waf@docker”

第二种就是写traefik的动态文件

在反代的配置增加waf的中间件

      middlewares:
        – waf@docker

这样就可以了。

结尾:

这里需要注意,这里配置的waf是国外做的一个叫modsecurity我查了一下还挺有名的,国内很多waf相关都有,但是今天我出的教程只是一个带有规则的waf容器,在使用中,会出现waf误判将正常的请求视为攻击的情况,目前我还没有研究怎么自定义规则,在未来一段时间,如果满足家庭使用和我的环境,我可能不会追加规则修改的部分,当然也不排除他的规则误判了我的请求,我可能会考虑去花时间学习,到时候我在分享出来给大家。

因为今天的教程是基于compose写的,基本支持docker 或者支持compose的系统都可以用,unraid安装compose插件也可以,至于模板,看大家把,如果大家需要在下面给我留言,我会抽时间写出来的。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 共3条

请登录后发表评论

    请登录后查看评论内容