The OpenNET Project / Index page

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

Настройка IPSEC туннеля между Cisco и FreeBSD (freebsd cisco tunnel ipsec)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: freebsd, cisco, tunnel, ipsec,  (найти похожие документы)
From: Roman Stozhkov <rstozhkov@yandex.ru.> (Теория, оформление, исправление ошибок - Oleg Petrov) Newsgroups: email Date: Mon, 25 Oct 2008 17:02:14 +0000 (UTC) Subject: Настройка IPSEC туннеля между Cisco и FreeBSD 1. Введение В данном документе описана методика создания и настройки шифрованного туннеля (IPSec) между маршрутизатором Cisco и сервером на базе ОС FreeBSD, соединенных через незащищенную публичную сеть. Используемое оборудование: ПК Celeron 366 MHz, 256 MB RAM, ОС FreeBSD 7.0 (далее - PC) Маршрутизатор CISCO 2821 (далее - Cisco) Схема организации связи и IP-адресации приведена на рис.1. рис. 1 В рассматриваемой схеме защищенный туннель устанавливается между внешними IP-адресами PC (10.40.248.2) и Cisco (192.168.50.2). Шифрованию подлежит весь IP-трафик между локальными сетями 10.5.3.0/24, 10.5.4.0/24, с одной стороны, и сетью 10.11.16.0/23, с другой стороны. 2. Краткая теория IPSec Напомним, что IPSec - набор протоколов сетевого уровня, предназначенных для шифрования и проверки подлинности IP-пакетов, а также для безопасного обмена ключами аутентификации. Установление защищенных соединений, или туннелей является функцией протокола IKE (Internet key exchange) и выполняется в две фазы. В первой фазе (IKE Phase 1) устанавливается защищенное соединение, предназначенное для обмена параметрами, необходимыми для установления фазы 2 туннеля. Аутентификация ответной стороны может осуществляться как по заранее заданному ключу (одинаковому на обеих сторонах - preshared key), так и с использованием алгоритма RSA (rsa signature). В настоящей статье используется аутентификация методом preshared key. Существуют два ключевых протокола, связанных со второй фазой SA: AH (Authentication header) и ESP (Encapsulating Security Payload). Первый обеспечивает только проверку подлинности, но не шифрование данных; второй выполняет обе указанные операции. В настоящей статье рассматривается протокол ESP. IPSec может работать в одном из двух режимов: транспортном (transport) или туннельном (tunnel). В первом случае шифруется и/или аутентифицируется только содержимое (payload) IP-пакета, а заголовок остается нетронутым. Во втором случае исходный IP-пакет шифруется и/или аутентифицируется целиком, и к нему добавляется новый заголовок. В настоящей статье рассматривается только туннельный режим IPSec. В качестве методов шифрования могут быть использованы блочные алгоритмы такие, как DES, 3DES, AES, blowfish и др. 3. Настройка PC В качестве шлюза под управлением FreeBSD используется операционная система со специально пересобранным ядром. Для этого при сборке в директории /usr/src/sys/i386/conf в файле конфигурации ядра следует отметить опции: options IPSEC options IPSEC_DEBUG device crypto Сборка ядра осуществляется следующим образом: cd /usr/src make buildkernel KERNCONF=name make installkernel KERNCONF=name После данных операций в системе загружается ядро с поддержкой IPSEC протоколов. По желанию, можно пересобрать и "мир" (предварительно обновив через csup), но это дело вкуса и значимости сервера. Далее, необходимо собрать приложение racoon, обеспечивающее функционал IKE Phase 1 (см. раздел 2). Для упрощения задачи применяется метод аутентификации preshare key (далее обозначается psk). Осуществляем сборку приложения racoon: cd /usr/ports/*/ipsec-tools make В появившемся окне следует отключить опцию NATT (Nat traversal) - механизм обеспечения прохождения IPSec-пакетов через NAT. Далее, make install После сборки racoon необходимо отредактировать (или создать, если он не существует) конфигурационный файл /usr/local/etc/racoon/racoon.conf со следующим содержимым: # $KAME: racoon.conf.in,v 1.18 2001/08/16 06:33:40 itojun Exp $ path include "/usr/local/etc/racoon" ; path pre_shared_key "/usr/local/etc/racoon/psk.txt" ; #path pre_shared_key "/etc/psk.txt" ; # "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; randomize off; strict_check off; exclusive_tail off; } # if no listen directive is specified, racoon will listen to all # available interface addresses. listen { isakmp 10.2.8.2 [500]; } # 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 10.8.50.2 #Внешний IP адрес удаленной стороны { exchange_mode main; #Не все IOS поддерживают агрессивное согласование в две фазы #exchange_mode aggressive; doi ipsec_doi; situation identity_only; nonce_size 16; lifetime time 60 min; initial_contact on; support_proxy on; proposal_check obey;# obey, strict or claim proposal { encryption_algorithm 3des; #Алгоритм шифрования hash_algorithm sha1; #Метод хеширования authentication_method pre_shared_key; #Метод аутентификации на общем ключе dh_group 2; #Длина ключа Диффи-Хеллмана (группа 2 - 1024 бит) } } sainfo subnet 10.5.3.0/24 any address 10.11.16.0/23 any { #В данном случае это означает, что пакеты из сети 10.5.3.0/24 в сеть 10.11.16.0/24 попадают в обработку. #Первое значение своя сеть, второе - удаленная. Any означает "любой порт". pfs_group 2; lifetime time 24 hour; encryption_algorithm aes; authentication_algorithm hmac_sha1; compression_algorithm deflate; } sainfo subnet 10.5.4.0/24 any address 10.11.16.0/23 any { #Аналогично, для второй подсети: pfs_group 2; lifetime time 24 hour; encryption_algorithm aes; authentication_algorithm hmac_sha1; compression_algorithm deflate; } Следует иметь ввиду, что параметры pfs_group, encryption_algorithm, authentication_algorithm, compression_algorithm на локальной и удаленной сторонах должны быть идентичными. Времена жизни (lifetime) могут различаться, при этом фактическое время жизни определится как меньшее из двух. Затем следует создать файл для хранения ключей (тех самых preshared keys): cd /usr/local/etc/racoon touch psk.txt chmod 600 psk.txt chown root:wheel psk.txt Содержимое файла psk.txt должно быть следующим: 10.8.50.2 key12345 На этом настройка racoon закончена. Далее, необходимо указать ядру параметры ожидаемых SA, для чего следует создать файл /etc/ipsec.conf следующего содержания: flush; spdflush; #Правила для исходящего трафика ESP из подсети 10.5.3.0/24: spdadd 10.5.3.0/24 10.11.16.0/23 any -P out ipsec esp/tunnel/10.2.8.2-10.8.50.2/unique; #Правила для входящего трафика ESP в подсеть 10.5.3.0/24: spdadd 10.11.16.0/23 10.5.3.0/24 any -P in ipsec esp/tunnel/10.2.8.2-10.8.50.2/unique; #Правила для исходящего трафика ESP из подсети 10.5.4.0/24: spdadd 10.5.4.0/24 10.11.16.0/23 any -P out ipsec esp/tunnel/10.2.8.2-10.8.50.2/unique; #Правила для входящего трафика ESP в подсеть 10.5.4.0/24: spdadd 10.11.16.0/23 10.5.4.0/24 any -P in ipsec esp/tunnel/10.2.8.2-10.8.50.2/unique; Ну, и напоследок активируем ipsec и racoon в /etc/rc.conf : racoon_flags="-l /var/log/racoon.log" ipsec_enable="YES" ipsec_file="/etc/ipsec.conf" Всё, со стороны FreeBSD больше настроек не требуется. Перезагружаем сервер. 4. Настройка Cisco Создаем isakmp-политику. О совпадении значений параметров с ответной стороной сказано в разделе 3, при описании sainfo subnet. crypto isakmp policy 20 encr 3des authentication pre-share group 2 lifetime 3600 crypto isakmp identity address crypto isakmp key key12345 address 10.2.8.2 Создаем transform-set: crypto ipsec transform-set MY_MAP esp-aes esp-sha-hmac Создаем CryptoMap: crypto map MY_MAP 1 ipsec-isakmp set peer 10.2.8.2 set security-association lifetime seconds 86400 set transform-set MY_MAP set pfs group2 match address 150 Описываем "интересный" трафик, подлежащий шифрованию. В контексте crypto ACL "permit" означает "шифровать", а "deny" - "не шифровать". access-list 150 permit ip 10.11.16.0 0.0.1.255 10.5.3.0 0.0.0.255 access-list 150 permit ip 10.11.16.0 0.0.1.255 10.5.4.0 0.0.0.255 Ну, и привязываем CryptoMap к интерфейсу: interface Vlan10 description --- ip address 10.8.50.2 255.255.255.252 no ip redirects no ip unreachables no ip proxy-arp crypto map MY_MAP Прописываем маршрут для интересного трафика на внешний IP адрес FreeBSD маршрутизатора: ip route 10.5.3.0 255.255.255.0 10.2.8.2 ip route 10.5.4.0 255.255.255.0 10.2.8.2 5. Проверка правильности настроек После первого же пинга должна установиться фаза IKE1. Со стороны Cisco, её состояние можно определить командой: show crypto isakmp sa Ожидаемый вывод: dst src state conn-id slot status 192.168.50.2 10.2.8.2 QM_IDLE 3 0 ACTIVE Если фаза IKE1 установилась, проверяем состояние IPSec SA: show crypto ipsec sa interface Vlan10 Ожидаемый вывод: interface: Vlan10 Crypto map tag: MY_MAP, local addr10.8.50.2 protected vrf: (none) local ident (addr/mask/prot/port): (172.21.16.0/255.255.254.0/0/0) remote ident (addr/mask/prot/port): (10.250.30.0/255.255.255.0/0/0) current_peer10.2.8.2 port 500 PERMIT, flags={origin_is_acl,ipsec_sa_request_sent} #pkts encaps: 1, #pkts encrypt: 1, #pkts digest: 1 #pkts decaps: 1, #pkts decrypt: 1, #pkts verify: 1 #pkts compressed: 0, #pkts decompressed: 0 #pkts not compressed: 0, #pkts compr. failed: 0 #pkts not decompressed: 0, #pkts decompress failed: 0 #send errors 1, #recv errors 0 local crypto endpt.:10.8.50.2, remote crypto endpt.:10.2.8.2 path mtu 1500, ip mtu 1500, ip mtu idb Vlan10 current outbound spi: 0xC29EA2C(204073516) inbound esp sas: spi: 0x43CF5008(1137659912) transform: esp-aes esp-sha-hmac , in use settings ={Tunnel, } conn id: 3001, flow_id: NETGX:1, crypto map: MY_MAP sa timing: remaining key lifetime (k/sec): (4595528/86385) IV size: 16 bytes replay detection support: Y Status: ACTIVE inbound ah sas: inbound pcp sas: outbound esp sas: spi: 0xC29EA2C(204073516) transform: esp-aes esp-sha-hmac , in use settings ={Tunnel, } conn id: 3012, flow_id: NETGX:12, crypto map: MY_MAP sa timing: remaining key lifetime (k/sec): (4595528/86385) IV size: 16 bytes replay detection support: Y Status: ACTIVE outbound ah sas: outbound pcp sas: ...откуда видно, что SA назначены, активны, и соответствуют ACL. Проверяем корректность работы IPSec-туннеля со стороны FreeBSD: setkey -D Ожидаемый вывод: 10.2.8.2 10.8.50.2 esp mode=tunnel spi=1137659912(0x43cf5008) reqid=16385(0x00004001) E: rijndael-cbc ac144569 a67b16b0 eade4bac 429d4f08 A: hmac-sha1 d62d63e9 eb08e6d8 5302bb00 e76432a5 f32c10b7 seq=0x00000001 replay=4 flags=0x00000000 state=mature created: Oct 15 15:50:35 2008 current: Oct 15 16:10:17 2008 diff: 1182(s) hard: 86400(s) soft: 86400(s) last: Oct 15 15:50:39 2008 hard: 0(s) soft: 0(s) current: 120(bytes) hard: 0(bytes) soft: 0(bytes) allocated: 1 hard: 0 soft: 0 sadb_seq=7 pid=1036 refcnt=2 10.2.8.2 10.8.50.2 esp mode=tunnel spi=204073516(0x0c29ea2c) reqid=16386(0x00004002) E: rijndael-cbc 9f96cb23 6628fd08 dfa56c63 37410a4b A: hmac-sha1 ded12d87 993b05aa 2884b12e 6d336cfe 72d50d39 seq=0x00000001 replay=4 flags=0x00000000 state=mature created: Oct 15 15:50:35 2008 current: Oct 15 16:10:17 2008 diff: 1182(s) hard: 86400(s) soft: 86400(s) last: Oct 15 15:50:39 2008 hard: 0(s) soft: 0(s) current: 80(bytes) hard: 0(bytes) soft: 0(bytes) allocated: 1 hard: 0 soft: 0 sadb_seq=6 pid=1036 refcnt=1 После этого можно проверять связность сетей 10.5.3.0/23 и 10.11.16.0/23. 7. Ссылки - http://netbsd.gw.com/cgi-bin/man-cgi?racoon.conf+5+NetBSD-current - http://netbsd.gw.com/cgi-bin/man-cgi/man?ipsec_set_policy+3+NetBSD-current - http://dreamcatcher.ru/docs/ipsec_netbsd.html#top3 - http://xgu.ru/wiki/IPsec_в_Cisco - http://www.cisco.com/en/US/tech/tk583/tk372/technologies_tech_note09186a0080094203.shtml - http://www.cisco.com/en/US/docs/ios/12_1/security/configuration/guide/scdike.html - http://www.cisco.com/en/US/docs/ios/12_1/security/configuration/guide/scdipsec.html Общая матчасть: - http://ru.wikipedia.org/wiki/Diffie-Hellman - http://ru.wikipedia.org/wiki/IPSEC

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, SHRDLU, 20:54, 25/10/2008 [ответить] [смотреть все]
  • +/
    >Сборка ядра осуществляется следующим образом:
    >        cd /usr/src
    >        make buildkernel KERNCONF=name
    >        make buildworld KERNCONF=name

    Вообще-то согласно handbook сборка и установка ядра осуществляется командами

    make buildkernel KERNCONF=name
    make installkernel KERNCONF=name

     
  • 1.2, Осторожный, 21:44, 25/10/2008 [ответить] [смотреть все]
  • +/
    1) Не ясно зачем включать IPSEC_DEBUG - чтобы тормозило ?

    2) Порта racoon не существует - есть порт /usr/ports/security/racoon2

    Я вместо него использую /usr/ports/security/ipsec-tools

     
     
  • 2.8, Roman Stozhkov, 08:49, 27/10/2008 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    1 Производительности в моем случае хватает Использовалось для DEBUG, как и вид... весь текст скрыт [показать] [показать ветку]
     
  • 2.15, Аноним, 12:44, 27/10/2008 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    я тоже в шоке от таких писателей накопируют и мануалов в инете и вот мол вам раб... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.16, Freedaemon, 20:15, 28/10/2008 [^] [ответить] [смотреть все]  
  • +/
    1 Писать надо без орфографических и смысловых ошибок 2 Ошибка поправлена Зна... весь текст скрыт [показать]
     
  • 1.3, yolkov, 23:23, 25/10/2008 [ответить] [смотреть все]  
  • +/
    а разве в 7 реализацию ipsec не поменяли?
     
     
  • 2.9, Roman Stozhkov, 08:59, 27/10/2008 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Поменяли The KAME IPsec implementation has been removed In its place, FAST_IPS... весь текст скрыт [показать] [показать ветку]
     
  • 1.4, Samm, 11:30, 26/10/2008 [ответить] [смотреть все]  
  • +/
    спасибо за статью, несмотря на мелкие недочеты - все наглядно  и по существу.
     
  • 1.5, Andrew Kolchoogin, 14:29, 26/10/2008 [ответить] [смотреть все]  
  • +/
    И на Циске рекомендуется пользоваться все-таки crypto keychain'ами. Just in case, если на интерфейсе будет более одного криптотуннеля. Ну и Dynamic Map неплохо бы освоить, так, на случай динамического выделения адресов второму концу туннеля.
     
     
  • 2.7, Roman Stozhkov, 08:45, 27/10/2008 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Dynamics Map - это больше для транспортного режима Cisco VPN Client Вот освои... весь текст скрыт [показать] [показать ветку]
     
  • 1.6, Roman Stozhkov, 08:37, 27/10/2008 [ответить] [смотреть все]  
  • +/
    Баги исправил.
     
  • 1.10, Виталик, 10:35, 27/10/2008 [ответить] [смотреть все]  
  • +/
    А  маршрутизацию наверно нужно прописать на cisco и FreeBSD ???????
     
     
  • 2.11, Roman Stozhkov, 10:52, 27/10/2008 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    На Cisco надо, если по-умолчанию интересный трафик на интерфейс с Crypto Map н... весь текст скрыт [показать] [показать ветку]
     
  • 1.12, Riskkman, 11:15, 27/10/2008 [ответить] [смотреть все]  
  • +/
    Интересная статья, надо будет попробовать.
    От автора ждём:
    1. Установку тоннелей на сертификатах
    2. Поднятие динамической маршрутизации внутри IPSec тоннеля.
     
  • 1.13, Сергей, 11:20, 27/10/2008 [ответить] [смотреть все]  
  • +/
    А мне кажется в ядре надо помимо
    options IPSEC
    включить опцию
    device crypto
    У вас же FreeBSD7, у меня без нее не заработало...
     
     
  • 2.14, Freedaemon, 11:30, 27/10/2008 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Принято. Упустил эту настройку из конфига.
     
  • 1.17, aamst, 09:40, 26/03/2009 [ответить] [смотреть все]  
  • +/
    А по моему написано хорошо, самое главное что просто, доступно. Мне скоро понадобится.
    Очень бы хотелось статьи про установку тоннелей на сертификатах
     
  • 1.18, Антон, 11:45, 08/10/2009 [ответить] [смотреть все]  
  • +/
    Спасибо вам. У меня все заработало. Именно так нужно настраивать. С CISCO не нужны никакие лишние туннели.

    У меня даже заработало с AES-128--SHA1--DH5 (phase 1) и AES-128--SHA1--DH2 для второй фазы.

    Хочу предостеречь. Не меняйте exchange_mode main; на aggressive, т.к. ЦИСКА соединяется именно по этому моду на Фазе 1 (если не указать иного).

    Словом, спасибо.

     
  • 1.19, Аноним, 10:23, 15/09/2010 [ответить] [смотреть все]  
  • +/
    Подскажите, а нужно ли предварительно поднимать туннель до циски через gif Наст... весь текст скрыт [показать]
     
  • 1.20, alex_471, 17:14, 14/10/2010 [ответить] [смотреть все]  
  • +/
    А если FreeBSD за nat-ом. Кто то настраивал ?

    Cisco NAT-T понимает хорошо - цеплял и Cisco-Cisco

    Cisco-Linksys  и даже Cisco-Draytek

    а вот с FreeBSD  проблемы

     
     
  • 2.25, Roman Stozhkov, 16:09, 04/05/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    А разве там при сборке демона NAT-T нету?
     
  • 1.21, puri, 22:01, 20/10/2010 [ответить] [смотреть все]  
  • +/
    Может глупость скажу, а разве не нужно виртуальный интерфейс создавать gif0?
     
  • 1.22, evgeny, 09:19, 21/10/2010 [ответить] [смотреть все]  
  • +/
    а с таким глюком никто не сталкивался:
    тунель linux-cisco2811 настроен и работает.
    Но есть такой глюк: из сети за linux подключаюсь
    к серверу за cisco по ssh подключение проходит нормально, но как только пытаюсь запустить mc получаю черный экран т.е. как бы все зависает. то же самое происходит и с командой man. команда ps на одном серваке работает а на другом половину выводит и все.
    Куда копать то? ошибок нигде нет

     
     
  • 2.24, ЕВгений, 16:16, 17/11/2010 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    MTU проверь.
     
  • 1.23, Евгений, 07:34, 13/11/2010 [ответить] [смотреть все]  
  • +/
    1. При сборке ядра не забудьте поставить
    options         IPSEC_ESP
    2. При настройке фаервола не забудьте открыть
    udp 500 порт
    и протокол esp
    3.В /etc/rc.config не забудьте указать
    racoon_flags="-l /var/log/racoon.log"
    ipsec_enable="YES"
    ipsec_file="/etc/ipsec.conf"
    racoon_enable="YES"

    gif_interfaces="gif0"
    gifconfig_gif0="Ip_компьютера IP_Cisco"
    ifconfig_gif0="inet IP_внутрений_компьютера IP_внутрений_Cisco netmask 255.255.255.255"

    static_routes="vpn"
    route_vpn="Адрес внутренней сети CISCO -interface gif0"

     
  • 1.26, Rustam, 21:35, 01/05/2013 [ответить] [смотреть все]  
  • +/
    Доброе время суток кто может помочь вроде все настроил на FreBSD но почему то не пингуется по туннелю у меня 2сервера FreBSD и роутер FreBSD и клиент в общем 4 машины.
    Если кто то знает можете описать подробно ....буду рад на помощь.
     

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





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor