雷池WAF修改“代理时修改请求中的Host头”

问题现象

WAF配置如图,访问www.raynorli.com的流量,经过WAF后向www-source.raynorli.com转发,但是报错502 Bad Gateway,去往上游服务器被Reset

Troubleshooting

研究了一下发现,雷池WAF的代理时修改请求中的Host头在社区版本中仅支持全局模式修改,想要针对每个二级域名修改时需要专(shou)业(qian)版

这意味着所有向后转发的流量,HTTP Header中的都是固定的source.raynorli.com,这显然是不行的

解决方案

由于这是Nginx的基本功能 ,而雷池使用的是基于Nginx改的Tengine,于是想在配置文件中修改一下试试,ChatGPT一下,给了一些指导,简单测试一下,还是挺容易的

  • 进入目录/data/safeline/resources/nginx/sites-enabled
root@iZuf6fp0fnsdjqewe13cbbZ:/data/safeline/resources/nginx/sites-enabled# pwd
/data/safeline/resources/nginx/sites-enabled
  • list出来这是你所有已经配置的站点
root@iZuf6fp0fnsdjqewe13cbbZ:/data/safeline/resources/nginx/sites-enabled# ls -l
total 40
-rw-r--r-- 1 root root  180 Nov 24 22:08 generated
-rw-r--r-- 1 root root 2869 Nov 24 22:15 IF_backend_1
-rw-r--r-- 1 root root 2825 Nov 24 22:08 IF_backend_11
-rw-r--r-- 1 root root 2831 Nov 24 22:08 IF_backend_12
-rw-r--r-- 1 root root 2830 Nov 24 22:41 IF_backend_13
-rw-r--r-- 1 root root 2845 Nov 24 23:02 IF_backend_14
-rw-r--r-- 1 root root 2840 Nov 24 23:03 IF_backend_16
-rw-r--r-- 1 root root 2822 Nov 24 22:08 IF_backend_5
-rw-r--r-- 1 root root 2807 Nov 24 22:08 IF_backend_6
-rw-r--r-- 1 root root  437 Nov 24 23:03 IF_backend_not_found
  • 直接修改这个文件
root@iZuf6fp0fnsdjqewe13cbbZ:/data/safeline/resources/nginx/sites-enabled# vi IF_backend_1
  • 其中upstream中的server就是我们配置的
upstream backend_1 {
    server www-source.raynorli.com:9443;
    keepalive 128;
    keepalive_timeout 75;
}
  • 找到proxy_set_header字段,将其修改成预先做好解析的

www-source.raynorli.com

    location ^~ / {
        proxy_pass https://backend_1;
        proxy_set_header Host "www-source.raynorli.com";
        include proxy_params;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $remote_addr;
        include /etc/nginx/custom_params/backend_1;
  • 重新reload nginx
root@iZuf6fp0fnsdjqewe13cbbZ:/data/safeline/resources/nginx/sites-enabled# docker exec -it safeline-tengine /usr/sbin/nginx -s reload

验证效果

可以在内网的Nginx上看到有Session和上传下载的数据