IPSec между ISR Cisco и 3G-роутером RUH2 с использованием динамически выделяемых IP

в 15:51, , рубрики: Cisco, ipsec, vpn, Серверное администрирование, Сетевые технологии

Задача. Необходимо организовать обмен данными с удаленными сетями, не прибегая к услуге оператора сотовой связи (далее ОпСоС) «Статический белый IP», ввиду ее дороговизны.

Схема представлена на следующем рисунке:
image

Стоит отметить, что роутер RUH2 (производства компании Радиофид системы) в настоящее время снят с производства, но т.к. несколько этих роутеров уже задействованы в организации обмена данными, я решил оптимизировать их работу.

Роутер работает на базе ОС Linux и для IPSec-туннелей в нем присутствует модуль Racoon, настройка которого осуществляется через веб-интерфейс.

На ЛВС предприятия установлен маршрутизатор Cisco (в моем случае CISCO1921/K9) со статическим внешним адресом (a.b.c.d).

Устройствам RUH2 ОпСоС выдает динамические адреса, при каждом установлении соединения разные, поэтому нельзя заранее знать с какого адреса будет установлено соединение. Причем, при перезагрузке роутера этот адрес с высокой долей вероятности будет другим.

В IPSec-сессии аутентификация устройства может осуществляться с помощью предопределенных ключей, но ввиду того, что заранее неизвестно с какого адреса устройство выйдет на связь, необходимо прописывать в маршрутизатор строку вида:

crypto isakmp key cisco123 address 0.0.0.0 0.0.0.0 no-xauth

Т.е. ключ действует для всех адресов, а это небезопасно ввиду того, что при компрометации ключа злоумышленник сможет установить шифрованный канал и получить доступ в сеть предприятия.

В этом случае рекомендуется использовать сертификаты X.509. Необходимо на маршрутизаторе настроить центр сертификации, который будет выдавать сертификаты для роутеров RUH2. Строго говоря, центр сертификации может быть не обязательно на роутере CISCO, главное что бы этот центр выдавал сертификаты устройствам для установления соединения. Подробно о настройке центра сертификации на роутерах CISCO можно почитать здесь.

Для установления соединения на роутере необходимо настроить trustpoint, которой будет выдан сертификат центром сертификации. В режиме enable необходимо набрать команду:

ESKO-main-gw(config)#crypto key generate rsa general-keys label VPN-key modulus 2048

Где VPN-key – название пары ключей для использования ее в trustpoint, modulus 2048 – размерность ключа.

Далее настраиваем trustpoint, даем команду:

R1(config)#crypto pki trustpoint VPN-esko

Далее роутер входит в режим настройки trustpoint, в этом режиме даем следующие команды:

enrollment url http://a.b.c.d:80

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

serial-number none

Не включать в сертификат серийный номер маршрутизатора.

fqdn none

Не включать в сертификат пользовательское доменное имя.

ip-address none

Не включать в сертификат IP-адрес маршрутизатора.

subject-name cn=ESKO-main-gw.esko.local,o=esko,l=spb,c=ru

Имя субъекта сертификата, задается в соответствии с форматом X.500. Описание некоторых полей:

CN: Common Name – произвольное имя
O: Organization – название организации
L: Location – место расположения, город
C: Country — страна

revocation-check crl

Метод проверки списка отозванных сертификатов.

crl cache delete-after 5

Как быстро необходимо очищать кэш после проверки списка отозванных сертификатов.

rsakeypair VPN-key

Имя используемой пары ключей.

После заведения этих настроек необходимо выйти из режима конфигурирования trustpoint в режим глобального конфигурирования (exit) и дать команду:

R1(config)#crypto pki authenticate VPN-esko

Маршрутизатор CISCO запросит корневой сертификат сервера сертификации и предложит подтвердить:

Certificate has the following attributes:
Fingerprint MD5: 4CDFCBCA 7807C4C9 5B054FA5 329301DB
Fingerprint SHA1: E0E35CC8 75C3639C 445D12D8 4BA298AB 2E4E7004
% Do you accept this certificate? [yes/no]:

Отвечаем yes, cisco подтвердит, что корневой сертификат принят:

Trustpoint CA certificate accepted.

Далее, запросим сервер выдать нам сертификат:

R1(config)#crypto pki enroll VPN-esko

% Start certificate enrollment…
% Create a challenge password. You will need to verbally provide this
password to the CA Administrator in order to revoke your certificate.
For security reasons your password will not be saved in the configuration.
Please make a note of it.

Password:
Re-enter password:

% The subject name in the certificate will include: cn=ESKO-main-gw.esko.local,o=esko,l=spb,c=ru
% The fully-qualified domain name will not be included in the certificate
Request certificate from CA? [yes/no]: yes
% Certificate request sent to Certificate Authority
% The 'show crypto pki certificate verbose VPN-esko' commandwill show the fingerprint.

В процессе запроса маршрутизатор запросит пароль для сертификата и запросит подтверждение. Вводим пароль (опционально) и подтверждаем создание запроса.
После этого на сервере сертификации появится запрос:

*Oct 15 13:53:45.367: CRYPTO_PKI: Certificate Request Fingerprint MD5: F70432EB 59E791A6 48F301C4 B59C67EB
*Oct 15 13:53:45.371: CRYPTO_PKI: Certificate Request Fingerprint SHA1: 18AA1D1A 1DD7BED2 FEA666FF 1D32F8BA B559FA07

Просмотреть запрос можно на сервере сертификации (в случае если он на CISCO) следующей командой:

R1#sh crypto pki server CA-esko

Enrollment Request Database:
Subordinate CA certificate requests:
ReqID State Fingerprint SubjectName
— RA certificate requests:
ReqID State Fingerprint SubjectName
— Router certificates requests:
ReqID State Fingerprint SubjectName
— 1 pending F70432EB59E791A648F301C4B59C67EB cn=ESKO-main-gw.esko.local,o=esko,l=spb,c=ru

Что бы подтвердить выдачу сертификата, необходимо дать следующую команду:

R1#crypto pki server CA-esko grant 1

Через некоторое время trustpoint автоматически получит выданный сертификат:

*Oct 15 14:03:01.303: %PKI-6-CERTRET: Certificate received from Certificate Authority

Следующим этапом, необходимо выдать роутеру RUH2 сертификат, подписанный этим же центром сертификации.

В отличии от CISCO RUH2 не умеет самостоятельно автоматически запрашивать сертификат, поэтому сделаем это вручную.

Для всех манипуляций при создании сертификата роутеру я использую библиотеку утилиту OpenSSL.

Для начала создадим закрытый ключ:

C:OpenSSLbin>Openssl genrsa -out c:keysprivate.key 2048

Generating RSA private key, 2048 bit long modulus
............................................................+++
.................................................................................................................................................................+++
e is 65537 (0x10001)

В папке c:keys появился файл private.key примерно следующего содержания:

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAz1vjlthggHHmSBWVgcNf7aDDGPgik9xKZuJjEBgREr8x5RUa

GzmSg7cOhrzzTBWOUqTggMD5uKV4Cgei3cA+TKRXv2dRjfVCL3s=
-----END RSA PRIVATE KEY-----

Далее, на основе этого ключа создадим запрос к центру сертификации:

C:OpenSSLbin>openssl.exe req -new -key c:keysprivate.key -out c:keysrequest.csr

Утилита OpenSSL задаст ряд вопросов, касаемых этого сертификата:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
— Country Name (2 letter code) [RU]:
State or Province Name (full name) []:
City [SPB]:
Organization Name (eg, company) [ESKO]:
Organizational Unit Name (eg, section) []:
Common Name []:RUH2.esko.local
email []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Эти поля аналог того, что в cisco мы задавали в trustpoint командой subject-name.
После ввода значений в папке c:keys появляется файл запроса сертификата следующего содержания:

-----BEGIN CERTIFICATE REQUEST-----
MIICiTCCAXECAQAwRDELMAkGA1UEBhMCUlUxDDAKBgNVBAcMA1NQQjENMAsGA1UE

Q3H/EtMGltY1QS/9DsEnta+k7oCKPTeei3S2v9Y=
-----END CERTIFICATE REQUEST-----

Необходимо скопировать это в буфер обмена, и на CISCO, там где работает центр сертификации ввести команду:

R1#crypto pki server CA-esko request pkcs10 terminal

CISCO выдаст запрос

PKCS10 request in base64 or pem

% Enter Base64 encoded or PEM formatted PKCS10 enrollment request.
% End with a blank line or «quit» on a line by itself.

Далее необходимо из буфера обмена скопировать запрос, в конце набрать quit
Теперь можно посмотреть созданный запрос:

R1#sh crypto pki server CA-esko requests

Enrollment Request Database:

Subordinate CA certificate requests:
ReqID State Fingerprint SubjectName
— RA certificate requests:
ReqID State Fingerprint SubjectName
— Router certificates requests:
ReqID State Fingerprint SubjectName
— 2 pending 4468493FA262890CC75EEF18AC5AF6DF cn=RUH2.esko.local,o=ESKO,l=SPB,c=RU

Мы увидим запрос с полями, заданными утилитой OpenSSL.
Подтвердим выдачу сертификата по этому запросу, маршрутизатор сразу выдаст нам его в окне терминала:

R1#crypto pki server CA-esko grant 2

% Granted certificate:
-----BEGIN CERTIFICATE-----
MIIEQjCCAiqgAwIBAgIBAzANBgkqhkiG9w0BAQQFADBBMQswCQYDVQQGEwJydTEM

jhHvAo/0oVfLPZ9dPdj9Y1efawXI4a/zGf0GTmEi+v7d8Psl9Wk=
-----END CERTIFICATE-----

Необходимо скопировать сертификат в буфер обмена и сохранить в файл. Внимание: копировать нужно все, включая первую и последнюю строки, в которых написано BEGIN CERTIFICATE и END CERTIFICATE.
Еще нужно запросить собственный сертификат trustpoint (в режиме глобального конфигурирования):

R1(config)#crypto pki export VPN-esko pem terminal

% CA certificate:
-----BEGIN CERTIFICATE-----
MIIFYDCCA0igAwIBAgIBATANBgkqhkiG9w0BAQQFADBBMQswCQYDVQQGEwJydTEM

uQVU8GLro73NQ9Jo2JXt2qfZY9SFsomiqJugxReyM4umZ9oX
-----END CERTIFICATE-----

% General Purpose Certificate:
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIBAjANBgkqhkiG9w0BAQUFADBBMQswCQYDVQQGEwJydTEM

a0G+T+rXEYq2ywc=
-----END CERTIFICATE-----

Роутер выдаст корневой сертификат сервера сертификации и сертификат trustpoint. Каждый необходимо сохранить в отдельный файл.

Далее, на маршрутизаторе с которым необходимо устанавливать соединение (и там где настроена trustpoint) настроим ipsec.

Все делается в режиме глобального конфигурирования.

Настроим 1-ю фазу:

crypto isakmp policy 30
encr aes
hash sha256
group 14
lifetime 3600
authentication rsa-sig

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

Создадим карту сертификатов. Она нужна что бы принимать соединения от устройств с определенными атрибутами сертификатов:

crypto pki certificate map RUH2-cert-map 10
subject-name co ruh2.esko.local

Последняя строка говорит о том что этой карте сертификатов соответствуют только те, в которых содержится строка ruh2.esko.local.

Создадим isakmp-профиль.

crypto isakmp profile RUH2-isapr
self-identity address
ca trust-point VPN-esko
match certificate RUH2-cert-map
local-address GigabitEthernet0/0

Описание использованных команд

self-identity address

Идентификатором роутера будет являтся IP-адрес

ca trust-point VPN-esko

Trustpoint, используемый для аутентификации

match certificate RUH2-cert-map

Указывает на карту сертификатов для определения устойств, с которыми надо установливать соединение

local-address GigabitEthernet0/0

Уточняющая команда для определения IP-адреса роутера CISCO

Далее настроим 2ю фазу:

R1(config)#crypto ipsec transform-set RUH2-ts esp-aes esp-sha-hmac
R1 (cfg-crypto-trans)#mode tunnel

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

Теперь создадим динамическую крипто-карту:

crypto dynamic-map RUH2-dyncm 1000
set security-association lifetime seconds 28800
set transform-set RUH2-ts
set pfs group2
set isakmp-profile RUH2-isapr
reverse-route

Описание использованных команд

set security-association lifetime seconds 28800
Установление времени жизни сессии 2й фазы, т.е. как часто будет меняться ключ шифрования.

set transform-set RUH2-ts

Указывает transform-set, т.е. как шифровать траффик

set pfs group2

Для большей безопасности. Не обязательная. Указывает дополнительный режим формирования ключей шифрования.

set isakmp-profile RUH2-isapr

Указывает какой isakmp-профиль необходимо использовать.

reverse-route

Важная команда. Роутер будет добавлять маршрут в таблицу маршрутизации для отправки пакетов в удаленную сеть.

Теперь привяжем динамическую крипто-карту к статической:

R1(config)#crypto map ISP-statcm 500 ipsec-isakmp dynamic RUH2-dyncm

И применим статическую крипто-карту на интерфейсе, который смотрит в сторону интернета:

R1(config)#interface GigabitEthernet0/0
R1(config-if)#crypto map ISP-statcm

Настройка роутера cisco на этом окончена. Приступаем к настройке RUH2. Для этого зайдем в веб-интерфейс роутера, в раздел Configuration, далее в раздел IPSec.

Настройки следующие:

IPSec между ISR Cisco и 3G-роутером RUH2 с использованием динамически выделяемых IP - 2

Описание полей, заданных в роутере

Description
Название туннеля. Может быть любым.

Remote IP Address
Адрес удаленного маршрутизатора CISCO.

Remote Subnet и Remote Subnet Mask
Указывает на то, траффик для какой сети будет направляться в туннель.

Local Subnet и Local Subnet Mask
Эту информацию RUH2 передает на удаленный роутер CISCO, что бы тот понимал какой траффик надо направлять в туннель.

Key Lifetime (sec)
Время «жизни» ключа, то что за CISCO задается параметром set security-association lifetime seconds.

IKE Lifetime (sec)
Время жизни 1й фазы (isakmp), то что на CISCO задается параметром lifetime в политике isakmp.

NAT Traversal
Включает режим NAT-T, который необходим если RUH2 работает за NAT ОпСоСа.

Authenticate Mode
Метор аутентификации. Выбираем режим X.509 сертификатов.

Verify Certificate
Режим проверки сертификатов. Нужно отключать. Иначе RUH2 выдает ошибки об отсутствии поля AltSubjectName, а его в CISCO можно задать только в самоподписанной trustpoint. В свою очередь, использовать самоподписанные trustpoint нельзя, т.к. необходимо что бы все сертификаты выдавались одним центром сертификации.

Encryption Algorythm
Hash Algorythm
DH Group
Настройки 1й фазы на RUH2, должны совпадать с настройками isakmp policy в CISCO.

Encryption Algorythm
Authentication Algorythm
PFS Group
Настройки 2й фазы на RUH2, должны совпадать с настройками transform-set и pfs group в CISCO.

My Identifier Type
Указывает как идентифицировать RUH2 на удаленной стороне, не имеет значения, т.к. происходит проверка сертификата.

Peers Identifier Type
Указывает как идентифицировать удаленную сторону. Используем IP-адрес роутера CISCO.

Verify Identifier
Указывает осуществлять ли проверку удаленной стороны. Можно включить для большей безопасности.

Ping Test IP и Ping Test Interval (min)
Важно включить, т.к. туннель создается при наличии траффика, а CISCO не может инициировать соединение при наличии траффика в сеть, т.к. у RUH2 динамический IP-адрес.

CA Certificate
Сертификат центра сертификации, необходимо скопировать из сохраненного файла.

Remote Certificate
Сертификат trustpoint удаленного маршрутизатора, необходимо скопировать из сохраненного файла.

Local Certificate
Сертификат RUH2, выданный центром сертификации, необходимо скопировать из сохраненного файла.

Local Private Key
Закрытый ключ, необходимо скопировать из сохраненного файла.

После заведения настроек нажимаем Apply и проверяем установленное соединение.

Проверяем 1-ю фазу.

На CISCO даем команду

R1#sh crypto isakmp sa

В числе прочего можно увидеть:

a.b.c.d 188.170.72.35 QM_IDLE 1014 ACTIVE

В моем случает RUH2 виден из интернета под адресом 188.170.72.35.

Проверяем 2-ю фазу

R1#sh crypto ipsec sa interface g0/0

Результаты

interface: GigabitEthernet0/0
Crypto map tag: ISP-statcm, local addr a.b.c.d

protected vrf: (none)
local ident (addr/mask/prot/port): (192.168.1.0/255.255.255.0/0/0)
remote ident (addr/mask/prot/port): (172.16.0.0/255.255.255.128/0/0)
current_peer 188.170.72.35 port 48015
PERMIT, flags={}
#pkts encaps: 133, #pkts encrypt: 133, #pkts digest: 133
#pkts decaps: 135, #pkts decrypt: 135, #pkts verify: 135
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 0, #recv errors 8

local crypto endpt.: a.b.c.d, remote crypto endpt.: 188.170.72.35
path mtu 1500, ip mtu 1500, ip mtu idb GigabitEthernet0/0
current outbound spi: 0xEC8D5EF(248042991)
PFS (Y/N): Y, DH group: group2

inbound esp sas:
spi: 0x1231809D(305234077)
transform: esp-aes esp-sha-hmac,
in use settings ={Tunnel UDP-Encaps, }
conn id: 2019, flow_id: Onboard VPN:19, sibling_flags 80000046, crypto map: ISP-statcm
sa timing: remaining key lifetime (k/sec): (4506190/27680)
IV size: 16 bytes
replay detection support: Y
Status: ACTIVE

inbound ah sas:

inbound pcp sas:

outbound esp sas:
spi: 0xEC8D5EF(248042991)
transform: esp-aes esp-sha-hmac,
in use settings ={Tunnel UDP-Encaps, }
conn id: 2020, flow_id: Onboard VPN:20, sibling_flags 80000046, crypto map: ISP-statcm
sa timing: remaining key lifetime (k/sec): (4506229/27680)
IV size: 16 bytes
replay detection support: Y
Status: ACTIVE

outbound ah sas:

outbound pcp sas:

Проверяем таблицу маршрутизации:
R1#sh ip route
В числе прочего, есть такие строки:
172.16.0.0/25 is subnetted, 1 subnets
S 172.16.0.0 [1/0] via 188.170.72.35

Проверяем пинг:

R1#ping 172.16.0.1 source g0/1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.0.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1
!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 324/357/388 ms

Для пинга используем внутренний интерфейс, смотрящий в корп. сеть.

На этом настройка роутеров окончена.

P.S.: Естественно, для прохождения траффика IPSec на внешнем интерфейсе должны быть разрешены соответствующие протоколы и открыты порты. В моем случае это сделано с помощью следующего access-list:

ip access-list extended IPSEC-acl
permit esp any any
permit ahp any any
permit udp host a.b.c.d eq isakmp any
permit udp host a.b.c.d eq non500-isakmp any
permit udp any host a.b.c.d eq isakmp
permit udp any host a.b.c.d eq non500-isakmp

Автор: Евгений Якубов

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js