headermask image

Создание IPSEC VPN туннеля между Linux и Cisco PIX

Создание IPSEC VPN туннеля на основе pre-shared keys между linux 2.6 ipsec-tools(racoon) и cisco PIX firewall 5xx

Введение:

Термин VPN (Virtual Private Network) переводится как “виртуальная частная сеть”.

Этот сервис предоставляющий безопасную (защищенную шифрованием), надежную связь на основе уже существующего подключения к общей сети internet, например тем кому необходимо соединить удаленную локальную сеть или удаленный офис в единую сеть с обеспечением безопастности передаваемых данных.

В моем примере будет создаваться защищенный IPSEC канал между двумя сетевыми устройствами, первое это Cisco PIX firewall – аппаратный фаервол от известного производителя и второе компьютер, работающий в качестве шлюза под управлением OS Linux. IPSEC стандарт разработанный и принятый к реализации, для повышения безопастности
используемого IP протокола (см. http://www.rfc-editor.org/ RFC 2401 – IPSec) Ниже приводится небольшая схема поясняющая устанавливаемое соединение.

Схема соединения :

( office_1 )--[ pix ] ~~ internet ~~ [ linux ]--( office_2 )

сети и интерфейсы :

сеть office_1 – 10.0.0.0/24
сеть office_2 – 192.168.0.0/24

pix_int – 10.0.0.1/24 (внутренний интерфейс, office_1)
pix_ext – 172.16.1.1 (внешний интерфейс)

linux_ext – 172.16.2.1 (внешний интерфейс)
linux_int – 192.168.0.1/24 (внутренний интерфейс, office_2)

Настраиваем pix (у меня был 506E):

! общая настройка, у вас она уже по всей видимости выполнена
! и необходимости тут настраивать что-либо еще нет.
interface ethernet0 auto
interface ethernet1 auto
nameif ethernet0 outside security0
nameif ethernet1 inside security100
mtu outside 1500
mtu inside 1500
ip address outside 172.16.1.1 255.255.255.0
ip address inside 10.0.0.1 255.255.255.0
route outside 0.0.0.0 0.0.0.0 172.16.1.254 1

! настройка ipsec_acl для разрешения доступа сетям
access-list ipsec_acl permit ip 10.0.0.1 255.255.255.0 192.168.0.0 255.255.255.0
access-list ipsec_acl permit ip 192.168.0.0 255.255.255.0 10.0.0.0 255.255.255.0

! исключение ipsec_acl из NAT
nat (inside) 0 access-list ipsec_acl

! The "sysopt connection permit-ipsec" command enables packets that have
! been processed by IPSec to bypass access list checks.
sysopt connection permit-ipsec

! определение политики IPSec
! определение протоколов для шифрации трафика
crypto ipsec transform-set myset1 esp-3des esp-sha-hmac
! определение номера последовательности и имени IPSec ISAKMP
crypto map toOFFICE2 20 ipsec-isakmp
! определение perfect forward secrecy (PFS) группы 2 (1024-bit Diffie-Hellman)
crypto map toOFFICE2 20 set pfs group2
! Трафик определенный нашим ACL который будет шифроватся через туннель
crypto map toOFFICE2 20 match address ipsec_acl
! кто будет принимать наше VPN соединение и терминировать его
crypto map toOFFICE2 20 set peer 172.16.2.1
! устанавливаем нашу схему шифрования трафика
crypto map toOFFICE2 20 set transform-set myset1
! данный туннель устанавливается на outside интерфейсе
crypto map toOFFICE2 interface outside

! задание параметров и политики IKE
! IKE будет работать на внешнем интерфейсе
isakmp enable outside
! secretkeyx - pre-shared key для шифрования с нашим удаленным peer'ом
isakmp key secretkeyx address 172.16.2.1 netmask 255.255.255.255
! использовать свой адрес для IKE идентификации с удаленным хостом
isakmp identity address
! метод аутентификации, по исвестному ключу
isakmp policy 9 authentication pre-share
! шифрование 3des
isakmp policy 9 encryption 3des
! hash алгоритм sha
isakmp policy 9 hash sha
! использование Diffie-Hellman группы 2
isakmp policy 9 group 2
! время жизни SA (security association) в секундах, 86400 = 24 часа
isakmp policy 9 lifetime 86400
! keepalive для соединения, 120 seconds = 2 минуты
isakmp keepalive 120

На этом настройка cisco PIX закончена. Для обьяснения большинства параметров указанных выше, смотрите документацию на cisco.com

Настройка Linux, на примере SLES-9 :

Использовалось стандартное ядро, постовляемое с SLES-9:

srv1:/etc/racoon # uname -a
Linux srv1 2.6.5-7.97-bigsmp #1 SMP Fri Jul 2 14:21:59 UTC 2004 i686 i686 i386 GNU/Linux
srv1:/etc/racoon # rpm -qf /boot/vmlinuz-2.6.5-7.97-bigsmp
kernel-bigsmp-2.6.5-7.97

Опции ядра linux для пересборки, если у вас ядро не поддерживает IPSEC,
необходимые для поддержки IPSEC.

-> Networking
-> Networking support (NET [=y])
-> Networking options
-> TCP/IP networking

CONFIG_INET_AH=m (IP: AH transformation)
CONFIG_INET_ESP=m (IP: ESP transformation)
CONFIG_INET_IPCOMP=m (IP: IPComp transformation)
CONFIG_INET_TUNNEL=m (IP: tunnel transformation)

-> Cryptographic options
-> Cryptographic API

включить все пункты модулями

CONFIG_CRYPTO=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_SHA1=m
CONFIG_CRYPTO_SHA256=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_DES=y
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_TWOFISH=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_AES=m
CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_TEST=m

далее пересобираете ядро и перезагружаетесь в него.

Для установления соединения были использованы ipsec-tools-0.3.3-1.3 идущие в поставке SLES.

На момент написания статьи на сайте http://ipsec-tools.sf.net/ была доступна версия IPsec-tools 0.6.1

Настройка конфигурационных файлов /etc/racoon/ :

в файл psk.txt вы записываете ваши секретные ключи для нашего примера в данный файл необходимо добавить следующую запись:

172.16.1.1 secretkeyx

в файле setkey.conf определяются SA/SP базы (man setkey)

Содержимое:

flush;
spdflush;

# важно!
# не перепутайте направление трафика (IP адреса сетей и маршрутизаторов)
# для исходящего трафика
spdadd 192.168.0.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.2.1-172.16.1.1/require;
# для входящего трафика
spdadd 10.0.0.0/24 192.168.0.0/24 any -P in ipsec esp/tunnel/172.16.1.1-172.16.2.1/require;

конфигурационный файл для racoon - racoon.conf :

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/cert";
log notify;
padding
{
maximum_length 20; # maximum padding length.
randomize off; # enable randomize length.
strict_check off; # enable strict check.
exclusive_tail off; # extract last one octet.
}
listen
{
isakmp 172.16.2.1 [500];
}
timer
{
# These value can be changed per remote node.
counter 5; # maximum trying count to send.
interval 20 sec; # maximum interval to resend.
persend 1; # the number of packets per a send.

# timer for waiting to complete each phase.
phase1 30 sec;
phase2 15 sec;
}

## IKE phase 1
remote 172.16.1.1
{
exchange_mode main,aggressive;
doi ipsec_doi;
situation identity_only;

my_identifier address 172.16.2.1;

nonce_size 16;
lifetime time 24 hour;
initial_contact on;
proposal_check obey; # obey, strict or claim

proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key ;
dh_group 2 ;
}
}

## IKE phase 2
sainfo address 192.168.0.0/24 any address 10.0.0.0/24 any {
pfs_group 2; # pfs_group modp768;
encryption_algorithm 3des;
authentication_algorithm hmac_sha1;
compression_algorithm deflate;
}

Далее запускаем racoon через /etc/rc.d/init.d/racoon start или руками

# racoon -f /etc/racoon/racoon.conf

и при наличии трафика в тунеле, в логах вы увидите что-то похожее на :

Sep 21 22:07:16 sles9 racoon: INFO: respond new phase 1 negotiation: 172.16.2.1[500]<=>172.16.1.1[500]
Sep 21 22:07:16 sles9 racoon: INFO: begin Identity Protection mode.
Sep 21 22:07:16 sles9 racoon: INFO: ISAKMP-SA established 172.16.2.1[500]-172.16.1.1[500] spi:93b2202c65692650:247ac3da3bb61f85
Sep 21 22:07:16 sles9 racoon: INFO: respond new phase 2 negotiation: 172.16.2.1[0]<=>172.16.1.1[0]
Sep 21 22:07:16 sles9 racoon: INFO: IPsec-SA established: ESP/Tunnel 172.16.1.1->172.16.2.1 spi=182739187(0xae460f3)
Sep 21 22:07:16 sles9 racoon: INFO: IPsec-SA established: ESP/Tunnel 172.16.2.1->172.16.1.1 spi=14128346(0xd794da)

для проверки, на linux сервере можете подать команду :

$ ping -I 192.168.0.1 10.0.0.xx

где xx IP из офисной сети 1, любой адрес (внутренний интерфейс pix’a пинговатся не будет)

Решение проблем:

просмотр текущего состояния тунеля на PIX’e осуществляется двумя командами:

show isakmp sa
show crypto sa

При перезапуске или даже останоке racoon у вас возможно все-еще будет работать IPSEC VPN туннель так как используется реализация на уровне Linux ядра.

Для того чтобы перезапустить туннель на стороне PIX’a, необходимо выполнить 2 команды в _режиме конфигурации_ (conf t):

clear isakmp sa
clear crypto sa

Как только появится трафик совпадающий по ipsec acl или при его наличии,
туннель должен поднятся.

Автор:Anatoly Pugachev

О разном

В связи с кризисом, а также с тем, что цены на недвижимость в Москве в частности, да и в России в целом рекомендую взглянуть на рынок недвижимости германии, где за гораздо меньшие деньги можно найти превосходные варианты.

Отличный блог о ремонте, продвинутые способы ремонта квартиры. Для тех кто любит делать все своими руками это просто замечательный ресурс.