Организация IPSec туннелей FreeBSD(ipsec+racoon(ipsec-tools)) <-> Cisco, FreeBSD(ipsec+racoon(ipsec-tools)) <-> FreeBSD(ipsec+racoon(ipsec-tools)).

Постановка задачи.

Требуется организовать IPSec туннели, маршрутизирующие приватные сети филиалов и головной компанией через сеть internet. Головной офис и филиал Б серверы на FreeBSD 10, филиал А cisco(например 2811)

Схема.

IPSec sheme

Немного теории.(Взято от сюда http://www.opennet.ru/base/cisco/cisco_freebsd_ipsec.txt.html).Продублирую на всякий случай. 

Напомним, что IPSec - набор протоколов сетевого уровня, предназначенных для шифрования и проверки подлинности IP-пакетов, а также для безопасного обмена ключами аутентификации.

Установление защищенных соединений, или туннелей является функцией протокола IKE (Internet key exchange) и выполняется в две фазы. 

В первой фазе (IKE Phase 1) устанавливается защищенное соединение, предназначенное для обмена параметрами, необходимыми для установления фазы 2 туннеля. Аутентификация ответной стороны может осуществляться как по  заранее заданному ключу (одинаковому на обеих сторонах - preshared key), так и с использованием алгоритма RSA (rsa signature).

Существуют два ключевых протокола, связанных со второй фазой SA: AH (Authentication header) и ESP (Encapsulating Security Payload).

Первый обеспечивает только проверку подлинности, но не шифрование данных, второй выполняет обе указанные операции.

IPSec может работать в одном из двух режимов: транспортном (transport) или туннельном (tunnel).

В первом случае шифруется и/или аутентифицируется только содержимое (payload) IP-пакета, а заголовок остается нетронутым.

Во втором случае исходный IP-пакет шифруется и/или аутентифицируется целиком, и к нему добавляется новый заголовок. 

В качестве методов шифрования могут быть использованы блочные алгоритмы такие, как DES, 3DES, AES, blowfish и др. 

В нашей статье также аутентификация методом  preshared key, вторая фаза по протоколу ESP, туннельный режим IPSec.

 

Подготовка FreeBSD.
Пересобираем ядро с опциями(как это сделать читаем, например здесь www.freebsd.org/doc/ru/books/handbook/).

options   IPSEC        #IP security
options   IPSEC_DEBUG  #debug for IP security
device          crypto
 
<strong>Устанавливаем ipsec-tools.</strong>
#cd /usr/ports/security/ipsec-tools
#make install clean

Копируем конфиги из примеров, по умолчанию директория /usr/local/etc/racoon/ пуста.(По крайней мере на FreeBSD 10 версии).

#cp /usr/local/share/examples/ipsec-tools/psk.txt /usr/local/etc/racoon/
#cp /usr/local/share/examples/ipsec-tools/racoon.conf /usr/local/etc/racoon/

Меняем права и владельца файла ключей. Владельцем этого файл долженбыть пользователь  от имени которого запускаеться racoon и права 600.

#chmod 600 /usr/local/etc/racoon/psk.txt 
#chown root:wheel /usr/local/etc/racoon/psk.txt 

Создаем файл /etc/ipsec.conf.

#touch /etc/ipsec.conf

Добавляем в автозапуск 

#cat /etc/rc.conf
racoon_enable="YES"
racoon_flags="-l /var/log/racoon.log"
ipsec_enable="YES"
ipsec_file="/etc/ipsec.conf"

 

Конфигурация головного офиса.(FreeBSD)

#cat /etc/ipsec.conf
 
flush;
spdflush;
 
#Филиал А
spdadd 10.10.10.0/24 192.168.1.0/24 any -P out ipsec esp/tunnel/1.1.1.22-2.2.2.22/unique;
spdadd 192.168.1.0/24 10.10.10.0/24 any -P in ipsec esp/tunnel/2.2.2.22-1.1.1.22/unique;
 
spdadd 10.10.10.0/24 172.16.0.0/24 any -P out ipsec esp/tunnel/1.1.1.22-2.2.2.22/unique;
spdadd 172.16.0.0/24 10.10.10.0/24 any -P in ipsec esp/tunnel/2.2.2.22-1.1.1.22/unique;
 
spdadd 10.10.10.0/24 192.168.8.0/24 any -P out ipsec esp/tunnel/1.1.1.22-2.2.2.22/unique;
spdadd 192.168.8.0/24 10.10.10.0/24 any -P in ipsec esp/tunnel/2.2.2.22-1.1.1.22/unique;
 
#Филиал Б
spdadd 10.10.10.0/24 10.0.8.0/22 any -P out ipsec esp/tunnel/1.1.1.22-3.3.3.22/unique;
spdadd 10.0.8.0/22 10.10.10.0/24 any -P in ipsec esp/tunnel/3.3.3.22-1.1.1.22/unique;
 
spdadd 10.10.10.0/24 192.168.88.0/23 any -P out ipsec esp/tunnel/1.1.1.22-3.3.3.22/unique;
spdadd 192.168.88.0/23 10.10.10.0/24 any -P in ipsec esp/tunnel/3.3.3.22-1.1.1.22/unique;
 
spdadd 10.10.10.0/24 172.17.10.0/28 any -P out ipsec esp/tunnel/1.1.1.22-3.3.3.22/unique;
spdadd 172.17.10.0/28 10.10.10.0/24 any -P in ipsec esp/tunnel/3.3.3.22-1.1.1.22/unique;

Racoon(комментарии опущены):

#cat /usr/local/etc/racoon/psk.txt
 
2.2.2.22    key2
 
3.3.3.22    key3

 

#cat /usr/local/etc/racoon/racoon.conf
 
path include "@sysconfdir_x@/racoon";
path pre_shared_key "/usr/local/etc/racoon/psk.txt";
path certificate "@sysconfdir_x@/cert";
padding
{
}
listen
{        # Белый, статический, внешний ip(интернет)&nbsp;  
         isakmp 1.1.1.22 [500];
}
timer
{
        phase1 30 sec;
        phase2 15 sec;
}
#Филиал А
# Белый, статический, внешний ip(интернет), пирный ip адрес филиала А&nbsp;
remote 2.2.2.22
{
        my_identifier address 1.1.1.22;
        peers_identifier address 2.2.2.22;
        exchange_mode main;
        doi ipsec_doi;
        situation identity_only;
 
         nonce_size 16;
         lifetime time 86400 sec;
         initial_contact on;
         support_proxy on;
 
        #Аналог cisco секции crypto isakmp policy&nbsp;
        #Фаза 1
        proposal {
                encryption_algorithm aes 256;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 5;
        }
}
 
#Филиал Б
#Белый, статический, внешний ip(интернет), пирный ip адрес филиала Б
remote 3.3.3.22
{
        my_identifier address 1.1.1.22;
        peers_identifier address 3.3.3.22;
        exchange_mode main;
        doi ipsec_doi;
        situation identity_only;
         nonce_size 16;
         lifetime time 86400 sec;
         initial_contact on;
         support_proxy on;
 
       #Аналог cisco секции crypto isakmp policy
       #Фаза 1
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
}
 
#Филиал А
sainfo  subnet 10.10.10.0/24 any subnet 192.168.1.0/24 any
{
       #Аналог cisco секции -> crypto ipsec transform-set
       #Фаза 2
        pfs_group 5;
        lifetime time 24 hour;
        encryption_algorithm aes 256;
        authentication_algorithm hmac_sha1, hmac_md5;
        compression_algorithm deflate;
}
sainfo  subnet 10.10.10.0/24 any subnet 172.16.0.0/24 any
{
        pfs_group 5;
        lifetime time 24 hour;
        encryption_algorithm aes 256;
        authentication_algorithm hmac_sha1, hmac_md5;
        compression_algorithm deflate;
}
sainfo  subnet 10.10.10.0/24 any  subnet 192.168.8.0/24 any
{
        pfs_group 5;
        lifetime time 24 hour;
        encryption_algorithm aes 256;
        authentication_algorithm hmac_sha1, hmac_md5;
        compression_algorithm deflate;
}
 
#Филиал Б
sainfo  subnet 10.10.10.0/24 any  subnet 10.0.8.0/22 any
{
        pfs_group 2;
        lifetime time 24 hour;
        encryption_algorithm 3des;
        authentication_algorithm hmac_sha1, hmac_md5;
        compression_algorithm deflate;
}
sainfo   subnet 10.10.10.0/24 any  subnet 192.168.88.0/23 any
{
        pfs_group 2;
        lifetime time 24 hour;
        encryption_algorithm 3des;
        authentication_algorithm hmac_sha1, hmac_md5;
        compression_algorithm deflate;
}
sainfo   subnet 10.10.10.0/24 any  subnet 172.17.10.0/28 any
{
        pfs_group 2;
        lifetime time 24 hour;
        encryption_algorithm 3des;
        authentication_algorithm hmac_sha1, hmac_md5;
        compression_algorithm deflate;
}

Правило для ipfw, один из вариантов.

${FwCMD} add allow ip from 2.2.2.22/32,3.3.3.22/32 to 1.1.1.22/32 keep-state via re0

 

Конфигурация филиала А.(Cisco2811)

Фаза 1 аналог racoon секции remote

crypto isakmp policy 10
encr aes 256
authentication pre-share
group 5

Аналог racoon секции proposal

crypto isakmp key key2 address 1.1.1.22
crypto isakmp keepalive 3600
crypto isakmp aggressive-mode disable 

Фаза 2 аналог racoon секции sainfo

crypto ipsec transform-set glavnyioffice esp-aes 256 esp-sha-hmac

Crypto map 

crypto map ipsec-office 10 ipsec-isakmp 
 set peer 1.1.1.22
 set transform-set glavnyioffice 
 set pfs group5
 match address access-glavnyiofficeipsec

Access-list, направляющий объявленные в нем подсети в IPSec

ip access-list extended access-glavnyiofficeipsec
 permit ip 192.168.1.0 0.0.0.255 10.10.10.0 0.0.0.255
 permit ip 172.16.0.0 0.0.0.255 10.10.10.0 0.0.0.255
 permit ip 192.168.8.0 0.0.0.255 10.10.10.0 0.0.0.255

Интерфейс смотрящий в интернет

interface FastEthernet0/0.8
description External
encapsulation dot1Q 8
ip address 2.2.2.22 255.255.255.248
ip nat outside
no ip virtual-reassembly
crypto map ipsec-office -вешаем вышеописанную сrypto map на внешний интефейс
 
Шлюзовой интерфейс для локалки филиала A(в нашем примере у филиала A в интернет может ходить только подсеть 192.168.1.0 0.0.0.255)
​
interface FastEthernet0/1.10
description local
encapsulation dot1Q 10
ip address 192.168.1.0 255.255.255.0
ip nat inside
no ip virtual-reassembly

Default routing в сторону шлюза провайдера

ip route 0.0.0.0 0.0.0.0 2.2.2.1​

Nat для доступа  филиала A в сеть интернет

ip nat inside source list internet interface FastEthernet0/0.8 overload

Вышеупомянутая подсеть(из которой есть доступ в интернет у филиала A), обратите внимание, здесь запрещен доступ на сеть головного офиса(через nat)(10.10.10.0 0.0.0.255), так как он производится через access-glavnyiofficeipsec

ip access-list extended internet
deny   192.168.1.0 0.0.0.255 10.10.10.0 0.0.0.255
permit 192.168.1.0 0.0.0.255 any

 

Конфигурация филиала Б.(FreeBSD)

#cat /etc/ipsec.conf
 
flush;
spdflush;
 
#Головной офис
spdadd 10.0.8.0/22 10.10.10.0/24 any -P out ipsec esp/tunnel/3.3.3.22-1.1.1.22/unique;
spdadd 10.10.10.0/24 10.0.8.0/22 any -P in ipsec esp/tunnel/1.1.1.22-3.3.3.22/unique;
 
spdadd 192.168.88.0/23 10.10.10.0/24 any -P out ipsec esp/tunnel/3.3.3.22-1.1.1.22/unique;
spdadd 10.10.10.0/24 192.168.88.0/23 any -P in ipsec esp/tunnel/1.1.1.22-3.3.3.22/unique;
 
spdadd 172.17.10.0/28 10.10.10.0/24 any -P out ipsec esp/tunnel/3.3.3.22-1.1.1.22/unique;
spdadd 10.10.10.0/24 172.17.10.0/28 any -P in ipsec esp/tunnel/1.1.1.22-3.3.3.22/unique;

 

Racoon

#cat /usr/local/etc/racoon/psk.txt
 
1.1.1.22    key3

 

#cat /usr/local/etc/racoon/racoon.conf
 
path include "@sysconfdir_x@/racoon";
path pre_shared_key "/usr/local/etc/racoon/psk.txt";
path certificate "@sysconfdir_x@/cert";
padding
{
}
listen
{
     # Белый, статический, внешний ip(интернет)  
 
      isakmp 3.3.3.22 [500];
}
timer
{
        phase1 30 sec;
        phase2 15 sec;
}
 
#Головной офис
# Белый, статический, внешний ip(интернет), пирный ip адрес филиала А 
remote 1.1.1.22
{
        my_identifier address 3.3.3.22;
        peers_identifier address 1.1.1.22;
        exchange_mode main;
        doi ipsec_doi;
        situation identity_only;
 
         nonce_size 16;
         lifetime time 86400 sec;
         initial_contact on;
         support_proxy on;
 
 
        #Аналог cisco секции crypto isakmp policy 
        #Фаза 1
 
         proposal {
 
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
}
 
#Головной офис
sainfo  subnet 10.0.8.0/22 any  subnet 10.10.10.0/24 any
{
 
        #Аналог cisco секции -> crypto ipsec transform-set
        # Фаза 2
        pfs_group 2;
        lifetime time 24 hour;
        encryption_algorithm 3des;
        authentication_algorithm hmac_sha1, hmac_md5;
        compression_algorithm deflate;
}
sainfo   subnet 192.168.88.0/23 any  subnet 10.10.10.0/24 any
{
        pfs_group 2;
        lifetime time 24 hour;
        encryption_algorithm 3des;
        authentication_algorithm hmac_sha1, hmac_md5;
        compression_algorithm deflate;
}
sainfo   subnet 172.17.10.0/28 any  subnet 10.10.10.0/24 any
{
        pfs_group 2;
        lifetime time 24 hour;
        encryption_algorithm 3des;
        authentication_algorithm hmac_sha1, hmac_md5;
        compression_algorithm deflate;
}

Правило для ipfw, один из вариантов.

${FwCMD} add allow ip from 1.1.1.22/32 to 3.3.3.22/32 keep-state via re0

 

Основные команды диагностики состояния тунеля для FreeBSD.

setkey -DP
 
setkey -D

Основные команды диагностики состояния тунеля для Сisco.

show crypto isakmp sa
 
show crypto session

 

Использованные источники:

1. https://www.freebsd.org/doc/ru/books/handbook/

2. http://www.opennet.ru/base/cisco/cisco_freebsd_ipsec.txt.html

3. http://faq.net.ua/index.php?ind=reviews&op=entry_view&iden=1

 

Категории:

Комментарии

ужос как много букв