【问题标题】:HTTP reverse tunnelHTTP反向隧道
【发布时间】:2021-06-19 03:56:15
【问题描述】:

问题

是否可以使用 socks 隧道(或端口 80 或 443 上的任何其他形式的隧道)来控制从远程计算机创建隧道的本地计算机?基本上,ssh -R [...]ssh 不是一个选项并且只有端口80443 上的TCP 连接是可能的?

具体场景

由于我们的一位客户的安全政策非常严格,我们目前必须连接到 Windows 跳转主机,而无法在那里复制和粘贴内容。从那里,我们通过网络浏览器下载需要的文件并通过 ssh 复制到目标机器,或者直接使用ssh 在目标机器上进行维护工作。然而,这个工作流程非常耗时,而且真的很烦人。

不幸的是,防火墙似乎能够区分真正的 HTTP 流量和 ssh,因为在我们的服务器上打开指示 sshd 以接受 443 上的连接不起作用。

Firewall
(HTTP only)
┌──────────────┐
│              │
│  ┌─────────┐ │ ???    ┌──────────┐
│  │Jumphost ├─┼───────►│Our Server│
│  │(Windows)│ │        └───▲──────┘
│  └──┬──────┘ │            │
│     │ssh     │            │ssh
│     │        │            │
│   ┌─▼─────┐  │        ┌───┴─────┐
│   │Target │  │        │Developer│
│   │(Linux)│  │        │Machine  │
│   └───────┘  │        └─────────┘
│              │
└──────────────┘

任何提示都非常感谢????????

【问题讨论】:

  • 如果客户不想要它,他必须支付你的时间,但绕过他的安全似乎是个坏主意
  • 您可以尝试打开一个 websocket,它们使用 TCP 连接并支持全双工数据流量。我对系统一无所知,因此我无法告诉您如何打开 websocket,但 javascript 可以作为示例。
  • @jeb 我看不出我们如何规避任何事情。只要从 jumphost 到我们服务器的连接是安全的,我看不到由此引入的任何漏洞。
  • @DFSFOT 这当然是一种选择。但是,我不知道有任何软件可以让你做这样的事情:/
  • @NickLehmann 您可以尝试 NodeJS 或在浏览器中使用 javascript 打开 websocket。我刚刚意识到虽然 ssh 通常也通过 TCP 运行,所以如果你不能使用 ssh 运行连接,那么它不是 ssh 被阻止,而是可能有很多基于 TCP 的协议。你可能仍然可以使用 websocket,因为它们是 HTTP。

标签: ssh tunnel tunneling


【解决方案1】:

问题似乎在于具有深度数据包检测功能的防火墙。

您可以通过使用 ssh 而不是 ssl、stunnelopenssl 来克服它。
从 Windows 框中,您可以使用 stunnel 客户端与our-server stunnel 服务器建立隧道。
它将所有(ssh)数据封装到 ssl 中,因此与 HTTPS 连接没有区别。

另一个选项可能是 ptunnel-ng,它支持通过 ICMP (ping) 的 tcp 连接。

大多数防火墙会忽略 ICMP,如果您可以 ping 您的 our-server,这也应该可以工作。
但是 ptunnel-ng 有时似乎有点不稳定。

如果你不能在windows jumbBox上安装/执行程序,你可以打开端口,通过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

start-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 "$0")"; 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 .

start-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 客户端,可以这样做,但需要一些小的代码更改

【讨论】:

  • 非常感谢,我试试看!
猜你喜欢
  • 2020-08-26
  • 2012-06-06
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 2023-04-02
相关资源
最近更新 更多