Организация ipsec туннеля между solaris 9 и Cisco PIX

Vsevolod Stakhov



2005-02-18

История переиздания
Издание 1.02005-02-18VS
Initial version

Содержание

1. Вступление
2. Схема стенда
3. Настройка PIX
4. Настройка Solaris
5. Запуск стенда

Глава 1. Вступление

В данном mini-howto будут описаны операции, которые позволят создать шифрованный туннель между и При создании туннеля использовались протоколы и механизмы: , , .

Глава 2. Схема стенда

При работе мы можем запустить ping как из внутренней машины в сети PIX, так и из внутренней машины в сети Solaris. Роутинг на маршрутизаторах между PIX и Solaris должен быть настроен таким образом, чтобы внешний адрес PIX был доступен из Solaris и наоборот. Отмечу также, что на месте Pix может быть маршрутизатор cisco, обычный маршрутизатор на базе BSD, linux с поддержкой isakmp и туннельного режима ipsec (тестировалась работа с BSD+racoon). Так что эта небольшая заметка может быть некоторым дополнением к .

Глава 3. Настройка PIX

Во-первых, отмечу замечательное руководство, которое определило многие пункты при настройке 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.

Глава 4. Настройка Solaris

Замечание

Все сказанное относится к 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
	}
			

Глава 5. Запуск стенда

На 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 пакеты. Если все было сделано без ошибок, то проблем возникнуть не должно.