使用spiped进行端口转发的双向加密通信

时间:2014-04-12 16:40:01

标签: encryption ports

我想使用spiped(http://www.tarsnap.com/spiped.html)在两台机器之间建立双向加密通信,但我怀疑这是一个关于端口转发的问题......这是我迄今为止所做的工作(我的本地机器是OS X Mavericks,而遥控器是Ubuntu 12.04 Virtualbox VM):

远程(在8025上收听外部请求并重定向到8000, 其中nc显示在stdout上):

remote % killall spiped
remote % spiped -d -s '[0.0.0.0]:8025' -t '[127.0.0.1]:8000' -k keyfile
remote % while true; do nc -l 8000; done

然后,本地(在本地监听8001并重定向到8025,将其发送到远程计算机):

local % killall spiped
local % spiped -e -s '[127.0.0.1]:8001' -t '[192.168.56.10]:8025' -k keyfile

现在,当我执行以下操作时,"你好"远程打印到stdout:

local % echo hello | nc 127.0.0.1 8001

所有这一切都很棒。但是从远程机器发送数据并在本地接收数据呢?我天真地假设我可以远程执行此操作:

remote % echo hello | nc 127.0.0.1 8000

使用

在本地读取数据
local % nc -l 8001

但是nc在本地没有收到任何数据。我认为我从根本上误解了一些东西。在没有具体答案的情况下,是否有人可以建议阅读相关主题的资源?我不是在寻找使用ssh隧道的解决方案 - 我知道如何做到这一点。

1 个答案:

答案 0 :(得分:3)

为了提供与spiped的双向通信,您需要在两台机器上设置以下内容:

  1. 使用预共享密钥转发到请求的本地服务的服务器守护程序
  2. 使用相同的预共享密钥将流量发送到所需的spiped端口的客户端
  3. 一个倾听&一个人在两个系统上都收到有关更多信息,请查看client&的源代码。对于server

    您可以在两个系统上运行spiped服务,但每个系统都需要使用spipe客户端进行手动(或脚本化)连接。

    例如使用服务器(在两台计算机上运行以下命令):

    spiped {-e | -d} -s <source socket> -t <target socket> -k <key file>
        [-DfFj] [-n <max # connections>] [-o <connection timeout>] [-p <pidfile>]
        [{-r <rtime> | -R}]
    

    对于希望彼此进行通信(双向)的客户,您必须手动调用客户端:

    spipe -t <target socket> -k <key file> [-fj] [-o <connection timeout>]
    

    或者作为使用您的设置的真实示例(绑定到8025的两个服务转发到8000上的nc)。

    remote % spiped -d -s '[0.0.0.0]:8025' -t '[127.0.0.1]:8000' -k keyfile
    remote % while true; do nc -l 8000; done
    
    local % spiped -d -s '[0.0.0.0]:8025' -t '[127.0.0.1]:8000' -k keyfile
    local % while true; do nc -l 8000; done
    

    每个(远程和本地)运行以下命令(nc本地绑定到8001并在8025发送到服务器):

    remote % spiped -e -s '[127.0.0.1]:8001' -t '[192.168.56.10]:8025' -k keyfile
    
    local % spiped -e -s '[127.0.0.1]:8001' -t '[192.168.56.11]:8025' -k keyfile
    

    在远程和&amp ;;上发送数据到8001本地转发到本地和远程

    remote % echo "hello client" | nc 127.0.0.1 8001
    
    local % echo "hello server" | nc 127.0.0.1 8001
    

    倾听每一个

    remote % nc -l 8001
    
    local % nc -l 8001
    

    看看软件是如何设计来保护tarsnap backup software的传输层的,只需要将有效负载加密到服务中。

    他们在保护SSH守护程序的文档中的示例通过使用SSH的'ProxyCommand'选项进一步说明了这一点。例如:

      

    您还可以使用spiped来保护SSH服务器免受攻击者攻击:从那以后   数据在转发到目标之前已经过身份验证,这可以   允许您通过SSH连接到主机,同时保护您   有人在SSH守护进程中发现了一个可利用的错误 - 这就是服务器   与端口敲门或限制源IP的防火墙相同的目的   可以连接到SSH的地址。在SSH服务器上,运行

         

    dd if = / dev / urandom bs = 32 count = 1 of = / etc / ssh / spiped.key   spiped -d -s'[0.0.0.0]:8022'-t'[127.0.0.1]:22'-k /etc/ssh/spiped.key

         

    然后将服务器的/etc/ssh/spiped.key复制到   在本地系统上添加〜/ .ssh / spiped_HOSTNAME_key并添加行

         

    主机HOSTNAME ProxyCommand spipe -t%h:8022 -k~ / .ssh / spiped_%h_key

         

    到〜/ .ssh / config文件。这将导致“ssh HOSTNAME”   通过spiped守护进程使用spipe客户端自动连接;   然后,您可以在端口tcp / 22上关闭所有传入流量。

         

    有关spiped和spipe的命令行选项的详细列表,   请参阅相应子目录中的README文件。