1

На моем домашнем компьютере с Windows 10 у меня есть порт, перенаправленный RDP-порт Microsoft (3389) через маршрутизатор на порт (20202). Таким образом, я могу получить удаленный доступ к машине с Windows 10 через приложение Microsoft Remote Desktop на моем Mac, просто набрав <my public IP address>:<port> (например, 134.111.23.443:20202).

Мне интересно, есть ли способ сделать это более безопасным, например, туннелирование по SSH, без каких-либо других компьютеров (у меня есть только машина Windows 10, подключенная к Интернету через стационарный телефон дома, и мой MacBook, который я беру со мной).

2 ответа2

2

Удаленный рабочий стол Microsoft использует шифрование, и поэтому связь достаточно защищена. Слабым местом является атака грубой силы против вашего имени пользователя и пароля.

Для защиты RDP вы можете сделать следующее:

  1. Измените порт по умолчанию, который прослушивает удаленный рабочий стол
    Этот, который ты уже сделал.

  2. Сильные полномочия
    Используйте нестандартное имя пользователя и длинный и сложный пароль

  3. Ограниченные учетные записи пользователей
    Ограничьте пользователей, которые могут использовать RDP, запустив secpol.msc > Локальные политики> Назначение прав пользователя, дважды щелкните "Разрешить вход в систему через службы удаленных рабочих столов" и удалите все отображаемые группы, затем добавьте одного пользователя.

  4. Высокий уровень безопасности
    Запустите gpedit.msc > Политика локального компьютера> Административные шаблоны> Компоненты Windows> Службы удаленных рабочих столов> Узел сеансов удаленных рабочих столов> Безопасность.

    • "Установить уровень шифрования клиентского соединения" -> "Включено" и "Высокий уровень", чтобы ваши сеансы были защищены 128-битным шифрованием
    • «Требовать использования определенного уровня безопасности для удаленных (RDP) соединений» -> SSL
    • "Требовать аутентификацию пользователя для удаленных подключений с использованием аутентификации на уровне сети" -> Включено
  5. Установить политику блокировки учетной записи
    Чтобы заблокировать учетную запись на некоторое время после нескольких неправильных предположений, перейдите в Администрирование> Локальная политика безопасности> Политики учетной записи> Политики блокировки учетной записи и установите значения для всех трех вариантов (3 недопустимых попытки с продолжительностью блокировки 3 минуты разумны). ).

  6. следить за входом в свой ПК
    Периодически заходите в "Просмотр событий"> "Журналы приложений и служб"> "Microsoft"> "Windows"> «TerminalServices-LocalSessionManger»> "Операционный", чтобы просмотреть информацию для входа.

1

Это действительно хорошее решение, поскольку Microsoft до сих пор не может понять, как предотвратить грубую атаку на сеансы RDP. Существует политика блокировки учетной записи (которая имеет некоторый недостаток, читайте дальше), которая очень хорошо описана в хорошем ответе @harrymc, так что те, кто имеет хотя бы версию Windows Pro, могут использовать такой рабочий процесс.

Если вы являетесь владельцем домашней версии, вы можете активировать политику блокировки учетной записи, отредактировав непосредственно реестр в следующем ключе:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess\Parameters\AccountLockout
  • Дважды щелкните значение MaxDenials и введите число неудачных попыток, прежде чем заблокировать учетную запись.
  • Дважды щелкните значение ResetTime (mins) и измените значение по умолчанию 0xB40 которое является шестнадцатеричным в течение 2880 минут (два дня), на что-то разумное, скажем, 15-20 минут.

Проблема с политикой блокировки учетных записей Windows заключается в том, что ваш компьютер будет заблокирован, если кто-то попытается взломать пароль. Политика не зависит от IP-адреса отправителя, просто подсчитывает количество попыток входа в систему и инициирует событие блокировки учетной записи, поэтому эффективно отключает доступ как к владельцу, так и к злоумышленнику.

Другое ИМХО, намного более надежная защита - это использование аутентификации с открытым ключом SSH, которая намного сильнее, чем аутентификация на основе пароля.

Вы почти ответили на свой вопрос, упомянув SSH. Установите cygwin на ПК с Windows, запустите службу SSH и включите туннелирование sshd_config и установите аутентификацию с открытым ключом, отключив аутентификацию по простому паролю (если соединение успешно установлено, проверьте соединение ssh, находясь в домашней сети).
На вашем маршрутизаторе перенаправьте не SSH-порт по умолчанию (22), например, 20202, как вы делали это для RDP, на эту машину Windows на порт 22 на ПК с Windows (не забудьте также ОТКЛЮЧИТЬ пересылку в RDP). Когда вы собираетесь подключиться к RDP, запустите первый сеанс SSH с удаленным ПК с Windows, используя следующий скрипт:
(скрипт для ОС на основе 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. 

он будет перенаправлять ваш локальный порт 12345 на порт RDP(3389) на удаленной машине с Windows через надежно зашифрованный сеанс SSH, а затем, наконец, подключаться к RDP с помощью строки подключения localhost:12345

Преимущество такого способа защиты сеанса RDP заключается в том, что канал, зашифрованный с использованием асимметричной криптографии, намного надежнее любого сложного пароля. Помимо надежного шифрования можно использовать богатые утилиты Unix для управления по защищенному каналу удаленного ПК с Windows.

Еще одна изящная вещь, которую вы можете сделать, используя SSH, - если у вас нет статического IP-адреса дома, или вы не хотите полностью доверять таким компаниям, как LogMeIn или TeamViewer, или вашему ПК, расположенному за строгим брандмауэром, где вы не можете настроить переадресацию портов ИЛИ у вас нет контроля над основным шлюзом / брандмауэром, тогда можно настроить SSH в обратном режиме, когда ПК с Windows автоматически подключается к промежуточному серверу со статическим IP-адресом, которым вы управляете. Таким образом, вам не нужно подключаться напрямую к ПК с Windows, а подключаться к промежуточному серверу, который может обслуживать множество компьютеров. Такая настройка очень удобна, когда необходимо поддерживать мобильных клиентов, IP-адрес которых неизвестен, и когда ИТ-служба должна поддерживать мобильный ПК компании, не используя сторонние сервисы, из-за высокой секретности компании, которая снижает риск компрометации данных.

Хотя процесс установки, представленный ниже, выглядит довольно долго, на практике такая установка занимает 10-15 минут, когда вы понимаете, как она работает.

Подробности:

Установка Cygwin

Обновление: Начиная с Windows 10 v.1803 Microsoft поставлялась с уже предустановленными сервером и клиентом OpenSSH, поэтому приведенные ниже шаги предназначены для тех, у кого еще нет Windows 10 или она не обновлена до Windows 10 v.1803 и выше.

Чтобы установить SSH в Windows, следуйте документации Oracle, которая подробно описывает скриншоты, как настроить службу SSH.
Вам нужно только следовать разделам 5.3, 5.4, 5.5 здесь

Ниже я приведу наиболее важные шаги, которые необходимо выполнить для установки службы SSH.

  • Загрузите исполняемый файл установки с основного сайта cygwin . Существует две версии установочных файлов: setup-x86.exe и setup-x86_64.exe . Выберите подходящий файл для вашей машины. Если вы хотите использовать другие базовые утилиты Unix, кроме SSH, то я советую использовать версию x86 даже если ваша машина 64-битная, потому что не все утилиты перенесены на 64-битную версию.
  • Процесс установки довольно прост и интуитивно понятен:
    На экране выбора типа установки выберите «Установить из Интернета» и нажмите «Далее».
  • На экране «Выберите каталог установки» введите C:\cygwin в качестве корневого каталога, затем нажмите «Далее». Установите Install for всех пользователей
  • На экране Select Local Package Directory выберите каталог на локальном компьютере, в котором вы хотите сохранить загруженные установочные файлы, затем нажмите Next. (Вы можете оставить по умолчанию c:\packages )
  • На экране «Выберите тип подключения» выберите соответствующие параметры для подключения к Интернету и нажмите «Далее». Если у вашего ПК есть прямой доступ к Интернету без прокси-серверов, выберите « Direct connections
  • На экране выбора сайтов загрузки выберите любой сайт из списка доступных и нажмите кнопку «Далее». Выберите там ближайший к вам сайт. На экране выбора пакетов убедитесь, что вы выбрали как минимум следующие пакеты, а затем нажмите кнопку Далее:
    • openssh , openssl , unzip , xz , zip , mc
  • После выбора пакетов и нажатия кнопки «Далее» отобразится экран «Устранение зависимостей». Нажмите Далее, чтобы продолжить.
  • Если вы думаете, что будете использовать утилиты на основе Unix, то на экране состояния установки и создания значков не вносите никаких изменений. Нажмите Finish, чтобы завершить процесс установки, в противном случае снимите флажки.

Настройка SSH

  • После установки Cygwin перейдите в каталог C:\cygwin , откройте файл Cygwin.bat в режиме редактирования с помощью любого редактора и добавьте следующую строку перед вызовом оболочки bash.
    set CYGWIN=binmode ntsec как в примере ниже:

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

  • Чтобы проверить, правильно ли установлен Cygwin (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
    Удалите всех пользователей, которые не будут подключаться через SSH , особенно:
    SYSTEM, LOCAL SERVICE, NETWORK SERVICE, NT SERVICE+TrustedInstaller, Guest

Точная настройка службы SSHD

  • Отредактируйте sshd_config (служба SSH), запустив:
    mcedit /etc/sshd_config
  • Добавьте в конец файла следующий контент:

########################### Customization ##########################
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com
#
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 способом: (замените "UserName" на учетную запись Windows, которая будет подключена через SSH)
      В терминале 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

Подключение от удаленного клиента к RDP через соединение SSH

  • Для подключения в операционных системах на основе Unix, таких как Linux, FreeBSD, MacOS, можно использовать сценарий оболочки, размещенный в верхней части ответа. Отредактируйте переменные в верхней части скрипта, используйте закрытый ключ, сгенерированный на предыдущих шагах.
  • Для подключения с компьютеров под управлением Windows можно использовать клиентскую программу PuTTY . Перед подключением к удаленному компьютеру через RDP(подключение к удаленному рабочему столу), запустите сначала PuTTY и настройте переадресацию портов и закрытый ключ:
    • На левой панели дерева перейдите к
      Connection->SSH->Auth и, нажав кнопку Browse , добавьте путь к закрытому ключу, который был сгенерирован на предыдущих шагах.
    • На левой панели дерева перейдите к
      Connection->SSH->Tunnels и введите в поле Source port 12345 и поместите localhost:3389 в поле destination затем установите переключатели в Local и Auto и нажмите кнопку Add .
    • На левой панели дерева перейдите в Session и введите в поле « Host Name IP-адрес удаленного ПК с Windows, на котором работает SSH, а также задайте порт удаленного прослушивания домашнего маршрутизатора в поле « Port .
    • Добавьте описательное имя вашего сеанса в поле Saved Sessions и сохраните конфигурацию.
  • Когда соединение через SSH установлено, запустите программу Remote Desktop Connection и используйте localhost:12345 для подключения к удаленному компьютеру через RDP через туннель SSH.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .