ssh 端口转发以从任何地方访问我的家用机器

har*_*ari 29 freebsd ssh ssh-tunneling port-forwarding

我来自这个问题:https : //superuser.com/questions/359799/how-to-make-freebsd-box-accessible-from-internet

我想了解这整个过程port forwarding

我读了很多东西,但我没能理解端口转发本身的基本概念。

我拥有的:

坐在我家的 freebsd 服务器。
网件路由器

这就是我想要实现的目标:

能够通过互联网从 Windows 机器访问 freebsd 服务器,以便能够打开网络浏览器并访问互联网。

我还想从我拥有的 ubuntu 机器访问这个 freebsd 盒子。

如果有人可以帮助我,那就太好了。

这是我为端口转发所做的 netgear 路由器设置。

网件端口转发

roz*_*acz 56

我将从原始事实开始:

  1. 你有:A- 你的 FreeBSD机器,B- 你的路由器和C- 一些可以上网的机器。这是它的样子:

    .-----.      .-----.                        .-----.
    |  A  |  ==  |  B  |  - - ( Internet ) - -  |  C  |
    '-----'      '-----'                        '-----'
    \_________ ________/
              v
               `- this is your LAN
    
    Run Code Online (Sandbox Code Playgroud)

    请注意您的路由器通常是如何工作的:它允许LAN的机器连接Internet(简单地说)。所以如果A(或局域网上的任何其他机器)想要访问互联网,它会被允许(再次,只谈基本的理解和配置):

    .-----.      .-----.                        .-----.
    |  A  |  ==  |  B  |  - - ( Internet ) - -  |  C  |
    '-----'      '-----'                        '-----'
          `-->----'  `--->--->---^  
    
    Run Code Online (Sandbox Code Playgroud)

    而下面没有默认不允许的:

    .-----.      .-----.                        .-----.
    |  A  |  ==  |  B  |  - - ( Internet ) - -  |  C  |
    '-----'      '-----'                        '-----'
          `--<----'  `---<--- - - - - --<---<-----'
    
    Run Code Online (Sandbox Code Playgroud)

    (也就是说,路由器保护您 LAN 上的机器不被 Internet 访问。)请注意,路由器是您的 LAN 中唯一可以Internet上看到的部分1)

  2. 端口转发允许第三个模式发生。这包括告诉路由器2) 的什么连接应该连接到LAN 上的台机器。这是基于端口号完成的——这就是为什么它被称为端口转发。您可以通过指示路由器将来自 Internet 的给定端口上的所有连接都转到 LAN 上的某台机器来进行配置。这是转发到 machine 的端口 22 的示例:CA

    .------.     .-------.                        .-----.
    |  A   | ==  |   B   |  - - ( Internet ) - -  |  C  |
    |      |     |       |                        '-----'
    '-|22|-'     ',--|22|'                          |
        `--<-22---'    `---<---- - - - - - --<-22---'
    
    Run Code Online (Sandbox Code Playgroud)
  3. 此类通过 Internet 的连接基于 IP 地址进行。因此,对上述示例的更精确表示将是:

    .------.      .-------.                                .-----.
    |  A   |  ==  |   B   | - - - - - ( Internet ) - - - - |  C  |
    |      |      |       |                                '-----'
    '-|22|-'      ',--|22|'                                   |
        `--<-A:22--'    `--<-YourIP:22 - - - - --<-YourIP:22--'
    
    Run Code Online (Sandbox Code Playgroud)

    如果您没有使用静态IP的 Internet 连接,那么您必须以某种方式了解 ISP 当前分配给您的路由器的 IP。否则,C将不知道它必须连接到哪个 IP 才能到达您的路由器(以及进一步连接到A)。要以简单的方式解决此问题,您可以使用称为动态 DNS的服务。这将使您的路由器定期向一个特殊的DNS 服务器发送信息,该服务器将跟踪您的 IP 并为您提供一个域名。有很多免费的动态 DNS 提供商。许多路由器都带有配置选项,可以轻松地与它们联系。

1)这又是一种简化——互联网上看到的实际设备是调制解调器——它通常可以与路由器集成,但也可能是一个单独的盒子。
2)或任何其他具有 Internet 连接的机器。


现在你想要什么:

  1. 简单地允许 ssh 从 Internet 访问您的机器是一个坏主意。破解者设置了数以千计的机器人,它们在 Internet 上搜索具有开放 SSH 端口的机器。他们通常会“敲”尽可能多的 IP 的默认 SSH 端口,一旦他们发现 SSH 守护进程在某处运行,就会尝试获得对机器的暴力访问。这不仅是潜在入侵的风险,而且在机器被暴力破解时也会导致网络速度减慢。

  2. 如果你真的需要这样的访问,你至少应该

    • 确保您为所有用户帐户设置密码,

    • 禁止通过 SSH 进行 root 访问(您始终可以以普通用户身份登录,su或者sudo然后),

    • 更改 SSH 服务器运行的默认端口,

    • 引入一种禁止多次 SSH 登录尝试的机制(增加了等待后续尝试的时间 - 我不记得这是怎么称呼的 - 我前段时间在 FreeBSD 上启用了它,我记得这很容易 - 尝试搜索一些有关保护 SSH 的 FreeBSD 论坛等,您会找到它。)

    • 如果可能,仅当您知道您将在不久的将来访问该机器时才尝试运行 ssh 守护程序,然后将其关闭

  3. 习惯于浏览您的系统日志。如果您开始注意到任何可疑内容,请引入额外的安全机制,例如IP 表端口敲门

  • 赞成 ascii 善良... (16认同)
  • 看看我关于外部 SSH 访问的编辑(底部)。 (2认同)