The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Шифрованный канал между тонким сервером Favourite IS (FreeBSD) и Cisco (freebsd cisco ipsec tunnel crypt)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: freebsd, cisco, ipsec, tunnel, crypt,  (найти похожие документы)
From: ЗАО "Ниеншанц <dmn[at]nnz[dot]ru> Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC) Newsgroups: http://www.nnz.ru/ Subject: Шифрованный канал между тонким сервером Favourite IS (FreeBSD) и Cisco Оригинал: http://is.nnz.ru/html/recipe/is-cisco.html Построение шифрованного канала между тонким сервером Favourite IS (FreeBSD) и маршрутизатором CISCO Вступление ---------- Шифрованный виртуальный канал строится на основе IPSec -протокола с целью обеспечить безопасную передачу данных по общедоступной (незащищенной) сети. Более подробно про IPSec можно почитать на http://www.securityfocus.com/infocus/1616 . Защита данных обеспечивается между двумя узлами сети. Зачастую она необходима для обмена информации между офисами одной компании . С подобной проблемой нам пришлось не раз столкнуться, и теперь хотим поделиться собственным опытом. Принцип работы шифрованного канала ---------------------------------- 1) Аутентификация хостов (подтверждение, что это действительно те хосты, которые надо, а не подставные) на основе preshared key - ключа, который заранее был прописан в конфигурации этих хостов. 2) Формирование на каждом хосте пары ключей (открытый-закрытый), обмен открытыми ключами. 3) Шифрация исходящего траффика - открытым ключом удалённого хоста, и дешифрация - своим закрытым ключом (технология шифрации данных на основе открытых ключей (RSA)), шифрование осуществляется 56-битным ключом по методу encryption_algorithm des. Принцип аутентификации и обмена открытыми ключами, которыми будет шифроваться траффик: 1.C1 посылает С2 сообщение, содержащее открытый ключ С1 и набор алгоритмов шифрования. 2.С2 посылает сообщение, которое содержит открытый ключ С2 вместе с выбранным алгоритмом и подтверждением идентификации. 3.С1 посылает третье сообщение с подтверждением идентификации. Затем все новые сообщения между С1 и С2 шифруются по установленному алгоритму. Задача ------ Перед нами стоит задача построить шифрованный канал между сервером Favourite IS (ОС FreeBSD) и маршрутизатором Cisco. Для этого настраивается поддержка протокола IPSec. Задаются правила, по которым исходящие пакеты шифровать, а входящие - дешифровать. Затем устанавливается сервер обмена ключами raacoon. Решение ------- Шаг 1. ------ На FreeBSD (Favourite IS) делаем нижеследующие действия: 1.Добавляем (если нет) поддержку gif в ядро. На версиях до 4.4R надо указывать количество устройств, которое необходимо. pseudo-device dgif [количество] С версии 4.4R в этом нет необходимости, поэтому пишем pseudo-device gif Пересобираем ядро - config newKernel; make depend; make; make install 2.В rc.conf добавляем строку gif_interfeces="gif0 gif1 gif[и так далее]" (Сколько нам надо). 3.В rc.conf добавляем на каждый нужный нам gif следующую строку: gifconfig_gif[номер]="[realip.address.source.tunnel][realip.address.destination.tunnel]" Тем самым задаём начальный и конечный реальные адреса тунеля, т.е. пакет идущий по тунелю на самом деле будет пересылаться от ip адреса realip.address.source.tunnel к up адресу realip.address.destination.tunnel и обратно. Примечание. Здесь и далее принято FreeBSD - source, Cisco destination, т.е. realip.address.destanation tunnel - реальный ip адрес тунеля на cisco Ip.address.source.tunnel - виртуальный ip адрес тунеля на FreeBSD. Примечание. Важно, чтобы эти оба адреса были видны в сети, именно на них мы будем "приземлять" сам туннель, т.е. они должны друг друга пинговать. 4. В rc.conf теперь добавляем уже сам туннель. ifconfig_gif[номер]="inet [ip.address.source.tunnel] netmask 255.255.255.252" Здесь мы задаём виртуальные адреса тунеля, т.е. адреса используемые при маршрутизации траффика через тунель. Их выбирают из несуществующих сетей 192.168/16, 10/8 и т.д., например 192.168.1.1 и 192.168.1.2. 5. Дбавляем маршрутизацию. route add [сеть за cisco] [ip.address.destanation.tunnel Шаг 2. ------ На стороне Сisco делается следующее: Interface tunnel[число] description [текстовое описание для удобства понимания конфигурацинных файлов] ip address [ip.address.destanation.tunnel] 255.255.255.252 tunnel source [realip.address.destanation.tunnel] tunnel destination [realip.address.source.tunnel] tunnel mode ipip Теперь в этот туннель с любого из концов его можно заворачивать трафик. Например со стороны FreeBSD: route add [сеть за cisco] [ip.address.destanation.tunnel] На данный момент нешифрованный тунель между Cisco и FreeBSD должен работать, т.е. на cisco должен выполняться ping ip.address.source.tunnel и, соответсвенно, на FreeBSD ping ip.address.destanation.tunnel Шаг 3. ------ Теперь шифруем туннель, т.е. настраиваем IPSec. 1.На FreeBSD в опции ядра необходимо добавить options IPSEC options IPSEC_ESP options IPSEC_DEBUG и пересобрать ядро (это можно было сделать при добавлении gif устройств). Для обмена ключами на FreeBSD ставим racoon- сервер работающий по протоколу IKE, на cisco он встроен. На cisco нужен IOS который поддерживает IPSec. 2.Конфигурация ipsec на cisco: crypto isakmp policy 1 (или другой номер) hash md5 authentication pre-share lifetime 3600 crypto isakmp key [секретная фраза] address [realip.address.source.tunnel] crypto ipsec transform-set [имя transform-а] esp-des esp-md5-mac mode transport crypto map [имя map] 1 (или другой номер) ipsec-isakmp set peer [realip.address.source.tunnel] set transform-set [имя transform-а] set pfs group1 match address [номер access-list-а] access-list [номер access-list-а] permit ip host [realip.address.source.tunnel] \ host [realip.address.destination.tunnel] 2.На нужные нам интерфейсы пишем: crypto map [имя map] (произвольно выбираемое название из английских букв-цифр) Это должен быть сам туннель и физический интерфейс, через который этот туннель работает. 3.Начинаем настраивать FreeBSD. Сначала делаем записи в rc.conf ipsec_enable="YES" И создаем файл в каталоге /etc с именем ipsec.conf. Пишем туда: flush; spdflush; spdadd [realip.address.source.tunnel] [realip.address.destination.tunnel] any -P \ out ipsec esp/transport/[realip.address.source.tunnel]-[realip.address.destination.tunnel]/require; spdadd [realip.address.destination.tunnel] [ralip.address.source.tunnel] any -P \ in ipsec esp/transport/[realip.address.destination.tunnel]-[realip.address.source.tunnel]/require; Так мы определяем какой траффик шифровать. В данном случае мы настраиваем шифрацию траффика между реальными ip адресами тунеля, т.е. шифроваться будет только траффик идущий от realip.address.source.tunnel к realip.address.destanation.tunnel. Это соединение <<конечных машин>>. В случае объединения сетей нужно добавлять spdadd one.network second.network any -P out esp/transport//[realip.address.source.tunnel]-[realip.address.destination.tunnel]/require и обратно (in). Затем ставим из /usr/ports/secure - racoon. И настраиваем его. Прописываем в /usr/local/etc/racoon/psk.txt [ip.addrees.peer] [секретная фраза] А файл конфигурации racoon.conf делаем приблизительно такого вида: (в основном идут настройки по умолчанию) ------------------------------------------------------------------ # "path" must be placed before it should be used. # You can overwrite which you defined, but it should not use due to confusing. path include "/usr/local/etc/racoon" ; #include "remote.conf" ; # search this file for pre_shared_key with various ID key. path pre_shared_key "/usr/local/etc/racoon/psk.txt" ; # racoon will look for certificate file in the directory, # if the certificate/certificate request payload is received. #path certificate "/usr/local/etc/cert" ; # "log" specifies logging level. It is followed by either "notify","debug" # or "debug2". log notify; # "padding" defines some parameter of padding. You should not touch these. 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. } (с каких адресов <<слушать>> запросы на обмен ключами или по умолчанию все доступные интерфейсы) # if no listen directive is specified, racoon will listen to all # available interface addresses. listen { #isakmp ::1 [7000]; #isakmp 202.249.11.124 [500]; #admin [7002]; # administrative's port by kmpstat. #strict_address; # required all addresses must be bound. } # Specification of default various timer. 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; } remote anonymous { exchange_mode main,aggressive; #exchange_mode aggressive,main; doi ipsec_doi; situation identity_only; #my_identifier address; my_identifier user_fqdn "sakane@kame.net"; peers_identifier user_fqdn "sakane@kame.net"; #certificate_type x509 "mycert" "mypriv"; nonce_size 16; lifetime time 1 min; # sec,min,hour initial_contact on; support_mip6 on; proposal_check obey; # obey, strict or claim Важно!!! Здесь задаются парамтры шифрации и аутентификации. Они должны соответсвовать тому, что написано на cisco. proposal { lifetime time 3600 sec; # sec,min,hour encryption_algorithm des; hash_algorithm md5; authentication_method pre_shared_key ; dh_group 1 ; } } Важно!!! Здесь задаются парамтры шифрации и аутентификации. Они должны соответсвовать тому, что написано на cisco. sainfo anonymous { pfs_group 1; lifetime time 3600 sec; encryption_algorithm des ; # authentication_algorithm hmac_md5; authentication_algorithm non_auth; compression_algorithm deflate ; } ------------------------------------------------------------------- 4.Теперь перегружаем машину, предварительно убедившись, что racoon.sh живет в /usr/local/etc/rc.d. 5.Делаем trace или ping с адреса сети, который должен шифроваться на аналогичный адрес другой сети. Обычно, если не идут пинги -это означает наличие какой - то проблемы с шифрацией. Racoon тогда можно запустить в режиме foreground, повысив denug leve (raccoon -F -dd) Все должно состояться. Если не работает следует смотреть racoon.conf и debug crypto isakmp debug crypto ipsec до того как оно заработает. Там следует смотреть: Если не поднимается phase 1, то значит, что могут быть проблемы с отсуствием тунеля (ip адреса не пингуются), не заданы или заданы с ошибками ключи (preshared key) и ip адреса обменивающихся хостов. Если не поднимается phase 2, то нужно сравнить настроеки шифрования и режим шифрации transport/tunnel (они должны совпадать). . Ссылки * http://www.opennet.dev/base/net/ipsec_cisco.txt.html * http://www.securityfocus.com/infocus/1616

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру