Документация: ПО Факел — разрабатываемая версия
Инфраструктура RPKI¶
Обзор¶
Инфраструктура RPKI использует механизмы PKI для обеспечения безопасности процессов маршрутизации. Основная задача инфраструктуры - подтверждение соответствия анонсов маршрутов BGP корректному номеру автономной системы - ASN, которое используется маршрутизатором с поддержкой протокола BGP для валидации каждого маршрута с помощью механизма ROA. Описание инфраструктуры представлено в спецификации RFC 6480.
Устройство под управлением ПО Факел, которое также является маршрутизатором с поддержкой протокола BGP, способно получать ROA информацию из надежного источника RPKI, который зачастую обозначается как сервер, который выполняет валидацию RPKI, по протоколу RTR.
Существуют несколько видов реализации инфраструктура RPKI с открытым исходным кодом:
Routinator от NLnet Labs, написанный на языке Rust
Validator от RIPE NCC, написанный на языке Java
Описание протокола RTR представлено в спецификации RFC 8210.
Совет
При первом знакомстве с возможностями инфраструктуры RPKI рекомендуется обратиться к руководству, подготовленному NLnet Labs, которое позволит быстро получить наиболее важную для понимания информацию. Данное руководство затрагивает практически все аспекты, начиная с самого понятия RPKI, заканчивая вариантами его развертывания в инфраструктуре. Также руководство содержит подробное описание всех возможностей эксплуатации инфраструктуры RPKI.
Ключевые возможности¶
Текущая реализация RPKI обладает следующими ключевыми возможностями.
Маршрутизатор с поддержкой протокола BGP может подключаться к одному или нескольким кэш-серверам RPKI для получения надежных префиксов, чтобы установить их соответствие с автономными системами. Может быть обеспечена отказоустойчивость путем конфигурирования различных сокетов сервера со своим приоритетом.
Если в течение предварительно заданного тайм-аута не удается установить соединение с кэш-сервером RPKI, маршрутизатор будет обрабатывать префиксы без установления соответствия с автономными системами. При этом маршрутизатор и далее будет пытаться установить соединение с кэш-сервером RPKI в фоновом режиме.
По умолчанию использование инфраструктуры RPKI не влияет на выбор наилучшего пути, а именно: ненадежные маршруты по-прежнему будут рассматриваться в данном процессе. Однако маршрутизатор может быть сконфигурирован таким образом, чтобы игнорировать ненадежные префиксы.
Карты маршрутов могут быть сконфигурированы таким образом, чтобы соответствовать определенному состоянию в рамках валидации RPKI. Это позволяет создавать локальные политики управления маршрутами BGP, основанные на установлении соответствия между префиксами и автономными системами.
Обновления, получаемые от кэш-серверов RPKI, применяются сразу, приводя также к обновлению соответствующим образом результатов обнаружения наилучшего пути (для этого необходимо активировать опцию «мягкого» обновления).
Импортированные префиксы в результате валидации могут принимать значения:
valid - префикс и номер ASN соответствуют существующей конфигурации ROA. Это означает, что анонс маршрутов является доверенным.
invalid - префикс или его длина, а также номер ASN не соответствуют существующей конфигурации ROA. Это означает, что имеет место либо попытка взлома системы, либо как минимум некорректная ее конфигурация, что приводит к получению недоверенных анонсов маршрутов.
notfound - отсутствует какая-либо конфигурация ROA, которая покрывает данный префикс. К сожалению данная ситуация характерна для почти 80% префиксов IPv4, анонс которых выполняется в зоне DFZ.
Примечание
Если существует потребность в назначении сети глобальных адресов, необходимо обязательно убедиться в том, что префиксы имеют соответствующую конфигурацию ROA, чтобы избежать присвоения им значения notfound при использовании инфраструктуры RPKI. Для большинства номеров ASN это означает необходимость публикации конфигураций ROA в реестре RIR (RIPE NCC, APNIC, ARIN, LACNIC, AFRINIC), которая также возникает при планировании анонсов в зоне DFZ. Зачастую большие сети имеют собственные удостоверяющие центры RPKI и серверы для публикации конфигураций ROA, вместо того, чтобы публиковать их в реестре RIR, но данный вопрос находится за рамкам документации на ПО Факел. Для более глубокого погружения в данный вопрос рекомендуется ознакомиться со статьей о продукте Krill.
Алгоритм настройки¶
Для настройки протокола RPKI на маршрутизаторе нужно настроить ip адрес для подключения к кэш-серверу RPKI, указать приоритет в случае подключения к нескольким кэш-серверам и задать временной интервал для обновления локального кэша RPKI.
Подключение по SSH¶
Подключение к кэш-серверу RPKI может осуществляться не только с использованием стека протоколов HTTP/TLS для защиты коммуникаций, но и с использованием протокола SSH. При подключении по протоколу SSH необходимо задать имя пользователя и ключ OpenSSH из конфигурации PKI. Ключ берется из конфигурации PKI, а не из файлов, поэтому созданную ключевую пару необходимо загрузить в PKI вручную:
Создайте ключевую пару командой
generate ssh client-key <filename>. Закрытый ключ записывается в файл<filename>, открытый ключ — в файл<filename>.pub.Загрузите ключевую пару в конфигурацию PKI под выбранным именем
<openssh>командамиset pki openssh <openssh> public key <key>,set pki openssh <openssh> public type <type>иset pki openssh <openssh> private key <key>. Значения для этих команд берутся из созданных файлов, как описано в разделе «Список команд».Укажите имя
<openssh>в командеset protocols rpki cache <address> ssh key <openssh>.
Контроль работы¶
Состояние RPKI отображают команды режима «Администрирование» группы show rpki:
команды
show rpki cache-serverиshow rpki cache-connection— настроенные кэш-серверы RPKI и состояние подключения к ним. Если подключения нет, проверка маршрутов по RPKI не выполняется (см. Ключевые возможности);команда
show rpki prefix-table— таблица надежных префиксов, полученных от кэш-серверов: префикс, допустимая длина префикса и номер автономной системы, которой разрешено его анонсировать;команды
show rpki prefix <prefix>иshow rpki as-number <as-number>— поиск в этой таблице по префиксу (при необходимости вместе с номером автономной системы) или по номеру автономной системы. Команды позволяют проверить, какое состояние (valid, invalid или notfound) получит анонс маршрута.
Команда reset rpki сбрасывает RPKI в подсистеме маршрутизации. Команда доступна только пользователю уровня «Администратор» (см. Уровни пользователей).
Пример настройки¶
Пример, в котором в качестве кэш-сервера RPKI используется решение Routinator с адресом 192.0.2.1.
В данном примере рассматривается построение карт маршрутов на основе описанных выше состояний префиксов.
Создается карта маршрутов для получения маршрутов, обнаруженных при импорте.
Такой классификатор подразумевает отбрасывание префиксов с состоянием invalid и установку более высокого приоритета для префиксов с состоянием valid по сравнению с состоянием notfound.
Настройка кэш-сервера RPKI:
Шаг |
Команда |
Описание |
|---|---|---|
1 |
set protocols rpki cache |
Задает порт |
2 |
set protocols rpki cache |
Задает приоритет |
Настройка карты маршрутов:
Шаг |
Команда |
Описание |
|---|---|---|
1 |
set policy route-map |
Создает правило |
2 |
set policy route-map |
Добавляет в правило |
3 |
set policy route-map |
Устанавливает значение local-preference |
4 |
set policy route-map |
Создает правило |
5 |
set policy route-map |
Добавляет в правило |
6 |
set policy route-map |
Устанавливает значение local-preference |
7 |
set policy route-map |
Создает правило |
8 |
set policy route-map |
Добавляет в правило |
После того, как маршрутизатор настроен отбрасывать префиксы с состоянием invalid, можно убедиться в корректности его работы путем использования экспериментальной веб-утилиты RPKI Test от NLnet Labs.
Список команд¶
Режим «Конфигурирование»¶
protocols rpki polling-period <polling-period>¶
Синтаксис:
set protocols rpki polling-period
<polling-period>delete protocols rpki polling-period
<polling-period>show protocols rpki polling-period
Аргументы:
<polling-period>— временной интервал в секундах. Формат: целое число. Диапазон значений: от 1 до 86400. Значение по умолчанию: 300.
Режим: «Конфигурирование».
protocols rpki cache <address> port <port>¶
Синтаксис:
set protocols rpki cache
<address>port<port>delete protocols rpki cache
<address>port<port>show protocols rpki cache
<address>port
Аргументы:
<address>— адрес кэш-сервера RPKI. Формат: IPv4-адрес (x.x.x.x), IPv6-адрес (h:h:h:h:h:h:h:h) или полное доменное имя (FQDN).<port>— номер порта. Формат: целое число. Диапазон значений: от 1 до 65535.
Режим: «Конфигурирование».
protocols rpki cache <address> preference <preference>¶
Синтаксис:
set protocols rpki cache
<address>preference<preference>delete protocols rpki cache
<address>preference<preference>show protocols rpki cache
<address>preference
Аргументы:
<address>— адрес кэш-сервера RPKI. Формат: IPv4-адрес (x.x.x.x), IPv6-адрес (h:h:h:h:h:h:h:h) или полное доменное имя (FQDN).<preference>— приоритет кэш-сервера. Формат: целое число. Диапазон значений: от 1 до 255.
Режим: «Конфигурирование».
protocols rpki cache <address> ssh username <username>¶
Синтаксис:
set protocols rpki cache
<address>ssh username<username>delete protocols rpki cache
<address>ssh username<username>show protocols rpki cache
<address>ssh username
Аргументы:
<address>— адрес кэш-сервера RPKI. Формат: IPv4-адрес (x.x.x.x), IPv6-адрес (h:h:h:h:h:h:h:h) или полное доменное имя (FQDN).<username>— имя пользователя. Формат: строка.
Режим: «Конфигурирование».
protocols rpki cache <address> ssh key <key>¶
Синтаксис:
set protocols rpki cache
<address>ssh key<key>delete protocols rpki cache
<address>ssh key<key>show protocols rpki cache
<address>ssh key
Аргументы:
<address>— адрес кэш-сервера RPKI. Формат: IPv4-адрес (x.x.x.x), IPv6-адрес (h:h:h:h:h:h:h:h) или полное доменное имя (FQDN).<key>— имя ключа OpenSSH в конфигурации PKI. Формат: строка.
Режим: «Конфигурирование».
pki openssh <openssh> public key <key>¶
<filename>.pub, созданного командой generate ssh client-key <filename>) — тело ключа без типа и комментария.Синтаксис:
set pki openssh
<openssh>public key<key>delete pki openssh
<openssh>public key<key>show pki openssh
<openssh>public key
Аргументы:
<openssh>— имя ключа OpenSSH в конфигурации PKI. Формат: строка. Это же имя указывается в командеset protocols rpki cache <address> ssh key <openssh>.<key>— открытый ключ. Формат: строка в кодировке base64.
Режим: «Конфигурирование».
pki openssh <openssh> public type <type>¶
<filename>.pub, созданного командой generate ssh client-key <filename>).Синтаксис:
set pki openssh
<openssh>public type<type>delete pki openssh
<openssh>public type<type>show pki openssh
<openssh>public type
Аргументы:
<openssh>— имя ключа OpenSSH в конфигурации PKI. Формат: строка. Это же имя указывается в командеset protocols rpki cache <address> ssh key <openssh>.<type>— тип открытого ключа. Возможные значения:ssh-rsa— ключевая пара на основе алгоритма RSA.
Режим: «Конфигурирование».
pki openssh <openssh> private key <key>¶
<filename>, созданного командой generate ssh client-key <filename>) без строк -----BEGIN OPENSSH PRIVATE KEY----- и -----END OPENSSH PRIVATE KEY----- и без переводов строки.Синтаксис:
set pki openssh
<openssh>private key<key>delete pki openssh
<openssh>private key<key>show pki openssh
<openssh>private key
Аргументы:
<openssh>— имя ключа OpenSSH в конфигурации PKI. Формат: строка. Это же имя указывается в командеset protocols rpki cache <address> ssh key <openssh>.<key>— закрытый ключ. Формат: строка в кодировке base64.
Режим: «Конфигурирование».
Режим «Администрирование»¶
generate ssh client-key <filename>¶
<filename>, открытый ключ — в файл <filename>.pub. Созданные файлы не используются автоматически: перед настройкой подключения ключевую пару необходимо загрузить в конфигурацию PKI (порядок описан в разделе «Подключение по SSH»).Синтаксис:
generate ssh client-key
<filename>
Аргументы:
<filename>— путь к файлу закрытого ключа. Пример:/config/auth/id_rsa_rpki.
Режим: «Администрирование».
rpki as-number <as-number>¶
Синтаксис:
show rpki as-number
<as-number>
Аргументы:
<as-number>— номер автономной системы. Формат: целое число.
Режим: «Администрирование».
rpki cache-connection¶
Синтаксис:
show rpki cache-connection
Режим: «Администрирование».
rpki cache-server¶
Синтаксис:
show rpki cache-server
Режим: «Администрирование».
rpki prefix <prefix>¶
Синтаксис:
show rpki prefix
<prefix>
Аргументы:
<prefix>— префикс. Формат: IPv4-префикс (x.x.x.x/x) или IPv6-префикс (h:h:h:h:h:h:h:h/x).
Режим: «Администрирование».
rpki prefix <prefix> as-number <as-number>¶
Синтаксис:
show rpki prefix
<prefix>as-number<as-number>
Аргументы:
<prefix>— префикс. Формат: IPv4-префикс (x.x.x.x/x) или IPv6-префикс (h:h:h:h:h:h:h:h/x).<as-number>— номер автономной системы. Формат: целое число.
Режим: «Администрирование».
rpki prefix-table¶
Синтаксис:
show rpki prefix-table
Режим: «Администрирование».
reset rpki¶
Синтаксис:
reset rpki
Режим: «Администрирование».
Уровень привилегий: «Администратор».