- VPN шлюз для RDP
- Самая простая в мире настройка VPN удаленному сотруднику
- VPN и RDP: Автоматизация настройки удаленных рабочих мест
- Развертывание VPN и RDP клиентов для удаленных пользователей
- Общая идея:
- Реализация:
- Создадим директорию проекта:
- Создание «шаблона» VPN подключения:
- Итого в директории у нас 3 файла:
- Создадим 2 bat-скрипта в директории проекта:
- Разворачиваем клиентов
VPN шлюз для RDP
Для защиты Windows сервера лучше всего «спрятать» его за OpenVpn и заблокировать все входящие подключения к серверу из внешней сети.
Это полезно в случаях:
1. Brute Force атак (метод подбора пароля, заключающийся в переборе всех возможных комбинаций символов, пока не будет найдена верная комбинация).
2. Защита Windows сервера от взлома, когда атакующий использует новые обнаруженные уязвимости в часто используемых службах, например в RDP (специальный протокол, разработанный компанией Microsoft для удаленного управления ОС Windows), FTP и других.
3. Администратор Windows сервера не устанавливает обязательные обновления системы тем самым увеличивая шансы на взлом системы с помощью эксплоитов.
Для настройки шлюза нам понадобится Linux сервер (достаточно сервера с минимальным тарифом camp и ОС Ubuntu 18) а так же Windows сервер (в примере это сервер с ОС Windows 2019).
1. Установка OpenVPN на Linux VPS и создание пользователей.
Для настройки OpenVPN лучше всего воспользоваться инструкцией — Настройка OpenVPN сервера на Debian, Ubuntu, CentOS за пару минут
В процессе настройки сделаем двух пользователей, например Server и Client. В итоге у нас должно быть два конфигурационных файла OpenVPN, один для Windows сервера другой для подключения клиентов к OpenVPN серверу.
2. Настраиваем статический IP для Windows сервера.
В результате будет создана директория для конфигурационных файлов пользователей, конфигурационный файл для пользователя windows и выдан ему статический ip 10.8.0.200
В конфигурационный файл /etc/openvpn/server/server.conf OpenVPN сервера добавляем:
Можно указать любой другой DNS сервер в строке push «dhcp-option DNS 1.1.1.1»
В результате конфигурационный файл /etc/openvpn/server/server.conf должен выглядеть так:
Запускаем OpenVPN сервер командой
3. Настройка OpenVPN на Windows сервере.
Скачиваем и устанавливаем OpenVPN клиент по ссылке.
Копируем конфигурационный файл server.ovpn на Windows сервер и подключаемся к VPN.
После подключения Windows сервер получит статический ip 10.8.0.200, если мы хотим использовать openvpn сервер в качестве шлюза для выхода во внешнюю сеть то в конфигурационный файл клиента windows.ovpn нужно добавить параметр redirect-gateway
4. Настройка OpenVPN на пользовательском ПК.
Настройка на пользовательском ПК проводится аналогично пункту 3, после подключения по конфигурационному файлу client.ovpn ПК получит динамический ip, после чего можно будет выполнить ping тест openvpn и windows сервера.
На этом этапе можно проверить наш сервер на открытые порты, они должны быть уже закрыты, сервер будет полностью доступен (в том числе и по RDP) в сети VPN по адресу 10.8.0.200
5. Настройка брандмауэра Windows.
Может быть ситуация когда OpenVPN шлюз не запущен на Windows сервере и тогда сервер будет доступен из внешней сети.
Для этого нужно заблокировать все внешние подключения на основной ip Windows сервера.
Сканируем открытые порты пакетом nmap.
Устанавливаем его на OpenVPN сервере (Ubuntu 18)
Запускаем сканирование и получаем результат
По результатам сканирования видно что открыт один порт 3389 (Служба удаленных рабочих столов) когда Windows сервер не подключен к шлюзу OpenVPN. Исправим это.
В брандмауэре Windows создаем правило для входящих подключений и блокируем порт 3389
В свойствах созданного правила на вкладке Область добавляем внешний ip сервера. После этого этапа наш сервер перестанет принимать входящие подключения на порт 3389 и внешний IP. Получить доступ к серверу по RDP можно будет только запустив OpenVPN подключение и используя адрес локальной сети 10.8.0.200
Самая простая в мире настройка VPN удаленному сотруднику
Хочу поделиться с вами одной программой, особенно актуальной в текущее время, когда многие предприятия вынужденно переводят своих сотрудников на удаленку. Обычно для организации удаленной работы нужно обеспечить доступ к корпоративным ресурсам – внутренним программам, общим папкам, базам данных, 1С. Также, часто требуется и доступ к рабочему компьютеру – удаленный рабочий стол. Самый простой и безопасный способ это сделать – дать сотруднику доступ к офисной сети с домашнего компьютера, применив технологию VPN.
Я не буду углубляться в суть данной технологии, так как если вы это читаете – то, наверняка, уже все знаете или только познаете. Я хочу лишь помочь упростить настройку VPN-подключения для сотрудника. Сразу оговорюсь, что рассматривается только тип VPN L2TP/IPsec с общим ключом. PPTP я считаю ненадежным, а остальные виды вроде не так и распространены.
К сожалению, далеко не все пользователи ПК в состоянии правильно настроить подключение. На примере места, где я работаю системным администратором (строительная компания) – таких сотрудников оказалось 99%. Казалось бы, что может быть проще – ввести адрес сервера, логин, пароль, тип подключения… Но нет, не всем это дано. Выхода здесь два – сисадмин или сам настраивает подключение индивидуально каждому, или использует средства автоматизации, которые это сделают за него. Я всегда был сторонником второго, думаю так и должен поступать настоящий сисадмин. Из идеи появился первый концепт, доработки, и вот, первая более-менее рабочая версия. Программа состоит по сути всего из одного окна, что на рисунке ниже.
Предполагается, что VPN-сервер вы уже настроили, тем более многие современные роутеры имеют эту функциональность «из коробки». Особенно хочется отметить роутеры Keenetic, да не сочтите рекламой. Меня поразила их функциональность и простота настройки при отличной стабильности и надежности, надеюсь они и дальше будут оставаться такими.
Итак, в окне моей программы вы заполняете шесть вполне понятных полей, нажимаете «Сформировать exe файл». Выбираете место, где его сохранить. Он будет называться также, как название подключения, указанного в программе. Передаете сформированный файл сотруднику, сообщаете пароль, который вы ввели во второе поле программы. Сотруднику для подключения к офисной сети остается лишь запустить этот файл и ввести пароль. Пароль будет сохранен на компьютере сотрудника на 90 дней (в папке %LocalAppData%\CDSD\VPNConnector\<название_подключения>\cpf.dat). Файл нужно запускать тогда, когда понадобится доступ к офисной сети, а также в случае, если был разрыв интернет-соединения при уже установленном ранее подключении.
Теперь о самом главном. О безопасности. Первое – сисадмин не передает пользователю его логин и пароль от VPN-сервера, вообще. Также не передается общий ключ и IP-адрес сервера, хотя последнее пользователь может с легкостью узнать сам. Вам больше не нужно беспокоиться, что эти данные, по старинке передаваемые, скажем, электронным письмом, мог увидеть кто-то еще. Нужно только передать сформированный exe-файл почтой или через флешку, а пароль можно продиктовать и по телефону (допускается кириллица в пароле). Второе – введенный пользователем пароль в окно установки подключения сохраняется на его компьютере в зашифрованном виде. Третье – в сформированном exe-файле все реквизиты зашифрованы этим самым паролем (что из второго поля). Вы увидите результат шифровки в четырех последних полях. И последнее – программа из сформированного exe-файла создает сама новое VPN-подключение, но никогда не сохраняет логин и пароль в нем, а вводит их на этапе запуска подключения.
Вот ссылка на скачивание этой программы: VPN.Connect.zip
Зеркало: VPN.Connect.zip
Требования для запуска: на компьютере должен быть установлен .NET Framework 4. В Windows 8.1 и 10, а возможно и будущих версиях, он уже есть. В Windows 7 вроде ставится автоматически через центр обновлений, но точно не помню. На всякий случай, ссылка на установщик: .NET Framework 4.
Кстати, в моей организации для удаленного рабочего стола мы используем ПО, работающее исключительно по локальной сети, и соответственно, по VPN тоже. Это безопаснее, чем всякие TeamViewer и AnyDesc, так как недоступно из интернета широкой аудитории. На данный момент прижилось ПО NoMachine, может и вам пригодится, если нет возможности использовать обычный RDP.
Если вам интересны исходники программы, думаю, большого секрета в них нет, и я могу их выложить в открытый доступ на гитхабе, например. Написано на C#, WinForms.
Я для себя писал и некоторые другие полезные программы, малую часть из которых выкладывал на своем сайте (совсем нет времени на остальное). Сайт некоммерческий, рекламы на нем нет и никогда не будет, а хостится он на бесплатном ресурсе, поэтому особой выгоды для меня не несет, да и затрат тоже (кстати, поэтому претензии по его недоступности или тормознутости мною не принимаются 🙂 ). Думаю, уместно оставить на него ссылку здесь: личная страничка, если кому пригодится опубликованный там софт – буду искренне рад.
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
VPN и RDP: Автоматизация настройки удаленных рабочих мест
Развертывание VPN и RDP клиентов для удаленных пользователей
В рамках данного блога были публикации о настройке VPN сервера.
2020 год принес всем сюрприз в виде съеденной летучей мыши.
В марте нынешнего года пришлось организовывать несколько десятков удаленных рабочих мест штатными средствами (Windows 7, 8 и 10 ).
Для себя я выбрал связку Softether VPN как VPN сервер и Windows Terminal Server как Сервер терминалов:)
Для быстроты развертывания на клиентской стороне VPN и RDP были созданы скрипты простые автоматизации.
Забегая вперед — полностью автоматизировать настройку у меня не получилось, удалось сократить время настройки на 70-80% удалось.
Общая идея:
- Автоматизировать VPN и RDP подключение пользователем запуском одного файла.
- При отключении RDP сессии отключаться от VPN сервера.
- Ускорить развёртывание на стороне клиента
Реализация:
- Шаблон VPN соединения
- Шаблон RDP файла
- Программа cmdow для сокрытия активного окна CMD
- Bat скрипт автоматизации подключения
- Bat скрипт создания клиентских подключений
Считаем, что VPN сервер (L2TP/IPSec) настроен и доступен по адресу vpn.mydomain.ru.
В сети до сих пор есть описания о создании терминальных серверов с пробросами портов в инет.
Как защиту предлагают сменить стандартный порт 3389 на другой.
!Никогда так не делайте, обязательно ставьте в разрыв VPN сервер!
Создадим директорию проекта:
Создание «шаблона» VPN подключения:
Настраиваем и тестируем VPN соединение, после удачного теста сохраняем его данные в текстовый файл под именем my.pbk.
Для этого открываем текстовым редактором файл:
Если на вашей машине одно соединение, то можно просто скопировать данный файл в рабочую папку проекта.
Если несколько подключений, то скопируйте руками в новый файл данные нужного подключения.
Ориентир — название подключения в квадратных скобках:
[vpn.mydomain.ru]
Конец конфигурации заканчивается блоком:
DEVICE=vpn
Encoding=1
PBVersion=4
Type=2
AutoLogon=0
UseRasCredentials=1
LowDateTime=1140277904
HighDateTime=30850051
DialParamsUID=4810171
Guid=0CDB884F96A5084D83311721A107FAF9
VpnStrategy=3
ExcludedProtocols=8
LcpExtensions=1
DataEncryption=256
SwCompression=0
NegotiateMultilinkAlways=0
SkipDoubleDialDialog=0
DialMode=0
OverridePref=15
RedialAttempts=3
RedialSeconds=60
IdleDisconnectSeconds=0
RedialOnLinkFailure=1
CallbackMode=0
CustomDialDll=
CustomDialFunc=
CustomRasDialDll=
ForceSecureCompartment=0
DisableIKENameEkuCheck=0
AuthenticateServer=0
ShareMsFilePrint=1
BindMsNetClient=1
SharedPhoneNumbers=0
GlobalDeviceSettings=0
PrerequisiteEntry=
PrerequisitePbk=
PreferredPort=VPN3-0
PreferredDevice=WAN Miniport (L2TP)
PreferredBps=0
PreferredHwFlow=1
PreferredProtocol=1
PreferredCompression=1
PreferredSpeaker=1
PreferredMdmProtocol=0
PreviewUserPw=1
PreviewDomain=1
PreviewPhoneNumber=0
ShowDialingProgress=1
ShowMonitorIconInTaskBar=0
CustomAuthKey=0
AuthRestrictions=512
IpPrioritizeRemote=1
IpInterfaceMetric=0
IpHeaderCompression=0
IpAddress=0.0.0.0
IpDnsAddress=0.0.0.0
IpDns2Address=0.0.0.0
IpWinsAddress=0.0.0.0
IpWins2Address=0.0.0.0
IpAssign=1
IpNameAssign=1
IpDnsFlags=0
IpNBTFlags=1
TcpWindowSize=0
UseFlags=2
IpSecFlags=1
IpDnsSuffix=
Ipv6Assign=1
Ipv6Address=::
Ipv6PrefixLength=0
Ipv6PrioritizeRemote=1
Ipv6InterfaceMetric=0
Ipv6NameAssign=1
Ipv6DnsAddress=::
Ipv6Dns2Address=::
Ipv6Prefix=0000000000000000
Ipv6InterfaceId=0000000000000000
DisableClassBasedDefaultRoute=0
DisableMobility=0
NetworkOutageTime=0
ProvisionType=0
PreSharedKey=
CacheCredentials=1
NumCustomPolicy=0
NumEku=0
UseMachineRootCert=0
NumServers=0
NumRoutes=0
NumNrptRules=0
AutoTiggerCapable=0
NumAppIds=0
NumClassicAppIds=0
SecurityDescriptor=
ApnInfoProviderId=
ApnInfoUsername=
ApnInfoPassword=
ApnInfoAccessPoint=
ApnInfoAuthentication=1
ApnInfoCompression=0
WebPreAuth=
DisableDefaultDnsSuffixes=0
NumTrustedNetworks=0
NumDnsSearchSuffixes=0
PowershellCreatedProfile=0
ProxyFlags=0
ProxySettingsModified=0
ProvisioningAuthority=
AuthTypeOTP=0
GREKeyDefined=0
NumPerAppTrafficFilters=0
AlwaysOnCapable=0
PrivateNetwork=0
NETCOMPONENTS=
ms_msclient=1
ms_server=1
MEDIA=rastapi
Port=VPN3-0
Device=WAN Miniport (L2TP)
DEVICE=vpn
PhoneNumber=vpn.mydomain.ru
AreaCode=
CountryCode=0
CountryID=0
UseDialingRules=0
Comment=
FriendlyName=
LastSelectedPhone=0
PromoteAlternates=0
TryNextAlternateOnFail=1
Этот файл в дальнейшем мы будем импортировать клиентам.
При импорте мы потеряем логин, пароль и общий ключ IPSec.
Создадим в директории проекта RDP файл (текстовый файл c расширением rdp):
screen mode id:i:2
use multimon:i:0
desktopwidth:i:1920
desktopheight:i:1080
session bpp:i:32
winposstr:s:0,3,0,0,800,600
compression:i:1
keyboardhook:i:2
audiocapturemode:i:0
videoplaybackmode:i:1
connection type:i:2
networkautodetect:i:1
bandwidthautodetect:i:1
displayconnectionbar:i:1
enableworkspacereconnect:i:0
disable wallpaper:i:0
allow font smoothing:i:0
allow desktop composition:i:0
bitmapcachepersistenable:i:1
full address:s:192.168.66.223
audiomode:i:0
redirectprinters:i:1
redirectcomports:i:0
redirectsmartcards:i:1
redirectclipboard:i:1
redirectposdevices:i:0
autoreconnection enabled:i:1
authentication level:i:0
prompt for credentials:i:1
negotiate security layer:i:1
remoteapplicationmode:i:0
alternate shell:s:
shell working directory:s:
gatewayhostname:s:
gatewayusagemethod:i:4
gatewaycredentialssource:i:4
gatewayprofileusagemethod:i:0
promptcredentialonce:i:0
gatewaybrokeringtype:i:0
use redirection server name:i:0
rdgiskdcproxy:i:0
kdcproxyname:s:
redirectdirectx:i:1
drivestoredirect:s:Локальный диск (C:);
username:s:MYDOMAIN\vladimir
Обращаем внимание на 3 строки и меняем их на нужные:
- full address:s:192.168.66.223 — адрес вашего терминального сервера
- drivestoredirect:s:Локальный диск (C:); — перенаправление локального диска пользователя
- username:s:MYDOMAIN\vladimir — логин пользователя
Докидываем в директорию проекта cmdow.exe из скаченного архива по пути \bin\Release (альтернативная ссылка).
Итого в директории у нас 3 файла:
- my.pbk — шаблон VPN соединения
- my.rdp — RDP файл
- cmdow.exe — программа для скрытия рабочего окна скрипта
Создадим 2 bat-скрипта в директории проекта:
- install.bat — скрипт установщик
- connect.bat — скрипт запуска VPN и RDP сессий
Заполняем корректными данными RDP файл (адрес сервера, имя пользователя).
В файле connect.bat указываем корректные имя и пароль.
Разворачиваем клиентов
Копируем директорию проекта на компьютер клиента.
Переходим в директорию и запускаем от администратора install.bat.
Устанавливаем IPSec ключ в свойствах сетевого адаптера:
На рабочем столе клиента появились два файла:
- connect.bat — поднимает VPN соединение, RDP сессию (на основе файла my.rdp)
гасит VPN коннект после отключения RDP сессии - my.rdp — необходим для RDP сессии
После запуска connect.bat произойдет подключение к VPN серверу и после этого запустится RDP сессия.
На этом наверное все:)
P.S. Из массы разнообразных домашних компьютеров попались два экземпляра:
Windows XP — вообще ни как штатными средствами не удалось настроить VPN
Windows 7 (32) — при попытке соединения выдавал различные ошибки
Пришлось на этих двух машинах установить VPN клиент от SoftEther.
После его настройке можно автоматизировать запуск с помощью его CLI:
- vpncmd localhost /client /cmd AccountConnect Имя_соединения
- vpncmd localhost /client /cmd AccountDisconnect Имя_соединения