Статический IPsec

В операционной системе маршрутизатора предусмотрена возможность создания статических IPsec-туннелей, то есть туннелей без автоматического создания, установления, изменения и удаления SA (Security Association) между двумя хостами сети посредством протокола IKE (Internet Key Exchange). Все используемые туннелем ключи, алгоритмы и протоколы задаются вручную и должны совпадать на обоих концах туннеля.

На данный момент устройство поддерживает только протокол защиты передаваемых данных ESP (Encapsulating Security Payload), туннельный и транспортный режимы работы. Для шифрования доступны алгоритмы AES, 3DES, а для хеширования — MD5, SHA1/256/512.

Основные параметры туннеля задаются в профиле IPsec. Для перехода в режим его конфигурирования необходимо в глобальном режиме конфигурирования ввести команду crypto-ipsec profile <NAME> manual, где NAME — имя профиля, а ключ manual означает, что туннель является статическим.

В первую очередь необходимо задать режим работы. Зададим туннельный режим. Данный режим задаётся командой mode tunnel.

Далее следует задать ключевые параметры IPsec (ESP) туннеля в двух направлениях: входящем, т. е. от удалённой точки до локального устройства (inbound) и исходящем, т. е. от локального устройства до удалённой точки (outbound). Переход в режим конфигурирования туннеля в исходящем или входящем направлении производится командами ipsec-outbound esp и ipsec-inbound esp соответственно.

Для каждого направления туннеля необходимо задать основные параметры для организации SA:

  • sp-index <NUMBER> — номер SPI (Security Parameter Index);
  • authenticator sha1 | sha256 | sha512 | md5 <KEY> — выбор алгоритма хеширования и задание ключа в шестнадцатеричном виде;
  • encryption 3des | aes <KEY> — выбор алгоритма хеширования и задание ключа в шестнадцатеричном виде.

CLI устройства принимает ввод ключа как с префиксом 0x, так и без него в шестнадцатеричном виде. При неверной длине ключа устройство подскажет, какую длину следует использовать.

Заданные для обоих направлений параметры SA должны совпадать на обоих концах туннеля.

Затем с помощью криптографических карт crypto-map необходимо указать, к какому пиру следует применять соответствующий профиль IPsec. Переход в режим конфигурирования криптографической карты производится командой crypto-map <NAME> <PRIORITY>, где NAME — имя карты, а PRIORITY (иначе — последовательность карты) определяет порядок обработки карты. Чем меньше номер, тем выше приоритет и вероятность того, что трафик IPsec будет обработан именно этой последовательностью карты.

В настройках карты необходимо указать профиль IPsec и соседа, к которому должен быть применён данный профиль:

  • match peer <ADDRESS>, где ADDRESS — IPv4-адрес соседа;
  • set crypto-ipsec profile <NAME>, где NAME — имя профиля.

Ниже приведён пример для криптографической карты с именем TEST.

crypto-map TEST 10
  match peer 200.0.0.3
  set crypto-ipsec profile TEST1
crypto-map TEST 20
  match peer 200.0.0.3
  set crypto-ipsec profile TEST2
crypto-map TEST 30
  match peer 200.0.0.3
  set crypto-ipsec profile TEST3 

При такой конфигурации к пиру могут быть применены 3 профиля, но обработка трафика IPsec от соседа с адресом 200.0.0.3 начнётся на локальном устройстве с профиля TEST1.

Далее необходимо научить маршрутизатор перехватывать трафик, который должен быть обработан IPsec модулем. Для этого следует воспользоваться встроенными функциями списков контроля доступа filter-map ipv4 (см. главу “Списки доступа”, раздел “Настройка L3 filter-map”).

Для перехвата входящего трафика IPsec от определённого соседа следует создать правило match/set вида:

  • match esp host <Remote ADDRESS> host <Local ADDRESS>, где Remote ADDRESS — IPv4-адрес соседа в туннеле, а Local ADDRESS — локальный IPv4-адрес маршрутизатора для IPSec туннеля;
  • set crypto-map <NAME> peer <Remote ADDRESS>, где NAME — имя ранее созданной криптографической карты (crypto-map), а Remote ADDRESS — IPv4-адрес соседа в туннеле, для точного соответствия.

Для перехвата трафика IPsec, передаваемого из локальной сети в удалённую сеть, т. е. исходящего трафика, который должен быть зашифрован, следует создать правило match/set вида:

  • match any <Local NETWORK> <Remote NETWORK>, где Local NETWORK — локальная IPv4-подсеть, а Remote NETWORK — удалённая IPv4-подсеть. Таким образом, трафик, передаваемый из локальной подсети в удалённую подсеть, попадёт в туннель и будет зашифрован.
  • set crypto-map <NAME> peer <Remote ADDRESS>, где NAME — имя ранее созданной криптографической карты, а Remote ADDRESS — IPv4-адрес соседа в туннеле, для точного соответствия.

Последним действием следует применить командой set списки контроля доступа filter-map к необходимым L3-интерфейсам во входящем направлении. Пример для filter-map c именем ipsec_tunnel:

interface lan
ip mtu 1500
connect port te2 service-instance lan
ip address 192.168.100.100/24
set filter-map in ipsec_tunnel
!
interface wan
ip mtu 1500
connect port te0 service-instance wan
ip address 200.0.0.100/8
set filter-map in ipsec_tunnel 

Для вывода информации о настроенных SA предусмотрена команда show crypto sa.

Ниже приведён пример настройки IPSec-туннелей для схемы c тремя соседями, LAG для WAN соединения и алгоритмами SHA1/256/512 и 3DES.

Рисунок


crypto-ipsec profile test1 manual
mode tunnel
ipsec-outbound esp
sp-index 1000
authenticator sha1 0x000102030405060708090a0b0c0d0e0f00000000
encryption 3des 0x000102030405060708090a0b0c0d0e0faaaaaaaabbbbbbbb
ipsec-inbound esp
sp-index 1001
authenticator sha1 0x000102030405060708090a0b0c0d0e0f11111111
encryption 3des 0x000102030405060708090a0b0c0d0e0faaaaaaaabbbbbbbb
!
crypto-ipsec profile test2 manual
mode tunnel
ipsec-outbound esp
sp-index 2000
authenticator sha256 0x000102030405060708090a0b0c0d0e0f00000000000102030405060708090a0b
encryption 3des 0x000102030405060708090a0b0c0d0e0fbbbbbbbbcccccccc
ipsec-inbound esp
sp-index 2001
authenticator sha256 0x000102030405060708090a0b0c0d0e0f22222222000000002222222222222222
encryption 3des 0x000102030405060708090a0b0c0d0e0fbbbbbbbbcccccccc
!
crypto-ipsec profile test3 manual
mode tunnel
ipsec-outbound esp
sp-index 3000
authenticator sha512 0x000102030405060708090a0b0c0d0e0f00000000000102030405060708090a0b000102030405060708090a0b0c0d0e0f00000000000102030405060708090a0b
encryption 3des 0x000102030405060708090a0b0c0d0e0fccccccccdddddddd
ipsec-inbound esp
sp-index 3001
authenticator sha512 0x000102030405060708090a0b0c0d0e0f33333333000000003333333333333333000102030405060708090a0b0c0d0e0f33333333000000003333333333333333
encryption 3des 0x000102030405060708090a0b0c0d0e0fccccccccdddddddd
!
crypto-map ipsec 10
match peer 200.0.0.1
set crypto-ipsec profile test1
!
crypto-map ipsec 20
match peer 200.0.0.2
set crypto-ipsec profile test2
!
crypto-map ipsec 30
match peer 200.0.0.3
set crypto-ipsec profile test3
!
filter-map ipv4 ipsec_tunnel 5
match esp host 200.0.0.1 host 200.0.0.100
set crypto-map ipsec peer 200.0.0.1
!
filter-map ipv4 ipsec_tunnel 10
match any host 192.168.100.1 host 10.0.0.1
set crypto-map ipsec peer 200.0.0.1
!
filter-map ipv4 ipsec_tunnel 15
match esp host 200.0.0.2 host 200.0.0.100
set crypto-map ipsec peer 200.0.0.2
!
filter-map ipv4 ipsec_tunnel 20
match any host 192.168.100.2 host 172.16.0.2
set crypto-map ipsec peer 200.0.0.2
!
filter-map ipv4 ipsec_tunnel 25
match esp host 200.0.0.3 host 200.0.0.100
set crypto-map ipsec peer 200.0.0.3
!
filter-map ipv4 ipsec_tunnel 30
match any host 192.168.100.3 host 192.168.0.3
set crypto-map ipsec peer 200.0.0.3
!
port ae.0
bind te0
bind te1
mtu 9728
service-instance wan
encapsulation untagged
!
port te2
mtu 9728
service-instance lan
encapsulation untagged
!
interface lan
ip mtu 1500
connect port te2 service-instance lan
ip address 192.168.100.100/24
set filter-map in ipsec_tunnel 10
!
interface wan
ip mtu 1500
connect port ae.0 service-instance wan
ip address 200.0.0.100/8
set filter-map in ipsec_tunnel 10
exit
exit 

Для полноты изложения рассмотрим пример конфигурации маршрутизатора Cisco R1.

hostname R1
!
crypto ipsec transform-set ipsec_tunnel esp-3des esp-sha-hmac
 mode tunnel
crypto map ipsec 10 ipsec-manual
 set peer 200.0.0.100
 set session-key inbound esp 1000 cipher 000102030405060708090a0b0c0d0e0faaaaaaaabbbbbbbb authenticator 000102030405060708090a0b0c0d0e0f00000000
 set session-key outbound esp 1001 cipher 000102030405060708090a0b0c0d0e0faaaaaaaabbbbbbbb authenticator 000102030405060708090a0b0c0d0e0f11111111
 set transform-set ipsec_tunnel
 match address 100
!
interface Loopback0
 ip address 10.0.0.1 255.0.0.0
!
interface FastEthernet0/0
 ip address 200.0.0.1 255.0.0.0
 crypto map ipsec
!
access-list 100 permit ip host 10.0.0.1 host 192.168.100.1