Juniper SRX и Cisco ASA: серия очередная

от автора

Первый раз строить IPSec между Juniper SRX и Cisco ASA мне довелось ещё в далёком 2014 году. Уже тогда это было весьма болезненно, потому что проблем было много (обычно — разваливающийся при регенерации туннель), диагностировать было сложно (ASA стояла у нашего заказчика, поэтому возможности для дебага были ограничены), но как-то это работало.

image

С той поры и рекомендованный JunOS для SRX обновился на 15.1 (для линейки SRX300, по крайней мере), и ASA научилась в route based IPSec (c версии софта 9.8), что несколько упрощает настройку. И вот на текущей работе не так давно представился шанс снова собрать такую схему. И снова неудачно — при регенерации туннель благополучно падал (и не всегда поднимался без ручного рестарта). И снова в логах тишина и непонятки, а т.к. ASA находилась у нашего партнёра, то и дебажить, соответственно, не было никакой возможности.
И вот теперь представился случай собрать схему, при которой обе стороны (и SRX, и ASA) находятся под нашим управлением, соответственно, поиграться можно на славу.

Диспозиция

Итак, что у нас имеется:

  • Juniper SRX340 (JunOS 15.1X49D150.2)
  • Cisco ASA 5506 (софт 9.8.4)
  • route based IPSec между ними (роутинг будет обеспечиваться BGP, о нём тоже скажу пару слов)

Схема

Конфигурация

Juniper

Начнём с конфигурации SRX. У меня довольно много различных туннелей строится именно на нём, в итоге я пришёл примерно к такой схеме:

set security ike policy IKE-ASA mode main set security ike policy IKE-ASA proposals SHA256-AES128-5-86400 set security ike policy IKE-ASA pre-shared-key ascii-text ...  set security ike gateway GW-ASA ike-policy IKE-ASA set security ike gateway GW-ASA address 192.0.2.2  set security ike gateway GW-ASA dead-peer-detection interval 10 set security ike gateway GW-ASA dead-peer-detection threshold 3 set security ike gateway GW-ASA local-identity inet 198.51.100.2 set security ike gateway GW-ASA external-interface ae0.4 set security ike gateway GW-ASA version v2-only  set security ipsec vpn VPN-ASA bind-interface st0.7 set security ipsec vpn VPN-ASA df-bit clear set security ipsec vpn VPN-ASA vpn-monitor source-interface st0.7 set security ipsec vpn VPN-ASA vpn-monitor destination-ip 169.254.100.2 set security ipsec vpn VPN-ASA ike gateway GW-ASA set security ipsec vpn VPN-ASA ike ipsec-policy SHA256-AES128-3600-14-policy set security ipsec vpn VPN-ASA establish-tunnels immediately  set interfaces st0 unit 7 description "ASA AnyConnect router" set interfaces st0 unit 7 family inet mtu 1436 set interfaces st0 unit 7 family inet address 169.254.100.1/30  set routing-options static route 192.0.2.2/32 next-hop 198.51.100.1  set security zones security-zone ZONE-VPN interfaces st0.7 host-inbound-traffic system-services ping set security zones security-zone ZONE-VPN interfaces st0.7 host-inbound-traffic system-services ike set security zones security-zone ZONE-VPN interfaces st0.7 host-inbound-traffic system-services traceroute set security zones security-zone ZONE-VPN interfaces st0.7 host-inbound-traffic protocols bgp 

Видно, что используется IKEv2, без traffic-selectors (у нас в арсенале и без того достаточно средств, чтобы ограничить хождение трафика — от префикс-листов BGP до security policies). До кучи используется DPD (dead peer detection) и vpn-monitor (у них немного разный тип проверок, для надёжности я использую оба).

Cisco

Конфигурация ASA:

crypto ipsec ikev2 ipsec-proposal SHA256-AES128  protocol esp encryption aes-256 aes-192 aes  protocol esp integrity sha-256  crypto ipsec profile IPSEC-PROFILE-AMS1-VPN2  set ikev2 ipsec-proposal SHA256-AES128  set pfs group14  set security-association lifetime kilobytes unlimited  set security-association lifetime seconds 3600  crypto ikev2 policy 1  encryption aes-256 aes-192 aes  integrity sha256  group 5  prf sha256  lifetime seconds 86400    tunnel-group 198.51.100.2 type ipsec-l2l tunnel-group 198.51.100.2 ipsec-attributes  isakmp keepalive threshold 30 retry 10  ikev2 remote-authentication pre-shared-key ...  ikev2 local-authentication pre-shared-key ...  crypto ikev2 enable outside  interface Tunnel7  nameif l2l-ams1-vpn2  ip address 169.254.100.2 255.255.255.252   tunnel source interface outside  tunnel destination 198.51.100.2  tunnel mode ipsec ipv4  tunnel protection ipsec profile IPSEC-PROFILE-AMS1-VPN2

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

Сравнение конфигов

IKE policy / proposal

crypto ikev2 policy 1  encryption aes-256 aes-192 aes  integrity sha256  group 5  prf sha256  lifetime seconds 86400
set security ike proposal SHA256-AES128-5-86400 description ike-phase1-proposal1 set security ike proposal SHA256-AES128-5-86400 authentication-method pre-shared-keys set security ike proposal SHA256-AES128-5-86400 dh-group group5 set security ike proposal SHA256-AES128-5-86400 authentication-algorithm sha-256 set security ike proposal SHA256-AES128-5-86400 encryption-algorithm aes-128-cbc set security ike proposal SHA256-AES128-5-86400 lifetime-seconds 86400  set security ike policy IKE-ASA mode main set security ike policy IKE-ASA proposals SHA256-AES128-5-86400 set security ike policy IKE-ASA pre-shared-key ascii-text ... 

Здесь начинается некоторая путаница в терминологии. То, что у Cisco называется IKE policy, у Juniper — IKE Proposal. А IKE policy у Juniper похоже на tunnel group у ASA… Лично мне больше нравится подход Juniper, но тут, безусловно, дело привычки.
Надо сказать, настройка IKEv2 (тем более route based) на ASA выглядит всё же куда логичнее, чем crypto maps и прочее безобразие, которое было раньше.

IPSec policy/proposal

crypto ipsec ikev2 ipsec-proposal SHA256-AES128  protocol esp encryption aes-256 aes-192 aes  protocol esp integrity sha-256  crypto ipsec profile IPSEC-PROFILE-SHA256-AES128-3600-14  set ikev2 ipsec-proposal SHA256-AES128  set pfs group14  set security-association lifetime kilobytes unlimited  set security-association lifetime seconds 3600
set security ipsec proposal SHA256-AES128-3600 description ipsec-phase2-proposal set security ipsec proposal SHA256-AES128-3600 protocol esp set security ipsec proposal SHA256-AES128-3600 authentication-algorithm hmac-sha-256-128 set security ipsec proposal SHA256-AES128-3600 encryption-algorithm aes-128-cbc set security ipsec proposal SHA256-AES128-3600 lifetime-seconds 3600  set security ipsec policy SHA256-AES128-3600-14-policy description SHA256-AES128-3600-14-policy set security ipsec policy SHA256-AES128-3600-14-policy perfect-forward-secrecy keys group14 set security ipsec policy SHA256-AES128-3600-14-policy proposals SHA256-AES128-3600

Здесь оба вендора делают плюс-минус одинаково — сначала создаём proposal с параметрами шифрования/аутентификации, а потом навешиваем на него lifetime и pfs.

Gateway

tunnel-group 198.51.100.2 type ipsec-l2l tunnel-group 198.51.100.2 ipsec-attributes  isakmp keepalive threshold 30 retry 10  ikev2 remote-authentication pre-shared-key ...  ikev2 local-authentication pre-shared-key ...
set security ike gateway GW-ASA ike-policy IKE-ASA-LEGAL set security ike gateway GW-ASA address 192.0.2.2 set security ike gateway GW-ASA dead-peer-detection interval 10 set security ike gateway GW-ASA dead-peer-detection threshold 3 set security ike gateway GW-ASA local-identity inet 198.51.100.2 set security ike gateway GW-ASA external-interface ae0.4 set security ike gateway GW-ASA version v2-only

А здесь отличия уже более явные. На ASA PSK указывается непосредственно в настройках пира. Juniper же позволяет здесь задать и исходящий интерфейс и дополнительные опции типа local-identity, плюс ссылается на ike policy (где мы указывали PSK).
Кстати, если вы захотите переделать на ASA IKEv2 в IKEv1 (и наоборот), то у Cisco надо будет пересоздавать всю tunnel-group. А на SRX всего лишь сменить одну опцию. (Правда, далее при commit могут вылезти несовместимые опции, но это уже детали)

VPN / VTI

interface Tunnel7  nameif l2l-ams1-vpn2  ip address 169.254.100.2 255.255.255.252   tunnel source interface outside  tunnel destination 198.51.100.2  tunnel mode ipsec ipv4  tunnel protection ipsec profile IPSEC-PROFILE-SHA256-AES128-3600-14
set security ipsec vpn VPN-ASA bind-interface st0.7 set security ipsec vpn VPN-ASA df-bit clear set security ipsec vpn VPN-ASA vpn-monitor source-interface st0.7 set security ipsec vpn VPN-ASA vpn-monitor destination-ip 169.254.100.2 set security ipsec vpn VPN-ASA ike gateway GW-ASA set security ipsec vpn VPN-ASA ike ipsec-policy SHA256-AES128-3600-14-policy set security ipsec vpn VPN-ASA establish-tunnels immediately  set interfaces st0 unit 7 description "AnyConnect router" set interfaces st0 unit 7 family inet mtu 1436 set interfaces st0 unit 7 family inet address 169.254.100.1/30

И снова конфиг Juniper мне кажется более логичным. VPN настраивается отдельно (он может быть и policy-based), сам security tunnel — отдельно. Отдельное спасибо за «establish-tunnels immediately». Очень полезная опция 😉 (цисководы поймут, о чём я). Ещё один «бонус» SRX — можно строить многоточечные IPSec, как с автообнаружением пиров (работает, к сожалению, только между SRX), так с ручным роутингом. Это, конечно, не полноценный DMVPN, но жизнь в сетапах типа «один центр — много филиалов» значительно облегчает.

Interfaces

Отдельно остановлюсь на настройке интерфейсов, на которых строится IPSec. У Juniper это, соответственно, ae0.4, у ASA — outside

crypto ikev2 enable outside
set security zones security-zone ZONE-INTERNET interfaces ae0.4 host-inbound-traffic system-services ike set security zones security-zone ZONE-VPN interfaces st0.7 host-inbound-traffic system-services ping set security zones security-zone ZONE-VPN interfaces st0.7 host-inbound-traffic system-services traceroute set security zones security-zone ZONE-VPN interfaces st0.7 host-inbound-traffic protocols bgp

На интерфейсах нужно разрешить ike, иначе работать ничего не будет 🙂 Дополнительно, у SRX нужно для туннельного интерфейса разрешить bgp/ospf/whatever для входящих подключений на st0.x интерфейсе

Настройка BGP

Тут всё довольно банально (с одной стороны)

set protocols bgp group ASA type external set protocols bgp group ASA description "AnyConnect router" set protocols bgp group ASA hold-time 30 set protocols bgp group ASA import IMPORT-EBGP-ASA set protocols bgp group ASA export EXPORT-EBGP-ASA set protocols bgp group ASA local-as 64666 set protocols bgp group ASA neighbor 169.254.100.2 peer-as 65001  set policy-options policy-statement EXPORT-EBGP-ASA term 0 from route-filter 10.0.0.0/8 exact set policy-options policy-statement EXPORT-EBGP-ASA term 0 then accept set policy-options policy-statement EXPORT-EBGP-ASA term 1 then reject  set policy-options policy-statement IMPORT-EBGP-ASA term 1 then reject

На ASA отдаём агрегированный префикс нашей локалки — у меня это будет 10/8. От ASA ничего не принимаем, потому что с версии софта 9.8.4 всё равно нельзя анонсировать по BGP адреса management-интерфейсов (что объяснимо) и BVI (что жутко неудобно). Но если у вас за ASA есть ещё какие-то сети, их нужно будет добавить в policy, конечно.

asa(config-router-af)# network 10.255.32.252 mask 255.255.255.254 ERROR: BGP configuration not supported on management-only/BVI interface

Чтобы «увидеть» inside интерфейс, нужно будет на SRX прописать static route в сторону ipsec:

set routing-options static route 10.255.32.252/31 next-hop 169.254.100.2

Вдобавок, ASA до сих пор не умеет в loopback интерфейсы, поэтому все логи/netflow и прочая мы будем отправлять с inside.
В ASA5506 есть встроенный свич, поэтому можно использовать виртуальный BVI-интерфейс (особенно полезно, когда у вас схема «роутер-на-палочке», и используется всего лишь один физический порт.

interface BVI1  nameif inside  security-level 100  ip address 10.255.32.253 255.255.255.254 management-access inside

После этого в нужных местах (logging, snmp, flow) в качестве интерфейса-источника нужно будет указать `inside`.

Если что-то пошло не так a.k.a. troubleshooting

IKE/IPSec

Первое — у вас должны установиться обе фазы IPSec (у Juniper это, собственно, IKE/IPSec).
Смотрим:

admin@srx> show security ike security-associations  Index   State  Initiator cookie  Responder cookie  Mode           Remote Address    2128190 UP     ae7d7d447326218a  2be3b3004ae0e36a  IKEv2          192.0.2.2      admin@srx> show security ipsec security-associations     Total active tunnels: 6   ID    Algorithm       SPI      Life:sec/kb  Mon lsys Port  Gateway      <131077 ESP:aes-cbc-128/sha256 fec3c7d1 2867/ unlim U root 500 192.0.2.2       >131077 ESP:aes-cbc-128/sha256 74d792ca 2867/ unlim U root 500 192.0.2.2    

На ASA:

asa# sho crypto ikev2 sa   IKEv2 SAs:  Session-id:5, Status:UP-ACTIVE, IKE count:1, CHILD count:1  Tunnel-id Local                                               Remote                                                  Status         Role 585564345 192.0.2.2/500                                  198.51.100.2/500                                        READY    RESPONDER       Encr: AES-CBC, keysize: 128, Hash: SHA256, DH Grp:5, Auth sign: PSK, Auth verify: PSK       Life/Active Time: 86400/47018 sec Child sa: local selector  0.0.0.0/0 - 255.255.255.255/65535           remote selector 0.0.0.0/0 - 255.255.255.255/65535           ESP spi in/out: 0xc989d9ea/0xcca8b6d5

У Juniper ещё можно посмотреть статистику по ipsec-туннелю, включая причины падения:

admin@srx> show security ipsec security-associations index 131078 detail   ID: 131078 Virtual-system: root, VPN Name: VPN-ASA-LEGAL-PL   Local Gateway: 198.51.100.2, Remote Gateway: 192.0.2.2   Local Identity: ipv4_subnet(any:0,[0..7]=0.0.0.0/0)   Remote Identity: ipv4_subnet(any:0,[0..7]=0.0.0.0/0)   Version: IKEv2   DF-bit: clear, Copy-Outer-DSCP Disabled, Bind-interface: st0.7   Port: 500, Nego#: 734, Fail#: 0, Def-Del#: 0 Flag: 0x600a29    Tunnel events:      Mon Dec 09 2019 13:40:35: IPSec SA rekey successfully completed (48 times)     Mon Dec 09 2019 00:30:47: IKE SA rekey successfully completed (10 times)     Fri Nov 29 2019 02:13:55: IPSec SA negotiation successfully completed (1 times)     Fri Nov 29 2019 02:13:55: IKE SA negotiation successfully completed (1 times)     Fri Nov 29 2019 02:13:55: No response from peer. Negotiation failed (7 times)     Fri Nov 29 2019 02:10:14: DPD detected peer as down. Existing IKE/IPSec SAs cleared (1 times)     Fri Nov 29 2019 01:39:15: IPSec SA rekey successfully completed (1 times)     Fri Nov 29 2019 00:49:50: IPSec SA negotiation successfully completed (1 times)     Fri Nov 29 2019 00:49:50: IKE SA negotiation successfully completed (1 times)     Fri Nov 29 2019 00:49:30: No response from peer. Negotiation failed (23 times)     Fri Nov 29 2019 00:37:24: DPD detected peer as down. Existing IKE/IPSec SAs cleared (1 times)     Fri Nov 29 2019 00:30:00: IPSec SA rekey successfully completed (77 times)     Thu Nov 28 2019 20:11:31: IKE SA rekey successfully completed (7 times)     Tue Nov 26 2019 08:51:44: IPSec SA negotiation successfully completed (1 times)     Thu Nov 21 2019 21:24:32: IKE SA negotiation successfully completed (1 times)     Thu Nov 21 2019 01:06:27: IKE SA rekey successfully completed (6 times)   Direction: inbound, SPI: 4bd2e2bd, AUX-SPI: 0                               , VPN Monitoring: UP     Hard lifetime: Expires in 3132 seconds     Lifesize Remaining:  Unlimited     Soft lifetime: Expires in 2495 seconds     Mode: Tunnel(10 10), Type: dynamic, State: installed     Protocol: ESP, Authentication: hmac-sha256-128, Encryption: aes-cbc (128 bits)     Anti-replay service: counter-based enabled, Replay window size: 64   Direction: outbound, SPI: 504f306e, AUX-SPI: 0                               , VPN Monitoring: UP     Hard lifetime: Expires in 3132 seconds     Lifesize Remaining:  Unlimited     Soft lifetime: Expires in 2495 seconds     Mode: Tunnel(10 10), Type: dynamic, State: installed     Protocol: ESP, Authentication: hmac-sha256-128, Encryption: aes-cbc (128 bits)     Anti-replay service: counter-based enabled, Replay window size: 64 

Если с IPSec всё в порядке, то нужно смотреть на ACL (security policies, host-inbound правила и т.д.). На крайней случай, можно попробовать перезагрузить коробку (ASA) — мне, бывало, помогает.

BGP

Здесь всё довольно стандартно — если сессия не устанавливается, можно посмотреть через capture, летят ли BGP-hello в обе стороны.

Итого

На этом всё. Не знаю, виной ли тому новый софт, или звёзды так сошлись — но туннель ASA<>SRX держится стабильно и не падает раз в сутки, как было раньше.
Надеюсь, у вас тоже всё получится!


ссылка на оригинал статьи https://habr.com/ru/post/481620/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *