Как вы можете использовать OpenVPN для безопасного доступа к частным ресурсам AWS

kak vy mozhete ispolzovat openvpn dlya bezopasnogo dostupa k chastnym

Эта статья была адаптирована из части моего нового курса Pluralsight «Подключение локальных ресурсов к вашей инфраструктуре AWS».

Нужно ли иногда подключаться к ресурсам, используемым в Amazon Web Services? Доступ к вашим общедоступным экземплярам EC2 с помощью SSH и шифрование ваших данных S3 достаточно безопасен для всех намерений и целей. Но как насчет доступа к внутреннему экземпляру базы данных RDS или работе с данными на основе AWS, которые не являются общедоступными? Существуют всевозможные причины, почему администраторы держат такие ресурсы недоступными широкой публике. Но если вы не можете добраться до них, когда вам это нужно, какую пользу они вам принесут?

Вам понадобится безопасный и надежный способ обойти списки управления доступом и группы безопасности, которые защищают ваши вещи. Одно из решений, которые я рассматриваю в своем курсе «Подключение локальных ресурсов к вашей инфраструктуре AWS» о Pluralsight, — это Direct Connect. Но если цена Direct Connect ограничивает бюджет вашей компании, то какой-нибудь VPN-тоннель может помочь.

Что такое виртуальная приватная сеть?

Виртуальные частные сети (VPN) часто используются, чтобы разрешить иным образом ограниченную сетевую активность или анонимный просмотр. Но эта статья не об этом.

VPN – это соединение «точка-точка», позволяющее безопасно перемещать данные между двумя сайтами в общедоступной сети. Фактически туннель можно спроектировать для объединения двух географически обособленных частных сайтов в одну частную сеть. В нашем контексте это означает подключение локальной офисной сети к AWS VPC, на котором размещаются ваши частные ресурсы.

Есть два способа сделать это:

  • Управляемое соединение VPN, построенное на основе частного виртуального шлюза AWS
  • Использование собственного VPN.

В этой статье речь пойдет о методе «Сделай сам».

Сервер доступа OpenVPN

Как следует из названия, OpenVPN является проектом с открытым исходным кодом, и вы всегда можете скачать бесплатное издание сообщества и настроить все на своем сервере VPN. Но компания OpenVPN также предоставляет специально созданный сервер доступа OpenVPN в виде EC2 AMI, который выходит из коробки с дружественной интеграцией в AWS и автоматизированными инструментами настройки.

Как я вижу, запуск AMI в вашем AWS VPC и открытие его для контролируемых удаленных соединений стало «правильным» методом выполнить эту работу.

Что это стоит? Если вы только тестируете вещи и не планируете получить доступ к VPN, используя более двух соединений одновременно, то сам AMI бесплатный. Вы все равно будете в курсе обычных расходов на экземпляр EC2, но если ваш аккаунт все еще имеет право на бесплатный уровень, вы также можете получить его бесплатно.

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

Вот что мы собираемся делать в этом руководстве:

  • Выберите, подготовьте и запустите Ubuntu AMI с сервером доступа OpenVPN, предварительно установленным в моем VPC
  • Получите доступ к серверу с помощью SSH и настройте VPN
  • Настройте пользователя администратора
  • Настройте локальную машину как клиент OpenVPN и подключитесь к частному экземпляру в моем AWS VPC

Готовы?

Запуск сервера доступа OpenVPN

С информационной панели EC2 – и убедившись, что мы находимся в нужном регионе AWS – запустите экземпляр, который будет играть роль нашего VPN-сервера. Вместо того чтобы использовать один из AMI для быстрого запуска, я щелкну вкладку AWS Marketplace и найду «сервер доступа openvpn». OpenVPN предоставляет ряд официальных образов, связанных с лицензиями, предлагающими растущее количество подключенных клиентов.

Я собираюсь использовать этот образ Ubuntu, который работает по условию «Принесите свою собственную лицензию». Как я уже писал ранее, нам действительно не понадобится лицензия на то, что мы собираемся делать.

XTboqBVguN8FToSwQrnrGZuCkC97Y0vtyUu
AMI сервера доступа OpenVPN доступны на AWS Marketplace

Выбор AMI открывает всплывающее окно, сообщающее нам, сколько это изображение будет стоить нам за час, используя разные типы экземпляров и варианты хранения EBS. Однако это только обычные расходы на инфраструктуру AWS и не включают лицензионные сборы.

HRL623PHVls25j6yVZW80nurh7rWJIDv3mSq
Стоимость AMI сервера доступа OpenVPN – оплачивается непосредственно AWS

Когда дело доходит до типа экземпляра, я перейду в t2.micro, чтобы сохранить его в пределах бесплатного уровня. Загруженный производственный сервер может потребовать немного больше энергии.

Поскольку я хочу запустить второй экземпляр в той же подсети через несколько минут, я выберу, скажем, us-east-1b на странице «Настроить детали экземпляра» и сделаю примечание на потом.

6R-q7kO9yezjWvSf99cER4Xh4bA3zs5azISg
Выберите подсеть и запишите на затем

Теперь на странице Security Group есть настройки OpenVPN AMI. Нам представлена ​​группа безопасности, которая открывает все, что нам нужно. Порт 22 предназначен для SSH-трафика на сервер, 943 – это порт, который мы будем использовать для доступа к графическому интерфейсу администратора; 443 – это HTTP-трафик, зашифрованный TLS, а OpenVPN будет прослушивать входящие клиентские соединения через порт 1194.

-h1D6QojwaZIVezNitxZDgaZqiLCbwFJ3FjS
Группа безопасности, поставляемая с OpenVPN AMI

Примечание: Если это практически, обычно было бы хорошей идеей ужесточить эти правила, чтобы принимались только запросы из действительных диапазонов IP-адресов компании, но это подойдет для краткосрочного тестирования.

Отсюда я просмотрю свои настройки, подтверждающий, что у меня указан ключ шифрования SSH, и нажму курок.

Как только экземпляр будет запущен, мне будет показана важная информация для входа, включая тот факт, что учетная запись пользователя, которую мы будем использовать для SSH на сервере, называется openvpnas, а также руководство по быстрому запуску. Я также получу электронное письмо со ссылками на ту же информацию.

Вернувшись на консоль экземпляров EC2, пока новая машина завершает загрузку, нам показывают наш общедоступный IP-адрес. Если нам когда-нибудь понадобится перезагрузить экземпляр, нет гарантии, что мы снова получим тот же IP-адрес, что может вызвать значительное количество хаоса. Поэтому целесообразно назначить экземпляру Elastic IP.

Для этого я щелкну «Эластические IP-адреса», а затем «Выделить новый адрес». Обратите внимание на новый адрес и закройте страницу. Теперь, выбрав этот адрес, нажмите «Действия» и «Связанный адрес». Я щелкну один раз в поле Экземпляр, и мой экземпляр OpenVPN – с его полезным тегом – появится в списке. Мне нужно только выбрать его, нажать «Присоединить», и я кончил. Теперь это будет постоянный публичный IP-адрес для доступа к нашему серверу.

rQJ5leTI2CTmKdeHxJ8dacPyBz4ueo19IiFe
Свяжите свой новый Elastic IP-адрес со своим экземпляром

Доступ к серверу

Я вставлю публичный IP-адрес в терминал как часть моей команды SSH, которая вызывает пару ключей, которую я установил для этого экземпляра.

ssh -i KeyPairName.pem openvpnas@<PublicIPAddress>

Если вы получаете доступ с компьютера Windows или MacOS, все может работать несколько иначе, но документация предоставит вам всю необходимую помощь.

Однако прежде чем покинуть консоль экземпляров, я выполню еще одну важную функцию. Выбрав экземпляр OpenVPN, я щелкну «Действия», затем «Сеть», а затем «Проверка изменения источника/цели». Я убедись, что проверка отключена. Ничего особенного не удастся, если я этого не сделаю.

Теперь до моей сессии SSH. Как только это начинается, я сталкиваюсь с лицензионным соглашением OpenVPN EULA, а затем с мастером настройки. Если вам потребуется изменить настройки позже, вы всегда можете снова запустить мастера с помощью этой команды:

sudo ovpn-init — ec2.

Большинство настроек мастера по умолчанию будут работать нормально, но стоит быстро объяснить, что происходит. Вот вопросы и некоторые цветные комментарии, где это необходимо:

primary Access Server node? yes [You’d answer no if you were setting up a backup or failover node.]
specify the network interface and IP address to be used by the Admin Web UI [1 — For all interfaces; can be changed to static later.]
specify the port number for the Admin Web UI [default]
specify the TCP port number for the OpenVPN Daemon [default]
Should client traffic be routed by default through the VPN? [no--That’s   not the kind of VPN we’re building here. What we’re doing is only about getting remote clients safely and securely into our VPC. The same applies to client DNS traffic.]
Should client DNS traffic be routed by default through the VPN? [no] 
Use local authentication via internal DB? [no — can be useful, but we’ll use Linux/AWS authentication for simplicity.]
Should private subnets be accessible to clients by default? [yes — that’s the whole point of the VPN, after all.]
login to the Admin UI as “openvpn”? [yes]
Provide OpenVPN Access Server license key [Unnecessary for testing.]

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

Как я уже упоминал ранее, мне нужно будет дать пользователю openvpn пароль, чтобы я мог использовать его для входа в веб-графический интерфейс. Я делаю это как sudo с помощью команды passwd.

sudo passwd openvpn

Это все, что нам пригодится на стороне сервера. Теперь я собираюсь использовать браузер для входа в веб-графический интерфейс. Я использую общедоступный IP-адрес нашего сервера с защищенным префиксом https, а затем косой чертой и администратором.

https://<PublicIPAddress>/admin

Вы получите предупреждение «Ваше соединение не частное», поскольку мы используем самоподписанный сертификат, а не тот, который предоставляется центром сертификации.

s-fDsz3rKP9Pf7JqKYbPfyAlhUl4YHfSBz1m
Это нормально при использовании самоподписываемых сертификатов.

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

Не стесняйтесь потратить некоторое время на изучение функций, предоставляемых консолью администратора OpenVPN.

VtQgAuVOfhbLTYII1HOdxO5cJiyQo44JSomR
Консоль администратора OpenVPN

Настройка клиента VPN

Однако сейчас я собираюсь открыть страницу интерфейса клиента, используя адрес веб-доступа, который мы показывали раньше, но на этот раз без косого риска администратора. Это не что иное, как экран входа, где вы можете аутентифицироваться, используя того же пользователя openvpn, что и раньше. (Вы всегда можете создать новых пользователей на консоли администратора.)

За экраном входа есть только этот набор ссылок с инструкциями по установке клиентской программы OpenVPN на любой из этих платформ. Однако последняя ссылка называется «Сам».

GFJB-8yTJ0xVtQ1AXnsD1W0DApG3I6JVVXgz
Страница клиента OpenVPN

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

Я открою файл локально и скопирую содержимое. Затем в оболочке виртуальной машины Linux, работающей в моей локальной сети, я создам новый файл под названием client.ovpn и вставлю его содержимое. Если вы перешли к ссылке OpenVPN для Linux в интерфейсе клиента Ранее вы видели, что единственным дополнительным шагом, необходимым для этого, была установка OpenVPN с помощью менеджера пакетов Apt — или Yum, если вы используете CentOS или Red Hat. Ну, это займет всего одну команду. Когда он проделает свою работу, мы будем готовы.

nano client.ovpnsudo apt updatesudo apt install openvpn

Далее мы откроем VPN-соединение. Как root – используя sudo – я введу openvpn с флажком конфигурации, указывающим на только что созданный файл конфигурации client.ovpn.

sudo openvpn — config client.ovpn

Когда появится запрос на аутентификацию, используйте аккаунт openvpn вместе с паролем, созданным для него, на сервере.

Теперь я открою второй сеанс оболочки на своем локальном клиенте, чтобы попытаться зайти на сервер OpenVPN, используя его местный IP-адрес – то, что было бы невозможно без работающего VPN-соединения.

Однако сначала запустите ip a, чтобы отобразить список всех сетевых интерфейсов, активных на этой машине.

ip a

Кроме вашей локальной сети, вы также должны увидеть одно из названий tun0. Этот интерфейс был создан OpenVPN и обычно находится в диапазоне 172.16.xx.

Я перейду на удаленный сервер с помощью частного ключа — который, конечно, должен существовать локально — и сервера частный IP-адрес. Если это сработает, у вас будет VPN!

ssh -i KeyPairName.pem openvpnas@<PrivateIPAddress>

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

Я собираюсь запустить стандартный экземпляр Ubuntu EC2, но я не будет дайте ему публичный IP-адрес. Я укажу ту же подсеть us-east-1b, которую мы использовали для сервера OpenVPN, чтобы все было просто. Группа безопасности, которую я буду использовать, разрешит доступ по SSH через порт 22, но ничего другого.

Когда это будет запущено, я укажу его частный IP-адрес и вернусь к своему локальному клиенту. Как только я уверен, что экземпляр полностью запущен, я введу ssh, используя тот же закрытый ключ, имя пользователя «ubuntu» — поскольку это стандартное значение для обычных экземпляров Ubuntu EC2 — и частный адрес, который я только что скопировал.

Снова. Если это сработает, у вас будет полностью настроено VPN-соединение с вашими частными ресурсами AWS. Наслаждайтесь моментом.

Не забудьте отключить все свои серверы и освободить свой Elastic IP-адрес, когда вы закончите их использовать. Вы не хотите нести расходы без надобности.

Эта статья была адаптирована из части моего нового курса Pluralsight «Подключение локальных ресурсов к вашей инфраструктуре AWS». На моем ИТ-сайте Bootstrap есть многое другое, в частности ссылка на мою книгу Linux in Action и гибридный курс под названием Linux in Motion, состоящий из более чем двух часов видео и примерно 40% текста Linux. в действии.

Добавить комментарий

Ваш адрес email не будет опубликован.