IPSec это набор протоколов для защиты данных, позволяющий осуществить подтверждение подлинности и шифрование передаваемых по сети данных. В основном применяется для организации VPN-соединение. Пример такого использования рассмотрен далее.
Допустим что есть задача со следующими исходными данными: сервер под управлением Ubuntu 16.04 с IP-адресом 1.1.1.1, имеющий доступ к сети 10.234.0.0/24 и второй сервер под управлением FreeBSD 11.1, с IP-адресом 2.2.2.2, который должен иметь возможность обращаться к хостам из сети 10.234.0.0/24, расположенной за первым сервером. Трафик между первым и вторым серверами должен быть зашифрован.
Хорошим и относительно простым решением здесь будет организация IPSec-туннеля между серверами. Именно это решение и будет подробно описано ниже.
Сразу договоримся что внутри IPSec-туннеля сервер с Ubuntu будет иметь IP-адрес 172.16.0.1, а сервер с FreeBSD - 172.17.0.1. Так же заранее надо сгененировать ключевую фразу для шифрования. Например с помощью команды:
pwgen 24 1
Допустим что была сгенерирована строка: tei0Iiw6dae1shix9IZothuD. Её мы будем использовать дальше. При повторении конфигурации её надо заменять на свою.
Начнём с машины под управлением Ubuntu. Для начала установим необходимые пакеты:
apt-get install ipsec-tools racoon
Следующим шагом приведём файл «/etc/racoon/psk.txt» к виду:
# Каждая строка этого файла имеет вид: # Адрес удалённой машины и секретная фраза, разделённые пробелами 2.2.2.2 tei0Iiw6dae1shix9IZothuD
Затем нужно отредактировать файл «/etc/ipsec-tools.conf». В итоге он должен принять вид:
flush; spdflush; spdadd 2.2.2.2/32 1.1.1.1/32 ipencap -P in ipsec esp/tunnel/2.2.2.2-1.1.1.1/require; spdadd 1.1.1.1/32 2.2.2.2/32 ipencap -P out ipsec esp/tunnel/1.1.1.1-2.2.2.2/require;
После чего надо привести файл «/etc/racoon/racoon.conf» к виду:
log notify; path pre_shared_key "/etc/racoon/psk.txt"; path certificate "/etc/racoon/certs"; listen { isakmp 1.1.1.1 [500]; isakmp_natt 1.1.1.1 [4500]; strict_address; } remote 2.2.2.2 { my_identifier address; peers_identifier address; exchange_mode main; initial_contact on; doi ipsec_doi; proposal_check claim; lifetime time 24 hour; generate_policy off; nat_traversal on; passive off; dpd_delay 5; proposal { encryption_algorithm aes 256; hash_algorithm sha1; authentication_method pre_shared_key; dh_group 5; } } sainfo anonymous { encryption_algorithm aes 256; authentication_algorithm hmac_sha1; compression_algorithm deflate; lifetime time 24 hour; }
Остаётся только описать сетевой интерфейс в файле «/etc/network/interfaces»:
auto tun_ipsec iface tun_ipsec inet static address 172.16.0.1 netmask 255.255.255.255 pointopoint 172.17.0.1 pre-up ip tunnel add tun_ipsec mode ipip remote 2.2.2.2 local 1.1.1.1 post-down ip tunnel del tun_ipsec
И можно запускать сервисы и поднимать сетевой интерфейс:
service setkey restart service racoon restart ifup tun_ipsec
Переходим к настройке машины под управлением FreeBSD. Устанавливаем необходимые пакеты:
pkg install racoon
Файлы конфигурации во многом похожи, отличаются только своим расположением ну и адреса локальной/удалённой стороны поменяны местами. Начнём с файла «/usr/local/etc/racoon/psk.txt»:
# Каждая строка этого файла имеет вид: # Адрес удалённой машины и секретная фраза, разделённые пробелами 1.1.1.1 tei0Iiw6dae1shix9IZothuD
Далее у нас на очереди файл «/usr/local/etc/racoon/racoon.conf»:
path pre_shared_key "/usr/local/etc/racoon/psk.txt"; listen { isakmp 2.2.2.2 [500]; isakmp_natt 2.2.2.2 [4500]; strict_address; } remote 1.1.1.1 { my_identifier address; peers_identifier address; exchange_mode main; initial_contact on; doi ipsec_doi; proposal_check claim; lifetime time 24 hour; generate_policy off; nat_traversal on; passive off; dpd_delay 5; proposal { encryption_algorithm aes 256; hash_algorithm sha1; authentication_method pre_shared_key; dh_group 5; } } sainfo anonymous { encryption_algorithm aes 256; authentication_algorithm hmac_sha1; compression_algorithm deflate; lifetime time 24 hour; }
Затем приводим файл «/etc/ipsec.conf» к виду:
flush; spdflush; spdadd 2.2.2.2/32 1.1.1.1/32 ipencap -P out ipsec esp/tunnel/2.2.2.2-1.1.1.1/require; spdadd 1.1.1.1/32 2.2.2.2/32 ipencap -P in ipsec esp/tunnel/1.1.1.1-2.2.2.2/require;
Наконец добавляем в «/etc/rc.conf» строки:
ipsec_enable="YES" ipsec_file="/etc/ipsec.conf" racoon_enable="YES" cloned_interfaces="gif0" ifconfig_gif0="inet 172.17.0.1 172.16.0.1 tunnel 2.2.2.2 1.1.1.1" static_routes="ipsec0:gif0" route_ipsec0="-net 10.234.0.0/24 172.16.0.1"
И последним шагом запускаем сервисы и поднимаем интерфейс:
/etc/rc.d/setkey start /usr/local/etc/rc.d/racoon start /etc/rc.d/netif start gif0
Для проверки работоспособности туннеля достаточно выполнить «пропинговать» противоположные концы туннеля.
Настройку пакетных фильтров на обеих машинах оставим читателю в качестве домашнего задания. На этом всё. Приятной работы!