端口转发与代理技术详解

端口转发与代理技术详解

Posted by Kyon-H on August 7, 2024

[!NOTE]

本文介绍端口转发、隧道、代理技术,以及相关工具的使用

1. 端口转发

端口转发(Port Forwarding)其实就是把进入某个端口的流量“转送”到另一台主机或另一个端口,常用于内网穿透、端口映射、代理跳板等场景。

1.1. 端口转发的原理

核心流程:

  1. 监听入口端口(本地或某个中间服务器上)。
  2. 收到流量后转发到指定的目标 IP 和端口。
  3. 对返回的数据做反向传递,让发起连接的客户端感觉是在直接连接目标。

作用场景:

  • 外网访问内网服务(内网穿透)
  • 把一个服务换到另一个端口(端口映射)
  • 渗透测试中,用跳板机访问被隔离的目标主机

1.2. 使用 lcx 实现端口转发

lcx 是一款小型端口转发工具,主要用来做正向反向端口转发。

1.2.1. 正向端口转发

把本机的 3389 端口转发到 192.168.1.100 的 3389:

1
lcx -tran 3389 192.168.1.100 3389

客户端访问本机 3389,其实是连到 192.168.1.100:3389。

image.png

1.2.2. 反向端口转发(内网穿透场景)

假设你在外网有一台 VPS(公网 IP 1.2.3.4),内网机器不能被外网直接访问,但可以主动连出去:

1
2
3
4
# vps
lcx -listen 4444 3389
# 内网服务器
lcx -slave 1.2.3.4 4444 127.0.0.1 3389

这样,内网机器连接 VPS 后,访问 VPS 的 4444 就等于访问内网的 3389。

image.png

2. 代理

正向/反向连接、正向/反向代理,虽然名字很像,但场景、发起方向、作用都不一样。我们可以分成两个维度:

  • 连接(谁主动找谁建立连接)
  • 代理(谁帮谁转发流量)

2.1. 正向连接 / 反向连接

这是网络通信里的 连接发起方向 问题,描述的是网络连接发起的方向。关注点在于“谁主动发起连接请求”。常出现在远控、渗透、隧道工具等领域。

名称 主动发起方 常见用途 例子
正向连接 客户端 → 服务器 正常的网络访问模式 浏览器访问网站;SSH 客户端连接 SSH 服务器
反向连接 服务器(被控端)→ 客户端(控制端) 绕过 NAT、防火墙限制 被控主机通过 TCP 连接回攻击者的监听端口

image.png

2.2. 正向代理 / 反向代理

这是代理模式问题,描述的是代理服务器在网络通信中所扮演的角色和位置。关注点在于“代理服务器代表谁(客户端还是服务器端)以及位于哪一侧”。重点是“谁在帮谁转发请求”。

名称 代理面向的对象 典型用途 例子
正向代理 面向客户端,为客户端代为访问目标 科学上网、缓存加速、隐藏客户端 IP 浏览器 → v2rayN → 目标网站
反向代理 面向服务端,为服务端代为处理请求 负载均衡、安全防护、隐藏真实后端 用户 → Nginx → Web 服务器

2.2.1. 正向代理

定义: 位于客户端(或客户端网络)和互联网之间的代理服务器。客户端明确知道并配置要使用该代理。

功能:

  • 代表客户端访问外部资源: 客户端将请求发给正向代理,代理再去目标服务器获取资源,然后返回给客户端。
  • 客户端匿名/隐私保护: 目标服务器看到的是代理的 IP,而不是客户端的真实 IP。
  • 访问控制与审计: 公司网络常用,控制员工能访问哪些外部网站,并记录访问日志。
  • 内容过滤: 过滤恶意网站或禁止访问特定内容。
  • 本地缓存: 缓存常用资源,加速访问。

2.2.2. 反向代理

定义: 位于服务器端(或服务器网络)和互联网之间的代理服务器。客户端通常不知道背后有代理存在。

功能

  • 隐藏后端真实 IP/端口(客户端只知道代理服务器)
  • 可以做访问控制(比如只允许部分流量访问后端)
  • 可以做负载均衡、缓存、SSL 加密等

区别要点

  • 正向代理:客户端知道目标,但目标不知道真实客户端。
  • 反向代理:客户端不知道真实服务端,只看到代理的地址。

image.png|538

2.3. EW 的反向代理

EW(EarthWorm)的“反向代理”概念和 Web 运维里的反向代理有点不同,更偏向于反向连接 + 流量中转

工作方式:

  • 内网机器(无法被直接访问)主动连接到公网中转机(EW Server)。
  • 控制端(攻击者机器)连接到公网中转机,通过它转发数据到内网机器。
  • 主要作用是突破防火墙、NAT 限制,实现内网穿透。

2.4. 总结对照表

分类 正向 反向
连接 客户端 → 服务器(正常发起) 服务器 → 客户端(绕过限制)
代理 代理帮客户端访问目标(隐藏客户端) 代理帮服务器处理请求(隐藏服务器)

3. 隧道技术

3.1. 概念

隧道技术就是在一个协议中“包裹”另一种协议的数据,让原本不能直接通信的数据,借助其他可通信的通道传输。

3.2. 核心流程

  1. 封装(Encapsulation):将原始数据包(如 TCP、UDP)封装到另一种协议的数据载荷中。
  2. 传输(Transport):用外层协议发送到隧道的另一端。
  3. 解封(Decapsulation):隧道另一端拆开外层协议,还原出原始数据,再发给目标应用或主机。

3.3. pingtunnel

3.3.1. 原理

pingtunnel 利用 ICMP 协议(ping 请求/应答) 作为传输通道,把 TCP/UDP 流量封装到 ICMP 数据包中。

适用于:

  • 网络只允许 ping,不允许直接 TCP/UDP 出口。
  • 绕过简单的防火墙或 ACL。
  • 搭建隐蔽的数据通道(渗透测试场景)。

工作流程:

  1. 客户端发起 TCP/UDP 连接(例如访问远程 22 端口)。
  2. pingtunnel 客户端把这些数据包进 ICMP 数据包
  3. ICMP 数据包发给 pingtunnel 服务器。
  4. 服务器解封装,按原协议发到目标端口。
  5. 返回数据走相同反向流程。

3.3.2. icmp 隧道 CS 上线

image.png

在服务端启动:
1
./pingtunnel -type server
在客户端启动:

例如要通过 ICMP 隧道访问远程服务器的 CS 监听端口:

1
./pingtunnel -type client -l 127.0.0.1:1111 -s 1.2.3.4 -t 1.2.3.4:2222 -tcp 1

3.3.3. ew 代理+pingtunnel 隧道

![image.png 538](https://img.ghostliner.top/jIj1RG.png)

kali-server 开启反向 socks 客户端和 pingtunnel 服务端

1
2
./ew -s rcsocks -l 3333 -e 4444
./pingtunnel -type server

win-web 开启反向 socks 服务端和 pingtunnel 客户端

1
2
pingtunnel -type client -l 127.0.0.1:1111 -s 192.168.22.128 -t 192.168.163.132:4444 -sock5 -1
ew -s rssocks -d 127.0.0.1 -e 1111

win-client 使用 Proxifier 配置 SSH 代理

image.png

使用 cmd 命令行连接 CentOS

1
ssh root@192.168.22.130

3.4. 优缺点

优点

  • 绕过仅允许 ICMP 的出口限制。
  • 实现简单,不依赖特殊内核模块。
  • 可加密、认证。

缺点

  • ICMP 不适合高带宽、大延迟需求的业务。
  • 很容易被 IDS/IPS 检测(ICMP 流量不正常时)。
  • 部分网络运营商或防火墙丢弃非标准 ICMP 数据。