2043 字
7 分钟阅读
正方代理和反向代理

正向代理:客户端通过正向代理服务器连上外网访问目标服务端。

代理的对象:客户端

模型

客户端->(主动指定代理)正向代理服务器->外网目标服务器,可以将代理服务器看作是一个中间人,当客户端发起请求时是先于代理服务器建立连接,然后代理服务器通过请求的信息,再与对应的服务器在建立连接并将相应的请求发往目标服务器,响应反之亦然(HTTP 代理会分别建立两条独立 TCP 连接(客户端↔代理、代理↔目标站点),两条连接互相独立)。

典型例子:VPN、梯子、公司的内网上网网关、Burp suite抓包代理等。

其特点:

1、服务端知道代理IP地址但不知道客户端的真实IP

2、客户端知道代理地址,需要手动配置代理(浏览器/系统必须手动填写代理IP、端口透明代理除外)

注:透明代理工作在网关/路由器/防火墙层面:网关通过iptables、防火墙策略,强制把用户80/443等流量劫持转发给代理服务,用户毫无感知,不需要填代理地址、不需要改浏览器设置、不需要改系统网络。

补充区分:透明代理依然是属于应用层;不能误以为透明代理是 NAT

3、用途:隐藏用户、用户访问受限、内网管控、流量抓包(因为代理服务器类似与一个中间人的角色,那么作为代理服务器就可以实现控制用户不能去访问那些网站,并且能够了解对用户的行为进行抓包解析;注:如果解析 https 报文,必须部署代理中间人证书、客户端信任根证书)。

正向代理和NAT地址转化的区别

对比项正向代理(Squid/SOCKS5)SNAT NAT 地址转换
工作层级应用层(HTTP/SOCKS5)网络层(IP 层)
能不能拦截网站 URL可以(能解析域名、请求)不可以,只能基于 IP 封禁
能否解密 HTTPS 流量开启 SSL 中间人即可解析完全不能,只能看到加密流
客户端是否需要配置一般需要手动填写代理地址不需要配置,网关自动转发
流量识别看得懂 HTTP 请求内容只修改 IP 头部,看不懂上层数据
端口代理固定端口 3128/1080自动随机端口映射

NAT地址转换访问外网属于是客户端和服务端之间直连的关系;而正向代理是中间人,分别向客户端和服务端相互建立连接,应用层解析全部流量,可以精细化管控;

优点:

1、对于中大型企业它可以按域名屏蔽网站(禁B站、短视频、购物网站等)如果在代理服务器上开启 WAF / 威胁库的代理服务可以拦截钓鱼网站、拦截仿冒官网的自签虚假证书站点、限制访问高危境外匿名域名、短链接。

2、记录每个人完整上网的日志,谁什么时间访问了什么网页全部留档。

3、网页内容过滤、缓存静态资源节省带宽。

缺点:会产生网速损耗,常规代理需要终端配置,透明代理虽然免配置,但架构更复杂。

反向代理:代理服务端,客户端不知道真实后端服务器是谁

代理的对象:服务端

过程:

外网访客-https加密流量(浏览器和服务器之间需要 TLS 加密)->反向代理服务器(大部分为中间件,SSL卸载、WAF防护)-明文http内网转发->后端服务器(并发,防止单点故障)

访客将请求发往(这里反向代理服务器用nginx代替)nginx,nginx将请求发往其中一个后端业务服务器,并将响应返还给访客,期间访客是不知道内网存在多少个后端业务服务器的,并且看不到内网IP,这样可以隐藏内网业务服务器,后端不暴露公网、负载均衡分发流量、SSL 统一卸载、配置 WAF 防火墙。

SSL 卸载:反向代理承担 HTTPS 加解密,简化后端

WAF 前置部署:流量入口第一道防线,在请求到达业务系统前拦截攻击

为什么在将请求传递给nginx后要卸载SSL证书

1、统一证书管理

假如后端有多台 WordPress 业务服务器; 如果每台后端单独配置 SSL:每台机器都要部署证书、续签证书,维护麻烦。 SSL 卸载方案:证书只配置在前端 Nginx 一台,证书续签、更新只操作一处

2、性能优化(加密非常消耗 CPU)

TLS 握手、加解密对于CPU来说算得上重型运算。 把所有 SSL 运算集中在专门的代理网关;后端应用服务器(WordPress)只处理业务、不用承担加密开销,资源全部用来跑网站程序。

3、WAF 防火墙必须要 SSL 卸载

如果不卸载 SSL:流量是加密 HTTPS,WAF看不懂数据包内容黑客的 SQL 注入、XSS、恶意 Payload 藏在加密流量里,WAF 无法检测拦截。

SSL 卸载后,代理解密流量,明文交给 WAF 检测攻击;检测完成再转发后端。

4、集中管控、日志审计

代理解密后,可以完整记录 URL、POST 参数、Cookie、访问行为; 后端不需要单独开启日志,所有访问日志统一在网关收集。

5、灵活控制 TLS 策略

可以在代理统一禁用老旧不安全协议(TLS1.0/TLS1.1、弱加密套件); 不需要去逐个修改后端 WordPress 服务的加密配置(不需要每个wordpress服务都去设置HTTPS),只需要在反向代理服务器那里写一次规则。

# 只允许安全协议,禁用老旧版本
ssl_protocols TLSv1.2 TLSv1.3; 
# 禁止TLS1.0 TLS1.1

只要代理这里拦截了,所有后端都不需要一一进行安全配置。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注