IPSEC между Mikrotik и Ubuntu (16/18/20) поверх IPIP туннеля.

В предыдущей статье рассмотрели IPIP туннель между микротиком и убунтой. Теперь добавим IPSEC между Mikrotik и Ubuntu на этот туннель с помощью пакета Stongswan.


Схему возьмём из предыдущей статьи, тут ничего принципиально не меняется:

IPSEC более мене стандартизирован, можно настраивать шифрование между различными устройствами.

ubuntu 16
ubuntu 18/20

Микротик

подготовка

Итак, IPIP туннель у нас уже есть. Правила фаервола в этой статье не рассматриваются, но для работы IPSEC требуется открытый порт 500, 4500 UDP, и протокол ipsec-esp, пример:

/ip firewall filter
add chain=input port=500,4500 protocol=udp comment="Permit IPSec ports 500 and 4500"
add chain=input protocol=ipsec-esp comment="Permit IPSec protocol ipsec-esp"

Можно настраивать IPSEC между Mikrotik и Ubuntu с помощью пароля, но это не мой метод. Поэтому сначала нам потребуются сертификаты:

  • сертификат микротика (пара открытый-закрытый сертификаты)
  • сертификат убунту (пара открытый-закрытый сертификаты)
  • CA (открытый сертификат)

Генерируемые сертификаты должны быть типа сервер(есть клиентские и серверные). Сгенерировать их можно по статьям на этом сайте (windows/linux). Я же использовал Cert Manager из pfsense.

Для микротика нужны будут сертификат микротика (пара открытый-закрытый серт-ключ), CA и ТОЛЬКО открытый серт ubuntu. Выделяем сгенерированные ранее файлы в файловом менеджере и перетаскиваем их в окно Winbox (для хардкорщиков можно scp использовать).

Затем переходим в раздел System — Certificates и нажимая кнопку Import добавляем нужные файлы. Открытый сертификат добавляется первым, ключ к нему, если нужен вторым.

После добавления файлов у нас должна получится примерно такая картинка:

T — означает что есть только открытый сертификат, KT — означает что у нас пара открытый сертификат и ключ к нему.
Для создания IPSEC между Mikrotik и Ubuntu потребуется пошагово заполнить разделы: Profiles, Peers, Identities, Proposals, Policies.

настройка

Итак, переходим в раздел IP — IPSEC, выбираем вкладку Profiles, жмём кнопку добавить, заполняем:

3des я убрал потому что это ненадёжный алгоритм. Вместо SHA1 выбрал SHA256 потому что сейчас это дефолтный алгоритм в Strongswan. DPD интервал уменьшил, что бы в случае падения туннеля шифрование быстрее поднималось. NAT-T нам не нужен — у нас нет НАТа на схеме.

Переходим на вкладку Peers и добавляем новый пир:

Address — внешний адрес убунту сервера. Local Address — локальный адрес микротика. Profile — имя профиля который мы добавили на предыдущем шаге.

Следующий шаг Identities:

Peer — то что мы заполняли выше. Auth Method — digital signature (мы используем сертификаты). Certificate — тут выбираем сертификат микротика (который KT). Remote Certificate — выбираем сертификат для Ubuntu. И последнее это Match By — certificate.

Peer does not exist
Suggestion use stronger pre-shared key or different authentication method

Эти надписи это какая-то недоработка винбокса, очевидно и пир у нас есть и метод авторизации более чем надёжный. Чтобы убрать предупреждение, сначала нажимаем Apply. Затем меняем Auth Method на pre shared key. Жмём ок, ок на предупреждении и ок ещё раз (три раза окей). Баг.

Переходим на вкладку Proposals, здесь всё как в Profiles (ну почти):

Последняя вкладка, Policies. Заполняем поля в двух вкладках: General и Action:

Src, Dst думаю итак понятно. Protocol — ip-encap, это тот самый IPIP туннель. Указываем протокол, что бы ничего другого кроме туннеля не шифровалось, например SSH доступ или ICMP пакеты. Proposal — выбираем то что заполняли на предыдущем этапе.

Это всё, переходим к Ubuntu.

Ubuntu

Версия Ubuntu не имеет значения, настройки идентичные

Для настройки IPSEC между Mikrotik и Ubuntu нам понадобится пакет Strongswan. Установка в две команды:

apt update
apt install strongswan

Для ubuntu нужны будут сертификат убунты (пара открытый-закрытый серт) и ТОЛЬКО открытый серт микротика. Тут так просто как с микротиком не выйдет, мышкой не перетащишь. Нужен SCP, в интернетах полно инструкций, надеюсь справитесь.

Копируем открытые сертификаты в папку /etc/ipsec.d/certs, закрытый ключ в /etc/ipsec.d/private. Что бы прописать закрытый ключ надо будет добавить в файл /etc/ipsec.secrets строчку с именем файла КЛЮЧА:

: RSA ubuntu-ipsec-test.key

Все настройки Strongswan хранятся в файле /etc/ipsec.conf, заполняем его примерно так:

config setup

conn %default
	ikelifetime=60m
	keylife=20m
	rekeymargin=3m
	keyingtries=1
	keyexchange=ikev1

conn mikrotik
        #ubuntu
	left = 98.213.46.5
	leftcert = ubuntu-ipsec-test.crt
	leftprotoport = ipencap
        #mikrotik
	right = 145.16.220.86
	rightcert = mikrotik-ipsec-test.crt
	rightprotoport = ipencap
        #general
	type = transport
	auto = add
        #dpd
        dpdaction = restart
	dpddelay = 30s
	dpdtimeout = 90s
	#profile
	ikelifetime = 1d
	ike = aes128-sha256-modp1024
	#proposals
	lifetime = 30m
	esp = aes128-sha256-modp1024

Я думаю всё понятно итак, но остановлюсь на некоторых моментах:

  • conn — это имя подключения;
  • left это локальная сторона, наш Ubuntu сервер, мы указываем адрес, имя сертификата, протокол;
  • right — сторона микротика, аналогичные настройки;
  • type — тут два режима transport или tunnel. У нас уже есть IPIP туннель, поэтому нам нужен режим transport.
  • DPD, IKE, ESP итп мы просто заполняем также как заполняли их на микротике.

Для понимания работы Strongswan я использовал их документацию — примеры, описание параметров.

Для запуска IPSEC нам понадобится перечитать секреты:

ipsec rereadall

и прочитать конфигурационный файл:

ipsec reload

Затем запускаем подключение:

ipsec up mikrotik

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