HTTP 反向隧道
HTTP reverse tunnel
问题
是否可以使用 socks 隧道(或端口 80 或 443 上的任何其他形式的隧道)来控制从远程计算机创建隧道的本地计算机?基本上,当 ssh
不是一个选项时 ssh -R [...]
并且只有端口 80
和 443
上的 TCP 连接是可能的?
具体场景
由于我们的一位客户的安全政策非常严格,我们目前必须连接到 Windows 跳转主机,而无法在那里复制和粘贴内容。从那里,我们通过网络浏览器下载所需的文件并通过 ssh 复制到目标机器,或者直接使用 ssh
在目标机器上进行维护工作。然而,这个工作流程很耗时,而且老实说很烦人。
不幸的是,防火墙似乎能够区分真正的 HTTP 流量和 ssh,因为在我们的服务器上打开指示 sshd
接受 443
上的连接无效。
Firewall
(HTTP only)
┌──────────────┐
│ │
│ ┌─────────┐ │ ??? ┌──────────┐
│ │Jumphost ├─┼───────►│Our Server│
│ │(Windows)│ │ └───▲──────┘
│ └──┬──────┘ │ │
│ │ssh │ │ssh
│ │ │ │
│ ┌─▼─────┐ │ ┌───┴─────┐
│ │Target │ │ │Developer│
│ │(Linux)│ │ │Machine │
│ └───────┘ │ └─────────┘
│ │
└──────────────┘
非常感谢任何提示
问题似乎出在带有深度数据包检测的防火墙上。
您可以通过使用 ssh 而不是 ssl 来克服它,使用 stunnel
或 openssl
。
从 windows 框中,您可以使用 stunnel 客户端隧道连接到 our-server
stunnel 服务器。
将所有 (ssh) 数据封装到 ssl 中,因此与 HTTPS 连接没有区别。
另一个选项可以是 ptunnel-ng,它支持通过 ICMP (ping) 的 tcp 连接。
大多数防火墙会忽略 ICMP,如果您可以 ping 通您的 our-server
这应该也可以。
但是ptunnel-ng有时候好像有点不稳定
如果你不能在windows jumbBox 上install/execute 程序,你可以打开端口,通过ssh 重定向它们并直接由target-linux 使用它们。
在你的 windows jumpbox 上:
ssh target -R target:7070:our-server:443
在目标 (linux) 上,您可以使用 localhost:7070
连接到 our-server:443
我建议对客户端和服务器部分使用 docker。
我只是不能在容器内使用 ptunnel 服务器,可能是因为所需的权限。
使用 ptunnel
在服务器上
ptunnel 二进制文件在 docker 中构建,但由主机直接使用
此示例需要 ubuntu 服务器
Dockerfile.server
FROM ubuntu:latest
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y build-essential autoconf automake git
RUN mkdir -p /workdir
WORKDIR /workdir
RUN git clone https://github.com/lnslbrty/ptunnel-ng.git && cd ptunnel-ng && ./autogen.sh
开始-server.sh
#!/bin/sh
# Starts the icmp tunnel server, this doesn't work inside a docker container
# Or perhaps it works, but I dont't know how
script_dir=$(cd "$(dirname "[=12=]")"; pwd)
if [ ! -f $script_dir/ptunnel-ng ]; then
# Build the ptunnel binary and copy it to the host
docker build -t ptunnel-ng-build-server -f $script_dir/Dockerfile.server $script_dir
docker run --rm -v $script_dir:/shared ptunnel-ng-build-server cp /workdir/ptunnel-ng/src/ptunnel-ng /shared
fi
magic=${1-123456}
sudo $script_dir/ptunnel-ng --magic $magic
在客户端
FROM alpine:latest as builder
ARG DEBIAN_FRONTEND=noninteractive
RUN apk add --update alpine-sdk bash autoconf automake git
RUN mkdir -p /workdir
WORKDIR /workdir
RUN git clone https://github.com/lnslbrty/ptunnel-ng.git && cd ptunnel-ng && ./autogen.sh
FROM alpine:latest
WORKDIR /workdir
COPY --from=builder /workdir/ptunnel-ng/src/ptunnel-ng .
开始-client.sh
#!/bin/sh
image=ptunnel-ng
if ! docker inspect $image > /dev/null 2> /dev/null; then
docker build -t $image .
fi
magic=${1-123456}
ptunnel_host=${2-myserver.de}
port=${3-2001}
docker run --rm --detach -ti --name 'ptunnel1' -v $PWD:/shared -p 2222:2222 $image //workdir/ptunnel-ng --magic ${magic} -p${ptunnel_host} -l${port}
如果您尝试 运行 termux 上的 ptunnel 客户端,这可以完成,但需要一些小的代码更改
问题
是否可以使用 socks 隧道(或端口 80 或 443 上的任何其他形式的隧道)来控制从远程计算机创建隧道的本地计算机?基本上,当 ssh
不是一个选项时 ssh -R [...]
并且只有端口 80
和 443
上的 TCP 连接是可能的?
具体场景
由于我们的一位客户的安全政策非常严格,我们目前必须连接到 Windows 跳转主机,而无法在那里复制和粘贴内容。从那里,我们通过网络浏览器下载所需的文件并通过 ssh 复制到目标机器,或者直接使用 ssh
在目标机器上进行维护工作。然而,这个工作流程很耗时,而且老实说很烦人。
不幸的是,防火墙似乎能够区分真正的 HTTP 流量和 ssh,因为在我们的服务器上打开指示 sshd
接受 443
上的连接无效。
Firewall
(HTTP only)
┌──────────────┐
│ │
│ ┌─────────┐ │ ??? ┌──────────┐
│ │Jumphost ├─┼───────►│Our Server│
│ │(Windows)│ │ └───▲──────┘
│ └──┬──────┘ │ │
│ │ssh │ │ssh
│ │ │ │
│ ┌─▼─────┐ │ ┌───┴─────┐
│ │Target │ │ │Developer│
│ │(Linux)│ │ │Machine │
│ └───────┘ │ └─────────┘
│ │
└──────────────┘
非常感谢任何提示
问题似乎出在带有深度数据包检测的防火墙上。
您可以通过使用 ssh 而不是 ssl 来克服它,使用 stunnel
或 openssl
。
从 windows 框中,您可以使用 stunnel 客户端隧道连接到 our-server
stunnel 服务器。
将所有 (ssh) 数据封装到 ssl 中,因此与 HTTPS 连接没有区别。
另一个选项可以是 ptunnel-ng,它支持通过 ICMP (ping) 的 tcp 连接。
大多数防火墙会忽略 ICMP,如果您可以 ping 通您的 our-server
这应该也可以。
但是ptunnel-ng有时候好像有点不稳定
如果你不能在windows jumbBox 上install/execute 程序,你可以打开端口,通过ssh 重定向它们并直接由target-linux 使用它们。
在你的 windows jumpbox 上:
ssh target -R target:7070:our-server:443
在目标 (linux) 上,您可以使用 localhost:7070
连接到 our-server:443
我建议对客户端和服务器部分使用 docker。
我只是不能在容器内使用 ptunnel 服务器,可能是因为所需的权限。
使用 ptunnel
在服务器上
ptunnel 二进制文件在 docker 中构建,但由主机直接使用
此示例需要 ubuntu 服务器
Dockerfile.server
FROM ubuntu:latest
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y build-essential autoconf automake git
RUN mkdir -p /workdir
WORKDIR /workdir
RUN git clone https://github.com/lnslbrty/ptunnel-ng.git && cd ptunnel-ng && ./autogen.sh
开始-server.sh
#!/bin/sh
# Starts the icmp tunnel server, this doesn't work inside a docker container
# Or perhaps it works, but I dont't know how
script_dir=$(cd "$(dirname "[=12=]")"; pwd)
if [ ! -f $script_dir/ptunnel-ng ]; then
# Build the ptunnel binary and copy it to the host
docker build -t ptunnel-ng-build-server -f $script_dir/Dockerfile.server $script_dir
docker run --rm -v $script_dir:/shared ptunnel-ng-build-server cp /workdir/ptunnel-ng/src/ptunnel-ng /shared
fi
magic=${1-123456}
sudo $script_dir/ptunnel-ng --magic $magic
在客户端
FROM alpine:latest as builder
ARG DEBIAN_FRONTEND=noninteractive
RUN apk add --update alpine-sdk bash autoconf automake git
RUN mkdir -p /workdir
WORKDIR /workdir
RUN git clone https://github.com/lnslbrty/ptunnel-ng.git && cd ptunnel-ng && ./autogen.sh
FROM alpine:latest
WORKDIR /workdir
COPY --from=builder /workdir/ptunnel-ng/src/ptunnel-ng .
开始-client.sh
#!/bin/sh
image=ptunnel-ng
if ! docker inspect $image > /dev/null 2> /dev/null; then
docker build -t $image .
fi
magic=${1-123456}
ptunnel_host=${2-myserver.de}
port=${3-2001}
docker run --rm --detach -ti --name 'ptunnel1' -v $PWD:/shared -p 2222:2222 $image //workdir/ptunnel-ng --magic ${magic} -p${ptunnel_host} -l${port}
如果您尝试 运行 termux 上的 ptunnel 客户端,这可以完成,但需要一些小的代码更改