安装 Cygwin

安装 Cygwin

在我家的 Windows 10 机器上,我已通过路由器将 Microsoft 的 RDP 端口 (3389) 转发到端口 (20202)。因此,我只需输入<my public IP address>:<port>(例如134.111.23.443:20202) 即可通过 Mac 上的 Microsoft 远程桌面应用程序远程访问 Windows 10 机器。

我想知道是否有办法使其更安全,例如通过 SSH 建立隧道,而无需任何其他计算机(我只有通过家里的固定电话连接到互联网的 Windows 10 机器和随身携带的 MacBook)。

答案1

这确实是一个不错的决定,因为微软仍然无法弄清楚如何防止对 RDP 会话的暴力攻击。有一个帐户锁定策略(有一些缺点,请进一步阅读),在 nice 中描述得很好@harrymc 回答,因此至少拥有 Windows Pro 版本的用户可以使用这样的工作流程。

如果您是家庭版的拥有者,那么您可以通过直接编辑以下注册表项来激活帐户锁定策略:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess\Parameters\AccountLockout
  • 双击该MaxDenials值并输入锁定帐户之前的失败尝试次数。
  • 双击ResetTime(分钟)值并将默认值0xB40(十六进制 2,880 分钟(两天))更改为合理的值,例如 15-20 分钟。

问题使用 Windows 帐户锁定策略的一大弊端是,如果其他人试图暴力破解密码,您的计算机将被锁定。策略不依赖于发起者的 IP,只计算登录尝试次数并触发帐户锁定事件,因此可以有效地禁用所有者和攻击者的访问权限。

我认为另一个更强大的保护是使用SSH公钥认证比基于密码的认证强大得多。

你几乎通过提到 SSH 回答了你的问题。设置赛格威在 Windows PC 上,运行 SSH 服务并启用sshd_config隧道并设置公钥身份验证,同时禁用普通密码身份验证(如果成功,请在家庭 LAN 上测试 ssh 连接)。
在路由器上,转发一些非默认 SSH 端口(22),例如 20202,就像您对这台 Windows 机器的 RDP 所做的那样,转发到 Windows PC 上的端口 22(也不要忘记禁用转发到 RDP)。当您要连接到 RDP 时,使用以下脚本启动与远程 Windows PC 的第一个 SSH 会话:(适用
于基于 Unix 的操作系统的脚本,例如 Linux、BSD、MacOS,以及使用 cygwin 的用户。那些使用 Windows 作为客户端的人请参见下面的“连接”部分)

#!/bin/sh

# Script that can be use on remote client that running Unix based OS

RemotePC_IP=1.2.3.4  # Public IP address of your home
WindowsUserName=Gates  # Windows user name on remote computer
RDPlocalListenPort=12345  # Local port that that will be forwarded to RDP
Path2prvKey='/path/to/private/key' # Path to private key
RemoteSSHport=20202 # The port that opened on your home router
                    # and forwarded to SSH service port on Windows PC

ssh -N -L ${RDPlocalListenPort}:localhost:3389 \
    -i ${Path2prvKey} -p ${RemoteSSHport} ${WindowsUserName}@${RemotePC_IP}                   

# If you also want to use bunch of useful Unix utilites (that doesn't
# exist natively on Windows) besides of port forwarding, you can remove
# `-N` option from this script and use cygwin's terminal to run Windows's
# and Unix's console base programs remotely without starting RDP session. 

它将通过安全加密的 SSH 会话将本地端口 12345 转发到远程 Windows 机器上的 RDP(3389)端口,然后最终使用连接字符串连接到 RDPlocalhost:12345

这种方法保护 RDP 会话的优势在于,该通道使用非对称加密技术进行加密,比任何复杂密码都要强得多。除了强加密之外,还可以使用丰富的 Unix 实用程序通过安全通道管理远程 Windows PC。

通过使用 SSH,您还可以做一件很棒的事情 - 如果您在家中没有静态 IP 地址,或者您不想完全信任 LogMeIn 或 TeamViewer 等公司,或者您的 PC 位于严格的防火墙后面,您无法设置端口转发,或者您无法控制主网关/防火墙,那么您可以以反向模式设置 SSH,其中 Windows PC 自动连接到您控制的具有静态 IP 的中间服务器。这样,您不需要直接连接到 Windows PC,而是连接到可以为多台计算机提供服务的中间服务器。当需要支持 IP 未知的移动客户时,这种设置非常方便,并且当 IT 支持人员应该在不使用第三方服务的情况下支持公司的移动 PC 时(因为公司的机密性很高),可以降低数据泄露的风险。

虽然下面的安装过程看起来很长,但实际上,当你了解它是如何工作的时,这样的安装只需要 10-15 分钟。

细节:

安装 Cygwin

更新:Windows 10 v.1803 Microsoft 已预装 OpenSSH 服务器和客户端,因此以下步骤适用于那些没有 Windows 10 或尚未升级到 Windows 10 v.1803 及更高版本的用户。

要在 Windows 上安装 SSH,请按照 Oracle 的文档进行操作,其中详细描述了如何设置 SSH 服务,并附带屏幕截图。
您只需按照第 5.3、5.4、5.5 节进行操作即可这里

我将发布安装 SSH 服务所需完成的最重要的步骤。

  • 从以下位置下载可执行安装文件赛格威主要站点。有两个版本的安装文件:setup-x86.exesetup-x86_64.exe。为您的机器选择合适的文件。如果您想使用除 SSH 之外的其他 Unix 基础实用程序,那么我的建议是使用x86版本,即使您的机器是 64 位的,因为并非所有实用程序都移植到 64 位版本。
  • 安装过程非常简单直观:
    在“选择安装类型”屏幕上,选择“从 Internet 安装”,然后单击“下一步”。
  • 在“选择安装目录”屏幕上,输入 C:\cygwin 作为根目录,然后单击下一步。将单选Install for按钮设置为All users
  • 在“选择本地包目录”屏幕上,选择本地计算机上要存储下载的安装文件的目录,然后单击“下一步”。 (您可以保留默认设置c:\packages
  • 在“选择连接类型”屏幕上,选择适当的设置以连接到互联网,然后单击下一步。如果您的 PC 无需任何代理即可直接访问互联网,则选择Direct connections
  • 在“选择下载站点”屏幕上,从可用列表中选择任意站点,然后单击“下一步”。选择离您最近的站点。在“选择软件包”屏幕上,确保至少选择以下软件包,然后单击“下一步”:
    • openssh,,,,,,opensslunzipxzzipmc
  • 选择软件包并单击“下一步”后,将显示“解决依赖关系”屏幕。单击“下一步”继续。
  • 如果您认为您会使用基于 Unix 的实用程序,那么在“安装状态”和“创建图标”屏幕上,请不要进行任何更改。单击“完成”以完成安装过程,否则取消选中复选框。

配置 SSH

  • 安装 Cygwin 后,导航到目录C:\cygwinCygwin.bat使用任何编辑器以编辑模式打开文件,并在调用 bash shell 之前添加以下行。
    set CYGWIN=binmode ntsec如下例所示:

    @echo off C: chdir C:\cygwin\bin set CYGWIN=binmode ntsec bash --login -i

  • 验证是否赛格威cygrunsrv)安装正确后,运行
    C:\cygwin\Cygwin.bat,并执行以下命令:
    cygrunsrv -h
    如果 Cygwin 安装正确,则所有 Cygwin 帮助选项都会显示在屏幕上。但是,如果此命令返回错误消息,则可能必须重新安装 Cygwin。

  • 要配置该SSHD服务,请运行C:\cygwin\Cygwin.bat,并执行以下命令:
    ssh-host-config
    运行该命令后,系统会提示您以下问题:
    *** Query: Should privilege separation be used? <yes/no>: yes *** Query: New local account 'sshd'? <yes/no>: yes *** Query: Do you want to install sshd as a service? *** Query: <Say "no" if it is already installed as a service> <yes/no>: yes *** Query: Enter the value of CYGWIN for the deamon: [] binmode ntsec *** Query: Do you want to use a different name? (yes/no) yes/no
    此时,如果要使用相同的名称,即cyg_server,请输入 no。然后系统会提示您以下问题:
    *** Query: Create new privileged user account 'cyg_server'? (yes/no) yes *** Query: Please enter the password: *** Query: Renter:
    但是,如果要使用不同的名称,请输入 yes。然后系统会提示您以下问题:
    *** Query: Enter the new user name: cyg_server1 *** Query: Reenter: cyg_server1 *** Query: Create new privileged user account 'cyg_server1'? (yes/no) yes *** Query: Please enter the password: *** Query: Reenter:
    如果配置成功,您将看到以下消息:
    Host configuration finished. Have fun!
  • 备份c:\cygwin\etc\passwd文件(如果存在)并运行以下命令:
    /bin/mkpasswd -l >/etc/passwd
    然后passwd通过运行 mcedit /etc/passwd
    Remove进行编辑所有不通过 SSH 连接的用户, 尤其:
    SYSTEM, LOCAL SERVICE, NETWORK SERVICE, NT SERVICE+TrustedInstaller, Guest

SSHD 服务的微调

  • 通过运行以下命令编辑sshd_config文件(SSH 服务):
    mcedit /etc/sshd_config
  • 在文件末尾添加以下内容:

########################### Customization ##########################
Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
KexAlgorithms [email protected],diffie-hellman-group-exchange-sha256
MACs [email protected],[email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,[email protected]
#
UseDNS no
UsePAM yes
LoginGraceTime 20
#
PermitRootLogin prohibit-password
PubkeyAuthentication yes
ChallengeResponseAuthentication no
PasswordAuthentication no
HostbasedAuthentication no
#
PermitTunnel yes
TCPKeepAlive no
ClientAliveInterval 30
ClientAliveCountMax 10
GatewayPorts no
AllowTcpForwarding yes

  • 现在需要生成密钥公钥认证
    cygwin终端运行以下命令:
    mkdir -p ~/.ssh && chmod 700 ~/.ssh
    cd ~/.ssh
    echo > ~/.ssh/authorized_keys

    • 以 Unix 方式生成密钥:(将“用户名”替换为将通过 SSH 连接的 Windows 帐户)
      cygwin终端运行以下命令:
      cd ~/.ssh
      ssh-keygen -t ed25519 -o -a 127 -C "UserName" -f "UserName.ed25519.key"
      cp -f UserName.ed25519.key.pub ~/.ssh/authorized_keys
    • Windows 方式:
      下载PuTTY并运行puttygen.exe。选择要生成的密钥ED25519并按Generate。将私钥保存到文件中,稍后可将其用作授权密钥。从标记为(用于传入 OpenSSH 的公钥)的字段中选择顶部的公钥,右键单击选择,然后选择copy然后paste将内容复制到
      ~/.ssh/authorized_keys
  • 最后运行以下命令启动 SSH 服务:
    cygrunsrv -S sshd

通过 SSH 连接从远程客户端连接到 RDP

  • 要在基于 Unix 的操作系统(如 Linux、FreeBSD、MacOS)上进行连接,可以使用答案顶部发布的 shell 脚本。编辑脚本顶部的变量,使用前面步骤中生成的私钥。
  • 要从运行 Windows 的计算机连接,可以使用油灰客户端程序。在通过 RDP(远程桌面连接)连接到远程计算机之前,请先运行 PuTTY 并设置端口转发和私钥:
    • 在左侧树面板上,转到
      Connection->SSH->Auth并单击Browse按钮添加在前面步骤中生成的私钥路径。
    • 在左侧树面板上,转到
      Connection->SSH->Tunnels 并输入字段Source port 12345,然后输入localhost:3389字段,destination然后将单选按钮设置为LocalAuto按下Add按钮。
    • 在左侧树面板上,转到 Session并在Host Name字段中输入运行 SSH 的远程 Windows PC 的 IP 地址,并在字段中设置家庭路由器的远程监听端口Port
    • 在字段中添加会话的描述性名称Saved Sessions并保存配置。
  • 当通过 SSH 建立连接时,运行Remote Desktop Connection程序并localhost:12345通过 SSH 隧道通过 RDP 连接到远程计算机。

答案2

微软的远程桌面使用加密技术,因此通信得到了合理的保护。弱点是您的用户名和密码可能会遭到暴力攻击。

为了保护 RDP,您可以执行以下操作:

  1. 更改远程桌面侦听的默认端口
    这个你已经做了。

  2. 实力雄厚
    使用非默认用户名和长而复杂的密码

  3. 受限用户帐户
    通过运行 > 本地策略 > 用户权限分配来严格限制可以使用 RDP 的用户 secpol.msc,双击“允许通过远程桌面服务登录”并删除所有显示的组,然后添加一个用户。

  4. 高安全级别
    运行gpedit.msc> 本地计算机策略 > 管理模板 > Windows 组件 > 远程桌面服务 > 远程桌面会话主机 > 安全。

    • “设置客户端连接加密级别” -> 启用和高级别,以便您的会话使用 128 位加密进行保护
    • “要求对远程(RDP)连接使用特定的安全层”-> SSL
    • “使用网络级身份验证要求对远程连接进行用户身份验证”->已启用
  5. 设置帐户锁定策略
    要在多次猜测错误后将帐户锁定一段时间,请转到管理工具 > 本地安全策略 > 帐户策略 > 帐户锁定策略,然后设置所有三个选项的值(3 次无效尝试,锁定时间为 3 分钟是合理的)。

  6. 跟踪登录到您的电脑
    定期转到事件查看器 > 应用程序和服务日志 > Microsoft > Windows > TerminalServices-LocalSessionManger > 操作,查看登录信息。

相关内容