6.12. Конфигурация IPsec «сеть-сеть»

С помощью IPsec также можно подключить целую сеть (глобальную или локальную) к другой сети, организовав межсетевое соединение. Для организации межсетевого соединения нужно установить маршрутизаторы IPsec в каждой сети так, чтобы трафик узла одной сети обрабатывался и достигал узла в удалённой сети. На рисунке 6-2 показан туннель IPsec, соединяющий сети между собой.

Рисунок 6-2. Туннель IPsec в конфигурации "сеть-сеть"

На рисунке показаны две отдельные сети, разделенные Интернетом. В этих сетях работают маршрутизаторы IPsec, проверяющие подлинность и организующие соединение через безопасный туннель, проходящий через Интернет. Если пакеты будут перехвачены во время передачи, для взлома защищающего их шифра потребуется применение метода грубой силы. Процесс соединения узлов из IP-сети 192.168.1.0/24 с узлами в сети 192.168.2.0/24 для них полностью прозрачен, так как задача по обработке, шифрованию, дешифрованию и маршрутизации пакетов целиком лежит на маршрутизаторах IPsec.

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

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

Соединение IPsec между сетями использует предварительный общий ключ r3dh4tl1nux, кроме этого администраторы сетей A и B договорились использовать racoon для автоматического создания и обмена ключом проверки подлинности между маршрутизаторами IPsec. Администратор сети A назвал IPSEC-соединение ipsec0, а администратор сети B — ipsec1.

Ниже приведён файл ifcfg, созданный для межсетевого соединения IPsec в сети A. В данном примере это соединение имеет уникальное имя 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). Администратор сети A указывает шлюз получателя, то есть шлюз сети B (DSTGW=192.168.2.254), а также шлюз источника — шлюз сети A (SRCGW=192.168.1.254). Затем администратор определяет сеть получателя — сеть B (DSTNET=192.168.2.0/24), и сеть источника — (SRCNET=192.168.1.0/24). И, наконец, администратор вводит IP-адрес получателя — доступный снаружи IP-адрес сети B (X.X.X.X).

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

IKE_PSK=r3dh4tl1nux

ВажноВажно
 

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

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

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

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

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

До запуска соединения IPsec следует включить маршрутизацию IP в ядре. Для этого в приглашении оболочки выполните под именем root следующее:

  1. Отредактируйте /etc/sysctl.conf и задайте net.ipv4.ip_forward равным 1.

  2. Чтобы изменение вступило в силу, выполните команду:

    sysctl -p /etc/sysctl.conf

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

/sbin/ifup ipsec0

Как только соединение будет установлено, сети A и B смогут связываться друг с другом. Маршруты автоматически создаёт сценарий инициализации, вызываемый командой ifup при активизации соединения IPsec. Чтобы просмотреть список сетевых маршрутов, выполните команду:

/sbin/ip route list

Чтобы проверить IPsec-соединение, запустите утилиту tcpdump и, проанализировав сетевые пакеты, передаваемые между узлами (или сетями) на внешнем интерфейсе (в нашем примере — eth0), убедитесь в том, что они зашифрованы IPsec. Например, чтобы проверить IPsec-соединение с сетью A, введите следующее:

tcpdump -n -i eth0 host lana.example.com

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

12:24:26.155529 lanb.example.com > lana.example.com: AH(spi=0x021c9834,seq=0x358): \
	  lanb.example.com > lana.example.com: ESP(spi=0x00c887ad,seq=0x358) (DF) \
	  (ipip-proto-4)