可以记录IP的网络协议笔记
背景:
需求1——审计日志需要真实IP:
安全审计要求记录访问服务的最终用户或设备的真实来源IP地址。这对于追踪恶意活动、排查问题、满足合规性要求至关重要。需求2——风控需要真正IP:
一些活动、风险管理都是需要对客户的真实IP进行筛选甄别。
解决方案1——HTTP头记录
为了实现上述目标,有一些现成的解决办法,比如在HTTP协议中加入一些参数,这些参数可以记录IP信息,比如:
X-Forwarded-For标头,记录相关源地址信息,
X-Original-To标头,用来携带目的地址的信息。
缺点:
不安全,容易被篡改;
- 头部可被篡改:如果请求在到达可信代理前经过不可信节点,攻击者可伪造 X-Forwarded-For: 1.1.1.1 ;
遇到代理服务器,相关标头信息容易被篡改、覆盖。
- 代理链中若有一个设备未正确传递该头部,信息即丢失;
为什么服务器无法发现真实IP?
代理行为导致, 如果代理服务器使用覆盖模式(如Nginx),则后台服务器就无法获取到Client的真实IP。
代理/负载均衡的普遍性: 现代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的网络协议笔记的更多相关文章
- 网络协议笔记-网络层-路由器的作用、IP地址
1-[路由器在网际互连中的作用] 1.1-[直接交付和间接交付] 直接交付:当主机A要向另一个主机B发送数据报时,要先检查目的主机B是否与源主机连接在同一个网络上.如果是,就将数据报直接交付给目的主机 ...
- 网络协议笔记-网络层-ARP协议
[2-地址解析协议ARP] [2.1-基本概念] 地址解析协议ARP的作用是根据主机的IP地址,找出该主机的硬件地址. [2.2-为什么要使用ARP] 在数据传输过程中,网络层使用的IP地址,但是在实 ...
- TCPIP网络协议层对应的RFC文档
原文地址:TCPIP网络协议层对应的RFC文档作者:西木 RFC - Request For Comments 请求注解 TCP/IP层 网络协议 RFC文档 Physical Layer Data ...
- [转] TCPIP 网络协议层对应的RFC文档
TCPIP网络协议层对应的RFC文档 RFC - Request For Comments 请求注解 TCP/IP层 网络协议 RFC文档 Physical Layer Data Link Layer ...
- 基础笔记(三):网络协议之Tcp、Http
目录 一.网络协议 二.TCP(Transmission Control Protocol,传输控制协议) TCP头格式 TCP协议中的三次握手和四次挥手 TCP报文抓取工具 三.HTTP(Hyper ...
- TCP/IP网络协议基础知识集锦[转]
引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP协议簇是由OSI七层模型发展而来的,之所以 ...
- Linux学习(1)- TCP/IP网络协议基础
Linux学习(1)- TCP/IP网络协议基础 一.TCP/IP 简介 学习内容 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输 ...
- 慕课学习--OSI与TCP/IP网络协议
**OSI:开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放 ...
- python全栈学习笔记(一)网络基础之网络协议篇
阅读目录 一.操作系统基础 二.网络通信原理 2.1 互联网的本质就是一系列的网络协议 2.2 osi七层协议 2.3 tcp/ip五层模型讲解 2.3.1 物理层 2.3.2 数据链路层 2.3.3 ...
- OSI 七层模型和 TCP/IP 四层模型 及 相关网络协议
简介 OSI 是理论上的模型,也就是一个统一的国际标准,现在的很多网络设备或者是网络协议都不同程度的精简了自己的所谓的模型,那么他们为了自己的通讯兼容都会参考这个OSI模型 TCP/IP 包括: TC ...
随机推荐
- 深入探索JavaScript的黑科技:剖析极致性能优化和代码大小压缩
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 异步之舞:Motor驱动与MongoDB的CRUD交响曲
title: 异步之舞:Motor驱动与MongoDB的CRUD交响曲 date: 2025/05/19 15:30:10 updated: 2025/05/19 15:30:10 author: c ...
- 京东首页html+css1.0
小菜鸟的学习记录,还望各位猿兄不吝赐教 文章目录 效果图 源码 HTML文件 css文件 效果图 源码 HTML文件 <!DOCTYPE html> <html> <he ...
- ArkUI-X中Plugin生命周期开发指南
ArkUI-X插件用于拓展ArkUI应用的能力,提供管理插件生命周期的能力.本文主要介绍Android平台的ArkUI-X插件生命周期的使用. Android平台创建ArkUI-X插件生命周期 在An ...
- Java Solon v3.3.2 发布(可替换,美国博通公司的 Spring 方案)
Solon 框架! Solon 是新一代,Java 企业级应用开发框架.从零开始构建(No Java-EE),有灵活的接口规范与开放生态.采用商用友好的 Apache 2.0 开源协议,是" ...
- map-HashMap
HashMap 图片~~~ 其他常见的map结构 常见的map结构 常用的Map结构有:hashMap(最常用).hashTable.LinkedHashMap.TreeMap(对存入的键值进行排序) ...
- FastAPI如何玩转安全防护,让黑客望而却步?
扫描二维码 关注或者微信搜一搜:编程智域 前端至全栈交流与成长 发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/ 1. FastAPI安全基础架构 ...
- Windows 的桌面图标没有显示正确
Windows系统会缓存桌面图标,如果缓存文件损坏,可能会导致图标不显示.我们可以通过以下步骤重建图标缓存: 打开"任务管理器",结束"Windows资源管理器" ...
- macos安装三方windows镜像
intel芯 m芯片貌似不支持windows系统,甚至以虚拟机的方式安装支持都不算友好! 准备好鼠标 在windows安装界面 或 首次进入系统时,此时因尚未驱动,macbook笔记本自带的键盘和触摸 ...
- 前端开发系列123-进阶篇之generate Virtual-DOM
本文介绍通过 render函数创建DOM的基本过程(仅仅核心部分),更多的细节也可以参考 Vue 框架源码自行探索 . Render => Virtual-DOM /* 模拟数据 */ func ...