Конфигурация IPsec «узел-узел»

6.4. Конфигурация IPsec «узел-узел»

С помощью IPsec можно связать одну рабочую станцию с другой, организовав соединение «узел-узел». В соединении такого типа для создания безопасного туннеля используется сеть, к которой подключены оба узла. Для организации соединения «узел-узел» и настройки IPsec от каждого узла требуется совсем немного. Для создания соединения IPsec узлам нужно только постоянное подключение к несущей сети (например, к Интернету) и Red Hat Enterprise Linux.

Первый этап организации соединения состоит в сборе системной и сетевой информации на каждой рабочей станции. Для соединения «узел-узел» вам потребуется следующая информация:

  • IP-адреса обоих узлов

  • Уникальное имя соединения IPsec, выделяющее его среди других устройств или соединений (например, ipsec0)

  • Постоянный или автоматически созданный с помощью racoon ключ шифрования

  • Предварительный общий ключ проверки подлинности, используемый для установки соединения и обмена ключами шифровании во время сеанса связи

Предположим, например, что компьютер A и компьютер B хотят организовать туннель IPsec. Для этого они хотят использовать предварительный общий ключ foobarbaz, а пользователи решили использовать racoon для автоматического создания и обмена ключом проверки подлинности. Пользователи обоих компьютеров назвали свои соединения ipsec0.

Ниже приведён файл ifcfg для рабочей станции A, с помощью которого устанавливается соединение IPsec «узел-узел» с рабочей станцией B (уникальное имя соединения в данном примере — ipsec0, поэтому результирующий файл называется /etc/sysconfig/network-scripts/ifcfg-ipsec0):

DST=X.X.X.X
TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK

На компьютере A X.X.X.X нужно заменить IP-адресом компьютера B, а на компьютере B вместо X.X.X.X указать IP-адрес компьютера A. Это соединение устанавливается при загрузке (ONBOOT=yes) и использует метод проверки подлинности с предварительным общим ключом (IKE_METHOD=PSK).

Ниже показан файл с предварительным общим ключом (/etc/sysconfig/network-scripts/keys-ipsec0), который нужен обоим компьютерам, чтобы проверить друг друга. Содержимое этого файла должно совпадать на обоих компьютерах, а доступ к нему должен иметь только пользователь root.

IKE_PSK=foobarbaz

ВажноВажно
 

Чтобы ограничить доступ к файлу keys-ipsec0, позволив читать и изменять его только пользователю root, выполните после создания файла следующее:

chmod 600 /etc/sysconfig/network-scripts/keys-ipsec0

Ключ проверки подлинности можно изменить в любое время, для этого на обоих компьютерах нужно отредактировать файл keys-ipsec0. Чтобы соединение было установлено, оба ключа должны совпадать.

Следующий пример иллюстрирует конкретную конфигурацию для первой фазы соединения с удалённым узлом. Этот файл называется X.X.X.X.conf (X.X.X.X заменяется IP-адресом удалённого маршрутизатора IPsec). Учтите, что этот файл создаётся автоматически при активации туннеля IPsec и редактировать его вручную не следует.

;
remote X.X.X.X
{
        exchange_mode aggressive, main;
        my_identifier address;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2 ;
        }
}

Файл конфигурации фазы 1, создаваемый при инициализации соединения IPsec, содержит следующие операторы, используемые реализацией IPsec в Red Hat Enterprise Linux:

remote X.X.X.X

Указывает, что последующие строфы файла конфигурации применяются только к удалённому узлу, задаваемому по IP-адресу X.X.X.X.

exchange_mode aggressive

В стандартной конфигурации IPsec в Red Hat Enterprise Linux используется жёсктий режим проверки подлинности, снижающий накладные расходы соединения и при этом позволяющий иметь разные IPsec-соединения с множеством узлов.

my_identifier address

Определяет метод идентификации, который будет использоваться при проверке подлинности узлов. Red Hat Enterprise Linux идентифицирует узлы по IP-адресам.

encryption_algorithm 3des

Определяет алгоритм шифрования, используемый при проверке подлинности. По умолчанию используется стандарт тройного шифрования данных (Triple Data Encryption Standard, 3DES).

hash_algorithm sha1;

Указывает алгоритм расчёта хэша, используемый на первой фазе согласования между узлами. По умолчанию используется алгоритм безопасного хэша (Secure Hash Algorithm) версии 1.

authentication_method pre_shared_key

Определяет метод проверки подлинности, используемый при согласовании узлов. В Red Hat Enterprise Linux для проверки подлинности по умолчанию применяются предварительные общие ключи.

dh_group 2

Указывает номер группы Диффи-Хелмана для выбора динамически создаваемых ключей сеанса. По умолчанию используется группа из 1024 бит.

Файлы /etc/racoon/racoon.conf также должны быть одинаковы на всех узлах IPsec, за исключением оператора include "/etc/racoon/X.X.X.X.conf". Этот оператор (и файл, на который он ссылается) создаётся при активации туннеля IPsec. На компьютере A вместо X.X.X.X в операторе include окажется IP-адрес компьютера B. На компьютере B будет обратная картина. Ниже показан типичный файл racoon.conf при установленном соединении IPsec.


# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

sainfo anonymous
{
	pfs_group 2;
	lifetime time 1 hour ;
	encryption_algorithm 3des, blowfish 448, rijndael ;
	authentication_algorithm hmac_sha1, hmac_md5 ;
	compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf"

Стандартный файл racoon.conf включает заданные пути к файлам конфигурации IPsec, предварительным общим ключам и сертификатам. Поля в sainfo anonymous описывают вторую фазу соединения между узлами IPsec — природу IPsec-соединения (включая используемый поддерживаемый алгоритм шифрования) и способ обмена ключами. В следующеме списке перечислены поля фазы 2:

sainfo anonymous

Отмечает, что SA может автоматически инициализировать соединение с любым партнёром при совпадении учётных сведений IPsec.

pfs_group 2

Определяет протокол обмена ключами Диффи-Хелмана, задающий алгоритм, по которому узлы IPsec устанавливают общий временный ключ сеанса для второй фазы соединения IPsec. По умолчанию реализация IPsec в Red Hat Enterprise Linux использует из набора группу обмена криптографическими ключами Диффи-Хелмана группу 2 (или modp1024). Для группы 2 применяется степенная функция по модулю uses 1024-бит, что предотвращает расшифровывание взломщиками предыдущих сеансов IPsec, даже если закрытый ключ скомпрометирован.

lifetime time 1 hour

Этот параметр задаёт срок жизни SA и может быть определяться временем или объёмом данных в байтах. Реализация IPsec в Red Hat Enterprise Linux устанавливает время жизни один час.

encryption_algorithm 3des, blowfish 448, rijndael

Указывает поддерживаемые алгоритмы шифрования для фазы 2. Red Hat Enterprise Linux поддерживает 3DES, Blowfish 448 бит и Rijndael (алгоритм, используемый расширенным стандартом шифрования (Advanced Encryption Standard, AES).

authentication_algorithm hmac_sha1, hmac_md5

Перечисляет поддерживаемые алгоритмы хэша для проверке подлинности. Поддерживаются режимы sha1 и md5 хэшированных кодов проверки подлинности сообщения (Hashed Message Authentication Codes, HMAC).

compression_algorithm deflate

Определяет алгоритм сжатия Deflate для поддержки сжатия IP-заголовков (IP Payload Compression, IPCOMP), что может увеличить скорость передачи IP-датаграм по медленным соединениям.

Установить соединение можно, либо перезагрузив компьютер, либо выполнив на каждом узле от имени root следующую команду:

/sbin/ifup ipsec0

Чтобы проверить IPsec-соединение, запустите утилиту tcpdump и, проанализировав сетевые пакеты, передаваемые между узлами (или сетями), убедитесь в том, что они зашифрованы IPsec. Пакет должен содержать заголовок AH и данные ESP. ESP означает, что шифрование работает. Например:

17:13:20.617872 pinky.example.com > ijin.example.com: \
	    AH(spi=0x0aaa749f,seq=0x335): ESP(spi=0x0ec0441e,seq=0x335) (DF)