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

客户端->(主动指定代理)正向代理服务器->外网目标服务器,可以将代理服务器看作是一个中间人,当客户端发起请求时是先于代理服务器建立连接,然后代理服务器通过请求的信息,再与对应的服务器在建立连接并将相应的请求发往目标服务器,响应反之亦然(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
只要代理这里拦截了,所有后端都不需要一一进行安全配置。
