首页 >>  正文

x-forwarded-for+header

来源:baiyundou.net   日期:2024-08-03

作者:geek玩物

在没有公网ip的情况下想远程访问nas,只能通过各种内网穿透工具的来实现。使用了内网穿透工具的话,nas就没有办法获得访问者的真实ip地址,也就没有办法通过拉黑ip的方式去阻止一些不友好的访问者。

好在http协议可以通过X-Forwarded-For协议来获得用户的真实ip地址,恰巧群晖原生支持这种方式。只需要内网穿透工具开启X-Forwarded-For协议支持就可以了。但如果是https协议则需要Proxy Protocol协议。

显然外网访问nas的时候是需要https来保证安全的,那么就需要使用Proxy Protocol协议来获取用户的真实ip。但群晖原生不支持该协议,需要额外的设置才能支持,所以就有了今天这篇教程。

部署思路

本次教程使用的的内网穿透工具是nps,因为nps不支持Proxy Protocol协议,所以还需要haproxy。如果使用frp的话则不需要haproxy,frp原生支持Proxy Protocol协议。

大概的原理是,在云服务上haproxy作为反代服务器,将用户的真实ip记录在Proxy Protocol中,然后转发给nps,nps在通过tcp隧道转发给内网的Nginx中,Nginx在把数据转给群晖的同时也把用户的真实ip转过去了,这样子群晖读取Proxy Protocol就知道用户真实的ip地址了。

端口规划

这种方式获得真实ip转发配置有点多,所以需要提前规划好转发的端口。以免在后面的配置时搞混了。

首先用户流量先到服务器上的haproxy,haproxy到nps,nps到群晖安装的nginx,nginx在给群晖本身

我的安排是这样子的,大家可以参考一下


云服务器上的1443端口haproxy监听1443端口,加上用户真实ip收转发给nps监听的5043端口


云服务器上的5043端口,nps监听的5043端口这个端口收到的流量会转发给群晖上的5501端口


群晖上的5501端口,群晖上的nginx监听的5501端口,nginx收到流量处理后会传输给群晖上的5001端口,也就是群晖的https端口。


安装教程

1.nps服务端安装

ssh到你的服务器用以下下载你的二进制安装包,大部分的云服务器都是x86-64的,其他架构的请下载合适架构的版本。


mkdir nps && cd nps && wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_arm64_server.tar.gz && tar -zxvf linux_arm64_server.tar.gz


运行下面命令使用vim编辑器编辑nps的配置文件,找到图片上画圈的配置进行更改。


vim conf/nps.conf


由于haproxy默认监听80和443端口,所以这里要更改一下nps的http默认监听端口。第一个红框框住的就是http监听端口的设置,我这里把他们改为了280和2443

第三个框的的选项是域名监听设置和控制面板账户密码设置,为了安全起见一定要更改用户名和密码

第二个框可能是api相关的密钥,建议修改一下

最后按一下“esc”键,然后输入:wq!保存退出,运行下列命令安装并启动


chmod +x nps && ./nps install && nps start


现在在浏览器打开地址:你的服务器ip:8080。能打开nps控制面板,那么nps就已经启动了

2.nps管理面板添加客户端

登陆nps的控制面板,参考下面的图添加一个客户端给群晖使用。

3.群晖安装npc客户端

群晖是有npc客户端套件的,但是官方源并没有提供这个套件。所以你需要添加一个第三方源,比如矿神源

https://spk7.imnks.com/

在套件中心搜索npc就可以找到套件,填上:服务器ip地址:8024和刚才为群晖配置的验证密钥就可以了。在nps控制面板上就看到了群晖上线了。


5.安装haproxy

主流的linux发行版的软件仓库都收录了haproxy,只需要一条命令就可以安装haproxy了。

对于ubuntu/debian用下面的命令安装

apt update && apt upgrade && apt install haproxy

对于centos用下面的命令安装

yum install epel-release -ysudo yum update -y && yum install haproxy -y

用下面的命令编辑haproyx的配置文件

vim /etc/haproxy/haproxy.cfg

按“i”键进入编辑模式,在文件的最后面插入下面的内容,要根据的自己的实际情况更改。


listen web

# haproxy监听的端口1443,根据我的端口规划确定的

bind 0.0.0.0:1443

mode tcp

option forwardfor

#haproxy转发给nps监听的5043端口

server web1 127.0.0.1:5043 send-proxy check inter 3000 fall 3 rise 5


保存配置文件后,运行下面命令启动和重启haproxy


systemctl start haproxy

systemctl restart haproxy


然后运行下面命令检查haproxy是否运行,如果输出下图内容则配置被应用。

systemctl status haproxy

6.配置nginx

群晖的web服务器是nginx,所以我们不需要在去安装一个nginx。使用群晖自带的nginx就行了

首先ssh登陆到群晖,然后用下面的命令并输入管理员密码后进入root模式

sudo -i

输入下面命令查看查看群晖的nginx的配置文件,拉到最后一行看到下图的内容

cat /etc/nginx/nginx.conf

倒数第二行的意识是说,群晖nginx的用户自定义配置保存在/etc/nginx/conf.d/文件夹中,配置文件以http.*.conf命名。比如我命名为http.cip.conf。

这个配置文件比较多,所以我做了一个半成品放在了github中。首先用下面的命令打开到/etc/nginx/conf.d/文件夹

cd /etc/nginx/conf.d/

用下面的命令下载并编辑下载好的nginx配置文件,参考下图红框更改参数。

wget https://github.com/jiefff0/dsip/releases/download/ipip/http.ip.conf && vim http.ip.conf

配置好后保存退出输入下列命令测试配置文件是否配置好了。

nginx -t

如果配置正确,则输出下列内容

nginx: configuration file /etc/nginx/nginx.conf test is successful

输入下列命令重启nginx

nginx -s reload

此时群晖在内网穿透环境下获取客户端真实ip的配置就完成了,这时候就可以在浏览器上输入网址测试了

查看文章精彩评论,请前往什么值得买进行阅读互动

","gnid":"984a2a5ad5040aac4","img_data":[{"flag":2,"img":[{"desc":"","height":"811","title":"","url":"https://p0.ssl.img.360kuai.com/t011007a7dffb93dd13.jpg","width":"1080"},{"desc":"","height":"549","title":"","url":"https://p0.ssl.img.360kuai.com/t01547772d49200a2b4.jpg","width":"1080"},{"desc":"","height":"493","title":"","url":"https://p0.ssl.img.360kuai.com/t018d56bdb8ba9aafab.jpg","width":"1080"},{"desc":"","height":"441","title":"","url":"https://p0.ssl.img.360kuai.com/t017163369436b04ea4.jpg","width":"1080"},{"desc":"","height":"555","title":"","url":"https://p0.ssl.img.360kuai.com/t0187c93339faa104c7.jpg","width":"1080"},{"desc":"","height":"1113","title":"","url":"https://p0.ssl.img.360kuai.com/t0105c9d878b0347223.jpg","width":"1080"},{"desc":"","height":"530","title":"","url":"https://p0.ssl.img.360kuai.com/t014f412e41f38d7afd.jpg","width":"1080"},{"desc":"","height":"583","title":"","url":"https://p0.ssl.img.360kuai.com/t012598f57242b64b43.jpg","width":"1080"},{"desc":"","height":"840","title":"","url":"https://p0.ssl.img.360kuai.com/t01abe76596a7c02c44.jpg","width":"1080"},{"desc":"","height":"286","title":"","url":"https://p0.ssl.img.360kuai.com/t0108af2fea488c4aed.jpg","width":"1080"},{"desc":"","height":"403","title":"","url":"https://p0.ssl.img.360kuai.com/t01d4f9b744e9fbd6c8.jpg","width":"758"},{"desc":"","height":"2035","title":"","url":"https://p0.ssl.img.360kuai.com/t01aa6ee8348641e15f.jpg","width":"1080"},{"desc":"","height":"418","title":"","url":"https://p0.ssl.img.360kuai.com/t0118b3643164c6d841.jpg","width":"1080"}]}],"original":0,"pat":"art_src_1,fts0,sts0","powerby":"pika","pub_time":1694191200000,"pure":"","rawurl":"http://zm.news.so.com/e0ee9bbeae6b4908c520c173b762e31d","redirect":0,"rptid":"fa246358969e3170","rss_ext":[],"s":"t","src":"什么值得买","tag":[],"title":"小白nas入门 篇五:全网第一个nps内网穿透环境下群晖获取客户端真实ip保姆级教程

皇俊贸4853如何根据访问者ip获取所在地区 -
甘卖厘19354234038 ______ 举个例子,假设服务器端运行的是servlet,客户端(浏览器)发送url到服务器,经过解析,服务器找到并运行相应的servlet程序,在servlet程序中可以接受到用户提交的信息,比如用户提交方式是Get方式,则servlet调用其doGet方法,在doGet方法中

皇俊贸4853JAVA如何限制用户IP地址? -
甘卖厘19354234038 ______ 在用户登录时,得到用户的ip地址,只让指定的ip能登录String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length(...

皇俊贸4853网页怎么实现改代码免验证看到答案? -
甘卖厘19354234038 ______ # 绕过验证码无限次获取上学吧题目答案# 上学吧网址:https://www.GUWENGL.com/# by Tsing 2019.04.02 import randomimport requestsimport urllib3urllib3.disable_warnings() # 这句和上面一句是为了忽略 https 安全验证警告,参考:ljfight/p...

皇俊贸4853nginx 日志格式的$http - x - forwarded - for 无法纪录访问ip,得到的一条小扛' - ',这是为什么呢,求解答 -
甘卖厘19354234038 ______ 直接访问后端服务器,或者反向代理前端服务器没有设置这个值,必须要设置才有值,否则就是"-".试试在前端nginx配置server{}块中加入:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

皇俊贸4853如何清除nginx缓存 -
甘卖厘19354234038 ______ /etc/init.d/nginx restart一、最简单的反代脚本(无缓存):server{listen 80;server_name mjj.jybb.me; #你要绑定的域名location / {proxy_pass http://...

皇俊贸4853X - Forwarded - For的Web日志 -
甘卖厘19354234038 ______ 大多数Web服务器可以通过配置在日志中记录X-Forwarded-For. Apache中可以非常简单地修改配置来实现,但MS IIS 6及以下的版本需要第三方软件支持来实现.IIS7用户可以从IIS官方网站获得免费的IIS相关组件来实现.

皇俊贸4853java 如何限制访问某个ip -
甘卖厘19354234038 ______ Hr完整项目中 --- Tool.java 得到ip地址 /** * * @param request * @return * * 功 能 :得到用户Ip地址 */ public static String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr...

皇俊贸4853nginx 负载均衡 服务器有多个站点,改怎么设置选择我需要的 -
甘卖厘19354234038 ______ 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦. 负载均衡 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分...

皇俊贸4853如何获取客户端真实IP -
甘卖厘19354234038 ______ 查了些资料,代码如下 String remoteAddr = request.getHeader("x-forwarded-for");//X-FORWARDED-FOR if(remoteAddr == null || remoteAddr.length() == 0 || "unknown".equalsIgnoreCase(remoteAddr)) { remoteAddr = request.getHeader("...

皇俊贸4853fiddler工具可以伪造请求ip地址吗 -
甘卖厘19354234038 ______ 只可以伪造X-Forwarded-For头的IP地址仅对部分服务器有效,大部分服务器直接读取网络层的IP地址,而不是应用层的X-Forwarded-For头

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024