Как построить VPN с помощью OpenSSH и Squid for Windows

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

Можно вспомнить такой пример: в 2006 г. на конференции DEFCON 14 в Лас-Вегасе хакеры прослушивали общедоступную беспроводную сеть, чтобы обнаружить разнообразную информацию о тех пользователях, которые не удосуживаются зашифровать свой сетевой трафик. Затем хакеры опубликовали сведения на «Стене позора», где их могли увидеть все желающие. Это привело к разглашению конфиденциальной информации, в том числе банковских и деловых данных.

Конечно, можно использовать VPN, чтобы установить безопасное соединение в дороге и не стать жертвой мошенников. Если планируется применить более простое для установки и управления решение VPN, стоит обратить внимание на инструмент OpenSSH VPN и proxy-сервер Squid for Windows (в прошлом SquidNT). Оба инструмента распространяются бесплатно.

OpenSSH VPN и Squid for Windows

В основе OpenSSH лежит широко распространенная технология безопасной оболочки (SSH), а Squid for Windows выполнен на базе популярного proxy-сервера Squid. Обе программы первоначально были разработаны для платформ UNIX и Linux. OpenSSH VPN и Squid for Windows — версии этих инструментов, разработанные специально для платформ Windows. Их важное преимущество — простота и переносимость. Эти инструменты легко установить, они требуют очень небольших усилий для настройки и управления и совместимы почти со всеми современными клиентскими операционными системами. Следовательно, при необходимости можно установить решение на двух настольных компьютерах, без выделенной серверной платформы. Этих преимуществ, конечно, лишены другие специализированные решения. Следует отметить, что любые используемые клиентские программы должны поддерживать применение proxy-сервера для связи с помощью этого решения VPN. Если нужно реализовать данное решение на другой платформе, такой как Linux, BSD или OS X, достаточно просто найти OpenSSH и Squid для этих платформ и применить те же подходы, которые описаны в этой статье.

Далее будет показано, как построить сервер и клиент VPN, в данном случае совместно именуемых VPN, шаг за шагом, с помощью набора инструментов OpenSSH и proxy-сервера Squid for Windows, совместимых почти с любой системой Windows. С помощью данного решения можно будет пересылать весь трафик мобильного клиента через зашифрованное соединение VPN, а затем в Internet или компьютеры в сети, в которой расположен VPN-сервер.

Дополнительное преимущество решения — возможность использовать его для дистанционного управления сервером, на котором работает OpenSSH, или любыми компьютерами, доступными через сервер OpenSSH (например, другими компьютерами в той же сети). Это возможно, потому что при подключении к серверу OpenSSH пользователю предоставляется командная строка, которая, в сущности, представляет собой командную оболочку на сервере OpenSSH. В этой командной оболочке можно запускать любые команды Windows или инструменты командной строки, для доступа к которым у учетной записи есть разрешения. Поэтому, чтобы управлять другими компьютерами через соединение OpenSSH, следует заранее скопировать все необходимые инструменты на сервер перед тем, как отправляться в дорогу, или убедиться в наличии доступа к другим удаленным серверам, на которых размещены нужные инструменты. Чтобы управлять другими компьютерами через соединение OpenSSH, следует использовать доменную проверку подлинности (описана на этапе 1), в результате которой предоставляются необходимые разрешения в других компьютерах.

Принципы действия

Решение OpenSSH/Squid for Windows сравнительно простое. OpenSSH устанавливается на сервере и на любых клиентах. Squid for Windows устанавливается только на серверном компьютере. OpenSSH на клиентской стороне подключается к серверу OpenSSH и открывает отдельный порт на клиентском компьютере для прослушивания клиентского трафика по адресу localhost. Клиентские приложения (браузер, программа электронной почты или мгновенных сообщений) настраиваются на использование proxy-сервера с адресом localhost. Затем клиентские приложения направляют трафик в порт localhost OpenSSH, который передает трафик в сервер OpenSSH по зашифрованному соединению. Сервер OpenSSH принимает этот трафик и перенаправляет его в Squid for Windows, откуда, в свою очередь, трафик передается по назначению. На первый взгляд процесс может показаться сложным, но, получив практический опыт, легко убедиться, что применять данное решение очень просто.

Нам потребуется использовать один компьютер в качестве VPN-сервера и по крайней мере один компьютер — в качестве клиента VPN. Для OpenSSH и Squid for Windows не нужно много памяти или ресурсов процессора, поэтому оба инструмента можно запускать почти на любом сервере, доступном для мобильных компьютеров через Internet. VPN-сервер можно построить на компьютере в домашней сети, и, если это разрешено политикой компании, использовать в качестве основы корпоративную сеть. Прежде чем применить решение на практике, рекомендую обязательно прочесть его полное описание.

Этап 1. Установка и настройка OpenSSH на сервере

Сначала загрузите экземпляр OpenSSH (http://sshwindows.sourceforge.net/download) и установите его на сервере с помощью мастера установки. Это простая процедура, для которой не требуется специальных знаний.

После установки OpenSSH рекомендуется отредактировать стандартную конфигурацию, чтобы OpenSSH работал через порт, отличный от выбираемого по умолчанию порта 22. Благодаря использованию порта, отличного от 22, взломщику труднее обнаружить сервер OpenSSH методом сканирования портов. Взломщики предполагают, что SSH-сервер прослушивает порт 22, поэтому, если перейти к другому порту, им будет труднее определить, какая служба прослушивает данный порт. Чтобы изменить порт по умолчанию, следует перейти к установочному каталогу и переместиться в подкаталог etc. Отредактируйте файл sshd_config и присвойте параметру port номер порта, не используемого в компьютере. В данной статье был задействован порт 422. Если неясно, какой порт свободен, следует просмотреть все открытые порты с помощью команды netstat -an. Любой порт из полученного списка может быть использован для OpenSSH. Необходимо лишь запомнить номер порта, так как он потребуется позднее для регистрации на сервере OpenSSH.

Затем нужно создать файл group и файл passwd, которые определяют, кому разрешена регистрация на сервере OpenSSH. В файле group содержится список групп, извлеченный из реестра локального компьютера Windows. Он используется OpenSSH для привязки разрешений, подобно тому как это делается в Windows. В файле passwd содержится извлеченный из реестра локального компьютера список пользователей, которым разрешена регистрация на сервере OpenSSH.

Чтобы создать файл group, следует изменить подкаталог bin в OpenSSH и ввести команду:

mkgroup -l >> ..etcgroup

Эта команда записывает группы локального реестра в файл group в каталоге etc.

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

mkpasswd -l -u XYZ >>
..etcpasswd

где XYZ — локальное имя для регистрации пользователя. Эта команда передает учетные данные пользователя XYZ из локального реестра в файл etcpasswd. Это нужно сделать для каждого пользователя, которому будет предоставлен доступ.

Если для проверки подлинности планируется задействовать учетные записи домена Windows, то следует применить те же две команды с ключом -d вместо -l и указать соответствующий домен Windows. Команда mkgroup установит связь с главным контроллером (PDC) указанного домена, чтобы получить список групп и учетных записей. Создать эти два файла довольно просто, но если нужна помощь, то посмотрите документацию по OpenSSH.

Если метод регистрации с использованием имени пользователя и пароля недостаточно надежен, можно применить более строгий метод проверки подлинности с ключами шифрования в экземплярах OpenSSH. Эта тема выходит за рамки данной статьи, но поэтапные инструкции можно найти в файле key_authentication.txt из каталога docsOpenSSH. Выполнить их довольно просто.

Обратите внимание, что OpenSSH самостоятельно устанавливается как служба Windows, автоматически запускаемая каждый раз при начальной загрузке системы. Чтобы отменить автоматический запуск службы, необходимо изменить свойства службы на запуск вручную. В Windows Server 2003, Windows XP и Windows 2000 свойства службы можно настроить с помощью инструмента «Управление компьютером» из меню «Администрирование». Перейдите в окно «Службы» в разделе «Службы и приложения», щелкните правой кнопкой мыши на службе OpenSSH, выберите пункт «Свойства» и соответствующим образом измените режим запуска.

Этап 2. Настройка Squid for Windows

Затем требуется установить Squid for Windows (http://www.serassio.it/squidnt.htm) на серверном компьютере (не на мобильном устройстве). Чтобы настроить Squid for Windows, рекомендуется загрузить и использовать утилиту Kraken Config for Squid (http://www.krakenreports.com/index.php?subpage=krakenConfig), благодаря которой существенно упрощается настройка proxy-сервера. Простой мастер Kraken Config запрашивает ряд базовых параметров, имя локального компьютера, размер кэша диска и размер памяти, который разрешается использовать Squid, разрешенные сетевые адреса и несколько других простых деталей. Стоимость инструмента всего 10 долл., и эти деньги будут потрачены не зря. Период бесплатного пробного использования программы — 30 дней; после этого функции мониторинга отключаются, но настройки Squid for Windows будут действительны.

После запуска инструмента Kraken Config следует отредактировать файл squid.conf (в подкаталоге etc) и добавить такую строку:

http_port 127.0.0.1:3128

После этого Squid будет прослушивать только адрес localhost (127.0.0.1) через порт 3128. Важно добавить эту строку вместе с директивой http_port. Если этого не сделать, то Squid for Windows будет использовать реальный IP-адрес компьютера; в результате Squid for Windows будет открыт для локальной сети и, возможно, Internet, откуда к службе смогут подключиться другие пользователи. Можно выбрать неиспользуемый порт с любым номером, но обязательно запомните этот номер порта, так как с ним потребуется установить соединение на этапе 4.

Еще одно преимущество использования Kraken Config заключается в том, что при запуске службы Squid for Windows появляется диалоговое окно Kraken Config (см. экран), из которого можно контролировать Squid for Windows и вносить изменения в конфигурацию.

Экран 1 . Файл конфигурации в Kraken Config for Squid

Как и OpenSSH, Squid for Windows самостоятельно устанавливается как служба Windows, автоматически запускаемая при начальной загрузке системы. Чтобы перейти к ручному режиму, необходимо изменить свойства службы. Для этого нужно выполнить такие же действия, как в конце этапа 1.

Этап 3. Установка OpenSSH на клиентском компьютере

Затем требуется установить экземпляр OpenSSH на мобильном компьютере. Мобильный компьютер используется в качестве клиента, а не OpenSSH-сервера, поэтому нет необходимости настраивать что-либо после установки на нем программы OpenSSH. Достаточно вспомнить, где установлена программа, поэтому можно обращаться к инструменту командной строкой ssh для подключения ко вновь созданному серверу OpenSSH.

И опять-таки следует помнить, что OpenSSH самостоятельно устанавливается как автоматически запускаемая служба. Вероятно, службу лучше запускать вручную, если только не планируется использовать ее часто.

Этап 4. Запуск сервера и подключение

Итак, все готово для запуска служб OpenSSH и Squid for Windows (если они еще не запущены) на сервере и тестирования связи с клиентом. После запуска серверных служб следует открыть командную оболочку на мобильной рабочей станции и перейти в каталог bin экземпляра OpenSSH, в котором находится инструмент командной строки ssh. Войдите в сервер OpenSSH с помощью следующей команды.

ssh -p 422 -l 3127:127.0.0.1:3128
XYZ@ip

Параметр -p 422 предписывает клиенту SSH подключиться к серверу OpenSSH через порт 422 (или порт с номером, определенным при настройке OpenSSH на этапе 1). Действие параметра -L приводит к открытию порта 3127 клиента на локальном компьютере и передаче трафика, посланного в этот порт, в порт 3128 на удаленном компьютере (порт Squid for Windows proxy-сервера). Если для Squid for Windows используется другой порт, необходимо внести в команду соответствующие изменения. XYZ — имя пользователя, а IP — IP-адрес сервера OpenSSH.

Вместо порта 3127 на клиенте можно задействовать любой порт с неиспользуемым номером. Обязательно запомните номер порта, так как он потребуется при настройке приложений клиента на этапе 5.

После того как ssh-клиент откроет соединение между мобильным компьютером и удаленным сервером OpenSSH, пользователь получит приглашение зарегистрироваться. Следует ввести имя пользователя и пароль, назначенные на этапе 1. Это могут быть локальные имя пользователя и пароль Windows на сервере OpenSSH или доменные имя пользователя и пароль, извлеченные из контроллера домена (DC), если использовался соответствующий метод создания файлов group и passwd.

Этап 5. Настройка приложений клиента

Экран 2 . Взаимодействие клиента и сервера OpenSSH с proxy-сервером SquidПосле того как зашифрованное соединение открыто и готово для использования, можно настроить браузер (и другие необходимые приложения) для работы с proxy-сервером Squid. Обязательно выберите в качестве адреса proxy-сервера адрес локального компьютера 127.0.0.1, порт 3127 (или другой порт, используемый локальным клиентским компьютером).

После того как клиентские приложения будут настроены на использование proxy-сервера (который в данном случае представляет собой клиент SSH на локальном компьютере), весь сетевой трафик будет направляться через безопасное зашифрованное соединение VPN, установленное через сервер OpenSSH (экран 2). Однако если приложения не поддерживают proxy-соединения, то трафик будет передаваться не через безопасное соединение, а напрямую через обычный сетевой канал связи.

Удобное решение проблемы связи

Совсем не сложно, не правда ли? Хотя для внедрения решения достаточно нескольких минут, полезно сделать копию настроек серверов OpenSSH и Squid for Windows на каком-либо носителе, например на флэш-накопителе, чтобы в будущем иметь возможность быстро восстановить серверную часть на другом сервере.

Обязательно следует протестировать решение, прежде чем отправляться в дорогу. На клиентской системе, сервере и брандмауэрах на периферии сети могут потребоваться дополнительные настройки портов или общих правил для корректной работы служб OpenSSH и Squid for Windows. И наконец, если в сети применяется преобразование сетевых адресов (NAT) и у сервера OpenSSH имеется NAT-адрес, может потребоваться трансляция портов в брандмауэре для общей корректной маршрутизации и связи.

Марк Джозеф Эдвардс (mark@ntshop.net) — старший редактор Windows IT Pro и автор еженедельного бюллетеня безопасности, рассылаемого по электронной почте (http://www.windowsitpro.com/email)


Моментальный снимок проекта

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

Решение
Быстро построить простую VPN с помощью OpenSSH и Squid for Windows.

Требуемые ресурсы
OpenSSH, Squid for Windows, Kraken Config, серверный компьютер, клиентский компьютер.

Уровень сложности
2 из 5

Этапы решения

  1. Установите и настройте OpenSSH на сервере.
  2. Установите и настройте Squid for Windows с использованием Kraken Config.
  3. Установите OpenSSH на клиентском компьютере.
  4. Запустите сервер и подключитесь.
  5. Настройте клиентские приложения.