Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Интерфейсы различных подсистем > Сетевая подсистема > Общие сведения > Защита протокола IP и аппаратное кодирование



Защита протокола IP и аппаратное кодирование

Настройка защищенных соединений

В этой главе:

Примеры настройки соединения IPsec
Инструменты для работы с IPsec
Поддержка OpenSSL
Аппаратное ускорение кодирования
Поддерживаемые механизмы аппаратного кодирования

Варианты стека io-pkt-v4-hc и io-pkt-v6-hc обеспечивают полную встроенную поддержку протокола IPsec.


Note: Чтобы включить IPsec необходимо передать стеку параметр ipsec при запуске.

В справочной системе NetBSD имеется страница с полезной информацией общего характера о протоколе IPsec. Некоторые изложенные в ней аспекты (например, пересборка ядра) неприменимы к ЗОСРВ «Нейтрино», однако общие принципы использования протокола IPsec вполне актуальны.

Примеры настройки соединения IPsec

Следующие примеры иллюстрируют настройку протокола IPsec.

Соединение двух узлов вручную

Допустим, что необходимо установить соединение IPsec между двумя узлами – BoxA и BoxB. Выполните следующие действия:

  1. На каждом узле создайте следующий сценарий (для примера назовем его my_script):

    #!/bin/ksh
    # args: Этот сценарий принимает два аргумента:
    # - Первый аргумент - IP-адрес узла, на котором выполняется сценарий.
    # - Второй аргумент - IP-адрес узла, с которым устанавливается соединение по
    # протоколу IPsec.
    Myself=$1
    Remote=$2
    # В следующих двух строках выполняется очистка базы данных. Они демонстрируют
    # создание простейшего соединения.
    setkey -FP
    setkey -F
    # Ввод всех параметров безопасного соединения с помощью утилиты setkey.
    setkey -c << EOF
    spdadd $Myself $Remote any -P out ipsec esp/transport/$Myself-$Remote/require;
    spdadd $Remote $Myself any -P in ipsec esp/transport/$Remote-$Myself/require;
    add $Myself $Remote esp 1234 -m any -E 3des-cbc "KeyIsTwentyFourBytesLong";
    add $Remote $Myself esp 1234 -m any -E 3des-cbc "KeyIsTwentyFourBytesLong";
    EOF

  2. Выполните команду ./my_script BoxA BoxB на узле BoxA или укажите IP-адреса обоих узлов, если невозможно разрешить их имена.

  3. Аналогичным образом выполните команду ./my_script BoxB BoxA на узле BoxB.

Теперь можно проверить соединение с помощью команды ping на каждом узле. Команда setkey -PD отображает состояние IPsec.

Соединение с аутентификацией методом предопределенного ключа

Рассмотрим следующую простейшую ситуацию. Имеется узел BoxA с пользователем UserA и узел BoxB с пользователем UserB. У этих пользователей имеется общий пароль hello_world.

  1. На узле BoxA создайте файл psk.txt со следующими взаимосвязанными строками:

    usera@kpda.ru "Hello_world"
    userb@kpda.ru "Hello_world"

    С помощью этого файла демон управления ключами ( IPsec IKE daemon) racoon будет выполнять аутентификацию и устанавливать соединение по протоколу IPsec.

  2. Пользователь root должен являться владельцем файла psk.txt и иметь исключительные права на его чтение и запись. Чтобы назначить эти права, выполните команду:

    chmod 0600 psk.txt

  3. Демон racoon использует конфигурационный файл (например, racoon.conf), в котором указаны его рабочие параметры. В удаленном сеансе укажите, что мы будем выполнять аутентификацию методом предопределенного ключа, и сообщите демону racoon, где находится пароль. Пример:

    ...
    # Указываем демону racoon местонахождение предопределенных ключей:
    path pre_shared_key "полный_путь_к_ключам_psk.txt" ;
    remote anonymous
    {
    exchange_mode aggressive,main;
    doi ipsec_doi;
    situation identity_only;
    #my_identifier address;
    my_identifier user_fqdn "usera@kpda.ru";
    peers_identifier user_fqdn "userb@kpda.ru";
    nonce_size 16;
    lifetime time 1 hour; # sec,min,hour
    initial_contact on;
    proposal_check obey; # obey, strict or claim
    proposal {
    encryption_algorithm 3des;
    hash_algorithm sha1;
    authentication_method pre_shared_key ;
    dh_group 2 ;
    }
    }
    ...

  4. Задайте политику с помощью утилиты setkey. С помощью следующего сценария (с именем my_script) можно сообщить стеку, что соединение IPsec между хостами BoxA и BoxB требует согласования ключа:

    #!/bin/sh
    # Простая конфигурация для проверки согласования, выполняемого демоном racoon.
    #
    Myself=$1
    Remote=$2
    setkey -FP
    setkey -F
    setkey -c << EOF
    #
    spdadd $Remote $Myself any -P in ipsec esp/transport/$Remote-$Myself/require;
    spdadd $Myself $Remote any -P out ipsec esp/transport/$Myself-$Remote/require;
    #
    EOF

    Запустите этот сценарий на узле BoxA командой ./my_script BoxA BoxB.

  5. Выполните вышеуказанные действия на узле BoxB. Запустите сценарий на узле BoxB командой ./my_script BoxB BoxA (и т.д.).

  6. Выполните команду racoon -c full_path_to_racoon.conf на обоих узлах. При появлении трафика между узлами (например, во время выполнения команды ping) демон racoon подключает их по протоколу IPsec, создавая безопасные соединения (Security Associations, SA) в обоих направлениях. После этого пользователь может убедиться, что хосты обмениваются трафиком, а, следовательно, соединение IPsec установлено.

Инструменты для работы с IPsec

Для работы с протоколом IPsec в сетевой стек ЗОСРВ «Нейтрино» интегрированы следующие инструменты NetBSD:

libipsec
Функции библиотеки PF_KEY.
setkey
Инструмент для управления базой данных политик безопасности (Security Policy Database) и базой данных безопасных соединений (Security Association Database).
racoon
Демон для управления обменом ключами по протоколу IKE.
racoonctl
Командно-строковый инструмент для управления демоном racoon.

Поддержка OpenSSL

Порт проекта OpenSSL и его клиентских библиотек поддерживается в актуальном состоянии.

Аппаратное ускорение кодирования

Менеджеры io-pkt-v4-hc и io-pkt-v6-hc содержат аппаратно-независимую инфраструктуру, с помощью которой аппаратно-зависимый драйвер может быстро выполнять операции кодирования с применением специализированного оборудования. Этот механизм не только ускоряет кодирование (например, при использовании IPsec), но и уменьшает нагрузку на процессор.

Указанный интерфейс разработан таким образом, что при выполнении операций кодирования стек не блокируется — он продолжает работу, а драйвер возвращает ему обработанные данные по мере готовности с помощью обратного вызова. Этот механизм идеально подходит для устройств кодирования с прямым доступом к памяти (DMA).

Поддерживаемые механизмы аппаратного кодирования

Драйвер devnp-mpcsec.so поддерживает аппаратные средства кодирования MPCSEC E-series PowerQUICC III и PowerQUICC-II PRO процессоров Freescale. Этот драйвер загружается из командной строки так же, как обычный драйвер Ethernet:

io-pkt-v6-hc -d mpcsec -d mpc85xx

где devnp-mpc85xx.so – драйвер Ethernet для аппаратного блока Freescale TSEC (Triple Speed Ethernet Controller).




Предыдущий раздел: перейти