2005-02-18
История переиздания | ||
---|---|---|
Издание 1.0 | 2005-02-18 | VS |
Initial version |
В данном mini-howto будут описаны операции, которые позволят создать шифрованный туннель между и При создании туннеля использовались протоколы и механизмы: , , .
При работе мы можем запустить ping как из внутренней машины в сети PIX, так и из внутренней машины в сети Solaris. Роутинг на маршрутизаторах между PIX и Solaris должен быть настроен таким образом, чтобы внешний адрес PIX был доступен из Solaris и наоборот. Отмечу также, что на месте Pix может быть маршрутизатор cisco, обычный маршрутизатор на базе BSD, linux с поддержкой isakmp и туннельного режима ipsec (тестировалась работа с BSD+racoon). Так что эта небольшая заметка может быть некоторым дополнением к .
Во-первых, отмечу замечательное руководство, которое определило многие пункты при настройке Cisco PIX: .
Настраиваем общие параметры машины:
ip address outside 192.168.242.2 255.255.255.0 ip address inside 192.168.241.1 route outside 0.0.0.0 0.0.0.0 192.168.242.1 sysopt connection permit-ipsec
Настраиваем ipsec:
!--- ACL, необходим для инициации ipsec access-list 101 permit ip 192.168.241.0 255.255.255.0 192.168.240.0 255.255.255.0 !--- Как показала практика без следующего ACL solaris не воспринимает SA access-list 101 permit ip host 192.168.242.2 host 192.168.90.18 !--- Параметры ipsec SA crypto ipsec transform-set chevelle esp-des esp-md5-hmac !--- Настройка SA ipsec crypto map transam 1 ipsec-isakmp crypto map transam 1 match address 101 crypto map transam 1 set peer 192.168.90.18 crypto map transam 1 set transform-set chevelle crypto map transam interface outside !--- Отключаем NAT для ipsec пакетов - они ходят через туннель nat (inside) 0 access-list 101
Настраиваем isakmp, устанавливая preshared ключ `blah':
isakmp enable outside isakmp policy 1 authentication pre-share isakmp policy 1 encryption des isakmp policy 1 hash md5 isakmp policy 1 group 1 isakmp policy 1 lifetime 1000 !--- Несмотря на все, PIX _НЕ_ использует адрес, в качестве ID payload !--- по непонятной причине оно использует hostname, что совершенно !--- неприемлимо ни для solaris in.iked, ни для racoon. !--- Следующая строка лечит это врожденное уродство pix'a isakmp identity address
На этом настройку PIX можно считать завершенной. Хочу лишь отметить, что PIX наряду с DES поддерживает 3DES, а наряду с MD5 - SHA1.
Все сказанное относится к Solaris 9 и старше
Настройка solaris, в принципе, не так сложна, но не лишена некоторых тонкостей. Первой является формат preshared ключей: в pix и racoon это просто строка, в solaris - это hex представление данной строки. Для того, чтобы преобразоватьс строку в preshared key solaris необходимо выполнить команду:
echo "key" | od -x
При этом важно учесть порядок байт. На sparc можно просто писать получившийся результат в preshared key, но на x86 необходимо в каждом слове поменять порядок байт, допустим:
% echo "blah" | od -x 0000000 6c62 6861 000a
нужно представить в виде "626c6168". Более простого способа мне, увы, неизвестно. Второй тонкостью является фиктивный ip туннель, но о нем позже (за эту идею отдельное спасибо Максиму и Славе Ольховченко), но об этом чуть позже.
Итак, перейдем к настройке ipsec в solaris. Во-первых, стоит убедиться, что роутинг между solaris и pix настроен верно. После чего необходимо создать файл конфигурации ipsec. По умолчанию он находится в /etc/inet/ipsecinit.conf и при этом автоматически загружается при старте. Я категорически не советую трогать этот файл - его кривая настройка может повлечь недоступность машины даже после перезагрузки. А посему стоит создать файлик с настройками ipsec где-то в другом месте. Я предпочитаю /etc/inet/ipsec.conf. Для нашей схемы этот файлик должен содержать следующее:
# Аналогично PIX правило, описывающее шифрацию трафика внутри туннеля {saddr 192.168.90.18 daddr 192.168.242.2} ipsec {encr_algs des encr_auth_algs md5} # Для инициациации шифрования пакетов, приходящих из внутренней сети {saddr 192.168.240.0/24 daddr 192.168.241.0/24} ipsec {encr_algs des encr_auth_algs md5}
Добавляем туннель:
# ifconfig ip.tun0 plumb # ifconfig ip.tun0 10.0.0.1 10.0.0.2 \ tsrc 192.168.90.18 tdst 192.168.242.2 encr_algs DES encr_auth_algs MD5 # ifconfig ip.tun0 up
Отмечу, что адреса 10.0.0.1 и 10.0.0.2 являются чисто fake, как и сам туннель, однако без него solaris работает в транспортном режиме ipsec, а PIX продолжает работать в туннельном, что приводит к полной неразберихе. Не стоит забывать и о включении ip forwarding'а:
# ndd -set /dev/ip hme1:ip_forwarding 1 # ndd -set /dev/ip ip.tun0:ip_forwarding 1
А также о настройке роутинга внутренней сети через туннель:
# route add 192.168.241.0 10.0.0.2
После чего можно перейти к настройке isakmp. Этот этап не отличается особой сложностью, потому особо комментировать его не буду. Для настройки preshared keys isakmp нас будут интересовать файлы /etc/inet/ike/config и /etc/inet/secret/ike.preshared. Первый из них содержит конфигурацию iked, а второй - собственно preshared ключи.
### ike/config file on v60, 192.168.90.18 # ## Параметры по умолчанию для фазы 1 isakmp p1_lifetime_secs 1000 p1_nonce_len 40 # ## Параметры по умолчанию p1_xform { auth_method preshared oakley_group 5 auth_alg sha encr_alg des } p2_pfs 2 # ## Правило для работы с PIX, label должен быть уникальным { label "v60-pix" local_addr 192.168.90.18 remote_addr 192.168.242.2 p1_xform { auth_method preshared oakley_group 1 auth_alg md5 encr_alg des } p2_pfs 2 }
Файл /etc/inet/secret/ike.preshared должен содержать, в свою очередь следующее:
# ike.preshared on v60, 192.168.90.18 # { localidtype IP localid 192.168.90.18 remoteidtype IP remoteid 192.168.242.2 # partym and enigma's shared key in hex ('blah') key 626c6168 }
На pix записываем конфигурацию:
write mem
На solaris устанавливаем правила ipsec и запускаем iked:
# ipsecconf -f # ipsecconf -a /etc/inet/ipsec.conf # /usr/lib/inet/in.iked -d
После чего запускаем ping из одной внутренней машинки другой. Далее наблюдаем при помощи snoop картинку на внешнем интерфейсе solaris. После пробегания udp пакетов isakmp должны бегать esp пакеты. Если все было сделано без ошибок, то проблем возникнуть не должно.