「日志记录」雷池WAF+FRP内网穿透折腾日记插图

最近在闲鱼上淘了一个Intel NUC,配置8+256,所以就把之前小主机上的内容搬迁到了这款NUC上。而之前的小主机我就安装了雷池WAF作为防火墙使用。

前提

本文的服务器部署方式如下图所示:

关于雷池

雷池WAF是由长亭科技开发的一款网络安全产品。它的主要功能是实时监测和分析进出你网站的所有流量,迅速识别并阻止恶意攻击。这就像你家门口装了一个智能安保系统,不管是什么样的“坏人”,它都能在第一时间发现并阻止。

雷池WAF:https://waf-ce.chaitin.cn/

复制以下命令执行,即可完成安装

bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"

如果需要使用华为云加速,可使用

CDN=1 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"

如果需要安装最新版本流式检测模式,可使用

STREAM=1 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"

站点添加

在主机上安装好雷池WAF后,进入WAF的管理界面,例如我这里是:

https://192.168.1.102:9443/dashboard

代理设置页面记得设置源IP的获取方式:

「日志记录」雷池WAF+FRP内网穿透折腾日记插图3

内网穿透

FRP官网:https://gofrp.org/zh-cn/

或者自己在GITHUB上找找一键部署的脚本,这里就各位自己去找找了。

注意,在配置文件中记得加以下:

proxy_protocol_version = v2

通过这个proxy_protocol协议,将远程IP以及详细信息反馈给雷池。

注意事项及脚本

由于雷池WAF的nginx是不支持proxy_protocol这个协议,并且每次在添加站点或者在健康检测的时候会重写相关的配置文件,所以这里我编写了以下脚本。

注意,使用默认的在线安装脚本,站点配置文件默认保存在以下目录:

/data/safeline/resources/nginx/sites-enabled

将脚本保存到这个目录执行就可以了。

unlock.sh

#!/bin/bash

# 恢复文件内容,移除 `proxy_protocol` 和在 `gateway_timeout_page;` 下一行的 4 行内容:
# \n```
# set_real_ip_from 192.168.0.0/16;
# set_real_ip_from 10.0.0.0/8;
# real_ip_recursive on;
# real_ip_header proxy_protocol;
# ```

find ./ -name "IF_backend_*" | while read filename; do

  if grep -q "proxy_protocol" "$filename"; then
    # 解锁
    chattr -i "$filename"

    # 移除所有 listen 语句中的 proxy_protocol
    sed -i '/listen.*proxy_protocol;/s/ proxy_protocol//' "$filename"
    
    # 移除在 gateway_timeout_page; 后添加的新的配置
    sed -i '/gateway_timeout_page;/,/^$/{
      /gateway_timeout_page;/!{
        /set_real_ip_from 127.0.0.1;/d
        /real_ip_recursive on;/d
        /real_ip_header proxy_protocol;/d
      }
    }' "$filename"
    
  else
    echo "文件 $filename 未包含 proxy_protocol,无需恢复。"
  fi
done

该脚本需要在修改站点(添加站点)配置的时候添加,包括在设置WAF的代理设置的时候,也需要运行。

set_proxy.sh

#!/bin/bash

# 查找所有匹配的文件并处理
find ./ -name "IF_backend_*" | while read filename; do

  # 检查文件中是否已经包含 proxy_set_header X-Real-IP
  if grep -q "proxy_set_header X-Real-IP" "$filename"; then
    echo "文件 $filename 已包含 proxy_set_header X-Real-IP,无需修改。"
  else
    # 解锁文件
    chattr -i "$filename"

    # 获取缩进前缀
    indent=$(grep -oP '^\s*' "$filename" | grep -m1 '')

    sed -i "/proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;/i ${indent}proxy_set_header X-Real-IP \$proxy_protocol_addr;" "$filename"
    echo "文件 $filename 已添加 proxy_set_header X-Real-IP $proxy_protocol_addr;"
  fi
done

该代码的作用是在所有的雷池站点配置文件中,添加proxy_set_header X-Real-IP $proxy_protocol_addr;,如果不添加这行header,那么当你的站点使用HTTPS时,WAF无法正常获取从FRP解析过来的IP信息等,所以这行很重要。

大多数网络上的教程都是不使用FRP的HTTPS,而是用Nginx再做一次转发,就很麻烦。

modify.sh

#!/bin/bash

# 修改文件内容在 `listen` 语句后面加上 `proxy_protocol`, 在 `gateway_timeout_page;` 下一行加上 4 行内容:
# \n```
# set_real_ip_from 192.168.0.0/16;
# set_real_ip_from 10.0.0.0/8;
# real_ip_recursive on;
# real_ip_header proxy_protocol;
# ```

find ./ -name "IF_backend_*" | while read filename; do

  if grep -q "proxy_protocol;" "$filename"; then
    echo "文件 $filename 已包含 proxy_protocol,无需修改。"
  else
    # 解锁
    chattr -i "$filename"

    # 在所有 listen 语句后面添加 proxy_protocol
    sed -i '/listen.*;/s/;/ proxy_protocol;/' "$filename"
    
    # 在 gateway_timeout_page; 后添加新的配置
    sed -i '/gateway_timeout_page;/a \
    set_real_ip_from 127.0.0.1;\
    real_ip_recursive on;\
    real_ip_header proxy_protocol;' "$filename"
    
    # 锁定文件
    chattr +i "$filename"
  fi
done

# 测试 Nginx 配置
docker exec -it safeline-tengine nginx -t

# 重载 Nginx 配置
docker exec -it safeline-tengine nginx -s reload

该脚本在添加完毕或者修改完毕站点配置,以及代理设置完毕后再执行该脚本,目的是增加proxy_protocol协议透传。

unfile.sh

#!/bin/bash

# 恢复文件内容,移除 `proxy_protocol` 和在 `gateway_timeout_page;` 下一行的 4 行内容:
# \n```
# set_real_ip_from 192.168.0.0/16;
# set_real_ip_from 10.0.0.0/8;
# real_ip_recursive on;
# real_ip_header proxy_protocol;
# ```

find ./ -name "IF_backend_*" | while read filename; do
  chattr -i "$filename"
done

该脚本用于当权限出现问题时,解锁所有的配置文件。

相关文件

偷懒的脚本文件在这儿,我已经打包上传到网盘上了。若有问题,请留言反馈。或者右下角联系博主配置。

相关脚本文件

发布时间 2024年 5月 29日 更新时间 2024年 5月 29日 文件大小 2.1 KB 来源 Eswlnk
已经回复?刷新

雷池WAF+FRP配置

¥38.00
已有2人购买

帮助配置一次WAF