Создание IPSEC VPN туннеля на основе pre-shared keys между
linux 2.6 ipsec-tools(racoon) и cisco PIX firewall 5xx
Комментарии и дополнения к статье просьба присылать на
mailto: 'Anatoly Pugachev <mator/at/mail.ru>'
date: 21.09.2005
document version: 0.1
Введение:
Термин VPN (Virtual Private Network) переводится как "виртуальная частная сеть".
Этот сервис предоставляющий безопасную (защищенную шифрованием), надежную связь
на основе уже существующего подключения к общей сети internet, например тем кому
необходимо соединить удаленную локальную сеть или удаленный офис в единую сеть с
обеспечением безопастности передаваемых данных.
В моем примере будет создаваться защищенный IPSEC канал между двумя
сетевыми устройствами, первое это Cisco PIX firewall - аппаратный фаервол от известного
производителя и второе компьютер, работающий в качестве шлюза под управлением OS Linux.
IPSEC стандарт разработанный и принятый к реализации, для повышения безопастности
используемого IP протокола (см. http://www.rfc-editor.org/ RFC 2401 - IPSec)
Ниже приводится небольшая схема поясняющая устанавливаемое соединение.
Используемые ссылки:
1) http://groups.google.com/group/mailing.freebsd.net/browse_thread/thread/db94f9e5cb120c12/449dadd33fc50cdd
2) http://www.dlink.ru/technical/faq_vpn_22.php
3) http://www.bshell.com/projects/freebsd_pix/static.html
4) cisco.com : PIX Firewall and VPN Configuration Guide Version 6.3 и PIX Firewall Command Reference 6.3
5) http://ipsec-tools.sf.net/
Схема соединения :
( office_1 )--[ pix ] ~~ internet ~~ [ linux ]--( office_2 )
сети и интерфейсы :
сеть office_1 - 10.0.0.0/24
сеть office_2 - 192.168.0.0/24
! общая настройка, у вас она уже по всей видимости выполнена
! и необходимости тут настраивать что-либо еще нет.
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 закончена. Для обьяснения большинства параметров
указанных выше, смотрите документацию 4) 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.
далее пересобираете ядро и перезагружаетесь в него.
Для установления соединения были использованы 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