Тестовый стенд: Solaris 11.1, Debian Linux 6 (kernel 3.2), ipsec transport mode with preshared keys
Настройка IPSec состоит из 2-х частей: настройка IPSec’a и непосредственно настройка обмена ключами (ike).
Имеем самую обычную схему Solaris (10.5.5.219) <—> (10.5.5.78) Linux
В данной статье подразумевается настройка полностью с нуля.
Solaris
1) Настройка IPSec’a.
Приводим содержимое файла /etc/inet/ipsecinit.conf к такому виду:
{laddr 10.5.5.219 raddr 10.5.5.220} ipsec {encr_algs 3des encr_auth_algs md5 sa shared}
Здесь мы указываем для каких хостов будет действовать правило, а так же указываем соответственно какие алгоритмы шифрования использовать при собственно шифровании и аутентификации.
После этого проверяем конфиг на ошибки:
# ipsecconf -f -c /etc/inet/ipsecinit.conf
IPsec configuration does not contain any errors.
IPsec policy was not modified.
и только после этого (если есть ошибки — исправляем) перечитываем конфиг черезsvcadm (и если не запущен — запустим его):
# svcadm refresh svc:/network/ipsec/policy:default
# svcadm enable svc:/network/ipsec/policy:default
Налету политики можно добавить так:
# ipsecconf -a /etc/inet/ipsecinit.conf
Текущие политики можно посмотреть так:
# ipsecconf
#INDEX 154
{laddr 10.5.5.219 raddr 10.5.5.220} ipsec {encr_algs 3des encr_auth_algs md5 sa shared}
2) Настройка ike
Приводим содержимое файла /etc/inet/ike/config к такому виду:
p1_lifetime_secs 14400
p1_nonce_len 40
p1_xform
{ auth_method preshared oakley_group 5 auth_alg sha encr_alg des }
p2_pfs 5
{ label "10.5.5.219-10.5.5.220"
local_addr 10.5.5.219
remote_addr 10.5.5.220
p1_xform
{ auth_method preshared oakley_group 2 auth_alg md5 encr_alg 3des }
p2_pfs 5
}
Проверяем синтаксис:
# /usr/lib/inet/in.iked -c -f /etc/inet/ike/config
in.iked: Configuration file /etc/inet/ike/config syntactically checks out.
Теперь переходим у указанию ключевой фразы — preshared key. Приводим файл/etc/inet/security/ike.preshared к такому виду:
{
localidtype IP
localid 10.5.5.219
remoteidtype IP
remoteid 10.5.5.220
key "Very-Very-Secret-Key-1234567890"
}
Ключ у нас в НЕ зашифрованном виде.
Теперь перечитываем конфиг ike и запускаем его:
# svcadm refresh svc:/network/ipsec/ike:default
# svcadm enable svc:/network/ipsec/ike:default
Linux
Ставим racoon:
# apt-get install racoon
После установки будет задан вопрос о том, что использовать: direct или ipsec-tools:
Configuration mode for racoon IKE daemon.
Выбираем direct
После это можно переопределить, выполнив команду:
# dpkg-reconfigure racoon
После установки приводим файл /etc/ipsec-tools.conf к такому виду (это исполняемый скрипт)
#!/usr/sbin/setkey -f
flush;
spdflush;
spdadd 10.5.5.78 10.5.5.219 any -P out ipsec esp/transport//require;
spdadd 10.5.5.219 10.5.5.78 any -P in ipsec esp/transport//require;
Вписываем парольную фразу в файл /etc/racoon/pks.txt:
10.5.5.219 Very-Very-Secret-Key-1234567890
Обязательно ставим права на файл psk.txt 0600 и владельца root. Без этого соединение не установиться, а racoon будет ругаться.
Приводим главный файл /etc/raccon.conf к такому виду:
path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
log debug;
remote 10.5.5.219 {
exchange_mode main;
proposal {
encryption_algorithm 3des;
hash_algorithm md5;
authentication_method pre_shared_key;
dh_group 2;
lifetime time 8 hour;
}
}
sainfo anonymous{
pfs_group 5;
lifetime time 8 hour;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
compression_algorithm deflate;
}
Почему-то у меня не стартовал racoon через стартовые скрипты, поэтому пришлось добавлять в /etc/rc.local такие строки.
/etc/init.d/setkey start
/etc/init.d/racoon start
После успешного поднятия IPSec’a посмотрим статистику обмена:
# setkey -D
10.5.5.78 10.5.5.219
esp mode=transport spi=2870989852(0xab1fd41c) reqid=0(0x00000000)
E: 3des-cbc 1d51101d 703954e3 855f6877 8bb5f44d 6d163841 fdc9c119
A: hmac-md5 dc2d1faf 4f190125 c641e65c c6a25a4c
seq=0x00000000 replay=4 flags=0x00000000 state=mature
created: Dec 16 07:05:38 2013 current: Dec 16 07:08:04 2013
diff: 146(s) hard: 28800(s) soft: 23040(s)
last: Dec 16 07:05:39 2013 hard: 0(s) soft: 0(s)
current: 9280(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 145 hard: 0 soft: 0
sadb_seq=1 pid=2131 refcnt=0
10.5.5.219 10.5.5.78
esp mode=transport spi=21730685(0x014b957d) reqid=0(0x00000000)
E: 3des-cbc aa59d451 4e11c9f1 e68952aa 6082fd81 ce0701ab a4b56784
A: hmac-md5 58e2404d 3fdfbda7 f87b52ae b37a48f0
seq=0x00000000 replay=4 flags=0x00000000 state=mature
created: Dec 16 07:05:38 2013 current: Dec 16 07:08:04 2013
diff: 146(s) hard: 28800(s) soft: 23040(s)
last: Dec 16 07:05:39 2013 hard: 0(s) soft: 0(s)
current: 9280(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 145 hard: 0 soft: 0
sadb_seq=0 pid=2131 refcnt=0
И традиционно проверить через snoop, что всё шифруется:
snoop -d net0 host 10.5.5.78 10.5.5.219 -> 10.5.5.78 ESP SPI=0x14b957d Replay=157 10.5.5.78 -> 10.5.5.219 ESP SPI=0xab1fd41c Replay=156 10.5.5.219 -> 10.5.5.78 ESP SPI=0x14b957d Replay=158 10.5.5.78 -> 10.5.5.219 ESP SPI=0xab1fd41c Replay=157