IPsec
IPsec (IP Security) — это набор протоколов для обеспечения сервисов защиты и аутентификации данных на сетевом уровне модели OSI. В операционной системе маршрутизатора предусмотрена возможность создания статических IPsec-туннелей, то есть туннелей без автоматического создания, установления, изменения и удаления SA (Security Associations) между двумя хостами сети посредством протокола IKE (Internet Key Exchange). Все используемые туннелем ключи, алгоритмы и протоколы задаются вручную и должны совпадать на обоих концах туннеля.
На данный момент устройство поддерживает протокол защиты передаваемых данных ESP (Encapsulating Security Payload) и исключительно туннельный режим работы, когда у пакетов появляются дополнительные заголовки IP и ESP.
Рисунок
Для шифрования доступны алгоритмы 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>
— номер SP (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