背景:

  • 需求1——审计日志需要真实IP:

    安全审计要求记录访问服务的最终用户或设备的真实来源IP地址。这对于追踪恶意活动、排查问题、满足合规性要求至关重要。

  • 需求2——风控需要真正IP:

    一些活动、风险管理都是需要对客户的真实IP进行筛选甄别。

解决方案1——HTTP头记录

为了实现上述目标,有一些现成的解决办法,比如在HTTP协议中加入一些参数,这些参数可以记录IP信息,比如:

X-Forwarded-For标头,记录相关源地址信息,

X-Original-To标头,用来携带目的地址的信息。

缺点:

  1. 不安全,容易被篡改;

    • 头部可被篡改:如果请求在到达可信代理前经过不可信节点,攻击者可伪造 X-Forwarded-For: 1.1.1.1 ;
  2. 遇到代理服务器,相关标头信息容易被篡改、覆盖。

    • 代理链中若有一个设备未正确传递该头部,信息即丢失;

为什么服务器无法发现真实IP?

  1. 代理行为导致, 如果代理服务器使用覆盖模式(如Nginx),则后台服务器就无法获取到Client的真实IP。

  2. 代理/负载均衡的普遍性: 现代Web架构中,客户端(浏览器/App)通常不直接连接最终的应用服务器(如Tomcat, Nginx, Apache)。中间会经过反向代理/负载均衡器 (如Nginx, HAProxy, F5): 负责SSL终止、负载分发、安全防护等。

  • Web应用防火墙 (WAF): 提供额外的安全防护层;

  • CDN节点: 缓存内容,加速访问;

  • SSL/TLS终止: HTTPS的核心是端到端加密。为了检查内容(如WAF扫描攻击)、进行负载均衡或优化性能,SSL/TLS解密通常在代理/负载均衡器/WAF/CDN处终止。代理服务器建立与客户端的加密连接,然后建立一个(通常是未加密的或新加密的)连接到后端应用服务器。

结果: 当请求到达最终的应用服务器时,服务器看到的网络连接来源IP地址是最后一个代理设备(如Nginx, F5, WAF)的IP地址,而不是原始客户端的真实IP地址。

一起其它知识:

篡改XFF不会影响实际的网络传输,网络传输由路由提供服务,路由决策仅依赖网络层(IP头),XFF作为应用层数据,对TCP/IP协议栈透明。


解决方案2——proxy protocol协议

Proxy Protocol的出现解决了上述代理丢失IP问题,它允许代理服务器在转发连接之前,将原始客户端连接的相关信息封装在特殊的协议头部中传递给目标服务器。 目标服务器可以解析该头部信息,获取客户端的真实IP和端口等连接信息。

Proxy Protocol的工作原理:

Proxy Protocol使用一种简单而有效的协议头部格式来传递连接信息。协议头部被插入到原始客户端数据之前,以确保目标服务器能够正确解析它。

流程图:

优势:在传输层建立连接前明文传递IP

  • 需双方支持,双方选择Proxy Protocol,表示将客户端信息插入到TCP Payload字段中携带至服务端;
  • 仅当服务端支持解析TCP Payload字段时,Proxy Protocol参数设置才有效;

风险:未加密,内网传输可接受;


解决方案3——加密 TCP Option

可以简单理解为加密版proxy protocol协议,但需要在服务器端、边缘代理端都进行改造,主要是在两端加入相关功能模块和设置一个对称密钥。

流程图:


总结

一般Web系统用 Proxy Protocol严格配置的XFF

# Nginx代理强制覆盖XFF (安全配置)
proxy_set_header X-Forwarded-For $remote_addr; # 覆盖而非追加

金融/政务系统选择 TCP Option加密方案

可以记录IP的网络协议笔记的更多相关文章

  1. 网络协议笔记-网络层-路由器的作用、IP地址

    1-[路由器在网际互连中的作用] 1.1-[直接交付和间接交付] 直接交付:当主机A要向另一个主机B发送数据报时,要先检查目的主机B是否与源主机连接在同一个网络上.如果是,就将数据报直接交付给目的主机 ...

  2. 网络协议笔记-网络层-ARP协议

    [2-地址解析协议ARP] [2.1-基本概念] 地址解析协议ARP的作用是根据主机的IP地址,找出该主机的硬件地址. [2.2-为什么要使用ARP] 在数据传输过程中,网络层使用的IP地址,但是在实 ...

  3. TCPIP网络协议层对应的RFC文档

    原文地址:TCPIP网络协议层对应的RFC文档作者:西木 RFC - Request For Comments 请求注解 TCP/IP层 网络协议 RFC文档 Physical Layer Data ...

  4. [转] TCPIP 网络协议层对应的RFC文档

    TCPIP网络协议层对应的RFC文档 RFC - Request For Comments 请求注解 TCP/IP层 网络协议 RFC文档 Physical Layer Data Link Layer ...

  5. 基础笔记(三):网络协议之Tcp、Http

    目录 一.网络协议 二.TCP(Transmission Control Protocol,传输控制协议) TCP头格式 TCP协议中的三次握手和四次挥手 TCP报文抓取工具 三.HTTP(Hyper ...

  6. TCP/IP网络协议基础知识集锦[转]

    引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP协议簇是由OSI七层模型发展而来的,之所以 ...

  7. Linux学习(1)- TCP/IP网络协议基础

    Linux学习(1)- TCP/IP网络协议基础 一.TCP/IP 简介 学习内容 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输 ...

  8. 慕课学习--OSI与TCP/IP网络协议

    **OSI:开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放 ...

  9. python全栈学习笔记(一)网络基础之网络协议篇

    阅读目录 一.操作系统基础 二.网络通信原理 2.1 互联网的本质就是一系列的网络协议 2.2 osi七层协议 2.3 tcp/ip五层模型讲解 2.3.1 物理层 2.3.2 数据链路层 2.3.3 ...

  10. OSI 七层模型和 TCP/IP 四层模型 及 相关网络协议

    简介 OSI 是理论上的模型,也就是一个统一的国际标准,现在的很多网络设备或者是网络协议都不同程度的精简了自己的所谓的模型,那么他们为了自己的通讯兼容都会参考这个OSI模型 TCP/IP 包括: TC ...

随机推荐

  1. 信息资源管理文字题之“航空集团从哪些方面改变企业的IT服务”

    一.材料:某航空集团公司拥有一个地域分散.多厂商.多平台.多系统的复杂IT环境.IT系统运行复杂,业务系统故障多,技术人员的被动工作方式难以适应企业IT服务需要. 要求:是运用IT服务管理关联只是为该 ...

  2. 【SQL 周周练】爬取短视频发现数据缺失,如何用 SQL 填充

    大家好,我是"蒋点数分",多年以来一直从事数据分析工作.从今天开始,与大家持续分享关于数据分析的学习内容. 本文是第 5 篇,也是[SQL 周周练]系列的第 4 篇.该系列是挑选或 ...

  3. 如何用IDEA 生成JavaDoc新版

    用IDEA生成JavaDoc 左上角四横杠点击,唤出工具栏(快捷键 alt+\) 左键单击工具选项 下拉框选 生成Javadoc 在弹出框选好参数立刻导出啦 1.JavaDoc 作用域: 选要导出的文 ...

  4. 使用HuggingFace 模型并预测

    下载HuggingFace 模型 首先打开网址:https://huggingface.co/models 这个网址是huggingface/transformers支持的所有模型,目前大约一千多个. ...

  5. C#中扩展方法无法获得多态性的行为

    在C#中,扩展方法(Extension Methods)是一种用于给现有类型添加新方法的技术.但是,扩展方法无法实现多态性的行为,因为它们是静态方法,它们的行为是在编译时确定的,而不是在运行时. 多态 ...

  6. length与capacity

    package javaBasic; public class DifferenceLengthCapacity { public static void main(String[] args) { ...

  7. linux 的 Docker 配置(版本24.04)

    linux 的docker配置(版本24.04) 这里默认是server版本的, 个人感觉好用,资源消耗少 1.配置ssh连接 个人习惯用ssh连接使用 (如果失败,先配置下一步的换源) sudo a ...

  8. python doc转png踩坑历程分享

    首先python根据文本内容生成doc,使用的是python-docx库,使用示例如下: from docx import Document from docx.shared import Pt, R ...

  9. 记一次 .NET 某SaaS版CRM系统 崩溃分析

    一:背景 1. 讲故事 调试训练营里的一位学员前些天找到我,说他们跑在k8s中的程序崩掉了不知道怎么回事?日志也没有记录到,让我帮他看看,dump也抓到了,既然抓到了那就看看吧. 二:程序为什么会崩溃 ...

  10. sql注入绕过某waf

    简单布尔判断 直接输入and 1=1拦截 使用mysql黑魔法 and{a 1=1} and{a 1=2}不拦截 本地mysql测试语句正常执行 简单延时判断 and sleep(1) 简单测试后在( ...