Документация: ПО Факел — разрабатываемая версия

Инфраструктура RPKI

Обзор

Инфраструктура RPKI использует механизмы PKI для обеспечения безопасности процессов маршрутизации. Основная задача инфраструктуры - подтверждение соответствия анонсов маршрутов BGP корректному номеру автономной системы - ASN, которое используется маршрутизатором с поддержкой протокола BGP для валидации каждого маршрута с помощью механизма ROA. Описание инфраструктуры представлено в спецификации RFC 6480.

Устройство под управлением ПО Факел, которое также является маршрутизатором с поддержкой протокола BGP, способно получать ROA информацию из надежного источника RPKI, который зачастую обозначается как сервер, который выполняет валидацию RPKI, по протоколу RTR.

Существуют несколько видов реализации инфраструктура RPKI с открытым исходным кодом:

  • Routinator от NLnet Labs, написанный на языке Rust

  • GoRTR и OctoRPKI от CloudFlare, написанные на языке Go

  • 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 вручную:

  1. Создайте ключевую пару командой generate ssh client-key <filename>. Закрытый ключ записывается в файл <filename>, открытый ключ — в файл <filename>.pub.

  2. Загрузите ключевую пару в конфигурацию PKI под выбранным именем <openssh> командами set pki openssh <openssh> public key <key>, set pki openssh <openssh> public type <type> и set pki openssh <openssh> private key <key>. Значения для этих команд берутся из созданных файлов, как описано в разделе «Список команд».

  3. Укажите имя <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 192.0.2.1 port 3323

Задает порт 3323 для подключения к кэш-серверу RPKI 192.0.2.1

2

set protocols rpki cache 192.0.2.1 preference 1

Задает приоритет 1 для подключения к кэш-серверу RPKI 192.0.2.1

Настройка карты маршрутов:

Шаг

Команда

Описание

1

set policy route-map ROUTES-IN rule 10 action permit

Создает правило 10 карты маршрутов ROUTES-IN с действием permit

2

set policy route-map ROUTES-IN rule 10 match rpki valid

Добавляет в правило 10 условие совпадения с префиксами в состоянии valid

3

set policy route-map ROUTES-IN rule 10 set local-preference 300

Устанавливает значение local-preference 300 для маршрутов, соответствующих правилу 10

4

set policy route-map ROUTES-IN rule 20 action permit

Создает правило 20 карты маршрутов ROUTES-IN с действием permit

5

set policy route-map ROUTES-IN rule 20 match rpki notfound

Добавляет в правило 20 условие совпадения с префиксами в состоянии notfound

6

set policy route-map ROUTES-IN rule 20 set local-preference 125

Устанавливает значение local-preference 125 для маршрутов, соответствующих правилу 20

7

set policy route-map ROUTES-IN rule 30 action deny

Создает правило 30 карты маршрутов ROUTES-IN с действием deny

8

set policy route-map ROUTES-IN rule 30 match rpki invalid

Добавляет в правило 30 условие совпадения с префиксами в состоянии invalid

После того, как маршрутизатор настроен отбрасывать префиксы с состоянием invalid, можно убедиться в корректности его работы путем использования экспериментальной веб-утилиты RPKI Test от NLnet Labs.

Список команд


Режим «Конфигурирование»


protocols rpki polling-period <polling-period>

Описание:
Задает временной интервал для обновления локального кэша RPKI.

Синтаксис:

  • 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>

Описание:
Задает адрес (IPv4, IPv6 или FQDN) и номер порта для подключения к кэш-серверу RPKI. Команда является обязательной для каждого кэш-сервера RPKI.

Синтаксис:

  • 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>

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

Синтаксис:

  • 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>

Описание:
Задает имя пользователя для подключения к кэш-серверу RPKI по протоколу SSH.

Синтаксис:

  • 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>

Описание:
Задает ключ OpenSSH из конфигурации PKI, который используется для подключения к кэш-серверу RPKI по протоколу SSH. Ключ должен быть предварительно загружен в конфигурацию PKI (порядок описан в разделе «Подключение по SSH»), иначе конфигурация не будет принята.

Синтаксис:

  • 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>

Описание:
Задает открытый ключ OpenSSH. Значением является второе поле файла открытого ключа (<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>

Описание:
Задает тип открытого ключа OpenSSH. Значением является первое поле файла открытого ключа (<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>

Описание:
Задает закрытый ключ OpenSSH. Значением является содержимое файла закрытого ключа (<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>

Описание:
Создает ключевую пару RSA для SSH клиента: закрытый ключ записывается в файл <filename>, открытый ключ — в файл <filename>.pub. Созданные файлы не используются автоматически: перед настройкой подключения ключевую пару необходимо загрузить в конфигурацию PKI (порядок описан в разделе «Подключение по SSH»).

Синтаксис:

  • generate ssh client-key <filename>

Аргументы:

  • <filename> — путь к файлу закрытого ключа. Пример: /config/auth/id_rsa_rpki.

Режим: «Администрирование».


rpki as-number <as-number>

Описание:
Отображает записи таблицы префиксов RPKI для указанного номера автономной системы.

Синтаксис:

  • show rpki as-number <as-number>

Аргументы:

  • <as-number> — номер автономной системы. Формат: целое число.

Режим: «Администрирование».


rpki cache-connection

Описание:
Отображает состояние подключений к кэш-серверам RPKI.

Синтаксис:

  • show rpki cache-connection

Режим: «Администрирование».


rpki cache-server

Описание:
Отображает сведения о настроенных кэш-серверах RPKI.

Синтаксис:

  • show rpki cache-server

Режим: «Администрирование».


rpki prefix <prefix>

Описание:
Отображает записи таблицы префиксов RPKI для указанного префикса.

Синтаксис:

  • 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>

Описание:
Отображает записи таблицы префиксов RPKI для указанного префикса и номера автономной системы.

Синтаксис:

  • 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

Описание:
Отображает префиксы, проверенные с помощью RPKI (таблицу префиксов, полученную от кэш-серверов).

Синтаксис:

  • show rpki prefix-table

Режим: «Администрирование».


reset rpki

Описание:
Сбрасывает RPKI в подсистеме маршрутизации.

Синтаксис:

  • reset rpki

Режим: «Администрирование».

Уровень привилегий: «Администратор».