Vpn ssh для windows

Настройка VPN через SSH с использованием Putty

Дата последнего редактирования: 22.11.2011.

Сегодня пришлось вспоминать минут 20 как сделать сабж, попарился и решил написать на сайт, для себя как памятку и для других — вдруг кому пригодиться.

Задача: осуществить безопасное (шифрованное) соединение от КЛИЕНТА к СЕРВЕРУ_ПОЧТЫ по протоколу POP3 (получение почты, обычно порт 110). Ну и пусть нам это надо не постоянно, а иногда (иначе надо все-таки настраивать нормальный VPN-сервер).

Т.к. по умолчанию трафик по протоколу POP3 передается открытым текстом, а мы передаем очень секретный пароль от почтового ящика, то почтовый трафик надо шифровать 🙂 Чем мы будем его шифровать? Поднимать специальный VPN-сервер, редирект портов, настраивать сертификаты и прочее — часто не выход, т.к. это сложно даже для большинства системных администраторов, к тому же, как сказано чуть выше, нам все это надо для периодических сеансов работы, возможно, только для нас и нужных 😉

Мы будем делать соединение между КЛИЕНТОМ и СЕРВЕРОМ_ПОЧТЫ внутри шифрованного содинения по протоколу ssh.

Возьмем бесплатный клиент ssh для Windows — Putty — и установим его на КЛИЕНТА (т.е. на наш домашний компьютер).

Командная строка Putty

Далее установим зашифрованное соединение между КЛИЕНТОМ и БРАНДМАУЭРОМ так, чтобы для КЛИЕНТА работа с почтой внутри локальной сети была бы точно такой, как если бы он (клиент) был бы у себя в офисе.

У КЛИЕНТА запускаем консоль: Пуск -> выполнить -> cmd

В консоли набираем команды:

где «-v» — т.н. verbose режим, с расширенными комментариями, «-ssh -2» — использовать протокол ssh версии 2, «-P 22» — порт, открытый на БРАНДМАУЭРЕ для подключения по ssh, «-C» — использовать сжатие, «-l user» — имя пользователя, который имеет право входить на сервер ssh на БРАНДМАУЭРЕ, «-pw password» — пароль этого пользователя,

далее (я специально сделал отступ от предыдущего текста):
«-L 8110:192.168.1.10:110» — локальный порт, который будет доступен на компьютере КЛИЕНТА, а 192.168.1.10 — локальный ip-адрес почтового сервера внутри организации, 110 — соответственно, порт POP3 на этом сервере;
«81.222.111.10» — внешний ip-адрес БРАНДМАУЭРА, к которому и будет соединяться КЛИЕНТ по ssh с помощью putty.

После набора последней команды:

откроется окно сеанса связи по протоколу ssh. Все, окно сворачиваем (не закрываем!), и настраиваем нашу почтовую программу на получение почты с адреса localhost и портом 8110, а не 110, который стоит по умолчанию.

Вроде бы все. Во время получения почты почтовая программа будет соединяться с портом 8110, который будет переадресован на удаленный почтовый сервер в офисе, при этом весь трафик соединения будет зашифрован. Завершить сеанс связи можно просто закрыв окно сеанса putty. После этого локальный порт 8110 уже не будет доступен.

. или же все это можно сделать немного проще:

GUI Putty

Для тех, кто пользуется графическим интерфейсом Putty, привожу скриншоты:

  • Source port: 8110 — порт к которому мы будем подключаться на нашей машине.
  • Destination ( [IP:]Port): 192.168.1.10:110 — удаленный почтовый сервер.
  • Нажимаем «Add» («Добавить»). Думаю, многие могут не сделать этого и будут разочарованы, т.к. ничего не сработает.

Суть последнего скриншота: локальный порт 8110 прозрачно соединяет вас с 80 портом сервера 192.168.1.10.

Ну и, понятное дело, чтобы это не вписывать каждый раз, ПЕРЕД ТЕМ, КАК НАЖАТЬ «Open», вернитесь на вкладку Session (первый скриншот) и сохраните настройки. Только потом жмите «Open».

Резюме

Можно добавить, что похожим образом можно соединяться не только к почтовому серверу, но и к другим сервисам, например, я таким образом соединялся с RAdmin, установленным на компьютере в локальной сети, при этом никаких port-мапперов на самом шлюзе делать не надо. Вот что самое хорошее! Достаточно иметь актуальную версию сервера ssh на шлюзе и, желательно, фильтровать на брандмауэре подключения к порту 22 (ssh), например по ip-адресу, если у вас дома или где там еще подключение к интернет постоянное. Но это уже мелочи жизни и тема другой статьи.

Вообще у ssh и putty, есть ооочень много всяких разных приятностей, которые здесь не упомянуты. Надеюсь, эта статья подтолкнет вас к небольшому исседованию, начать которое очень просто: http://www.google.ru/search?complete=1&hl=ru&newwindow=1&q=ssh&lr=&aq=f.

Кроме того, упомянутые в статье программы (за исключением почтовых серверов и ОС самого клиента ;)) являются бесплатными и свободно распространяемыми, а стремление быть легальным и бесплатным — хороший стимул приглядеться к реализации подобного безопасного соединения через ssh.

И еще, конечно же, при написании этой заметки я использовал другие ресурсы для «освежения» памяти. Вот самая полезная ссылка, которая и стала финальной в моих тестовых экспериментах перед опубликованием статьи: http://wiki.kaytaz.ru/doku.php/ssh-tunnel_cherez_putty.

Примечания (составлены по итогам комментариев на 27.03.2008)

1. (isx) Если туннель простаивает некоторое время, то соединение рвется, потому стоит поменять параметры сервера: TCPKeepAlive. Увеличить LoginGraceTime, выставить ClientAliveInterval и ClientAliveCountMax. Убрать UseDns, иначе длительные ожидания при установке соединений.

Читайте также:  Как поменять имя локального пользователя windows 10

2. (isx) А отчего не сделаешь все через ssl? Если не хочется возиться с почтовиком, то можно воспользоваться программой stunnel, поднимая ее на шлюзе(брандмауэре). // Stunnel (http://stunnel.mirt.net/) использует OpenSSl или SSLeavy для шифрования трафика. Используется для установления шифрованных тонелей связи между клиентом и сервером. Работает в Linux, Windows, OS/2 и прочих осях.

3. (Serg) Если человек не админ брендмауэра — могут быть проблемы. Кто-то может гарантировать, что в настройках sshd не выключен форвардинг и/или туннелирование? // Действительно, к данному решению надо подходить взвешенно и понимать, что указанный способ туннелирования действительно больше всего подходить только для админа.

Проброс портов через SSH-туннель в Windows

В этой статье мы покажем, как использовать встроенный в Windows OpenSSH сервер для проброса портов через SSH туннель (SSH туннелированние). Перенаправление портов в SSH позволяет туннелировать (пробрасывать) порты приложений с локального компьютера на удаленный сервер и наоборот. Ранее проброс портов через SSH туннель использовался только в среде Linux/Unix , но теперь вы можете воспользоваться этим возможностями и в Windows. Рассмотрим на практическом примере, как на Windows Server через SSH сервер с открытым портом TCP 22 пробросить RDP подключение.

Чаще всего проброс портов через SSH применяется в сценариях, когда нужно подключиться к удаленному компьютеру, который защищен межсетевым экраном. Например, у вас имеется сервер c Windows, на котором открыт только SSH порт (TCP 22). Все остальные порты блокируются аппаратным межсетевым экраном или брандмауэром Windows. Ваша задача подключиться к рабочему столу этого Windows сервера с помощью клиента RDP. Казалось бы, невозможная задача, т.к. порт RDP 3389 блокируется брандмауэром. Однако вы можете воспользоваться технологией проброса портов через ssh-тунель.

Чаще всего используются следующие сценарии проброса SSH:

  • Local TCP forwarding — проброс локального порта на удаленный сервер;
  • Remote TCP forwarding — проброс удаленного порта на локальный компьютер;
  • Двойной SSH туннель – позволяет соединить между собой через SSH сервер компьютеры без выделенных белых IP адресов или находящиеся за NAT (если не подходит решение с OpenVPN)

RDP доступ через SSH туннель (local TCP forwarding)

В этом режиме вы создаете на своем компьютере локальный TCP порт, подключения к которому перенаправляются через SSH туннель на указанный порт удаленного сервера. В этом примере мы создадим локальный порт 8888, при подключении к которому выполняется перенаправление с этого порта на RDP порт 3389 удаленного компьютера. Общая схема подключения выглядит так:

Для создания SSH туннеля с помощью встроенного SSH клиента (встроен в Windows 10 1809 и Windows Server 2019), выполните команду:

ssh -L 8888:192.168.1.90:3389 root@192.168.1.90

Теперь, чтобы подключится к удаленному компьютеру через SSH туннель, вам нужно подключится RDP-клиентом mstsc.exe на локальный порт 8888 своего компьютера:

Авторизуйтесь на удаленном компьютере и можете спокойно работать в RDP-сессии, при этом вы помните, что порт 3389 все еще закрыт в файерволе. С помощью TCPView вы можете убедиться, что RDP подключение установлено локально (RDP подключение инициировано запущенным локально SSH сервером).

Обратите внимание, что если вы перенаправляете таким образом незашифрованный трафик приложения, то по сети он передается в зашифрованном виде. Трафик в лбом случае шифруется на одном конце SSH соединения и расшифровывается на другом.

В таком режиме другие компьютеры в вашей локальной сети тоже смогут подключиться к удаленному RDP серверу, даже если у них полностью заблокирован прямой доступ к удаленному серверу (как по SSH, так и по RDP). Для этого, они должны подключиться RDP клиентом к порту 8888 на вашем компьютере, на котором создан SSH туннель:

mstsc.exe /v 10.10.1.220:8888

Переброс удаленного порта на локальную машину (Remote TCP forwarding)

Есть еще один вариант применения SSH туннеля – remote TCP forwarding. Через SSH туннель вы можете открыть доступ удаленному серверу к локальному порту на вашем компьютере или порту на другом компьютере в вашей локальной сети. Например, вы хотите, чтобы внешний сервер (192.168.1.90) получил доступ к вашему Интранет сайту (не опубликованному в Интернете). Для создания обратного туннеля, используйте такую команду:

ssh -R 8080:internalwebsever:80 user@192.168.1.90

Теперь, чтобы на удаленном SSH сервер получить доступ к веб серверу internalwebsever достаточно в браузере набрать адрес http://localhost:8080 .

С помощью SSH туннелей вы можете строить целые цепочки для форвардинга портов. Включить или отключить SSH туннелирование можно в конфигурационном файле sshd_config директивами:

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

SSH (ч.3): Как подключиться к SSH. Настройка клиента OpenSSH

Оглавление

Для подключения к SSH серверу нужен клиент SSH. Подключиться можно из любой операционной системы и даже с мобильного телефона.

Подключение к SSH из Linux

Вам нужно установить пакет ssh (содержит клиент и сервер SSH). На Debian и производных имеется отдельный пакет с клиентом ssh-client — достаточно установить только его или также пакет ssh.

Подключение к SSH из Windows

Для Windows имеются клиенты SSH, например PuTTY. Но это только клиент, без дополнительных возможностей — например, с PuTTY не получится создать ключи для входа на SSH без пароля. По этой причине я сам предпочитаю и рекомендую Cygwin (смотрите «Как начать знакомство с командами Linux: Cygwin»).

Эта программа содержит полнофункциональную версию SSH, в том числе вы без проблем сможете создавать ключи и выполнять другие типичные для SSH действия. По своей сути Cygwin реализует многие возможности командной строки Linux.

Подключение по SSH с мобильного телефона

Имеется большое количество бесплатных программ для подключения к SSH — поищите в магазине приложений «ssh client». Они различаются возможностями: поддержкой работы с ключами, возможность переходить в ландшафтный режим, удобство доступа к специальным клавишам и т. д. — просто выберите любой из них, который вам больше нравится.

Читайте также:  Эмулятор бк 0010 01 для windows

На этом скриншоте я с телефона подключился к настольному компьютеру по SSH и запустил программу мониторинга Wi-Fi сетей. То есть я могу управлять системой Linux и наблюдать за результатами работы программ с телефона.

Как подключиться к SSH

Клиент SSH на Linux — это утилита командной строки, поэтому для ввода команд нужно открыть консоль. А пользователям Windows команды для подключения к SSH серверу нужно вводить в Cygwin.

Команда для подключения имеет следующий вид:

Всё, что помещено в квадратные скобки, является необязательным. То есть в самом простом варианте команда для подключения может быть такой:

В качестве АДРЕСАТа нужно указать IP к которому нужно подключиться или имя хоста. Поскольку пользователь не указан, то клиент SSH в качестве имени пользователя подставит имя пользователя в текущей сессии.

Типичная команда для подключения выглядит так:

В качестве ПОЛЬЗОВАТЕЛя нужно указать имя пользователя на удалённой системе, к которой выполняется подключение. В процессе подключения для этого пользователя нужно будет подтвердить свою личность — с помощью пароля или ключа.

Если КОМАНДА не указана, то будет открыт обычный интерактивный шелл к удалённой системе. Если КОМАНДА указана, то при успешном подключении она будет выполнена, а интерактивный шелл открыт не будет, ssh завершит свою работу после выполнения команды.

Также можно указать URI следующего формата:

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

нельзя указать порт после двоеточия — для этого используется опция -p.

При первом подключении SSH выведет информацию с запросом:

Первая строка сообщает нам, что программа не может установить соединение с этим хостом — но не надо спешить расстраиваться.

Во второй строке нам показывают уникальный отпечаток удалённого хоста и спрашивают, хотим ли мы к нему подключиться?

Набираем: yes

Далее появляется сообщение, что хост добавлен в список известных хостов:

При последующих подключениях это сообщение показываться не будет.

Данная процедура — предупреждение о подключении к новым хостам — является надёжной защитой от спуфинга (подмены) IP адресов при подключении: если вы подключаетесь к одному и тому же хосту, то это сообщение больше не должно появляться. Если это сообщение появилось вновь, то это означает, что происходит подключение к какому-то другому хосту!

Чтобы закончить сессию (отключиться), наберите:

Или нажмите Ctrl+D.

Подключение к SSH по имени хоста

У меня есть VPS, у которой IP адрес 185.117.153.79, чтобы подключиться к ней я выполняю команду:

Но всё время держать в уме IP адрес неудобно, особенно если серверов несколько. Было бы удобнее, подключаться к хосту по легко запоминаемому имени. Это IP адрес сервера SuIP, поэтому в качестве короткого имени я выберу suip, а в качестве ещё более короткого псевдонима просто букву s.

Чтобы операционная система начала узнавать эти имена, нужно настроить файл hosts. В Windows этот файл размещён по пути C:\Windows\System32\drivers\etc\hosts, а в операционной системе Linux это файл /etc/hosts. Кстати, ещё больше подробностей об этом файле вы найдёте в статье «Как настроить локальный DNS используя файл /etc/hosts в Linux».

Итак, нужно добавить записи вида:

Для своего примера я добавляю такую строку:

Сохраняю и закрываю файл hosts. Теперь я могу подключиться к данному хосту набрав следующую команду:

Или даже в таком виде подключение также пройдёт успешно:

Ещё один вариант, как добиться этого же эффекта без редактирования системного файла hosts, будет чуть ниже.

Подключение по SSH к хосту в VPN

VPN, то есть виртуальная частная сеть, состоит из подключённых к ней хостов, которые могут быть разбросаны по всему миру, но которые благодаря VPN объеденены в одну локальную сеть, внутри которой каждый узел может связываться с другим по локальному IP адресу. Причём соединения надёжно зашифрованы и сторонние лица не смогут узнать, какой именно трафик передаётся внутри VPN.

Предположим, я хочу подключиться по SSH к компьютеру, который находится в VPN к которой я также подключён. В этом случае я могу подключиться указав IP интересующего меня компьютера в VPN сети, например:

Некоторую дополнительную информацию смотрите здесь.

Выполнение команд на удалённом сервере без создания сессии шелла

Кроме открытия сессии шелла на удалённой системе, ssh также позволяет выполнять отдельные команды на удалённой системе.

Например, для выполнения команды tree на удалённом хосте с IP адресом 192.168.1.36 и отображением результатов на локальной системе, нужно сделать так:

Используя эту технику, можно делать интересные вещи, вроде такой, как выполнение команды ls на удалённой системе и перенаправление вывода в файл на локальной системе:

Обратите внимание на одиночные кавычки в вышеприведённой команде. Это сделано потому, что мы не хотим, чтобы раскрытие пути было выполнено на локальной машине; поскольку нам нужно это выполнение на удалённой системе. Также если мы хотим стандартный вывод перенаправить в файл на удалённой машине, мы можем поместить оператор редиректа и имя файла внутри одиночных кавычек:

Передача стандартного вывода с локальной машины на удалённую по ssh

Не менее интересный вариант выполнения команд будет приведён немного ниже:

Команда cat построчно считывает и отображает содержимое файла .ssh/id_rsa.pub, расположенного на локальной машине.

| (труба) передаёт то, что должно было бы появиться в стандартном выводе, другой команде.

Вместо команды, которая должна была бы обрабатывать передаваемые ей строки, происходит соединение к удалённой системе (ssh mial@192.168.1.36).

Читайте также:  Мультизагрузочный диск windows ультра исо

На удалённую систему приходят строки, для которых предусмотрена команда cat >> .ssh/authorized_keys. Т.е. содержимое стандартного вывода построчно записывается в файл .ssh/authorized_keys, находящийся на удалённой машине.

Опции командной строки клиента SSH

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

-p ПОРТ

Устанавливает порт, к которому нужно подключиться на удалённом сервере SSH. Портом по умолчанию является 22. Эту настройку можно установить в конфигурационном файле персонально для каждого хоста.

-E log_file

Добавляет отладочные логи к файлу log_file вместо стандартного вывода ошибок.

-F configfile

Определяет альтернативный файл конфигурации на уровне каждого пользователя. Если в командной строке указан файл конфигурации, системный файл конфигурации (/etc/ssh/ssh_config) будет проигнорирован. По умолчанию для файла конфигурации на уровне пользователя используется

Конфигурационные файлы клиента SSH

/etc/ssh/ssh_config

Общесистемный файл конфигурации клиента SSH.

/etc/ssh/ssh_known_hosts

Общесистемный список ключей известных хостов. Этот файл должен быть подготовлен системным администратором, чтобы он содержал открытые ключи хостов всех компьютеров в организации. Этот файл должен быть читаемым для всех.

Эта директива является стандартным расположением для хранилища конфигураций и информации для аутентификаций специфичных для пользователей. Нет требования хранить всё содержимое этой директории в секрете, но рекомендуется настроить разрешения на чтение/запись/выполнения так, чтобы они были у пользователя, но не были у других.

Это конфигурационный файл с настройками каждого пользователя. Из-за возможного злоупотребления этот файл должен иметь строгие разрешения: чтение/запись для пользователя и недоступность для записи другими.

Содержит список ключей хостов в которые входил пользователь, но которые отсутствуют в общесистемном списке ключей известных хостов.

Конфигурационные директивы файлов /etc/ssh/ssh_config и

Конфигурационные данные обрабатываются в следующем порядке и имеют следующий приоритет:

1. Опции командной строки

2. Файл со специфичными для пользователя настройками

3. Файл с общесистемными настройками /etc/ssh/ssh_config

Все значения конфигурации меняются только при первой их установке. Таким образом, специальные настройки хоста должны быть в начале, а значения по умолчанию в конце.

Конфигурационный файл клиента SSH поддерживает множество директив, но их настройка требуется для продвинутого использования SSH и для большинства случаев использования какие-либо настройки не требуются.

Необходимо отметить на специальные директивы Host и Match, которые разбивают файл на блоки.

Директива Host устанавливает имя хоста, к котором применяются все последующие настройки, пока не будет встречена другая директива Host или Match.

Если в качестве хоста указать ‘*’, то это позволяет задать глобальные настройки значений по умолчанию, применимые ко всем хостам.

Шаблон может иметь противоположное значение, если перед ним поставить восклицательный знак (‘!’). Если запись с отрицанием соответствует, то тогда пункт Host игнорируется, если не произойдёт совпадение с другими шаблонами. Следовательно, совпадения с отрицаниями полезны для обеспечения исключений из совпадений по подстановочным символам.

Далее показан небольшой фрагмент конфигурации, в которой для хоста 10.6.0.1 устанавливается порт подключения 55455, для хоста 192.0.100.8 в качестве порта подключения будет использован 2222, а для всех остальных хостов будет выполнено подключение к 22 порту:

Эти конфигурационные файлы содержат пары «ключевое слово — аргумент», одна пара на одной строке. Опционально аргументы можно заключить в двойные кавычки («), чтобы передать аргументы, содержащие пробелы.

Ключевые слова не чувствительны к регистру, а аргументы чувствительны к регистру.

Многие директивы закомментированы, но они указывают на значение по умолчанию, которое всё равно используется. Если вас устраивает значение по умолчанию, то не нужно ничего менять. Если же вы хотите другое значение, то нужно раскомментировать строку с соответствующей директивой (убрать символ #) и внести изменения.

Параметры конфигурации могут быть разделены пробелами или необязательными пробелами и ровно одним ‘=’; последний формат полезен, чтобы избежать необходимости заключать значения с пробелами в кавычки при указании параметров конфигурации с использованием параметров ssh, scp и sftp -o.

Поскольку для каждого параметра используется первое полученное значение, в начале файла должны быть приведены более специфичные для хоста объявления, а в конце общие значения по умолчанию.

Выше уже рассмотрен пример подключения к удалённому SSH серверу по лаконичному имени вместо IP адреса. Это общесистемная настройка преобразования имени в IP адрес, в результате теперь имена suip и s можно использовать с любой программой — хоть в веб-браузере, хоть с утилитами, например с ping:

Но у ssh клиента есть свая собственная функциональность задать удобное (хорошо запоминающееся) имя хоста. Причём они позволяют сразу указать и порт, что с предыдущем методом сделать невозможно.

К примеру, IP адрес моего SSH сервера 185.117.153.79, его порт 54321 и я хочу добавить возможность подключаться к нему по имени Host, тогда в файл

/.ssh/config мне достаточно добавить следующее:

Как видим, используется директива HostName — она устанавливает настоящее имя хоста, в том числе можно указывать IP адрес.

Директива Port устанавливает порт, который должен использоваться для данного хоста.

В результате, теперь можно подключаться по обычной команде:

Либо применять её полный эквивалент:

С полным списком директив, которые можно использовать в конфигурационном файле, можно ознакомиться командой:

Для получения информации об опциях командной строки выполните:

Как указать файл ключа для подключения

По умолчанию приватный ключ для подключения к SSH берётся из файла

/.ssh/id_rsa. Если нужно подключиться к SSH серверу с другим ключом, то используйте опцию -i, после которой укажите путь до нужного файла с приватным ключом:

Оцените статью