ПР. Организация защищённого канала

Кратко:

  • VPN (Virtual Private Network) используется для защиты передаваемых данных между локальной инфраструктурой и облаком.
  • VPN-туннель - канал передачи данных между двумя узлами, VPN-шлюзом и VPN-клиентом.
  • Для создания VPN-туннеля необходимо идентифицировать узлы, определить протоколы и алгоритмы шифрования.
  • IPSec (Internet Protocol Security) - популярный стандарт для создания VPN-туннелей.
  • В статье представлен урок по настройке IPSec VPN-туннеля между двумя VPN-шлюзами с использованием демона strongSwan.
  • Для практической работы необходимы сеть и подсеть в Yandex Cloud, тестовая виртуальная машина без публичного IP-адреса и две VPN-инстанса (одна для создания IPSec-инстанса, другая для использования в качестве удалённого шлюза).
  • В статье представлены шаги по настройке IPSec-шлюзов и проверке созданного VPN-туннеля.

Практическая работа. Организация защищённого канала

Защита данных, передаваемых между вашей локальной инфраструктурой и облаком, — важный элемент информационной безопасности. А удалённая работа, которая получила распространение в период пандемии коронавируса и сейчас закрепилась в практиках многих компаний, сделала эту задачу ещё более актуальной.
Чтобы защитить передаваемую информацию, используют VPN (Virtual Private Network) — технологию, позволяющую развернуть защищённое сетевое соединение «поверх» незащищённой сети (чаще всего это интернет). VPN-соединение представляет собой канал передачи данных между двумя узлами. Этот канал обычно называют VPN-туннелем. Если за одним из узлов находится целая сеть, то его называют VPN-шлюзом.
Механизм работы VPN:
  1. Перед созданием туннеля узлы идентифицируют друг друга, чтобы удостовериться, что шифрованные данные будут отправлены на нужный узел.
  2. На обоих узлах нужно заранее определить, какие протоколы будут использоваться для шифрования и обеспечения целостности данных.
  3. Узлы сверяют настройки, чтобы договориться об используемых алгоритмах. Если настройки разные, туннель не создаётся.
  4. Если сверка прошла успешно, то создаётся ключ, который используется для симметричного шифрования.
Этот механизм регламентируют несколько стандартов. Один из самых популярных — IPSec (Internet Protocol Security).
На этом уроке вы научитесь настраивать IPSec VPN-туннель между двумя VPN-шлюзами с помощью демона strongSwan. Один шлюз вы настроите на виртуальной машине в Yandex Cloud, второй — на своей локальной машине или виртуальной машине в другой облачной сети.

Шаг 1. Создание ресурсов

Для практической работы вам понадобится сеть и подсеть в Yandex Cloud, а также созданная в этой подсети тестовая ВМ без публичного IP-адреса. Создайте эти ресурсы, если у вас их нет.
Теперь создадим IPSec-инстанс — ВМ, которая будет служить шлюзом для IPSec-туннеля. Чтобы это сделать:
  1. Откройте ваш каталог, нажмите кнопку Создать ресурс и выберите пункт Виртуальная машина.
  2. В поле Имя задайте имя ВМ, например ipsec-instance.
  3. Выберите зону доступности, где находится подсеть, к которой будет подключён IPSec-инстанс, и тестовая ВМ.
  4. В разделе Выбор образа/загрузочного диска перейдите в блок Cloud Marketplace и выберите образ IPSec-инстанс.
image
  1. В блоке Сетевые настройки выберите нужную сеть, подсеть и назначьте ВМ публичный IP-адрес из списка или автоматически.
Важно использовать только статические публичные IP-адреса из списка или сделать IP-адрес ВМ статическим после её создания. Динамический IP-адрес может измениться после перезагрузки ВМ, и туннель перестанет работать.
  1. В блоке Доступ укажите логин и SSH-ключ для доступа к ВМ.
  2. Нажмите кнопку Создать ВМ.
Виртуальная машина готова.

Шаг 2. Настраиваем IPSec

Теперь настроим шлюз с публичным IP-адресом, который будет устанавливать IPSec-соединение с удалённым шлюзом (вашей локальной машиной или ВМ в другой облачной сети).
Вы можете создать в своём каталоге ещё одну облачную сеть с подсетью, создать в ней IPSec-инстанс из образа и использовать его в качестве удалённого шлюза. Либо можно использовать в качестве шлюза машину в вашей локальной сети. Вам понадобится публичный IP-адрес удалённого шлюза и CIDR подсети.
Допустим, публичный IP-адрес вашего шлюза — 130.193.32.25, а за ним находится подсеть c префиксом подсети CIDR 10.128.0.0/24. Шлюз будет устанавливать IPSec-соединение с удалённым шлюзом с IP-адресом, например, 1.1.1.1, за которым находится подсеть с префиксом подсети CIDR 192.168.0.0/24.
  1. Подключитесь к ВМ IPSec-инстанс по SSH:
    ssh <имя пользователя>@130.193.32.25
 
  1. Откройте конфигурацию IPSec:
    sudo nano /etc/ipsec.conf
 
  1. В разделе config setup файла конфигурации задайте следующие параметры:
    config setup
            charondebug="all"
            uniqueids=yes
            strictcrlpolicy=no
 
  1. Добавьте новый раздел с описанием тестового соединения, например conn cloud-to-hq.
  2. Задайте параметры тестового соединения:
leftid — публичный IP-адрес IPSec-инстанса.
leftsubnet — CIDR подсети, к которой подключён IPSec-инстанс.
right — публичный IP-адрес шлюза на другом конце VPN-туннеля.
rightsubnet — CIDR подсети, к которой подключён VPN-шлюз на другом конце VPN-туннеля.
Параметры ike и esp — это алгоритмы шифрования, которые поддерживаются на удалённом шлюзе. Перечень поддерживаемых алгоритмов можно посмотреть на сайте strongSwan: IKEv1 и IKEv2.
  1. Укажите остальные настройки, консультируясь с документацией strongSwan и учитывая настройки удалённого шлюза.
  2. У вас должна получиться примерно такая конфигурация:
    conn cloud-to-hq
            authby=secret
            left=%defaultroute
            leftid=130.193.32.25
            leftsubnet=10.128.0.0/24
            right=1.1.1.1
            rightsubnet=192.168.0.0/24
            ike=aes256-sha2_256-modp1024!
            esp=aes256-sha2_256!
            keyingtries=0
            ikelifetime=1h
            lifetime=8h
            dpddelay=30
            dpdtimeout=120
            dpdaction=restart
            auto=start
 
  1. Сохраните изменения и закройте файл.
  2. Откройте файл /etc/ipsec.secrets и укажите в нём пароль для установки соединения:
    130.193.32.25 1.1.1.1 : PSK "<пароль>"
 
  1. Перезапустите strongSwan:
    sudo systemctl restart strongswan-starter
 

Шаг 3. Настраиваем статическую маршрутизацию

Теперь нужно настроить маршрутизацию между IPSec-инстансом и тестовой ВМ без публичного IP-адреса. Для этого создадим таблицу маршрутизации и добавим в неё статические маршруты.
  1. Откройте сервис Virtual Private Cloud в каталоге, где требуется создать статический маршрут.
  2. Выберите раздел Таблицы маршрутизации в панели слева и нажмите кнопку Создать таблицу маршрутизации.
  3. Задайте имя таблицы маршрутизации, выберите сеть, в которой требуется её создать, и нажмите кнопку Добавить маршрут.
  4. В открывшемся окне введите префикс подсети назначения на удалённой стороне, в примере это 192.168.0.0/24.
image
  1. В поле Next hop укажите внутренний IP-адрес IPSec-шлюза и нажмите кнопку Добавить.
  2. Нажмите кнопку Создать таблицу маршрутизации.
  3. Чтобы использовать статические маршруты, нужно привязать таблицу маршрутизации к подсети. Для этого в разделе Подсети, в строке нужной подсети, нажмите кнопку и в открывшемся меню выберите пункт Привязать таблицу маршрутизации.
image
  1. В открывшемся окне выберите созданную таблицу и нажмите кнопку Привязать. Созданный маршрут можно применять и к другим подсетям этой сети.

Шаг 4. Настраиваем IPSec на другом шлюзе

Для работы VPN-туннеля нужно настроить второй шлюз.
  1. Настройте strongSwan аналогично первому IPSec-шлюзу, но с зеркальными настройками IP-адресов и подсетей в файле /etc/ipsec.conf. Должна получиться такая конфигурация:
    conn hq-to-cloud
            authby=secret
            left=%defaultroute
            leftid=1.1.1.1
            leftsubnet=192.168.0.0/24
            right=130.193.32.25
            rightsubnet=10.128.0.0/24
            ike=aes256-sha2_256-modp1024!
            esp=aes256-sha2_256!
            keyingtries=0
            ikelifetime=1h
            lifetime=8h
            dpddelay=30
            dpdtimeout=120
            dpdaction=restart
            auto=start
 
  1. Укажите пароль для соединения в файле /etc/ipsec.secrets, указав IP-адреса шлюзов в обратном порядке:
    1.1.1.1 130.193.32.25 : PSK "<пароль>"
 
  1. Перезапустите strongSwan:
    sudo systemctl restart strongswan-starter
 

Шаг 5. Проверяем, что всё работает

Чтобы убедиться, что туннель между шлюзами установлен, выполните на любом из шлюзов команду:
sudo ipsec status
Если всё в порядке, то у вас должно появиться примерно такое сообщение:
Security Associations (1 up, 0 connecting):
hq-to-cloud[3]: ESTABLISHED 29 minutes ago, 10.128.0.26[130.193.33.12]...192.168.0.23[1.1.1.1]
hq-to-cloud{3}:  INSTALLED, TUNNEL, reqid 3, ESP in UDP SPIs: c7fa371d_i ce8b91ad_o
hq-to-cloud{3}:   10.128.0.0/24 === 192.168.0.0/24
Статус ESTABLISHED означает, что туннель между шлюзами создан.
Сведения об установке и работе соединения находятся в логах strongSwan. Просмотреть логи можно с помощью команды:
sudo journalctl -u strongswan-starter
Проверить статус демона strongSwan можно командой:
systemctl status strongswan-starter
Осталось проверить связность соединения. Для этого создайте ещё одну тестовую виртуальную машину за вторым шлюзом, а затем пропингуйте одну тестовую машину с другой.
 
Поздравляем, ваше соединение с облаком безопасно!
Если вы не планируете использовать созданный VPN-туннель, удалите ненужные ресурсы.