Зачем все это

Эта заметка написана для того, чтобы облегчить путь тем, кто столкнется с проблемой после меня. Задача кажется тривиальной, но как обычно, в процессе вылезли проблемы, которые решать пришлось методом долгого изучения манов и бесконечных перенастроек. В интернете почему то очень мало информации по настройке Cisco Firepower Threat Defense (FTD), а тем более - в связке с Mikrotik.

Исходные данные

У нас есть:

  • Cisco FTD 2120

  • Mikrotik hEX S

  • Несколько маршрутизируемых сетей за Cisco, одна или несколько локальных сетей за Mikrotik.

  • Необходимость связать туннелем удаленный офис на Mikrotik с головным офисом за Cisco FTD.

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

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

Начнем со стороны Mikrotik. Предполагаю, что на нем стоит свежая прошивка (в моем случае это 6.48.4), и он уже настроен как роутер "белым" адресом наружу.

Локальная сеть Mikrotik в нашем случае:

192.168.88.0/24

Сети со стороны Cisco это множество локальных подсетей:

172.16.x.x/24
192.168.x.x/24
10.10.x.x/24
....

Маршрутизируемый адрес в примере для Mikrotik будет:

1.2.3.1/32

Маршрутизируемый адрес для Cisco:

1.2.3.2/32

Mikrotik (Winbox)

Начинаем настройку IPsec:

IP - IPsec - Profiles

  • Добавляем имя

  • Hash алгоритмы sha256

  • PRF алгоритмы sha256

  • Алгоритмы шифрования aes-256

  • Diffie Hellman группа modp2048 (она же группа 14 в другом наименовании, подробнее есть в мануале у Mikrotik'а)

    Все остальное оставляем по умолчанию.

Дальше открываем вкладку proposals

  • Задаем имя

  • Алгоритмы аутентификации sha256

  • Алгоритмы шифрования aes-256 cbc

  • PFS группа modp2048

Создаем Peer

  • Указываем имя

  • Address - это адрес пира, то есть Cisco (1.2.3.2)

  • Local Address - это адрес самого Mikrotik (1.2.3.1)

  • Выбираем ранее созданный профиль

  • Exchange Mode нам нужен IKE2

Переходим на вкладку Identities

  • Выбираем настроенный пир (FTD)

  • Метод аутентификации pre shared key

  • В поле Secret указываем сам ключ (желательно длинный и сложный. Сохраним его для настройки ответной стороны)

  • Notrack Chain нужно выбрать prerouting

Теперь переходим к главному - настройке Policies

Основная загвоздка в настройке со стороны Mikrotik - это то, что для одной политики возможно указать только одну подсеть. Если нам нужно связать 2 подсети, это не проблема. В случае же с множеством подсетей из разных диапазонов - возникает первая сложность. Нужно делать политику для каждой подсети.

  • Выбираем созданный ранее пир (FTD)

  • Выбираем чекбокс Tunnel

  • Src. Address - это подсеть со стороны Mikrotik, которую мы хотим отправить в туннель (192.168.88.0/24)

  • Dst.Address - это подсеть, которую мы хотим получить от FTD (172.16.110.0/24)

На второй вкладе (Actions) указываем

  • Level: unique - для того, чтобы иметь возможность работы нескольких политик одновременно.

  • Выбираем proposal из ранее созданного (FTD_proposal)

Повторяем настройки для каждой подсети, которую хотим добавить в туннель. От каждой локальной, к каждой удаленной.

Теперь нужно настроить Firewall. Начнем с создания адресных листов.

IP - Firewall - Address Lists

  • Указываем имя (для последующих записей нужно будет выбрать уже существующее имя для добавления в него новой записи)

  • Указываем подсеть

Наша задача: создать 2 листа. Один - FTD_networks - с сетями, которые мы будем получать. А второй - Mikrotik_networks - с локальными сетями на Mikrotik.

Переходим на вкладку Filter Rules. Здесь нам нужно создать разрешающие правила для наших подсетей, чтобы роутер их пропускал.

  • Chain: forward

  • Advanced - Src. Address List: Mikrotik_networks

  • Advanced - Dst. Address List: FTD_networks

  • Action: accept

И второе правило, где Source и Destination Address List меняются местами. Наши разрешающие правила должны быть выше запрещающих! Поэтому их нужно перетащить вверх, если это не так.

Переходим на вкладку NAT.

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

  • Chain: srcnat

  • Advanced - Src. Address List: Mikrotik_networks

  • Advanced - Dst. Address List: FTD_networks

  • Action: accept

Как и в правилах фильтрации, нужно сделать 2 правила, поменяв во втором местами Source и Destination. А так же, поднять эти правила выше правила masquerade.

Переходим на вкладку Raw.

Здесь аналогично, нужно сделать 2 правила для прероутинга

  • Chain: prerouting

  • Advanced - Src. Address List: Mikrotik_networks

  • Advanced - Dst. Address List: FTD_networks

  • Action: accept

Как и в предыдущих вкладках, нужно сделать 2 правила, поменяв во втором местами Source и Destination.

На этом настройка со стороны Mikrotik закончена. Можно приступать к ответной стороне.

Cisco FTD (Firepower Management Center)

Логика настройки firewall и NAT со стороны FTD практически такая же, а вот сам туннель настраивается по-другому. С него и начнем.

Для начала, нам нужно создать группы для подсетей, которые мы отдаем в туннель и которые получаем.

Заходим Objects - Object Management. Add Group

В моем случае, для подсетей, которые мы отдаем это FTD_Subnets. Добавляем в Selected Networks все подсети, что хотим отдавать в туннель. А получаем мы одну подсеть, поэтому ее задаем через Add network - Mikrotik_network.

Несмотря на это, лучше задавать группу, даже если внутри будет лишь одна подсеть, так как в случае расширения - намного проще будет добавить в группу новую подсеть, чем добавлять новые правила под каждый объект.

Переходим к созданию туннеля. Devices - VPN -Site to Site. Add VPN Firepower Threat Defense.

  • Указываем имя для нашего подключения

  • Топология Точка-Точка

  • Версия IKEv2

Во вкладке Endpoints указываем:

Node A - это Mikrotik

  • Device: Extranet

  • Device Name: указываем имя

  • IP Address: static, 1.2.3.1

  • Protected Networks: сети, которые мы хотим получать (Mikrotik_network).

Node B - это наша локальная FTD

  • Device: FTD2120

  • Interface: выбираем наружный интерфейс

  • IP Address: 1.2.3.2 - должен подставиться сам

  • Protected Networks: сети, которые мы хотим отдавать (FTD_Subnets).

На вкладке IKE заполняем IKEv2 Settings:

  • Policy - создаем новую:

    Задаем имя

    Integrity Algorythms: SHA256

    Encryption Algorythms: AES-256

    PRF Algorythms: SHA256

    Diffie-Hellman Group: 14

  • Authentication Type: Pre-shared Manual Key, куда вставляем наш сохраненный ключ

На вкладке IPsec заполняем:

  • Crypto Map Type: Dynamic

  • IKEv2 Mode: Tunnel

  • IKEv2 IPsec Proposals: создаем новые:

    Задаем имя

    ESP Hash: SHA-256

    ESP Encryption: AES-256

  • Enable reverse Route Injection: должна быть включена

  • Самое важное! Enable Perfect Forward Secrecy: должна быть включена

    Modulus Group: 14

Без включения этой функции, на Mikrotik будет активна только одна Policy одновременно. То есть работать будет только одна подсеть.

Все остальные параметры оставляем по умолчанию. Не забываем сохранить конфигурацию.

Теперь нам нужно (аналогично Mikrotik'у) сделать разрешающие правила и исключения NAT.

Переходим в Policies - Access Control и создаем 2 правила

Из зоны Inside в Outside, от Mikrotik_network к FTD_Subnets, Allow. Inspection и Logging можно добавить по вкусу. И второе правило, где все поменяно местами.

В моем случае, зона Inside_Zone - это зона, за которой находятся все подсети, которые необходимо отправить в туннель.Outside_Zone - зона интернет. Если есть дополнительные зоны (DMZ, интерконнекты к другим подсетям) - то нужно сделать правила и для них.

Переходим в Devices - NAT и создаем правило Static, Manual NAT Rule:

  • Source Interace Objects: Inside_Zone

  • Destination Interace Objects: Outside_Zone

  • Original Source: FTD_Subnets

  • Original Destination: Address - Mikrotik_network

  • Translated Source: Address - FTD_subnets

  • Translated Destination: Mikrotik_network

  • На вкладке Advanced: Чекбокс Do not proxy ARP on Destination Interface должен быть включен.

Правило должно быть выше, чем NAT для локальный подсетей.

Проверка

FTD, к сожалению, показывает не настолько много информации, как хотелось бы. посмотреть состояние туннеля и возможные ошибки можно по пути Devices - VPN - Troubleshooting.

Со стороны Mikrotik мы, во-первых, должны увидеть на вкладке IPsec - Active Peers наше соединение в состоянии established

а во-вторых, в IPsec - Policies все политики должны стать A (active) и PH2 State established.

Если политики висят в состоянии no phase 2 все кроме одной - то в первую очередь смотрим на настройку Level (unique) в Policies на Mikrotik и на чекбокс Enable Perfect Forward Secrecy в настройке туннеля на cisco FTD.

UPD: в комментах подсказали, что в DH группе можно выставить протокол посерьезнее. Например, ecp521 со стороны Mikrotik (group 21 со стороны Cisco) - на скорость передачи данных и загрузку процессора Mikrotik это практически не влияет (проверил).

Так же, Filter Rules на Mikrotik избыточны, если есть правила по умолчанию (accept in\out ipsec policy), которые разрешают всё в ipsec и наружу из него.

Комментарии (12)


  1. Tarakanator
    27.09.2021 09:52

    modp2048

    А почему так мало? Оно конечно сойдёт, но почему сразу не ecp521 или циска больше не умеет?


    1. gwathedhel Автор
      27.09.2021 10:09

      Циска умеет.

      Я решил, что больше и не надо. Опять же, насколько я понимаю - чем серьезнее алгоритм, тем больше нагрузка. А у Микротика при 250мб\с загрузке через туннель идет 85% загрузка процессора.


      1. Blck-1
        27.09.2021 10:46

        DH используется только при смене ключей и существенно на производительность трафика не влияют


        1. gwathedhel Автор
          27.09.2021 11:12

          В таком случае, вполне можно выставить ecp521 (group 21). На практике сейчас, к сожалению, проверить не могу.


      1. Tarakanator
        27.09.2021 11:17

        Ну так и должно быть. По спецификациям https://mikrotik.com/product/hex_s#fndtn-testresults 350+ мегабит тянет.
        А какие настройки ставить чтобы аппаратное шифрование не вырубилось смотреть здесь https://wiki.mikrotik.com/wiki/Manual:IP/IPsec
        как видите группы DF на это не влияют.


  1. Admaer
    27.09.2021 10:05

    Изначально нам нужно убедиться, что обе наши стороны имеют "белый" маршрутизируемый ip адрес.

    Ну вот, а я уже обрадовался :( На ASA мне удалось настроить IPSec без белых IP на стороне микротиков. Они опознаются по FQDN. Но я не уверен на 100%, что это правильно работает.

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

    В смысле "провайдеры"?


    1. gwathedhel Автор
      27.09.2021 12:21

      Они опознаются по FQDN. Но я не уверен на 100%, что это правильно работает.

      Если я правильно понимаю, то вы используете DDNS чтобы попасть на Микротик. Тогда это возможно без "белого" адреса с его стороны. Но. При условии, что провайдер (или чья это сеть) прокидывает порты для адреса, который резолвится по DDNS. Если он просто NATит изнутри наружу соединения, то туннель с Микротиком не получится поднять. На внешнем адресе просто не будет открыт нужный порт.


  1. Blck-1
    27.09.2021 10:43

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


  1. AcidVenom
    27.09.2021 12:11

    Правила в цепочке Filter избыточны, ими можно пренебречь.


    1. sirota
      29.09.2021 06:53

      И зачем маскарадить впн (зачем вообще маскарадить, это дорого)? Маршруты. Ну на худой конец src-Nat. И к раву вопросы. Надо было в фильтрах оставить, но указать входящие и исходящие интерфейсы. А так без разницы от куда прилетят пакеты, главное чтобы подсети совпали. Рав в этом плане опасен.


      1. AcidVenom
        29.09.2021 10:09

        Маскарада там нет, смотрите внимательно. Raw используется как в стандартном примере из Wiki, чтоб в Conntrack не попадали соединения.


        1. sirota
          29.09.2021 10:22

          Сорян. С телефона смотрел. померещилось видимо )