Mikrotik unsafe configuration suggestion to use certificates

Содержание

Схема сети

В головном офисе установлен маршрутизатор GW1. В филиале установлен маршрутизатор GW2. Маршрутизатор в филиале будет инициатором установления защищенного соединения. Маршрутизатор в головном офисе будет ожидать, когда инициатор запросит установление соединения.

Головной офис
IP-адрес внешней сети головного офиса: 10.1.100.0/24
IP-адрес внешнего интерфейса маршрутизатора GW1: 10.1.100.1/24

IP-адрес внутренней сети головного офиса: 192.168.15.0/24
IP-адрес внутреннего интерфейса маршрутизатора GW2: 192.168.15.1/24

Филиал
IP-адрес внешней сети головного офиса: 10.1.200.1/24
IP-адрес внешнего интерфейса маршрутизатора GW1: 10.1.200.1/24

IP-адрес внутренней сети головного офиса: 192.168.25.0/24
IP-адрес внутреннего интерфейса маршрутизатора GW2: 192.168.25.1/24

Настройка

Настройка первого маршрутизатора

Через графический интерфейс

Настройка IPsec-пира. На первом этапе надо указать адрес пира (маршрутизатора с которым будет устанавливаться соединение). В качестве алгоритма шифрования мы выбрали aes-128. Конечно можно использовать и более длинные ключи, но это не имеет практического смысла, т. к. даже для подбора такого ключа требуется очень-очень много лет. Поэтому мы считаем, что более длинные ключи нужны либо в маркетинговых целях либо, если вы очень заморочены на глобальной слежке правительства. Сертификат другого маршрутизатора (Remote Certificate) мы не указываем, т. к. авторизация сертификата будет производиться с помощью ключа удостоверяющего центра, который был импортирован ранее.

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

Настройка правила обхода NAT.Если теперь попробовать установить туннель IPsec он не заработает и пакеты будут отклонены. Это произойдет потому, что оба маршрутизатора используют правило NAT, которое изменяет адрес источника после того, как пакет шифруется. Удаленный маршрутизатор принимает шифрованный пакет, но не может расшифровать его потому, что адрес источника не совпадает с адресом, который указан в настройках политики. Для более подробную информацию о прохождении пакетов можно увидеть здесь: http://wiki.mikrotik.com/wiki/Manual:Packet_Flow#IPsec_encryption. Правило обхода NAT обязательно должно находиться выше правила "masquerade".

Читайте также:  Asus rog strix fusion wireless

Примечание: Если правило обхода NAT было создано после того, как было установлено защищенное соединение, то оно не заработает. Для того, что бы оно начало работать надо либо удалить все соединения на вкладке "Connections" у файервола либо перезагрузить маршрутизатор.

И с помощью захвата и перетаскивания мышью перетянем правило так, что бы оно находилось выше правила "masquerade".

Через консоль

/ip ipsec peer
add address=10.1.100.2/32 enc-algorithm=aes-128 generate-policy=port-strict send-initial-contact=no nat-traversal=no auth-method=rsa-signature certificate=server comment=filial1

/ip ipsec policy
add action=encrypt src-address=192.168.15.0/24 dst-address=192.168.25.0/24 sa-src-address=10.1.100.1 sa-dst-address=10.1.200.1 ipsec-protocols=esp tunnel=yes comment=filial1

/ip firewall nat
add chain=srcnat action=accept place-before=0 src-address=192.168.15.0/24 dst-address=192.168.25.0/24

Настройка второго маршрутизатора

Через графический интерфейс

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

Настройка политики IPsec.

Через консоль

/ip ipsec peer
add address=10.1.100.1/32 hash-algorithm=sha1 enc-algorithm=aes-128 send-initial-contact=yes nat-traversal=no auth-method=rsa-signature certificate=client1 comment=HQ

/ip ipsec policy
add action=encrypt src-address=192.168.25.0/24 dst-address=192.168.15.0/24 sa-src-address=10.1.100.2 sa-dst-address=10.1.100.1 ipsec-protocols=esp protocol=all tunnel=yes comment=HQ

/ip firewall nat
add chain=srcnat action=accept place-before=0 src-address=192.168.25.0/24 dst-address=192.168.15.0/24

Настройка маршрутизации

Маршрутизация при использовании IPsec "в чистом виде" не может быть использована, т. к. IPsec не создает виртуальный интерфейс, которому может быть назначен IP-адрес и добавлена запись в таблицу маршрутизации.

Следует учесть

  • AES является единственным алгоритмом, который поддерживается модулем аппаратного шифрования, если такой установлен на маршрутизатор.
  • Максимальное значение MTU при котором не будет фрагментации с использованием IPsec с алгоритмами SHA1 для подписи и AES-128 для шифрования = 1418. При использовании других алгоритмов значение MTU будет другим. Если используется механизм обхода NAT IPsec, следует понизить MTU на 28.
  • AES является единственным алгоритмом, который поддерживается модулем аппаратного шифрования, если такой установлен на маршрутизатор.
  • IPSec очень нестабильно работает за NAT’ом. Поэтому желательно, что бы внешние интерфейсы маршрутизаторов имели "белые" IP-адреса.
Читайте также:  Примеры блок схем алгоритмов

Проверка

Через графический интерфейс

Если IPSec-соединение установлено успешно, то в графе Established должен появиться таймер времени (5), который показывает, как давно установлено соединение. Индикатором является именно наличие таймера, а не факт наличия соединения (4), которое в случае проблем будет отображаться, но таймер будет отсутствовать.

Через консоль

Выполнить команду /ip ipsec policy print stats , которая покажет актуальное состояние соединения IPSec. В случае удачи мы должны получить: ph2-state=established.
GW1:

Примечание: Состояние established через консоль будет отображаться только после того, как между двумя сетями произойдет попытка соединения. Например будет запущен ping. До тех пор пока соединение не будет установлено будет отображаться статус no-phase2. При этом через графический интерфейс всегда будет отображаться актуальная информация.

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

/ip pool add name=vpn ranges=10.0.0.2-10.0.0.20

/ip firewall filter add action=accept chain=input dst-port=500,1701,4500 protocol=udp comment=vpn
Показать полностью…

/ip firewall filter move [/ip firewall filter find comment=vpn] 1

/ppp profile add change-tcp-mss=yes local-address=10.0.0.1 name=apple remote-address=vpn use-encryption=yes

/ppp secret add name=bytecoadm password=utellmepass profile=apple service=l2tp

/ip ipsec proposal set [ find default=yes ] enc-algorithms=aes-256-cbc,aes-192-cbc,aes-128-cbc,3des pfs-group=none

/ip ipsec peer add address=0.0.0.0/0 dh-group=modp1024 enc-algorithm=aes-256,aes-128,3des exchange-mode=main-l2tp generate-policy=port-strict passive=yes secret=vpnbyteco

/ip firewall nat add action=masquerade chain=srcnat out-interface=all-ppp comment=vpn

/ip firewall nat move [/ip firewall nat find comment=vpn] 1

/interface l2tp-server server set enabled=yes authentication=mschap2

Если у вас только два офиса и в каждом только один провайдер, можно и IPSec в туннельном режиме.
Но я бы делал GRE-туннель с заворачиванием трафика в IPSec. Бонусы — прозрачная маршрутизация в одной таблице (в политики можно не смотреть), возможность подключения динамической маршрутизации, возможность построения отказоустойчивой структуры.
Например, если у вас в одном из офисов два провайдера, у вас будет два туннеля. Если один из провайдеров сломается, протокол динамической маршрутизации направит трафик в резервный туннель. В результате у вас будет отказоустойчивый канал между офисами с практически незаметным переключением при отказе.
На чистых туннелях IPSec такое сделать непросто, если вообще возможно.
А если у вас будет три офиса, это вообще маст хэв 🙂

Читайте также:  Регулятор скорости вращения вентилятора 12в схема

Вот пример конфига.

router 1:
—создаем GRE-туннель
/interface gre
add !keepalive local-address=***router 1 WAN IP*** name=gre1 remote-address=***router 2 WAN IP***

— и ip-адрес к нему
/ip address
add address=10.10.10.1/30 interface=gre1 network=10.10.10.0/30

—(политика согласования IKE у меня сделана на сертификатах, у вас может быть на pre-shared key — это каждый выбирает для себя; главное, чтобы с обеих сторон было одинаково)
/ip ipsec peer
add address=***router 2 WAN IP***/32 auth-method=rsa-signature certificate=cert-vpn dh-group=modp768 dpd-interval=10s dpd-maximum-failures=3 enc-algorithm=aes-256
local-address=***router 1 WAN IP*** nat-traversal=no passive=yes remote-certificate=cert-endpoint

— политика шифрования трафика GRE от нас в удаленный офис
/ip ipsec policy
set 0 disabled=yes
add dst-address=***router 2 WAN IP***/32 level=unique proposal=***ваша политика шифрования*** protocol=gre sa-dst-address=***router 2 WAN IP*** sa-src-address=***router 1 WAN IP*** src-address=
***router 1 WAN IP***/32

— и прописываем статический маршрут в удаленную сеть
/ip route add distance=1 dst-address=***подсеть второго офиса*** gateway=10.10.10.2

—Еще может понадобиться сделать правило firewall для обмена трафиком GRE между офисами:
/ip firewall filter
add chain=input comment="GRE from other office" dst-address=***router 1 WAN IP*** src-address=***router 2 WAN IP*** protocol=gre

router 2 — настройки отображаются зеркально:

/interface gre
add !keepalive local-address=***router 2 WAN IP*** name=gre1 remote-address=***router 1 WAN IP***

/ip address
add address=10.10.10.2/30 interface=gre1 network=10.10.10.0/30

/ip ipsec peer
add address=***router 1 WAN IP***/32 auth-method=rsa-signature certificate=cert-vpn dh-group=modp768 dpd-interval=10s dpd-maximum-failures=3 enc-algorithm=aes-256
local-address=***router 2 WAN IP*** nat-traversal=no passive=yes remote-certificate=cert-endpoint

/ip ipsec policy
set 0 disabled=yes
add dst-address=***router 1 WAN IP***/32 level=unique proposal=***ваша политика шифрования*** protocol=gre sa-dst-address=***router 1 WAN IP*** sa-src-address=***router 2 WAN IP*** src-address=
***router 2 WAN IP***/32

/ip route add distance=1 dst-address=***подсеть первого офиса*** gateway=10.10.10.1

/ip firewall filter
add chain=input comment="GRE from other office" dst-address=***router 2 WAN IP*** src-address=***router 1 WAN IP*** protocol=gre