Документация по ОС FreeBSD Четверг, 25.04.2024, 18:01
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Безопасность

Настройка 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

Сборка ядра осуществляется следующим образом:

        cd /usr/src
        make buildkernel KERNCONF=name
        make buildworld KERNCONF=name

После данных операций в системе загружается ядро с поддержкой IPSEC протоколов. По желанию, можно пересобрать и «мир» (предварительно обновив через csup), но это дело вкуса и значимости сервера.

Далее, необходимо собрать приложение racoon, обеспечивающее функционал IKE Phase 1 (см. раздел 2). Для упрощения задачи применяется метод аутентификации preshare key (далее обозначается psk).

Осуществляем сборку приложения racoon:

        cd /usr/ports/*/racoon
        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

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


Источник: http://www.opennet.ru/base/cisco/cisco_freebsd_ipsec.txt.html
Категория: Безопасность | Добавил: oleg (25.10.2008) | Автор: Roman Stozhkov
Просмотров: 861 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024