IPSec (IP Security) — набор протоколов и алгоритмов для шифрования данных в IPv4 и IPv6 сетях. Звучит не сложно, но IPSec не устанавливает четких правил для шифрования трафика, вместо этого разработчики реализуют набор инструментов (протоколов и алгоритмов), используя которые администратор создает защищенный канал для данных.
Я хочу затронуть тему IPSec в RouterOS немного глубже простого HOWTO, с минимальным погружением в теорию и примерами по настройке и отладки IPSec. Это не гайд и без практики на тестовом стенде не рекомендуется приступать к настройке реальных туннелей и VPN серверов.
Преимущества и недостатки IPSec
Сильные стороны:
- Работает на сетевом уровне модели OSI
- Может шифровать исходный пакет целиком либо от транспортного уровня и выше
- Присутствует механизм преодоления NAT
- Большой набор алгоритмов шифрования и хеширования трафика, на выбор
- IPSec — набор открытых, расширяемых стандартов
- В случае с Mikrotik, не требует покупку дополнительных плат или лицензий
Слабые стороны:
- Сложность
- Различная терминология и инструменты конфигурации у различных вендеров
- Использование сильных алгоритмов шифрования требует хорошие вычислительные мощности
- Легко обнаруживается DPI
Протоколы в составе IPSec
Глобально, все протоколы, с которыми вы будете иметь дело при конфигурации, можно разделить на две группы: протоколы обмена ключами и протоколы защиты данных.
Протоколы обмена ключами (IKE)
Основная задача — аутентифицировать участников соединения и договориться о параметрах и ключах шифрования для защиты передаваемой информации.
- IKE (Internet Key Exchange) — определен в 1998 году. Многие возможности (например преодоление NAT) были добавлены позже в виде дополнений и могут быть не реализованы у различных вендеров. Основой для согласования ключей является протокол ISAKMP.
- IKEv2 (Internet Key Exchange version 2) — последняя редакция от 2014 года. Является развитием протокола IKE, в котором были решены некоторые проблемы, упрощен механизм согласования ключей, расширения (NAT-T, Keepalives, Mode Config) стали частью протокола.
На практике большая часть IPSec соединений реализуется с использованием IKE, в силу устаревшего оборудования, либо нежелания что-то менять у администраторов.
Протоколы защиты данных (ESP, AH)
Основная задача — защищать данные пользователя.
- ESP (Encapsulating Security Payload) — шифрует и частично аутентифицирует передаваемые данные
- AH (Authentication Header) — аутентифицирует пакет целиком (за исключением изменяемых полей), не шифрует данные, но позволяет убедиться, что пакет не был изменен при передачи по сети
Порядок установки IPSec соединения
Участников IPSec соединения принято называть пирами (peers), что показывает на их равнозначность в устанавливаемом соединении. Возможна конфигурация близкая к клиент-серверной, но при построении постоянных IPSec туннелей любой из пиров может быть инициализатором.
- Один из пиров инициализирует соединение IPSec
- Происходит обмен ключевой информацией, аутентификация пиров, согласование параметров подключения
- На основе полученной ключевой информации формируется вспомогательный шифрованный туннель
- Используя шифрованный туннель пиры определяют параметры шифрования данных и обмениваются информацией для генерации ключей
- Результатом работы предыдущей фазы является набор правил и ключи для защиты данных (SA)
- Периодически пиры производят обновление ключей шифрования
Одним из ключевых понятий в IPSec является SA (Security Association) — это согласованный пирами набор алгоритмов шифрования и хеширования информации, а также ключи шифрования.
Иногда можно встретить разделение на:
- ISAKMP SA — параметры и ключи относящиеся к вспомогательному туннелю
- Data SA (или просто SA) — параметры и ключи относящиеся к шифрованию трафика
Порядок работы протоколов согласования ключей
Протокол IKE может работать в двух режимах: основном (main) и агрессивном (aggressive), протокол IKEv2 содержит один режим.
IKE Main
Первая фаза состоит из шести пакетов:
1-2: Согласование параметров шифрования вспомогательного туннеля и различных опции IPSec
3-4: Обмен информацией для генерации секретного ключа
5-6: Аутентификация пиров используя вспомогательный шифрованный канал
Вторая фаза состоит из трех пакетов:
1-3: Используя шифрованный вспомогательный канал. Согласование параметров защиты трафика, обмен информацией для генерации секретного ключа
IKE Aggressive
Певая фаза состоит из трех пакетов:
1: Отправка предложения для установки вспомогательного шифрованного канала и информации для генерации секретного ключа
2: Ответ на предложение, информация для генерации секретного ключа, данные для аутентификации
3: Данные для аутентификации
Вторая фаза состоит из трех пакетов:
1-3: Используя шифрованный вспомогательный канал. Согласование параметров защиты трафика, обмен информацией для генерации секретного ключа
В агрессивном режиме инициатор отправляет только один набор параметров в предложении. Обмен информацией для аутентификации пиров происходит до установки защищенного вспомогательного туннеля. Агрессивный режим согласуется быстрее, но менее безопасен.
IKEv2
В IKEv2 фазы получили имена: IKE_SA_INIT и IKE_AUTH. Но если ниже по тексту я говорю про Phase1 и Phase2, то это относится и к фазам IKEv2.
Каждая фаза IKEv2 состоит из двух пакетов:
IKE_SA_INIT: Согласование параметров шифрования вспомогательного туннеля, обмен информацией для генерации секретного ключа
IKE_AUTH: используя шифрованный вспомогательный канал. Аутентификация пиров, согласование параметров защиты трафика, обмен информацией для генерации секретного ключа
Security Assotiations Database (SAD)
Результатом работы IKE (и IKEv2) являются Security Assotiations (SA), определяющие параметры защиты трафика и ключи шифрования. Каждый SA является однонаправленным и соединение IPSec содержит пару SA. Все SA хранятся в базе SAD и доступны администратору для просмотра и сброса.
Инкапсуляция данных
IPSec предоставляет два варианта инкапсуляции данных:
- Транспортный режим — защищается только полезную нагрузку пакета, оставляя оригинальный заголовок. Для построения туннелей транспортный режим обычно используется в связке с ipip или gre, полезная нагрузка которых уже содержит весь исходный пакет.
- Туннельный режим — полностью инкапсулирует исходный пакет в новый (по аналогии с gre или ipip). Но для туннельного ipsec не создается явного интерфейса в системе, это может быть проблемой если используется динамическая или сложная статическая маршрутизация.
Security Policy Database (SPD)
База правил, определяющих какой трафик необходимо подвергать шифрованию, протокол защиты данных, тип инкапсуляции и ряд других параметров.
Положение проверки пакета SPD можно отобразить на схеме Packet Flow.
Преодоление NAT
IPSec использует протоколы сетевого уровня для передачи данных, которые не может обработать NAT. Для решения проблемы используется протокол NAT-T (расширение в IKE и часть IKEv2). Суть NAT-T в дополнительной инкапсуляции пакетов IPSec в UDP пакеты, которые обрабатывает NAT.
IPSec в Mikrotik
IPSec доступен бесплатно на любом устройстве под управлением RouterOS с установленным пакетом Security.
Аппаратное шифрование
Для разгрузки CPU в некоторые модели маршрутизаторов MikroTik добавляют аппаратное ускорение шифрования, полный список можно найти на wiki.
Наиболее бюджетные варианты: RB750Gr3, RB3011, HAP AC^2.
Своими силами проверял скорость IPSec между двумя RB1100AHx2 и между двумя RB750Gr3.
Для достижения максимального результата на RB1100AHx2 необходимо:
- Использовать 11 порт, напрямую подключенный к CPU и настроить одно ядро CPU для обработки трафика 11 порта
- Использовать only-hardware-queues на интерфейсах, отключить RPS
- Задействовать Layer3 FastPath (около 800mb/sec), либо исключить IPSec трафик из conntrack (около 700mb/sec)
Без описанных манипуляций на самом медленном порту (ether13) удается получить ~170Mb/sec, на обычном ~400Mb/sec.
На RB750Gr3 без оптимизаций около 200Mb/sec.
Маршрутизаторы на одноядерных Qualcomm показывают результат 10-40mb/sec в зависимости от модели, оптимизаций и загруженности другими процессами.
Рекомендую ознакомиться с презентацией от сотрудника mikrotik, там затронуты темы оптимизации настроек для уменьшения нагрузки на CPU и увеличения скорости, которые я не стал добавлять в текст.
Различия 6.42.X и 6.43.X
В зависимости от используемой версии RouterOS меню конфигурации IPSec будет различаться.
В testing версии уже есть новые изменения, так что читайте Release Notes перед обновлением.
Конфигурация IPSec
Меню [IP]->[IPSec] не такое страшное, как кажется на первый взгляд. Из схемы видно, что основными пунктами конфигурации являются: Peers и Profiles.
Вкладки Remote Peers и Installed SAs являются информационными.
Peers и Peers Profiles
Конфигурация пиров IPSec для установки IKE соединения и создания вспомогательного защищенного туннеля.
Настройка удаленных пиров IPSec
Настройка профилей (Proposals) для согласования Phase 1
Policies и Policy Proposals
Политики проверяют проходящие пакеты на соответствие условиям и применяют указанные действия. Если вернетесь к Packet flow, то блоки с IPSec Policy и есть сверка с политиками. В действиях задается: протокол защиты IPSec (ESP или AH), предложения для согласования SA, режим инкапсуляции.
Пакет проходит политики поочередно, пока не совпадет с условиями одной из них.
Настройка политик
Настройка предложений (Proposals) для согласования SA
Groups
Используются для связи шаблонов политик и пиров.
В одной из старых версий RouterOS был баг с нерабочей группой default.
Mode Config
Отправка и получение параметров IP без использования дополнительных протоколов. Позволяет создавать самодостаточный Client-to-Server VPN только средствам IPSec.
Keys и Users
Используются для расширенной аутентификации пиров.
Keys
Ключи RSA: генерация, импорт, экспорт. Не поддерживаются в IKEv2.
Users
База данных пользователей xAuth, для “сервера”. Клиент указывает настройки xAuth в конфигурации пира. Возможно пересылать аутентификацию xAuth на RADIUS сервер.
Remote Peers
Список всех пиров устанавливающих и установивших вспомогательный туннель (Phase 1). Можно удалять пиров для обновления ключей вспомогательного туннеля.
Installed SAs
база данных SAD или список всех согласованных SA. Можно посмотреть используемые алгоритмы защиты данных и ключи.
Флаг Hardware AEAD указывает на использование аппаратного шифрования.
Администратор может сбросить SA, но только одновременно все одного типа (esp или ah).
IPSec и Firewall
В Firewall можно проверить соответствует трафик входящей или исходящей IPSec политики или нет. Очевидное применение — L2TP/IPSec, можно запретить установку L2TP соединений если трафик не был предварительно зашифрован.
Протоколы и порты, используемые в IPSec
- IKE — UDP:500
- IKEv2 — UDP:4500
- NAT-T — UDP:4500
- ESP — ipsec-esp(50)
- AH — ipsec-ah(51)
IPSec и Endpoinds
А теперь о наболевшем…
На wiki mikrotik есть таблицы с алгоритмами хеширования и шифрования для: Windows, iOS, OS-X.
Про встроенный в android vpn клиент я информации не нашел, но в целом он работает с proposals от windows. Поддержки IKEv2 в Android нет, необходимо использовать StrongSwan.
Примеры конфигурации
Схема и базовая конфигурация для примеров с Site-to-Site туннелями:
#Mikrotik1
/ip address
add address=10.10.10.10/24 interface=ether1 network=10.10.10.0
add address=192.168.100.1/24 interface=ether2 network=192.168.100.0
/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether1
/ip route
add distance=1 gateway=10.10.10.1 dst-address=0.0.0.0/0
#Mikrotik2
/ip address
add address=10.20.20.20/24 interface=ether1 network=10.20.20.0
add address=192.168.200.1/24 interface=ether2 network=192.168.200.0
/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether1
/ip route
add distance=1 gateway=10.20.20.1 dst-address=0.0.0.0/0
IPSec в туннельном режиме
Пошаговая конфигурация:
- Создаем Proposals для IKE Phase1
- Создаем пира. Указываем адрес, proposals, режим обмена, ключ PSK. Я выбрал IKEv2, можно использовать main/agressive по желанию
- Создаем Proposals для SA
- Указываем подсети между которыми создаем туннель
- Указываем адреса SA, туннельный режим и proposals для шифрования трафика
- Редактируем правило NAT
Проверка установленного соединения
- Видим соседа в Remote Peers
- Видим установленные SA (счетчики трафика не будут меняться, пока вы его не пустите)
- В политике статус Established и флаг (A)ctive
IPIP/IPSec
Предварительная настройка IPIP туннеля:
#Mikrotik1
#Настройка интерфейса ipip
/interface ipip
add allow-fast-path=no clamp-tcp-mss=no name=ipip-vpn remote-address=10.20.20.20
#Установка ip адреса на ipip интерфейс
/ip address
add address=10.30.30.1/30 interface=ipip-vpn
#Статический маршрут до удаленной подсети
/ip route
add distance=1 dst-address=192.168.200.0/24 gateway=10.30.30.2
#Mikrotik2
#Все аналогично, меняются только адреса и подсети
/interface ipip
add allow-fast-path=no clamp-tcp-mss=no name=ipip-vpn remote-address=10.10.10.10
/ip address
add address=10.30.30.2/30 interface=ipip-vpn
/ip route
add distance=1 dst-address=192.168.100.0/24 gateway=10.30.30.1
Пошаговая конфигурация IPSec:
- Создаем Proposals для IKE Phase1
- Создаем пира. Указываем адрес, proposals, режим обмена, ключ PSK
- Создаем Proposals для SA
- Указываем подсети между которыми создаем туннель
- Указываем адреса SA, тип трафика который будем шифровать и proposals
Для невнимательных, реальная разница конфигурации туннельного и транспортного режима в IPSec Policies:
Проверка соединения аналогична туннельному режиму.
L2TP/IPSec
Предыдущие примеры хорошо подходят для создания постоянных VPN между двумя пирами, со статическими внешними IP адресами.
Если адрес одного из пиров динамический (и обычно находится за NAT’ом), необходимо использовать другую Client-to-Server VPN.
Предварительная конфигурация L2TP:
#Создание пула адресов для клиентов
/ip pool
add name=pool-l2tp ranges=192.168.77.10-192.168.77.20
#Создание профиля для клиентов
/ppp profile
add change-tcp-mss=yes local-address=192.168.77.1 name=l2tp-ipsec only-one=yes remote-address=pool-l2tp use-compression=no use-encryption=no use-mpls=no use-upnp=no
#Создание учетных записей
/ppp secret
add name=user1 password=test1 profile=l2tp-ipsec service=l2tp
add name=user2 password=test2 profile=l2tp-ipsec service=l2tp
add name=user3 password=test3 profile=l2tp-ipsec service=l2tp
#Включение сервера L2TP (без автонастройки ipsec)
/interface l2tp-server server
set authentication=chap,mschap2 default-profile=l2tp-ipsec enabled=yes
Пошаговая конфигурация IPSec:
- Создаем новую группу (можно использовать default)
- Создаем Proposals для IKE Phase1
- Создаем пира, точнее подсеть. Ругается на PSK ключ, но если мы имеем дело с windows в качестве клиента, то у нас на выбор: Сертификаты или PSK.
- Устанавливаем passive=yes и send-init-contact=no, в generate-policy=port-strict (принимать порт от клиента)
- Создаем Proposals для SA
- Создаем шаблон для генерации политик
- Указываем proposal для SA
Конфигурация firewall для создания L2TP подключений только после IPSec
/ip firewall filter
#Разрешаем IKE, NAT-T и ipsec-esp
add chain=input protocol=17 dst-port=500,4500 action=accept
add chain=input protocol=50 action=accept
#Разрешаем L2TP, только если есть политика ipsec для данного трафика
add chain=input protocol=17 dst-port=1701 ipsec-policy=in,ipsec action=accept
add chain=input protocol=17 dst-port=1701 action-drop
IKEv2 VPN
Вариант с L2TP является популярным, но благодаря mode config можно настроить VPN сервер используя только IPSec. Это перспективный тип VPN, но пока редко используемый, поэтому помимо конфигурации серверной части, я приведу пример настройки клиента strongSwan на android.
Конечно, не все так радужно. Большинство “пользовательских” ОС (в частности Windows и Android) согласны работать с таким VPN только при условии аутентификации по сертификатам или EAP.
Сертификаты — это мое слабое место, если кто в курсе как правильно сгенерировать самоподписные сертификат который windows импортирует и будет использовать в соединении — пишите в комментарии.
Предварительная генерация сертификатов:
#Root CA и сапомодпись
/certificate add name=ca common-name="IKEv2 CA" days-valid=6928
/certificate sign ca ca-crl-host=<IP роутера>
#Сертификат для сервера vpn
/certificate add common-name=<IP роутера> subject-alt-name=IP:<IP роутера> key-usage=tls-server name=vpn days-valid=6928
#Подпись серверного сертификата
/certificate sign vpn ca=ca
#Сертификат для клиента
#Клиенты с одним сертификатам не смогут работать одновременно, поэтому генерируйте по одному для каждого
#Для отмены доступа необходимо сделать Revoke клиентского сертификата
/certificate add common-name=client key-usage=tls-client name=client days-valid=6928
#Подпись клиентского сертификата
/certificate sign client ca=ca
Пошаговая конфигурация IKEv2 VPN:
- Создаем пул адресов для раздачи клиентам
- Создаем профиль mode config для раздачи параметров IP клиентам
- Создаем группы для связи Peers и шаблонов policies
- Создаем Proposals для IKE Phase1
- Создаем профиль для подключения пиров. Аутентификация через сертификаты, протокол IKEv2, пассивный режим
- Указываем профиль mode config, группу из 3 шага и включаем генерацию политик
- Создаем Proposals для SA
- Создаем шаблон для генерации политик
- Указываем Proposals для SA
Если соединение прошло успешно появятся: динамическая политика, запись в remote Peers и пара SA.
У RouterOS x86 demo лицензии нет ограничений на число IPSec туннелей, включая IKEv2 VPN. Можно развернуть RouterOS x86 demo (не путайте с RouterOS CHR free, там все грустно) на VPS и получить личный VPN сервер с минимальным напрягом по администрированию, без покупки лицензии на RouterOS или RouterOS CHR.
Пара слов про анализ логов IPSec
Логи в Mikrotik — отдельная история, да иногда они достаточно подробные для анализа проблемы, но отсутствие банальных возможностей: очистить, скопировать, найти вынуждает устанавливать отдельный syslog сервер.
Что касается IPSec, вот вариант быстрого анализа логов (оставляем только нужное на отдельной вкладке):
/system logging action
add memory-lines=100000 name=ipsec target=memory
/system logging
add action=ipsec topics=ipsec,error
add action=ipsec topics=ipsec,debug,!packet
add action=ipsec topics=ipsec,info
И пара примеров типичных проблем с конфигурацией IPSec:
И напоследок почитайте раздел troubleshooting из wiki. И весь материал про IPSec желателен для ознакомления, я описал только базовый набор инструментов и настроек.