自学内容网 自学内容网

雷池+frp 批量设置proxy_protocol实现真实IP透传

需求背景

在内网环境中部署了safeline安全防护系统,希望通过frp实现外网对内部web网站服务的访问,并确保safeline能够记录真实的攻击IP来源。由于safeline和frp都部署在同一台服务器上,我们需要通过配置来实现这一需求。

frp客户端配置

对于frpc(frp客户端),我们只需在https配置上添加transport.proxyProtocolVersion = "v2"即可实现proxy_protocol的支持。例如:

[[proxies]]
name = "web1"
type = "https"
localIP = "192.168.2.103"
localPort = 443
subdomain = "web1"
transport.proxyProtocolVersion = "v2"

[[proxies]]
name = "web2"
type = "https"
localIP = "192.168.2.103"
localPort = 443
subdomain = "web2"
transport.proxyProtocolVersion = "v2"

保存配置并重启frp服务后,frpc将支持proxy_protocol。

safeline配置

由于safeline不支持通过web界面添加proxy_protocol支持,我们需要直接修改其配置文件。

  1. 修改proxy_params配置文件

编辑/data/safeline/resources/nginx/proxy_params文件,全局开启proxy_protocol,并设置set_real_ip_from为frps服务器的IP地址。例如:

set_real_ip_from 服务器的IP地址;
real_ip_header proxy_protocol;
  1. 创建config-proxy_protocol.sh脚本

为了批量添加或移除所有站点的proxy_protocol支持,我们创建一个脚本。该脚本会遍历/data/safeline/resources/nginx/sites-enabled目录下的所有IF_backend文件,并在监听部分添加或移除proxy_protocol支持。

脚本内容如下(请根据实际情况修改主域名和白名单子域名):

#!/bin/bash

# 主域名
main_domain="ttxs.com"

# 白名单子域名列表
whitelist_subdomains=("op1" "op2")

# ...(省略部分代码)

# 主处理逻辑
for file in IF_backend_*; do
    [ -f "$file" ] || continue
    # ...(省略部分代码)
done

# 测试并重新加载Nginx配置
echo "测试Nginx配置..."
if docker exec safeline-tengine nginx -t; then
    echo "重新加载Nginx配置..."
    docker exec safeline-tengine nginx -s reload
    echo "操作完成"
else
    echo "Nginx配置测试失败,未重新加载配置"
    exit 1
fi

给脚本添加执行权限后,即可通过传入参数truefalse来批量添加或移除proxy_protocol支持。

测试与验证

完成上述配置后,访问配置好的域名,检查小地图是否正常显示归属地,以验证配置是否成功。

通过以上步骤,我们实现了在内网部署safeline并通过frp让外网访问内部web网站服务的同时,确保safeline能够记录真实的攻击IP来源。


原文地址:https://blog.csdn.net/qq_60548077/article/details/142304694

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!