Введение

Многие организации по всему миру для связи своих отдельных офисов используют всевозможные методы их физического соединения. Это могут быть как выделенные цифровые линии, так и VPN — Virtual Private Networks, которые значительно дешевле их физических аналогов. Используя, в общем, те же подходы, что и выделенные линии, VPN могут объединять несколько локальных сетей в одну и шифровать трафик для сокрытия передаваемой информации. В случае использования шифрования в технологии VPN, как правило, применяются открытые стандарты. При этом трафик передается поверх IP и использует в качестве транспортного уровня датаграммы.

Технически организация VPN может быть выполнена как программными средствами, так и аппаратными. В Linux в частности нашла применение технология FreeS/Wan, использующая стандартную реализация протокола безопасности IPSEC(Безопасноснай IP — Internet Protocol Security). Эти решения, реализованные как программно, так и аппаратно, функционируют как маршрутизаторы на концах VPN-соединений. При передаче клиентом пакета, он пересылает его на этот специализированный маршрутизатор, который добавляет к пакету заголовок проверки подлинности (Authentication Header, (AH)). После кодирования этих данных и добавления к ним инструкций по декодированию и обработке, они передаются на другой конечный специализированный маршрутизатор, принимающий эти пакеты. После приема пакета, конечный маршрутизатор раскодирует его, отбрасывая заголовок, и передает пакет конечному пользователю по месту назначения.

Если используется шифрование между сетями, то узел в локальной сети получает пакет уже расшифрованным и приступает к его обычной информационной обработке. Таким образом, при использовании шифрования между сетями, весь процесс кодирования и декодирования становится прозрачным для конечного узла сети.

В VPN применяются несколько уровней проверки подлинности и шифрования, поэтому они достаточно безопасны и эффективны для того, чтобы объединить множество удалённых узлов в единую виртуальную сеть.

Одна из реализаций стандарта VPN — это Internet Protocol SECurity, IPsec, который достаточно надежно удовлетворяет потребности разнообразных клиентов по подключению их филиалов или удалённых пользователей к своим сетям.

Общие сведения об IPSEC

IPSEC, в общем случае, служит для поддержки безопасных соединений между узлами и сетями в глобальной сети Интернет. Он может работать в конфигурации «узел-узел» (один компьютер соединяется с другим) или «сеть-сеть» (одна локальная/глобальная сеть соединяется с другой). Реализация IPsec использует протокол обмена ключами в Интернете (Internet Key Exchange, IKE), разработанный комитетом по техническому развитию Интернета (Internet Engineering Task Force, IETF) для взаимной проверки подлинности и соответствия параметров безопасности между подключающимися системами или сетями.

Процесс соединения IPsec разделяется на два логических этапа. На первом этапе узел IPsec устанавливает подключение к удалённому узлу или сети. Удалённый узел/сеть проверяет учётные данные запрашивающего узла и обе стороны согласуют способ проверки подлинности, применяемый в соединении. Обычно для проверки подлинности узла IPSec используется алгоритм с предварительным общим ключом. В случае с IPsec-соединением с применением предварительного общего ключа, оба узла должны использовать один ключ, и тогда они смогут перейти ко второму этапу установки соединения.

Второй этап соединения IPsec между узлами IPSec создаётся условным сравнением безопасности (security association, SA). При этом в базу данных SA вносится информация о конфигурации — метод шифрования, способы обмена секретными ключами сеанса и некоторые другие параметры. Этот этап и управляет соединением IPsec между узлами и сетями, разнесенными в пространстве глобальной сети.

Рассмотрим реализацию протокола IPSEC на примере дистрибутива CentOS Linux. Для развертывания IPSEC на всех машинах сети (в случае конфигурации «узел-узел») или маршрутизаторах (в случае конфигурации «сеть-сеть») необходимо установить соответствующие пакеты, управляющие конфигурацией IPSEC. В эти пакеты должны входить базовые библиотеки, демоны и файлы конфигурации, помогающие настроить соединение IPsec, в том числе — /lib/libipsec.so — библиотека, содержащая интерфейс управления доверенным ключом PF_KEY между ядром Linux и реализацией IPsec, используемой в CentOS Linux. При этом:

/sbin/setkey — настраивает управление ключами и атрибуты безопасности IPsec в ядре. Эта программа подчиняется демону racoon, управляющему ключами. Дополнительная информация о setkey может быть найдена в man setkey(8).

/sbin/racoon — демон управления ключами IKE, заведует обменом ключами и сопоставлением безопасности между компьютерами, реализующими IPsec. Настроить этот демон можно, отредактировав файл /etc/racoon/racoon.conf. За дополнительными сведениями о racoon, можно обратиться к странице man racoon(8).

/etc/racoon/racoon.conf — файл конфигурации racoon, в котором настраиваются различные параметры соединения IPsec, в том числе методы проверки подлинности и алгоритмы шифрования. Опять же, исчерпывающие данные по этому вопросу могут быть получены при изучении вывода команды man racoon.conf(5).

Настройка IPSEC при конфигурации «узел-узел»

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

Для соединения «узел-узел» потребуются следующие данные:

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

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

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

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

Рассмотрим вариант, когда два хоста устанавливают соединение друг с другом. При этом они будут использовать общий ключ с именем my_key и демон racoon для автоматического создания и обмена ключом проверки подлинности. Имя соединения будет иметь вид ipsec0.

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

DST=X.X.X.X’

TYPE=IPSEC

ONBOOT=yes

IKE_METHOD=PSK

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

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

Для ограничения доступа к файлу keys-ipsec0 можно выполнить команду: 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 ;

}

}

директива remote X.X.X.X:

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

exchange_mode aggressive:

в стандартной конфигурации IPsec в CentOS Linux используется режим проверки подлинности, позволяющий иметь разные IPsec-соединения с множеством узлов;

my_identifier address:

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

encryption_algorithm 3des:

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

hash_algorithm sha1:

указывает алгоритм расчёта хэша, используемый на первом этапе связи;

authentication_method pre_shared_key:

определяет метод проверки подлинности, используемый при согласовании узлов.

Вdh_group 2:

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

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

Описание всех параметров конфигурационных файлов выходит за рамки данной статьи и может быть почерпнуто из соответствующих учебников.

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

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

17:13:20.617872 pinky.example.com > ijin.example.com: \

AH(spi=0x0aaa749f,seq=0x335): ESP(spi=0x0ec0441e,seq=0x335) (DF)

Настройка IPSEC при конфигурации «сеть-сеть»

С помощью IPsec подключаются целые сети к другим сетевым сегментам, организовывая межсетевое взаимодействие. Для этого нужно установить маршрутизаторы IPsec в каждой сети так, чтобы трафик узла одной сети прозрачно обрабатывался и достигал узла другой сети. В таких сетях должны работать маршрутизаторы IPsec, проверяющие подлинность и соединяющие эти сети через безопасный туннель трафиком, проходящим через Интернет или любую другую сеть. Если пакеты будут перехвачены во время передачи, для взлома защищающего их шифра потребуется применение метода перебора, что довольно растянуто по времени и к окончанию процедуры может стать уже не актуальным.

Для настройки межсетевого соединения понадобится следующая информация:

публичные IP-адреса выделенных маршрутизаторов IPsec;

IP-адреса интерфейсов шлюзов, маршрутизирующих трафик узлов сети в Интернет;

уникальное имя соединения IPsec (например, ipsec0);

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

предварительный общий ключ проверки подлинности.

Для примера рассмотрим туннель IPsec между сетью my_net1.com и сетью my_net2.com. Первая сеть имеет адрес 192.168.1.0/24, а вторая — 192.168.2.0/24. IP-адрес шлюза в первой сети — 192.168.1.254, а во второй — 192.168.2.254. Маршрутизаторы IPsec реализованы отдельно от шлюзов и используют два сетевых интерфейса: eth0 имеет статический публичный IP-адрес, обращённый к Интернету, а eth1 принимает и обрабатывает пакеты из локальной сети.

Соединение IPSEC между сетями использует предварительный общий ключ r3dh4tl1nux, Ниже приведёно содержимое файла ifcfg, созданного для межсетевого соединения IPSEC в первой сети. В примере это соединение имеет уникальное имя ipsec1.

/etc/sysconfig/network-scripts/ifcfg-ipsec1:

TYPE=IPSEC

ONBOOT=yes

IKE_METHOD=PSK

SRCGW=192.168.1.254

DSTGW=192.168.2.254

SRCNET=192.168.1.0/24

DSTNET=192.168.2.0/24

DST=X.X.X.X

Соединение устанавливается при загрузке (ONBOOT=yes) и использует метод проверки подлинности с общим ключом (IKE_METHOD=PSK).

Ниже приведено содержимое файла с предварительным общим ключом (названного /etc/sysconfig/network-scripts/keys-ipsecX, где X равен 0 для первой сети и 1 — для второй).

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

Содержимое файла конфигурации /etc/racoon/racoon.conf:

# 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"

Ниже приведена конфигурация конкретного соединения с удалённой сетью. Этот файл называется X.X.X.X.conf (где X.X.X.X IP-адрес удалённого маршрутизатора 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 ;

}

}

До запуска соединения IPSEC маршрутизация IP в ядре должна быть включена. Для этого можно отредактировать файл /etc/sysctl.conf и задать net.ipv4.ip_forward равным 1.

Чтобы изменение вступило в силу нужно выполнить команду: sysctl -p /etc/sysctl.conf.

Установить соединение можно, либо перезагрузкой маршрутизаторов, либо выполнив на маршрутизаторах от имени root следующую команду: /sbin/ifup ipsec0.

Маршруты автоматически создаёт сценарий инициализации, вызываемый командой ifup при активизации соединения IPsec.

Для просмотра списка сетевых маршрутов можно выполнить команду: /sbin/ip route list.

Проверить IPsec-соединение можно запуском утилиты tcpdump, например так: tcpdump -n -i eth0 host my_net1.com.

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

12:24:26.155529 my_net2.com > my_net1.com: AH(spi=0x021c9834,seq=0x358): \

my_net2.com > my_net1.com: ESP(spi=0x00c887ad,seq=0x358) (DF) \

(ipip-proto-4)

Выводы

В статье подробно рассмотрены принципы построения и основы применения VPN, понятие протокола IPSEC, даны общие характеристики и описание IPSEC, а также механизмов его реализации.

Рассмотрена организация методов построения защищенных соединений с помощью протокола IPSEC. Подробно и на реальных примерах описаны такие реализации применительно к двум схемам соединений — «точка-точка» и «сеть-сеть».

Автор: Александр Деревянко, ведущий консультант-эксперт, консультант

Об авторе: В сфере IT работает с 1990 года. Занимал должности от инженера 1 категории до начальника отдела IT. В настоящий момент работает ведущим консультантом-экспертом отдела инженерного и технического сопровождения Администрации Краснодарского края.