隧道 流量操纵

防火墙策略

通常防火墙会阻止外部流量,内部流量的处理情况不一致。有时允许特定流量出站,如目标端口为22 53的请求。这时也可以利用。使其连接到特定机器上再进行流量转发,可以突破端口各种限制。类似代理服务器。

重定向       

简单的ip端口转发,不能提供其他功能。无加密,不安全
不兼容 FTP 等二次连接的协议,
对流量内容无更改,如http头的host值

隧道

在不受信任环境下实现安全传输,通常用加密技术建立通信
点到点(IP2IP)在两个内网网关之间使用隧道,即可让两个内网建立联系。边界到内网机器时不加密,可能在内网中被中间人劫持
端到端(Port2Port)两个服务的端口之间加密,即开始到结束之间完全加密
具体使用各种 VPN:pptp  l2tp  IPsec(好)  SSL vpn(比较安全的会在明文包之前封装一层)

封装         

通常结合隧道技术使用,使用一种协议封装另一种协议   VoIP, RPC o http
使用网关设备实现不同类型网络的互联互通

重定向

公司电脑只允许访问端口为53的出站流量,可以连到家里的电脑上,自己的电脑监听53端口并转发,用自己的电脑转发到其他网站。突破限制
软件 ===》 rinetd /etc/rinetd.conf 只需要设置四个参数,指定监听网卡ip 监听端口 目标ip 目标端口

ssh隧道

支持双向通信,将其他TCP端口通信通过ssh连接转发。使用ssh包裹其他协议时实现了对其加密。可突破防火墙限制,可以用于FQ。

ssh本地端口转发,类似rinetd

ssh client 与 server 有防火墙的条件下

使用ssh隧道可以解决有防火墙限制流量的情况(如限制出站的流量端口)
侦听端永远开在用户使用的一方
ssh 双方之间使用ssh加密,内网主机与client、公网主机与server之间没ssh加密,如果是明文传输可嗅探内容

本机端口转发:本机侦听端口,访问转发到远程主机侦听端口

ssh -fNCg -L <listen port>:<要访问的remote ip>:<remote port> user@<ssh server> -p <ssh server port>
在client上监听端口,发到此端口上的请求通过ssh隧道发到server上,server再转发到remote:port

ssh -fNCg -L 1080:127.0.0.1:80 root@192.168.56.109 -p 22
在client上监听1080端口,接收到的请求通过ssh转发到192.168.56.109,再由ssh server转发到本机80端口
-f 后台 -N 不打开shell -C 压缩信息 -g 作为网关复用

远程端口转发:远程侦听端口,访问转发到本地主机侦听端口

ssh -R <listen port>:<要访问的remote ip>:<remote port> user@<ssh server> -p <ssh server port>
监听的端口开在ssh server上,server访问自己的监听端口时,通过ssh隧道转发到client,client再转发到内网主机上。
这个监听端口只能让自己访问

动态隧道模式

前两者 端口繁多,每个转发效率低。有的网站不支持直接用ip访问
这种模式即为代理模式
ssh -D 1080 root@192.168.56.109 -p 22
在ssh server开启代理,本机监听端口为1080

ssh -X root@192.168.56.109 使用图形化远程连接

DNS

rinetd与ssh只支持tcp
dns的tcp 53端口用于dns服务器之间同步,udp 53用于解析访问请求。有的公司没自己的dns服务器所以也不会在防火墙上开放tcp 53端口,但开放udp 53端口用于到公网上解析域名。这时可以用dns隧道进行内网到指定dns服务器的udp通信,dns服务器也必须有对应域名,且开启相应设置。一般二者之间还有dns缓存服务器。

dns2tcp (c / s 架构)

二者之间通过dns服务器的域名的下属域名的值传递信息。如:XXXX.test.com,中test.com为dns服务器的域名,xxx为加密后传递的信息。
sercer传递给缓存服务器的记录有ttl值,默认3秒。
a记录的长度有限,使用txt记录类型可以加密传输更长的数据。
建立隧道后,c/s之间会有心跳包确认连接有效。
需要为每个不同的服务建立不同的隧道

server端开启
配置/etc/dns2tcpd.conf,resources项指定了能够通过隧道提供的服务。

key = pass123 # 使用客户端连接时的密码
resources:ssh:127.0.0.1:22, socks:192.168.5.6:1080 # 通过dns隧道来的ssh协议自动解析到本机22端口,socks协议转到192.168.5.6的1080端口

dns2tcpd -F -d 1 -f /etc/dns2tcpd.conf # -F 前端运行 -d debug等级 -f 指定配置文件
dns2tcpc -c -k pass123 -d 1 -l 1122 -r ssh -z test.com # -c 流量压缩 -k 指定密码 -l 指定在本地侦听1122端口 -r 指定资源 -d debug
dns2tcpc -c -k pass123 -d 1 -l 10800 -r socks -z test.com

补充:可以在dns隧道中再建立一个ssh转发隧道,这样同时也可以补充dns隧道不能想局域网内开放代理的短板。

当内网有dns服务器时


防火墙只允许内网dns服务器发送目标端口为53的udp请求。最严格的网络限制。
可以从bodhi -> 内网dns -> 防火墙 ->dns -> kali建立dns隧道,再在内部嵌套其他隧道当作网关。
使用命令与前者相同

iodine

下行数据不编码,性能较优
支持多平台
最大16并发
强制密码
支持同网段隧道IP(要不同于client server上其他网卡的ip)
支持多种DNS记录
丰富的隧道质量检测措施

iodine会为两端机器生成虚拟网卡,为两端分配不同的ip,这两个ip要处于同一网段,且不能与两台机器上其他网卡的网段地址冲突。
不基于资源的通用隧道

server: iodined -f -c 10.0.0.1 test.lab.com # -f 前台运行 -c 检查 服务端虚拟网卡的ip 绑定的域名
client : iodine -f [192.168.1.1 局域网内dns服务器的ip] test.lab.com
ssh -CfNg -D 7001 root@10.0.0.1 在dns隧道内部嵌套一个隧道
curl --socks5-hostname

ncat 代理

ncat -l 8080 --proxy-type http --proxy-auth user:pwd

Broker中介功能
AB不通,AC、BC互通
类似集线器,将一个客户端发来的信息转发到其他所有终端
在C上 ncat -l 333 --broker
在A/B上 ncat 127.0.0.1 333 --sh-exec "echo pwd"

socat nc拓展版

socat - tcp:1.1.1.1:80 # 连接端口,- 表示标准输入输出
socat - tcp4-listen:22 / socat - tcp-l:333 # 侦听端口
socat tcp4-listen:333 open:2.txt,creat,append # 接收文件
cat 1.txt | socat - tcp4:1.1.1.1:333 # 发送文件
socat tcp-l:23 exec:sh,pty,stderr # 交出shell
socat tcp4-listen:22,fork tcp4:1.1.1.1:22 # 端口转发

远程执行命令
服务端 socat - udp-l:2001
客户端 echo "id" | socat - udp4-datagram:1.1.1.1:2001

udp全端口任意内容发包
for PORT in {1...65535};do echo "aaaaa"|socat - UDP4-DATAGRAM:1.1.1.1:$PORT;sleep .1;done

ptunnle

一般防火墙默认允许用于ping的icmp协议。形成icmp隧道,内部可嵌套其他隧道。
客户端连接到代理服务器时需要指定目标ip与端口

公网上的代理服务器 ptunnel -x password
客户端 sudo ptunnel -p proxyIp -lp 2222 -da destIp -dp 22 -x password

先连接到proxy,再在本地侦听2222端口,通过代理连接到目标dest的22端口。密码password

嵌套ssh隧道 ssh -CNfg -D 7000 root@127.0.0.1 -p 2222
到0.72版本仍有拒绝服务漏洞

proxytunnle

http代理创建隧道工具。
在一些内网中,有一台代理服务器,防火墙只允许代理服务器向外发流量。无法使用dns与icmp隧道。
在pc与代理机器之间创建隧道,然后可以在pc机上指定代理服务器将流量发到哪里。

squid

http代理工具

sslh

端口分配器,适用于防火墙允许443端口入站得访问流量。
支持 http https ssh openVPN tinc xmpp 六种协议,其他的可用正则进行判断。
只在代理服务器上开启一个端口,根据发来得请求得第一个数据包得协议类型转发到不同ip:port。

posted @ 2022-09-11 19:54  某某人8265  阅读(128)  评论(0编辑  收藏  举报