Русский
Русский
English
Статистика
Реклама

Mikrotik

Разблокируем интернет с помощью Mikrotik и VPN подробный туториал

10.07.2020 12:22:13 | Автор: admin

В этом пошаговом руководстве я расскажу, как настроить Mikrotik, чтобы запрещённые сайты автоматом открывались через этот VPN и вы могли избежать танцев с бубнами: один раз настроил и все работает.

В качестве VPN я выбрал SoftEther: он настолько же прост в настройке как и RRAS и такой же быстрый. На стороне VPN сервера включил Secure NAT, других настроек не проводилось.

В качестве альтернативы рассматривал RRAS, но Mikrotik не умеет с ним работать. Соединение устанавливается, VPN работает, но поддерживать соединение без постоянных реконнектов и ошибок в логе Mikrotik не умеет.

Настройка производилась на примере RB3011UiAS-RM на прошивке версии 6.46.11.
Теперь по порядку что и зачем.

1. Устанавливаем VPN соединение


В качестве VPN решения был выбран, конечно, SoftEther, L2TP с предварительным ключом. Такого уровня безопасности достаточно кому угодно, потому что ключ знает только роутер и его владелец.

Переходим в раздел interfaces. Сначала добавляем новый интерфейс, а потом вводим ip, логин, пароль и общий ключ в интерфейс. Жмем ок.



То же самое командой:

/interface l2tp-client
name="LD8" connect-to=45.134.254.112 user="Administrator" password="PASSWORD" profile=default-encryption use-ipsec=yes ipsec-secret="vpn"


SoftEther заработает без изменения ipsec proposals и ipsec profiles, их настройку не рассматриваем, но скриншоты своих профилей, на всякий случай, автор оставил.


Для RRAS в IPsec Proposals достаточно изменить PFS Group на none.

Теперь нужно встать за NAT этого VPN сервера. Для этого нам нужно перейти в IP > Firewall > NAT.

Тут включаем masquerade для конкретного, или всех PPP интерфейсов. Роутер автора подключен сразу к трём VPNам, поэтому сделал так:



То же самое командой:

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


2. Добавляем правила в Mangle


Первым делом хочется, конечно, защитить все самое ценное и беззащитное, а именно DNS и HTTP трафик. Начнем с HTTP.

Переходим в IP Firewall Mangle и создаем новое правило.

В правиле, Chain выбираем Prerouting.

Если перед роутером стоит Smart SFP ли еще один роутер, и вы хотите к нему подключаться по веб интерфейсу, в поле Dst. Address нужно ввести его IP адрес или подсеть и поставить знак отрицания, чтобы не применять Mange в адресу или к этой подсети. У автора стоит SFP GPON ONU в режиме бриджа, таким образом автор сохранил возможность подключения к его вебморде.

По умолчанию Mangle будет применять свое правило ко всем NAT Stateам, это сделает проброс порта по вашему белому IP невозможным, поэтому в Connection NAT State ставим галочку на dstnat и знак отрицания. Это позволит нам отправлять по сети исходящий трафик через VPN, но все еще прокидывать порты через свой белый IP.


Далее на вкладке Action выбираем mark routing, обзываем New Routing Mark так, чтобы было в дальнейшем нам понятно и едем дальше.


То же самое командой:

/ip firewall mangle
add chain=prerouting action=mark-routing new-routing-mark=HTTP passthrough=no connection-nat-state=!dstnat protocol=tcp dst-address=!192.168.1.1 dst-port=80


Теперь переходим к защите DNS. В данном случае нужно создать два правила. Одно для роутера, другое для устройств подключенных к роутеру.

Если вы пользуетесь встроенным в роутер DNS, что делает и автор, его нужно тоже защитить. Поэтому для первого правила, как и выше мы выбираем chain prerouting, для второго же нужно выбрать output.

Output это цепь которые использует сам роутер для запросов с помощью своего функционала. Тут все по аналогии с HTTP, протокол UDP, порт 53.



То же самое командами:

/ip firewall mangle
add chain=prerouting action=mark-routing new-routing-mark=DNS passthrough=no protocol=udp
add chain=output action=mark-routing new-routing-mark=DNS-Router passthrough=no protocol=udp dst-port=53


3. Строим маршрут через VPN


Переходим в IP Routes и создаем новые маршруты.

Маршрут для маршрутизации HTTP по VPN. Указываем название наших VPN интерфейсов и выбираем Routing Mark.



На этом этапе вы уже почувствовали, как ваш оператор перестал встраивать рекламу в ваш HTTP трафик.

То же самое командой:

/ip route
add dst-address=0.0.0.0/0 gateway=LD8 routing-mark=HTTP distance=2 comment=HTTP


Ровно так же будут выглядеть правила для защиты DNS, просто выбираем нужную метку:


Тут вы ощутили, как ваши DNS запросы перестали прослушивать. То же самое командами:

/ip route
add dst-address=0.0.0.0/0 gateway=LD8 routing-mark=DNS distance=1 comment=DNS
add dst-address=0.0.0.0/0 gateway=LD8 routing-mark=DNS-Router distance=1 comment=DNS-Router


Ну под конец, разблокируем Rutracker. Вся подсеть принадлежит ему, поэтому указана подсеть.


Вот настолько было просто вернуть себе интернет. Команда:

/ip route
add dst-address=195.82.146.0/24 gateway=LD8 distance=1 commant=Rutracker.Org


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

Автор надеется, что вы оцените удобство захода на рутрекер и корпоративный портал в одно и тоже время не снимая свитер.

Подробнее..

Как я добился обещанного гигабита, использовав Mikrotik мозг

17.03.2021 16:04:48 | Автор: admin

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

Больше, чем просто роутер


А в подарок дали роутер Sercomm rv6699. Начал тестировать. Гигабит действительно есть.

Зашел в свою любимую игру а там пинг на целую миллисекунду меньше, чем раньше. Моему счастью не было предела, но продлилось оно только до первого рабочего дня.

1. Сброс настроек только удаленно

Свой любимый Mikrotik RB3011 я использую для разблокировки интернета, для доступа по VPN к корпоративным ресурсам и всему такому. Чтобы выкинуть провайдерский роутер из головы, поставил его в бридж. Как и на других китайских роутерах это делается с помощью отключения функции роутера. Перезагрузил, все завелось, Mikrotik получил адрес от провайдера по DHCP, все хорошо.

На утро следующего дня встаю и вижу, что интернет не работает. Бридж не доступен по веб интерфейсу, микротик по DHCP адрес не получает. Перезагрузка не помогает.

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

Цирковую эпопею, происходившую в тот день я опущу. В конце концов мне сбросили настройки роутера по TR-069, но 2 часа рабочего времени уже были потеряны.

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

2. Ограничения на загрузку файлов

У меня есть сервер на тарифе Большой диск, там у меня лежат все бэкапы и файловая помойка и контроллер домена. Все на одном гиге оперативки и Windows Server Core.


Подключается тут

На большой диск я часто бэкапирую виртуалки, которые кручу у себя дома. Приятно видеть, как большие файлы улетают в облако на скорости 100 мегабайт в секунду, жаль, что не долго. Когда я начал бэкапировать свои файлы на гигабитной скорости, маршрут до моего сервера начал выглядеть так:


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

Вот так и получается, что гигабит провели, а пользоваться не провели.

3. Ограничение на сканирование портов

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

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

Злая коробка не дает сканировать порты, но она не блэкхолит конкретный IP адрес, она сразу отключает тебя от интернета.

Проводим пользоваться


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

Но сначала нам понадобятся:

Переходники



Про разъемы. Они бывают либо SC/UPC (синие), либо SC/APC (зеленые). Все абонентское оборудование во всем мире поставляется с синими UPC коннекторами, а головное с зелеными, поэтому, если у вас дома проведен зеленый коннектор, вам потребуется адаптер SC/APC Female на SC/UPC Male.

Кулибины, которые с помощью подтачивания вставляли UPC в APC тоже встречались, но они рапортовали о проблемах, поэтому, купите переходник на алиэкспрессе.

SFP-модуль



На выбор предлагаю два варианта, которые все еще находятся в производстве и на которых можно поменять SN, и PLOAM пароль.

  1. SFP GPON ONU Stick
  2. C-Data FD511GX-RM0

Оба варианта, как и все GPON оборудование было сделано в Китае. Первым вариантом пользовался сам про него и расскажу. Второй вариант дороже и сложнее в настройке, гайд по его настройке оставлю тут.

Найти этот GPON ONU Stick можно на алиэкспрессе по количеству покупок. Это самый популярный лот. Еще его можно найти по названию модели DFP-34G-2C2.

Настраиваем


Предположим, что все уже куплено, что провод уже воткнут в переходник, а переходник воткнут в SFP. Дело осталось за малым.

1. Вынимаем данные авторизации

В последний раз входим по адресу веб интерфейса старого роутера и входим в традиционный китайский интерфейс под логином/паролем mgts/mtsoao, переходим в раздел: Configure GPON


Выписываем эти два значения и навсегда прощаемся с этой коробкой.

Не беспокойтесь, МГТС не скрывают эти данные от вас, это (почти) ваш роутер. только не спрашивайте эти данные у сотрудников МГТС, они сами не знают.

2. Настраиваем Mikrotik

Модуль из коробки стоит в бридже. Несмотря на то, что интернет, телефония и все прочее у МГТС распиханы по отдельным VLANам, пакеты через бридж доходят без тэга. Поэтому, осталось сделать всего ничего.

2.1. Вешаем DHCP клиент на интерфейс SFP1

Открываем Winbox, переходим в IP DHCP Client и вешаем DHCP клиент на интерфейс sfp1, все как на картинке.

Это позволит нам пользоваться интернетом сразу, как только он появится.


Это же самое командой:

/ipdhcp-clientaddinterface=sfp1disabled=no

2.2. Назначаем IP адрес на интерфейс SFP1

Далее, в разделе IP Addresses нужно добавить новый IP адрес. Делаем как на картинке.

Таким образом мы получим доступ к веб интерфейсу SFP модуля по его IP адресу.


То же самое, только командой:

/ipaddressaddinterface=sfp1address=192.168.1.65/32network=192.168.1.1

3. Настраиваем SFP

Как только назначили IP на интерфейс, входим в стандартную китайскую народную вебморду под традиционным admin/admin и переходим в раздел: Network PON SN

Там вводим те данные, что мы получили из роутера, предоставленного провайдером.


Жмем Submit и перезагружаем модуль.

Теперь нужно проверить, авторизовала ли вас головная станция. Посмотреть это нужно в разделе: Status PON Inform.


Если авторизация прошла успешно, то поздравляю. Головная станция сначала авторизует, а потом выдаст интернет, ожидание займет не более 5 минут.

Проблемы и решения


Этот модуль я эксплуатирую уже без малого, год как, поэтому, о проблемах тоже расскажу.

1. Перегрев

Но ощупь модуль горячий, замеры температуры на поверхности корпуса инфракрасным термометром показывали температуру около 55 градусов по цельсию при комнатной температуре в 25 градусов.

Летом он действительно может намертво зависать, модуль целиком выключится и не поднимется сам. Я не замечал проблем с перегревом в зимнее время года, когда температура окружающей среды составляла от -10 до +10 градусов.

Решение:

Установка радиатора от NVME накопителя без прямо на корпус без термопрокладок и термопасты решило проблему перегрева.

2. Падение линка

Прошивка DFP-34G-2C2, как и другая традиционная китайская прошивка имеет те же самые проблемы, что и sercomm rv6699. Примерно раз в месяц-два что SFP модуль что и sercomm теряли соединение с интернетом, но получали адрес по DHCP и были доступны по веб интерфейсу.

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

Решение:

Штатно перезагрузить SFP помощью Netwatch мы не можем, в нем нет SSH, только Telnet, но у нас есть Watchdog, который перезагрузит все.

Мониторить доступность наш Watchdog будет с помощью ICMP на IP адрес роутера провайдера. Делаем трассировку до любого места в интернете и останавливаемся на втором хопе. Второй хоп и будем мониторить.


В Winboxe переходим в: System Watchdog

и вписываем IP адрес второго хопа, как на картинке. Если указанный IP адрес перестал отвечать на ICMP, то роутер вместе с SFP модулем перезагрузится.


То же самое можно сделать командой:

/systemwatchdogsetwatch-address=128.128.128.1


Подробнее..

SOHO UPS в маленьком корпусе и своими руками. Менее чем за1500 руб

10.05.2021 12:10:00 | Автор: admin

Хотите обеспечить бесперебойное питание своим устройствам, но при этом не сильно потратиться? Именнотакой своей разработкой я и хотел с вами поделиться.

Все мы переживаем, когда устройства внезапно отключаются по питанию и не зря. Большая часть нештатного отключения электроэнергии сопровождается скачками повышенного напряжения, что в свою очередь может привести к поломке оборудования или сбросу настроек. Да, на этот случай различные компании выпускают ИБП, но они достаточно велики и весят как правило не менее нескольких килограмм.

А что если сделать такой источник бесперебойного питания, который можно поставить прямо рядом с защищаемым устройством лёгкое, компактное, недорогое?

Почему я об этом задумался?


Я живу в частном доме и моя работа на 100% зависит от доступности интернета.
Но так уж получилось, что в нашем районе Ленинградской области ситуация с энергоснабжением обстоит очень печально. Достаточно частыеотключении при резком изменении погоды,изношенные высоковольтные линии идущие к нам и прочее.Соответственно при аварии на электросетях падает вся сетевая инфраструктура и пока всё поднимется, восстановятся все маршруты (OSPF)пройдет минимум 2-3 минуты. Также стоит вспомнить об опасности таких отключений для самого оборудования. На запуск и ввод резервного источника питания (генератор) необходимо примерно 5-10 минут.

В данной ситуации UPS не роскошь он необходим как воздух.

Сетевая инфраструктура у меня построена на оборудовании MikroTik, оно простое но его достаточно много:
  • 951Ui-2HnD пограничный маршрутизатор в который приходит интернет от Cambium (радио-мост до БС МТС), также он защищает сеть и на нем поднят VPN-сервер для удаленного доступа.
  • hEX PoE выполняет роль маршрутизатора локальной сети и контроллера CAPsMAN.
  • CSS106-5G-1S в серверном шкафу
  • 3 штуки hAP Lite Wi-Fi точкидоступа для бесшовного роуминга. Их много, они раскиданы по всей территории и все на маленькой мощности. Используются только для мобильных устройств и умного дома.
  • OmtiTik5ac PoE и SXTsq Lite5 радиолинк до второго дома
  • BaseBox2 уличная точка доступа.

Питать всё этоот одного классического UPS не реально оборудование раскидано по территории. Во вторых при моих условиях АКБ внутри классического бесперебойника умирает примерно за 1.5 года, а стоимость новой батареи достаточно высока.

Постановка задачи


Я периодическидумал как решить данную задачуи принял решение сделать свой ИБП обладающий характеристиками:
  • Прост в разработке, желательно на готовых модулях
  • Недорого, чтобы можно было поставить возле каждого роутера Регулируемое выходное напряжение можно запитать не только оборудование с 12/24В роутеры / коммутаторы, но и, например, Intel NUC (у него 19В)
  • Размер корпуса не больше чем уhEX PoEдля сборки в виде модуля ИБП+Роутер

При детальном рассмотрении задачи и всего зоопарка оборудования я понял, что hAP Lite это слабое звено во всей цепочке. Во первых ему нужно 5В (всем остальным от 12 до 48), во вторых у него micro-usb разъем питания и нет PoE-in. Поэтому данные устройства были выведены изсписка защищаемых и при отключении ЭЭ они падают как и раньше.

В процессе раздумий над схемой я понял, что лучше использовать в качестве базового напряжения АКБ 12В, а дальше, по необходимости менять преобразователи на повышающий или понижающий. Это сделает UPSуниверсальным и позволит питать устройства в диапазоне от 1 до 48В, также снизит стоимость устройства за счет снижения количества АКБ до 3х.

Подбор компонентов


Для сборки нужны детали:
Цены указываю при покупке на территории РФ. Если брать у наших соседей, то стоимость будет ниже примерно на 60%, а т.к плата все равно будет ехать из-за бугра, то и детали можно смело брать там.
  1. Модуль заряда аккумуляторов 3S, 10A 1 шт. (180 руб)
  2. Повышающий (понижающий) DC-DC преобразователь XL6009 1 шт. (120 руб)
  3. Батарейный отсек 1х18650 на плату 3 шт. (150 руб)
  4. Гнездо питания на плату 5.5х2.1 (от 2 до 4 штук)
  5. Вольтметр 0.28" 0-100В (опционально)
  6. Диод Шотки SS34, 3А 3 шт.
  7. Резистор SMD 1206, 200R 1 шт
  8. Резистор SMD 1206, 1K 1 шт
  9. Стабилитрон 3.3В,BZX55C3V3 2 шт.
  10. Светодиод SMD 1206 2 шт.

Итого: 450 руб.
Изготовление печатной платы на jlcpcb с доставкой в РФ 750 руб. за 5 штук. (150 руб/шт)

3 аккумулятора размера 18650. Средняя стоимость 300 руб.

Итого общаястоимость за одно устройство: 1500 руб.

Обратите внимание, на АКБ нельзя экономить! Брать не явный Китай и желательно высокотоковый!
Нам не нужны повторения историй, коих и так увы очень много последнее время по всем федеральным каналам. АКБне обязательно должен быть с защитой, ввиду того, что плата заряда аккумулятора, используемая нами уже имеет защиту от чрезмерного заряда/разряда.

Тест взрывоопасности АКБ 18650
Сразу привожу наглядный тест на безопасность именно АКБ 18650. Вариант пробития гвоздем не рассматриваем ввиду нереальности https://www.youtube.com/watch?v=tOsxiLKyKwQ

Принцип работы


Принципиальная схема данного устройства очень простая


Итак унас есть один входной разъем питания (Vin), и три выходных (Vout). XP1 это стандартная гребенка PLS с шагом 2.54, к которойподключается кнопка включения питания, а также можно поставить джампер (как в моем случае), если планируется все время держать устройство во включенном состоянии.
Также на плате есть два светодиода, показывающие наличие напряжение во входной сети (Vin) и напряжения на выходе устройства (Vout), подключенные через стабилитрон (D1, D2) на 3В и резисторы (на нижней стороне платы)R2 220 Ом и R1 1кОм соответственно.
U6 это контакты для подключения модуля вольтметра, который отображает напряжение на выходе устройства.

Верхняя сторона платы

На нижней стороне платыу нас размещен контроллер заряда (U2) и три диода Шоттки (U3, U4, U5).

Нижняя сторона платы

Основной принцип работы схемы и переключения с основного на резервное питание зависит от трех диодов Шоттки U3, U4, U5.
Ниже представлена нагляднаясхема направления и какие узлы в каких ситуациях находятся под напряжением.


U4 пропускает напряжениетолько в направлении контроллера заряда, напряжение с контроллера непопадает обратно во входную сеть. Это достаточно важный диод, т.к при его отсутствии напряжение будет утекать из модуля заряда (АКБ) в направлении источника питания.

Розовым цветом показана ситуация, когда у нас присутствует напряжение во входной сети (Vin). В этом случае диоды U3 и U4 пропускают напряжение в направлении контроллера заряда (U2) и DC/DC-преобразователя (U1). При этом напряжение из АКБ и контроллера заряда (голубой маршрут) не поступает в розовую сеть через диоды U4 и U5.

U5 работает таким образом, что пока входное напряжение присутствует, на его катоде будет +, он будет в закрытом состоянии и не выпуститнапряжение из АКБ в направлении Vout, а также не пропустит напряжение из входной сети. Если же, напряжениена входе пропало U5тут же перейдет в свое рабочее состояние и пропуститнапряжение с АКБ в сторону DC/DC-преобразователя (U1) зеленый маршрут. Однако чтобы исключить петлю когда напряжение из АКБ попадает на вход модуля заряда, а также может утекать в источник питания на входе, мы используем диод U3 и пока на его катоде будет +, он будет закрыт.

Платы, полученные от jlcpcb как всегда отличные, здесь на самом деле придраться не к чему настоящее промышленное производство за очень гуманную плату. Срок изготовления 3-4 дня, срок доставки до Ленинградской области в районе 20 дней.


Распаиваем, проверяем


Печатаем корпус, собираем устройство и вот что у нас получилось




Проверка устройства под нагрузкой


Теперь, когда устройство собрано и мы знаем как оно работает, нам нужно запомнить, что мы можем от него питать. Самое главное это помнить какие токи потребления может обеспечить данное устройство. В схеме я использую преобразователь на 3А. Ток разряда АКБ 18650, как правило, равен двух-кратной величине ёмкости (если не рассматриваем высокотоковые). Таким образом при использовании аккумулятором емкостью 2000 mA, они способны отдавать ток до 4А.
Однако стоит помнить, что если мы на DC/DC-преобразователе увеличили выходное напряжение вдвое, например питаем оборудование от 24В током 1А, тоток до преобразователя также увеличитсявдвое и АКБ будут отдавать заряд током 2А.

Соответсвенно лучшезапомнитьтакую закономерность:
  • 12В 3А
  • 24В 1.5А
  • 48В 0.75А

Проводим нагрузочный тест и определяем время автономной работы
В UPS установлены АКБ GoPower на 2000 мА. Выходное напряжение 12В.К UPS подключено 3 устройства hEX PoE к которому, в свою очередь, через PoE-out подключены CSS106-5G-1S и951Ui-2HnD. Трафик в сети, на момент отключения входного питания продолжает бегать.

Итого суммарное потребление всех устройств составило порядка 0.55-0.65А (менялось в процессе измерений).CSS106-5G-1S 185мА,951Ui-2HnD 280мА плюс собственное потребление hEX. До отключения данная сборкапроработала 2 часа 15 минут, при этом остаточное напряжение на трех аккумуляторах составило 6.5В. Сильнее разрядить не получилось, сработала защита от глубокого разряда на модуле 3S. Температура аккумуляторов не изменилась, что говорит о несущественной нагрузке в процессе разряда.

Вывод


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

Надеюсь данная статья будет полезна и вам!

Материалы из статьи
Макет схемы, печатной платы в формате DipTrace, а корпус в STL для печати на 3D-принтере

Подробнее..

L2TP amp IPsec with pre shared key vs MITM

31.05.2021 12:16:05 | Автор: admin

В статье рассмотрены основные vpn протоколы, которые на текущий момент применимы в бизнес процессах, а также углубленно освещен вопрос использования L2TP в связке с IPsec в режиме pre shared key. На практике разобраны подходы к организации виртуальных сетей на оборудовании MikroTik и выполнен практический аудит безопасности передачи данных с позиции анализа третьими лицами исходящего трафика при возможности MITM атаки.

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

Для начала разберем, в каких случаях бизнесу нужен vpn:
при подключении удаленных сотрудников к сетевым ресурсам компании (site-to-client vpn) и
при объединении территориально разнесенных сетевых элементов (site-to-site vpn). Самих протоколов vpn сейчас много: GRE , PPTP, SSTP, OVPN, L2TP, Wireguard и т.д.

Здесь важно не путать протоколы с сервисами vpn, которых еще больше: ExpressVPN, CyberGhost, NordVPN и т.д. Вторые по сути являются провайдерами услуг, обеспечивая доступ клиентов к собственным ресурсам с целью обхода блокировок со стороны ISP, а также анонимности серфинга в интернете. Про них сейчас речь не идет.

С вариацией протоколов определились, какой же выбрать?
Во-первых, в зависимости от того, что строим site-to-client или site-to-site, потому что GRE для первого случая не подойдет.

Во-вторых, Wireguard хоть молодой, простой и очень перспективный, но на офисном маршрутизаторе Cisco или MikroTik его не поднять, вендоры даже не планируют внедрять. PPTP очень легок в настройке, однако будет либо не шифрованным, либо шифрованным протоколом MPPE, который не имеет аппаратной разгрузки, в следствие чего, многопользовательскую сеть замедлит в работе. SSTP отличный протокол, работает по TLS в UDP на 443 порту, пролезет через любой Firewall, а может даже и IDS. У некоторых вендоров, например, MikroTik, может работать по pre shared key вместо сертификата, запускается на Windows клиентах из коробки.
Из минусов: определенные танцы с бубном при настройке Linux клиентов (протокол все-таки от Microsoft) и отсутствие поддержки со стороны вендоров в аппаратной разгрузке. OpenVPN всем хорош, особенно высокой гибкостью. Можно туннелировать на L2, можно на L3, всего не перечислить. Не даром он open soft. Роутер MikroTik скоро научится работать с ним по UDP (ожидается в следующем поколении RouterOS), так как смысла в TCP нет, ведь соединение все равно проверяется во вложенном туннеле. Однако, скорее всего ваша офисная Cisco не умеет с ним работать, поэтому vpn сервер из нее не организовать.

Фактически, стандартом де-факто в корпоративной среде является протокол L2TP. Он работает на UDP, порт по умолчанию 1701. С шифрованием все хорошо, особенно наличие возможности аппаратной разгрузки IPsec. Есть вероятность, что ваш корпоративный MikroTik (несмотря на то, что он софтовый маршрутизатор) умеет шифровать IPsec на железе (смотри таблицу Hardware acceleration на сайте производителя ). У Cisco в этом вопросе дела обстоят еще лучше. Даже если ваш офисный роутер не умеет шифровать железом, никто кроме вас это знать не должен не будет.

Итак, подведем промежуточный итог: vpn технологии бизнесу нужны, использовать лучше всего L2TP. Закончив с затянувшейся вводной частью, перейдем непосредственно к теме статьи. Рассмотрим на примере оборудования MikroTik безопасность передачи данных в туннеле при возможности MITM атаки со стороны третьих лиц. Этот вопрос возникает в следствие того, что почти всегда в корпоративной среде используют L2TP в связке с IPsec в туннельном режиме и общим ключем для всей сети, вместо создания PKI и задействования сертификатов. Это удобно, сеть быстро разворачивается и легко обслуживается. Безопасно ли это в условиях компрометации pre shared key? Разберем на практике.

Начнем с того, что L2TP может быть не шифрованным:

/ppp profile name=test use-encryption=no


с интегрированным в протокол шифрованием MPPE:

/ppp profile name=test use-encryption=yes (или require, при этом IPsec отключен)



с качественным внешним шифрованием от IPsec, вроде AES:

/ppp profile name=test use-encryption=yes (или require, при этом IPsec включен)



Настройка L2TP сервера осуществляется достаточно просто, активируем его и указываем тип аутентификации:

/interface l2tp-server server set authentication=mschap2 default-profile=test enabled=yes


Здесь же появляется возможность сразу активировать IPsec и настроить pre shared key. Если это сделать, то общий ключ будет закреплен за всей vpn сетью и передан всем ее участникам в качестве настроечной информации. Один и тот же на всех. На самом деле, если активировать IPsec таким образом, то RouterOS автоматически создает необходимые настройки в соответствующем разделе /ip ipsec сразу после установления L2TP соединения.

Конкретно речь идет:

  • IPsec Policy с указанными протоколом UDP и портом подключения 1701;
  • IPsec Peer c IP адресами сервера и клиента;
  • IPsec Identity с указанным ранее pre shared key.

Автоматически созданные настройки IPsec

Очень удобно. Особенно, когда IP адреса динамические и вообще натированные. Клиентам не нужно выполнять лишние процедуры по отслеживанию их текущих значений. В RouterOS в разделе L2TP есть дополнительная настройка, определяющая общий секрет при конфигурировании в сетях Virtual Private DialUp Network протяженных соединений точка-точка между удаленным сервером PPPOE и L2TP сетью, но это к теме статьи не относиться, поэтому просто ее упомянем всуе:

/ppp l2tp-secret add address=0.0.0.0/0 secret=

Допустим, мы не хотим простого счастья и дополнительно желаем, чтобы у каждого клиента был индивидуальный сертификат вместо общего ключа (возможно, для этого в компании уже все готово). Звучит очень круто и безопасно. Нет технически не преодолимых проблем, кроме танцев с бубнами: создаем все вышеперечисленное в ручном режиме, не забываем про корректно заданные IP адреса, как со стороны сервера, так и со стороны клиентов.

/ip ipsec peer add address=IP local-address=IP name=peer1/ip ipsec identity add peer=peer1 auth-method=digital-signature certificate=u01.crt_0/ip ipsec policy add dst-address=IP dst-port=1701 peer=peer1 protocol=udp src-address=IP src-port=1701

Здесь нас поджидает кропотливая работа, ведь, скорее всего, адреса у клиентов меняются (и достаточно часто), кроме этого клиенты сидят за провайдорским NAT. Все это можно накрутить кастомными скриптами на RouterOS, и все будет отлично работать. Нужно ли это? Cмоделируем ситуацию, когда общий для всех pre shared key стал известен злоумышленнику, который целенаправленно хочет нам навредить. Или клиент vpn нам больше не клиент. Сразу баним его учетную запись, и теперь аутентификацию mschap2 (или какая у вас там выбрана) он не пройдет и доступ не получит:

/ppp secret disable bad_user

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

/ppp secret add name=good_user password=12345 service=l2tp

Шифрованный трафик L2TP туннеля

Исследовательский интерес нас ведет дальше. Может все-таки что-то можно сделать с трафиком? И в результате извлечь передаваемую информацию? Попробуем дешифровать трафик в лабораторных условиях. MikroTik позволяет нам выполнить debug соединения и увидеть подробную информацию об установленной IPsec сессии:

/ip ipsec installed-sa print

Как видно, сессия установилась на 30 минут, имеются разные ключи аутентификации и шифрования. Применим их в Wireshark, после приведения шестнадцатеричных значений к корректному формату: SPI 0x0ada181b, вместо MikroTik-овского 0xADA181B, ключи начинаются со значения 0x. Если все сделано правильно, тогда трафик откроется.

Ввод данных сессии для дешифрования IPsec

Дешифрованный IPsec

Подведем результаты

Насколько безопасно использовать L2TP c общим секретом? Абсолютно безоапасно. По сути IPsec с помощью pre shared key выполняет функцию аутентификации, но в нашем случае процедура аутентификации выполняется ранее при установлении L2TP соединения. Нет практической необходимости выполнять аутентификацию повторно. По сути MikroTik, введя возможность настройки IPsec в разделе создания L2TP сервера, автоматизирует рутинные задачи по настройке шифрованного туннеля в ручном режиме (история про танцы с бубном). Это еще один плюс в сторону использования не дорогостоящего, но качественного оборудования MikroTik. Конечно, в ручном режиме гораздо больше вариаций на тему шифрования, но по умолчанию задаются, по авторскому мнению, идеальные значения: aes256 и sha1.


Как рекомендации для бизнеса, смело можно использовать L2TP с IPsec pre shared key. При планировании политик информационной безопасности, нет необходимости в задании сложных значений для pre shared key. Важно выставить не угадываемые и не словарно подбираемые значения для аутентификации L2TP (/ppp secret). Удобно, безопасно и качественно, админ доволен, клиенты не замучены.


Подробнее..

Самый беззащитный уже не Сапсан. Всё оказалось куда хуже

13.01.2021 10:12:44 | Автор: admin
Больше года назад хабравчанин keklick1337 опубликовал свой единственный пост Самый беззащитный это Сапсан в котором рассказывает как он без серьёзных ухищрений получил доступ ко внутренней сети РЖД через WiFi Сапсана.

В ОАО РЖДпрокомментировали результатыэтого расследования. Есть результаты проверки. Почему удалось взломать? Наверное, потому, что злоумышленник. Наверное, из-за этого Ну, он из фана. Юный натуралист. Там уязвимостей, которые бы влияли на утечку каких-то критических данных, нет. Мультимедийный портал Сапсанов функционирует как положено и не нуждается в доработке, заявил Евгений Чаркин.

То есть вместо того, чтобы выразить благодарность за обнаруженную уязвимость, автора обозвали злоумышленником и Юным натуралистом.

К сожалению, но специалисты РЖД, начиная с директора по информационным технологиям, отнеслись к статье очень пренебрежительно, проигнорировав важное указание автора:
Также оттуда в сеть РЖД есть впн. Если захотите найдёте её там сами.

И вот, год спустя я попал в сеть РЖД даже не садясь в Сапсан.


Видимо, только этот котэ добросовестно охраняет вокзал.

Как именно я попал в сеть РЖД с пруфами, чего не сделал директор по информационным технологиям ОАО РЖД Чаркин Евгений Игоревич и возможные последствия под катом.

Всё началось с гипотезы


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

Таким образом меня посетила идея проверить гипотезу: Есть ли жизнь за прокси?

Я запустил nmap по диапазону адресов по порту 8080. Далее из полученного результата прошёлся прокси-чеккером в поисках публичного прокси без авторизации и из положительных результатов выбрал самый близкий ко мне по пингу.

Запустил сканер через него по адресам 172.16.0.0/12 порт 8291 (mikrotik winbox). И! Я его нашёл! Без пароля!



То есть за роутером с прокси есть ещё один Mikrotik без пароля. Гипотеза подтверждена: за прокси могут быть целые незащищённые сети.

Только на тот момент я недооценивал масштаб незащищённости, который я случайно нашёл.

В поисках Немо владельца системы


Так как я придерживаюсь принципов Grey hat (Обо мне mysterious Russian-speaking grey-hat hacker Alexey и статья на Хабре) и съел собаку на безопасности Mikrotik, то я принялся искать владельца системы, чтобы связаться с ним.

Кстати, заходите в Телеграм чат RouterOS Security t.me/router_os

Недолго думая я поднял исходящий VPN до себя. Всё же комфортней через нормальный туннель дальше изучать сеть и искать признаки владельца системы. HTTP connect ещё тот геморрой

За интерфейсами ether1 и bridge ничего интересного не обнаружил. Найденные камеры были абсолютно не информативными.



А вот сканирование vpn, отмеченные красным на скрине выше, выдало более 20 000 устройств
Причём более 1000 штук микротики. Огромное количество устройств с заводскими паролями.

Вот некоторые из найденных сервисов с паролями по умолчанию:

1. Камеры наружного наблюдения подавляющее большинство.



Ещё камеры






Даже офисы внутри



Камер, по скромным ощущениям, не менее 10 000 штук. Производители разные: beward, axis, panasonic и т.д.

2. Ip-телефоны и FreePBX сервера также большое количество.




3. IPMI серверов:

Asus

Dell (их подавляющее большинство)


Supermicro

Из серверов виртуализации встречаются ESXi, Proxmox и oVirt



Много узлов кластера Proxmox (по поднятым сервисам и трафиком между ними.)

4. Преобразователи ethernet во 'что угодно' (Moxa UniPing etc)


5. Системы управления ИБП



6. Внутренние сервисы





Что-то похожее на мониторинг состояния систем обеспечения здания.


Система управления кондиционированием и вентиляцией


Различные системы управления табло на перронах :-)

Эта самая красивая


Некий терминал, но внутри модифицированный дебиан.

Таких нашёл около 20


Кстати, аптайм у него почти год:




6. Сетевое оборудование



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

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

Не полный кусок лога по прокси.



Такое ощущение, что интегратор, который строил сеть, специально оставил этот доступ.

И все же кто же хозяин?


Думаю, что уже все и так догадались.

Это я пробежался по верхушкам в рандомном порядке. Потратил я на это чуть больше 20 минут, чем автор статьи про Сапсан.

Это здец. Сеть просто в решето.

Причём это устройства по всей РФ.

Например, вот это вокзал Уфы

Антропово Костромской области


Развёрнута профессиональная система видеонаблюдения.

Нашёл презентацию по вокзалам.

macroscop


Находил Кемерово, Новосибирск, Омск и т.д. По внешнему виду вокзалы сложно определить. К тому же я поездом уже лет 5 не ездил.

Как же так получилось?


Я всегда считал, что уязвимости в корпоративных сетях появляются из-за ошибок или специальных действий безграмотных сотрудников. Первое что пришло мне в голову это некий сотрудник по разрешению СБ поднял у себя из дома VPN до рабочей сети на микротике в своей домашней сети. Но в данном случае эта моя гипотеза разбилась как только я увидел обратный резолв адреса через который я попал на этот Микротик.



То есть это один из шлюзов в мир из сети РЖД. Ну и в сеть РЖД тоже

Получилась вот такая картина:

  1. Вероятно, что это один из офисов РЖД, который прилинкован к основой сети через l2tp.
  2. Я попадаю в сеть где межсетевые экраны отсутствуют как класс.
  3. Запускаю интенсивное сканирование хостов у меня соединение не рвётся. Значит о системах обнаружения вторжения (IDS/IPS) РЖД тоже ничего не слышал. Микротик может замечательно интегрироваться, например Suricata
  4. Обнаружил кучу устройств без защиты. Это говорит, что службы сетевой безопасности в РЖД так же нет.
  5. Много устройств с дефолтными паролями. То есть политики паролей тоже нет.
  6. С Микротиков внутри сети я легко поднял туннели. То есть исходящий трафик не контролируется.
  7. Я вижу все интерфейсы управления в одной сети с клиентскими сервисами. Админы РЖД ничего не знают о Management VLAN

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

Так дайте ответ, Евгений Игоревич, какой Юный натуралист проводил расследование и не заметил гнездо со слонами?



У меня лично есть всего три варианта ответа на этот вопрос:

1. У Вас исходно плохая команда.

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



2. Вы доверились не тому специалисту. Аудит проводил некомпетентный сотрудник.



3. Вы и так знаете о проблеме, но по каким-то неведомым причинам не можете ее публично признать и решить.



Стоимость уязвимости


Что есть защищенная система? Защищенная система это та система, взлом которой стоит дороже, чем ценность информации, которая там есть. Вот и все, подытожил директор по информационным технологиям ОАО РЖД.

Предлагаю применить Вашу систему оценки в теории на примере системы видеонаблюдения РЖД.

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

Рандомно выбранная из списка установленных модель стоит ~13к рублей.



А закупки по 44-ФЗ отличаются, как непредсказуемой конечной стоимостью, так и временем проведения самой процедуры и получения продукта. Я потратил 8 часов для сбора информации для этой статьи. Найдено ~10к камер. Производителей камер, которые установлены, немного максимум штук 10.

Гипотетическому злоумышленнику потребуется:

  1. Модифицировать прошивки, заблокировав сетевой порт на 10 прошивках. Думаю, что на это у специалиста уйдёт три рабочих дня;
  2. ННаписать сканер, который будет анализировать устройство и заливать соответствующую прошивку. Заложим ещё 2 дня;
  3. Запустить этот сканер-прошивальщик, чтобы не смогли найти источник и заблокировать часа два.

Таким образом за неделю работы специалиста по взлому РЖД потеряет минимум 130 миллионов рублей. Отсюда стоимость одного часа работы злоумышленника будет равна ~2,5 млн. рублей.

Двигаемся дальше.

Быстро заменить камеры на работающие РЖД не сможет. В резерве столько нет. Купить новые из-за обязанности объявления торгов так же не получится. Таким образом вся железная дорога будет без видеонаблюдения не меньше месяца.

А вот это уже опасность террористической угрозы. Чтобы её хоть как-то снизить потребуется на 10 тысячах объектов существенно усилить охрану. То есть даже на маленькую ж.д. станцию потребуется дополнительно 6 человек охраны

Кажется счёт уже уходит за миллиарды

Что нужно изменить, чтобы снизить вероятность возможных последствий?


Далее чисто мой взгляд на решение данной ситуации. Он ничего общего не имеет с мировыми best practices.

Так же, сразу оговорюсь, что проблема касается только обнаруженной мною сети видеонаблюдения. В других сегментах сети РЖД, очень надеюсь, всё намного лучше.

1. Нанять сетевых аудиторов, которые помогут найти и закрыть самые зияющие дыры.

2. Нанять крутых системных архитекторов, которые имеют богатый опыт построения больших сетей. И не факт, что это будут российские специалисты. Перед ними поставить следующие задачи:

2.1. доработать текущую инфраструктуру до безопасного состояния за минимальные средства (зачем вкладывать много денег в проект, который скоро разберут)

2.2. разработать новую полноценную инфраструктуру, отвечающую всем требованиям безопасности и план поэтапной миграции.

3. Нанять подрядчика, который будет реализовывать в жизни данные проекты и передавать на эксплуатацию сетевикам РЖД.

4. После сдачи проектов провести аудит безопасности инфраструктуры.

5. По окончанию пентестов своими силами объявить Bug Bounty

Чтобы мотивировать аудиторов и внутренних специалистов работать качественно, надо объявить лимит на количество и серьёзность уязвимостей, которые могу найти участники программы Bug Bounty. Если внешние специалисты найдут багов меньше лимита, то свои аудиторы получают премии. Если багов будет больше лимита, то штрафовать.

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

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

Заключение


Я не единственный кто нашёл данные уязвимости. Очень много признаков, что в этой сети кто-то живёт.

Например, вот эти линки я уже встречал не раз на роутерах, никак не относящихся к РЖД.



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

В случае с Сапасаном, чтобы через полученный VPN доступ можно было увидеть только один сервис с которым взаимодействует пользователь системы, а не всю сеть РЖД

Я старался достаточно жирно намекнуть на узкие места не раскрывая деталей и надеюсь, что специалисты РЖД их всё же увидят.

Связаться со мной можно через телеграм t.me/monoceros
Обсудить данную статью приглашаю в профильный чат по Микротикам в Телеграм RouterOS Security: t.me/router_os

Кстати, Евгений Игоревич, с повышением!



Источник

Подробнее..

IKEv2 туннель между MikroTik и StrongSwan EAP ms-chapv2 и доступ к сайтам

27.01.2021 00:06:41 | Автор: admin

Введение

Идея статьи возникла из желания пропускать определенные сайты через VPN-туннель напрямую через маршрутизатор, так как дома большое количество устройств, а пускать весь трафик через VPN неудобно в связи с низкой пропускной способностью туннеля. Статья написана сразу после создания конфигурации. Настройка будет проходить в Winbox MikroTik.

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

Здесь я рассмотрю только основные конфигурационные файлы StrongSwan, без углубления в настройку данного демона.

/etc/ipsec.conf

config setup   charondebug="ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2,  mgr 2"   uniqueids=neverconn ikev2-vpn   auto=add   compress=no   type=tunnel   keyexchange=ikev2   fragmentation=yes   forceencaps=yes   dpdaction=clear   dpddelay=300s   rekey=no   left=%any   leftid=   leftcert=server-cert.pem   leftsendcert=always   leftsubnet=0.0.0.0/0   right=%any   rightid=%any   rightauth=eap-mschapv2   rightsourceip=10.10.10.0/24   rightdns=8.8.8.8,8.8.4.4   rightsendcert=never   eap_identity=%identity

/etc/ipsec.secrets

# This file holds shared secrets or RSA private keys for authentication.# RSA private key for this host, authenticating it to any other host# which knows the public part.# this file is managed with debconf and will contain the automatically created $include /var/lib/strongswan/ipsec.secrets.inc: RSA "server-key.pem"user1 : EAP "password1"user2 : EAP "password2"

iptables на VPS

-A FORWARD -s 10.10.10.0/24 -o eth0 -p tcp -m policy --dir in --pol ipsec -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT-A INPUT -i lo -j ACCEPT-A INPUT -p udp -m udp --dport 500 -j ACCEPT-A INPUT -p udp -m udp --dport 4500 -j ACCEPT-A INPUT -j DROP-A FORWARD -s 10.10.10.0/24 -m policy --dir in --pol ipsec --proto esp -j ACCEPT-A FORWARD -d 10.10.10.0/24 -m policy --dir out --pol ipsec --proto esp -j ACCEPT-A FORWARD -j DROP

Импорт сертификатов и настройка IPSec MikroTik

Импорт сертификатов

Для добавления сертификатов, необходимо перенести их в память вашего MikroTik в раздел Files.

System -> Certificates

Импортируем открытый ключ корневого сертификата вашего центра сертификации на VPS на котором установлен StrongSwan.

Последовательно импортируем открытый и закрытый ключи авторизации используемые в конфигурации StrongSwan.

Настройка клиента IPsec

IP -> IPsec

Импортируем закрытый ключ авторизации StrongSwan, для использования в клиенте.

Далее, последовательно настраиваем профиль VPN-клиента.

Вместо "VPS IP" указываем адрес вашего сервера, где развернут StrongSwan.

В разделе IPsec Idenity настраиваем профиль авторизации, указываем учётные данные и сертификат импортированный ранее.

После выполнения этого шага туннель между MikroTik и StrongSwan будет поднят автоматически.

Вывод в разделе Log при успешной авторизацииВывод в разделе Log при успешной авторизации

В разделе IP -> Addresses при успешной авторизации, появится IP адрес выданный StrongSwan.

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

IP -> Firewall

В разделе NAT создаем правило перенаправления трафика.

В данном случае я использовал списки адресов.

local - подсеть маршрутизатора.

List1 - список сайтов.

Перенаправляем трафик на шлюз(IP адрес выданный StrongSwan)

Настройка списков

IP -> Firewall

В разделе Address Lists необходимо добавить следующие списки:

local - подсеть маршрутизатора, в моем случае 192.168.1.0/24

List1 - список сайтов. Например habr.com, можно добавить сайт по fqdn, ip адрес будет определён автоматически.

List1 - список сайтов. Например habr.com, можно добавить сайт по fqdn, ip адрес будет определён автоматически.

Заключение

В данной статье я постарался подробно описать настройку туннеля между MicroTik и StrongSwan. Очень жду фидбека и вашей конструктивной критики.

Подробнее..

Honeypot на RouterOS

25.03.2021 00:06:26 | Автор: admin

Одним из способов обеспечения информационной безопасности сетевых ресурсов является организация специально подготовленных для легкого взлома бочонков с медом, детектирования ими угроз, выявления и анализе соответствующих сигнатур с последующей своевременной блокировкой злоумышленников. В статье описано создания honeypot на просторах интернета программными средствами от компании MikroTik.

Философское отступление и предыстория

Серфинг в интернете стал сопряжен с государственным регулированием, выражающимся в выполнении провайдерами требований по ограничению доступа к различным сайтам. Параноики нагнетают обстановку фактом незашифрованности протокола DNS и возможностями по манипуляции с ним со стороны третьих лиц. Старый и добрый HTTP до сих пор встречается на просторах сети. И на десерт аналитика наших интересов со стороны поисковых систем, почтовых сервисов, мессенджеров, социальных сетей и различных сервисов. Как результат, большинство людей знают/слышали/пользуются VPN технологиями для сопротивления реальной глобализации современной жизни в целях защиты цифровой приватности. Темную сторону силы в расчет даже не берем и с ними отношений не имеем.

Как IT специалисты, мы не имеем морального права использовать готовые решения от не известных нам компаний из разряда нажал кнопку и ты в VPN. Нам нужен собственный центр сертификации, да и вся инфраструктура публичных ключей. Свой VPN сервер, полный root, полный контроль, абсолютная гибкость и безопасность. Большинство из нас возьмут Linux сервер и все сделают как в техническом задании. Пласт сетевых инженеров, специализирующихся на оборудовании MikroTik, с удовольствием предпочтет RouterOS, развернутый где-нибудь на VP по ряду причин:

  1. Легкость интеграции в существующую инфраструктуру на базе RouterOS.

  2. Наличие удобного интерфейса управления, в том числе графического.

  3. Простая развертываемость различных сетевых технологий коммутации, маршрутизации, L7 и т.д.

  4. Безопасность и стабильность применяемого решения.

  5. Чувство эстетического удовольствия от работы с хорошими программными средствами.

  6. Поддержка из коробки различных протоколов VPN (openvpn, l2tp, sstp, gre, pptp).

Управление по средством графического интерфейса VPS с установленным RouterOSУправление по средством графического интерфейса VPS с установленным RouterOS

Реализуем облачный маршрутизатор

Развернем собственный облачный маршрутизатор MikroTik. Дешево и быстро арендуем VPS с минимальными характеристиками. Разворачиваем вместо штатного Debian свой любимый RouterOS:

mount -t tmpfs tmpfs /tmp/cd /tmpwget https://download.mikrotik.com/routeros/6.47.9/chr-6.47.9.img.zipapt install zipunzip chr-6.47.9.img.zipdd if=chr-6.47.9.img of=/dev/vda bs=4M oflag=syncecho 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger

После перезагрузки, используя VNС, настраиваем сеть, и виртуальный маршрутизатор готов к работе:

/ip address add interface=ether1 address=наш_ip/ip route add dst-address=0.0.0.0/0 gateway=gw_от_провайдера

Сразу же начался знакомый всем Linux администраторам bruteforce ssh-сервера:

... system,error,critical login failure for user root from 104.211.164.221 via ssh... system,error,critical login failure for user yu from 119.29.113.149 via ssh... system,error,critical login failure for user laboratory from 1.245.61.144 via ssh... system,error,critical login failure for user username from 36.133.162.171 via ssh... system,error,critical login failure for user test from 49.232.214.91 via ssh

В этот момент и зародилась идея создания honeypot из Cloud Hosted Router для анализа ботов, специализирующихся на зло вредительстве устройствам MikroTik. Обзорную информацию об угрозах информационной безопасности для данных устройств можно посмотреть в презентации Fools your enemy with Mikrotik.

Настройка honeypot

Для начала определим, какие возможности по записи действий злоумышленников у нас имеются в штатных средствах RouterOS:

  1. Удаленное логирование.

  2. Регистрация выполненных изменений конфигурации роутера.

  3. Контроль проходящего через него трафика.

А вот введенные команды сохранятся, только если не будут принудительно удалены из консоли, дистанционно передавать их нельзя, хотя возможно, со слов компании, это появится в 7 версии операционной системы (на текущий момент последняя доступная версия stable релиза 6.48.1). Цитируем: By upgrading to RouterOS v7 you will get more details in this command output (речь идет об /system history print detail). Начнем сначала, для этого:

/system logging action set 3 remote=ip_удаленного_сервера/system loggingadd action=remote topics=infoadd action=remote topics=criticaladd action=remote topics=erroradd action=remote topics=hotspotadd action=remote topics=warning

Передачу логов осуществляем по vpn каналу, чтобы не передавать открытые данные в сеть. На удаленном сервере настроим лог-коллектор rsyslog, для этого отредактируем файл /etc/rsyslog.conf:

$ModLoad imudp$UDPServerAddress ip_удаленного_сервера$UDPServerRun 514

Перестартуем службу systemctl enable rsyslog, systemctl restart rsyslog. Прослушиваем только vpn интерфейс, чтобы не светить 514 хоть и UDP портом наружу. Удаленный лог будет выглядеть примерно так:

2021-03-24T20:46:02.608642+06:00 ip_роутера system,error,critical login failure for user root from 45.124.86.155 via ssh2021-03-24T20:51:46.427403+06:00 ip_роутера system,error,critical login failure for user root from 193.112.24.94 via ssh2021-03-24T20:52:48.378138+06:00 ip_роутера system,error,critical login failure for user ts3srv from 107.173.209.238 via ssh2021-03-24T20:53:02.692985+06:00 ip_роутера system,error,critical login failure for user root from 61.7.147.29 via ssh2021-03-24T20:53:15.616354+06:00 ip_роутера system,error,critical login failure for user user14 from 68.183.84.215 via ssh2021-03-24T20:53:54.436415+06:00 ip_роутера system,error,critical login failure for user root from 52.172.165.176 via ssh2021-03-24T20:53:56.684200+06:00 ip_роутера system,error,critical login failure for user php from 189.8.95.30 via ssh

Регистрацию выполненных ботом изменений конфигурации роутера будем осуществлять в результате регулярного экспорта всех конфигураций в собственную память, а забирать файлы будем автоматически скриптом на VPS по ftp, разумеется так же через vpn канал (/ip service set ftp address=ip_удаленного_сервера). Для этого делаем планировщик на MikroTik с регулярным заданием: /export compact file=file. А на сервере запустим скрипт:

#!/bin/shHOST=ip_роутераUSER=adminPASSWD=суровый_пароль_настоящего_админаFILE=file.rscSIZE=2091cwhile true; doOUTPUTNAME=`date +%F-%H-%M-%S`.rcscurl -u $USER:$PASSWD ftp://$HOST/$FILE > /root/exports/$OUTPUTNAMEfind /root/exports/ -type 'f' -size 0 -deletefind /root/exports/ -type 'f' -size $SIZE -deletesleep 5;done

В переменой SIZE лежит размер файла экспорта после всех наших манипуляций с honeypot. Если злоумышленник изменит любую конфигурацию, то результатом экспорта будет файл не много другого размера. Таким образом, на удаленном сервере в папке /root/exports окажется что-то новенькое. Так как наш удаленный лог начнет забиваться сообщениями о работе задания в планировщике, поэтому донастроим конфигурацию rsyslog (файл /etc/rsyslog.conf):

if $fromhost-ip contains 'ip_адрес_роутера' then {        if $msg contains 'ftp' then /dev/null        else /var/log/mikrotik.log}

Для контроля проходящего через роутер трафика можно использовать разные подходы. Это и маркировка трафика с последующим снифером, настройка net-flow клиента, но мы воспользуемся самым простым встроенным приложениемpacket-sniffer:

/tool snifferset filter-interface=ether1 filter-port=!ssh,!winbox,!ftp,!наш_порт_для_vpn \    filter-stream=yes memory-scroll=no streaming-enabled=yes \    streaming-server=ip_удаленного_сервера

Пропускать мимо снифера будем шифрованный vpn, ssh и winbox, а также задействованный нами ftp. Трафик будет отправляться UDP пакетами по протоколу Tazmen Sniffer Protocol (TZSP), принять его на сервере можно вместе со служебными заголовками обычным tcpdump-ом, или в уже красивом и удобном виде, используя программу Trafr непосредственно от компании MikroTik. Подробнее как все настроить можно почитать здесь.

Теперь перейдем к ключевому моменту. Для того, чтобы honeypot не натворил плохих дел будем постоянно анализировать внутренний лог RouterOS на факт подключения "учетной записи приманки" пользователя root с паролем qwerty (построчно перебирать лог и искать ключевую фразу user root logged in). Как только это произойдет, включаем обратный отчет и сразу начинаем снифить трафик. Через 10 минут (по нашему мнению этого времени будет достаточно, чтобы проанализировать действия и не достаточно, чтобы сообразить осуществить плохие делишки) просто выключаем маршрутизатор, и бот на это повлиять не сможет:

:local DELAY 600;:local USER root;:local STRING "user $USER logged in";:foreach line in=[/log find message~$STRING] do={if ([ /tool sniffer get running] = no) do={/tool sniffer start;}:delay $DELAY;/system shutdown;}

Не забудем очистить консоль от введенных нами команд /console clear-history. Можно настроить удаленное оповещение о факте доступа к нашему honeypot посредством, например, email, но не будем оставлять какой-либо приватной информации на маршрутизаторе. Контролировать будем в ручную через нативное приложение на телефоне. Если подключение не прошло, значит root все-таки зашел на honeypot, следовательно настало время изучать трафик и логи. При повторной загрузке (после срабатывания) не забываем сразу отключить учетную запись - приманку:

sshpass -p суровый_пароль_настоящего_админа ssh admin@ip_роутера /user disable root

Удачной охоты на ботов!

P.S. В конце 2020 года нами был реализован проект по организации общественного доступа в Интернет для международной компании Coffee Сup: 5 собственных баров формата кофе с собой в разных городах, а так же дилеров по всей России и странах СНГ(до последних руки не дошли). Что вполне не удивительно, но среди клиентов Hotspot сетей находятся не чистые на руку, пытающиеся получить доступ до маршрутизаторов. Интересно, так сказать, узнать их "в лицо"...

Подробнее..

Hotspot для бизнеса своими руками

25.12.2020 12:18:15 | Автор: admin

Недавно мне посчастливилось заняться достаточно интересной практической задачей по организации общественного доступа в Интернет для международной компании Coffee Сup, имеющей 5 собственных баров формата кофе с собой в разных городах, а так же дилеров по всей России и странах СНГ. Нужно все сделать, так как мы любим: желательно быстро и достаточно качественно. Гостевой доступ в Интернет организуется не только ради удобства пользователей сервиса, но и, в первую очередь, с точки зрения пользы для бизнеса: принудительно смотришь рекламу и получаешь свой бесплатный Интернет. В наше время, это уже абсолютно повсеместный сервис, встречаемый от метро и аэропортов, до торговых центров и других общественных площадок. Этими удаленными осенними вечерами родилось решение сделай все своими руками, поэтому делюсь опытом и практическими наработками. Сразу забегу вперед, стоимость решения на один бар вышла 3700 рублей за оборудование и совсем немного сверху в счет аренды сервера. Но вернемся к нашей задаче.

С чего мы начали, так это с поиска готовых решений на рынке. С этим нет проблем, поддержка различного оконечного оборудования, дружественный интерфейс по его подключению на аутсорсинг, обещанная гарантия, что все по закону, всего 1000 рублей в месяц абонентской платы за каждое подключение. А для Coffee Сup это уже 5000 рублей/месяц, что равно 60000 рублей/год (не считая оборудование). Поиском готовых аппаратно-программных реализаций даже не занимались полная скука, даже можно сказать осенняя хандра. В общем, не наш метод. Надо во всем самим разобраться и все сделать самому.

Для начала была проведена декомпозиция и детализация задачи:

  1. Разобраться в нормативно-правовых актах, чтобы все было по закону.

  2. Выбрать и закупить необходимое оборудование.

  3. Настроить и интегрировать оборудование в уже существующую инфраструктуру баров.

  4. Настроить Hotspot (сконфигурировать роутеры и сделать страницы авторизации на сервисе под задачи маркетинга).

  5. Настроить централизованное управление (удаленное управление маршрутизаторами, базу данных, backend и frontend).

Нормативно-правовые акты

Обо всем по порядку. Нам нужны постановления правительства России и от 31 июля 2014 г. 758 О внесении изменений в некоторые акты и от 12 августа 2014 г. 801 О внесении изменений в некоторые акты . Одно дополняет второе, как видно, между ними успело пройти целых 2 недели. В соответствии с ними (немного перефразировано для большей ясности):

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

Это единственно приемлемое решение в настоящее время, все остальные предлагаемые законом решения нам явно не подходят (паспорта, госуслуги и т.д.). Цитируем снова:

сведения о пользователях , а также об объеме и времени оказания им услуг связи хранятся не менее 6 месяцев.

Что понимать под объемом оказания им услуг связи мы решили уточнить у роскомнадзора, написали им письмо и ничего до сих пор не получили в ответ. Остается на наше усмотрение: под объемом будем понимать результаты NetFlow (сбора информации об открытых пользователями соединениях, подробнее можно прочитать на https://en.wikipedia.org/wiki/NetFlow).

С этим разобрались, уже хорошо. Дошло дело до всеми любимого федерального закона от 27 июля 2006 г. 152-ФЗ О персональных данных. Закон в принципе понятный, уже обкатанный вдоль и поперек, технически сложного он ничего не содержит сплошная организационная рутина: согласия, политики, приказы и т.д. Попадаем ли мы со своим Hotspot под его действие? Ведь мы будем хранить просто номера телефонов Ответ не попадаем. Точку в этом вопросе в настоящее время ставит роскомнадзор на своем сайте в разделе вопросов и ответов (https://15.rkn.gov.ru/p8880/p15987/):

Согласно ст. 3 Федерального закона от 27.07.2006 152-ФЗ О персональных данных

Персональные данные - любая информация, относящаяся к прямо или косвенно определенному или определяемому физическому лицу (субъекту персональных данных). Абонентский номер (номер телефона) это выделяемый абоненту номер, (совокупность цифровых знаков) при заключении с абонентом договора об оказании услуг телефонной связи. Данный номер служит для обозначения и возможности идентификации конечного оборудования абонента в сети связи при соединении с ним абонентских устройств из чего следует, что номер телефона без указания на его владельца не является информацией, на основании которой это лицо (субъекта персональных данных) можно однозначно идентифицировать и его использование не может подразумевать обработку персональных данных его владельца.

Оборудование

Приступаем к технической части. В качестве оборудования было решено приобретать роутеры MikroTik по следующим причинам: поддерживают технологию Hotspot, отличное качество, высокая гибкость, дружелюбные русскоязычные сообщества. Самое главное, наличие возможности работы в диапазоне 2.4 и 5 ГГц, чтобы нашему WiFi никто не мешал. Выбрали hAP ac lite TC (подробно про него можно посмотреть на сайте производителя https://mikrotik.com/product/RB952Ui-5ac2nD-TC, в характеристиках нам все нравится, особенно Operating System RouterOS). 3700 рублей каждый, отличная цена. Из рекомендаций вполне можно приобретать изделия, бывшие в употреблении, рынок в Москве наиболее насыщенный и приятный по ценам, а доставка сейчас работает отлично в любой регион. Арендовали в Интернете Linux сервер, особо каких-то требований к этому вопросу тоже не предъявляли.

Интеграция

Все бары уже имели подключение к Интернет. Везде по-разному, где-то стоял 4G USB модем в другом роутере, где-то использовался мобильный WiFi роутер со встроенным аккумулятором. Изменять существующую инфраструктуру было запрещено из-за боязни, что что-нибудь перестанет безвозвратно работать, а все переделывать и безосновательно финансово удорожать проект не хотелось. MikroTik везде интегрировался без проблем. Например, покажем как настроено получение Интернет по WiFi (как настроено это дело по кабелю от другого роутера или через 4G USB модем оставлю без комментариев):

/interface wireless security-profiles set [ find default=yes ] supplicant-identity=MikroTikadd authentication-types=wpa2-psk disable-pmkid=yes eap-methods="" group-ciphers=tkip mode=dynamic-keys name=OPERATOR supplicant-identity="" unicast-ciphers=tkip wpa2-pre-shared-key=1111111111111/interface wireless set [ find default-name=wlan1 ] band=2ghz-onlyn country=russia disabled=no frequency=auto name=wlan1-station security-profile=OPERATOR ssid=OPERATOR-9392 station-roaming=enabled

Добавили скрипт в dhcp-client и скорректировали работу своего NAT (можно было бы настроить masquerade, однако вспомнили презентацию технического специалиста компании MikroTik My holy war against masquerade, а также, что masquerade частный случай SRC-NAT и отказались от этой идеи):

/ip firewall natadd action=src-nat chain=srcnat comment=OPERATOR-NAT out-interface=wlan1-station src-address=192.168.2.0/24 to-addresses=10.0.0.100add action=src-nat chain=srcnat comment=HOME-NAT out-interface=wlan1-station src-address=192.168.1.0/24 to-addresses=10.0.0.100/ip dhcp-clientadd disabled=no interface=wlan1-station use-peer-dns=no use-peer-ntp=no#Script for src-NAT:local OUTINTERFACE wlan1-station;:local COMMENT OPERATOR-NAT;:local COMMENT2 Home-NAT;:local IPFORNAT [/ip dhcp-client get [find interface=$OUTINTERFACE] address];#delete mask in ip:local IPFORNATSHORT [:pick $IPFORNAT 0 [:find $IPFORNAT "/"]];/ip firewall nat set [find comment=$COMMENT] to-addresses=$IPFORNATSHORT;/ip firewall nat set [find comment=$COMMENT2] to-addresses=$IPFORNATSHORT;

Интернет до MikroTik-ов получили, далее настроили качественно и безопасно наши роутеры в качестве точки доступа. Опишем только интересное. Сделали два профиля безопасности для WiFi (free и staff), включили сразу 3 WiFi сети: две для staff (для обоих диапазонов 2.4 и 5 ГГц, так как не все оборудование в барах умеет работать в 5 ГГц) и одну free (только на 5 ГГц). На 2.4 ГГц free решили не делать, так как приоритет отдан предоставлению Интернет пользователям с современными мобильниками, и кроме того наши роутеры умеют делать до 4 точек доступа одновременно. Рекомендовали барам все оборудование переподключить на staff, так как позже была задана приоритезация трафика в маршрутизаторах, а это значит, что никто из гостей нам не провалит "служебный" Интернет. В настройках WiFi оставили много параметров по-умолчанию, чтобы поддерживать максимальный парк подключаемых устройств. Важно помнить, что беспроводной интерфейс, выступающий в качестве клиента WiFi (через который мы забираем Интернет), должен быть обязательно master.

/interface wireless security-profilesset [ find default=yes ] supplicant-identity=MikroTikadd authentication-types=wpa-psk,wpa2-psk eap-methods="" management-protection=allowed name=coffeecup_free supplicant-identity=""add authentication-types=wpa2-psk disable-pmkid=yes eap-methods="" management-protection=allowed mode=dynamic-keys name=coffeecup_staff supplicant-identity="" wpa2-pre-shared-key=2222222222222/interface wirelessset [ find default-name=wlan1 ] antenna-gain=0 band=2ghz-g/n channel-width=20/40mhz-XX country=russia disabled=no frequency=auto frequency-mode=manual-txpower installation=indoor mode=ap-bridge name=wlan1-COFFEECUP_2_staff security-profile=coffeecup_staff ssid=CoffeeCup_Staff2 station-roaming=enabled wireless-protocol=802.11 wps-mode=disabledset [ find default-name=wlan2 ] antenna-gain=0 band=5ghz-n/ac channel-width=20/40/80mhz-XXXX country=russia disabled=no frequency=auto frequency-mode=manual-txpower installation=indoor mode=ap-bridge name=wlan2-COFFEECUP_5_staff security-profile=coffeecup_staff ssid=CoffeeCup_Staff station-roaming=enabled wps-mode=disabledadd default-forwarding=no disabled=no keepalive-frames=disabled mac-address=02:00:00:AA:00:00 master-interface=wlan2-COFFEECUP_5_staff multicast-buffering=disabled name=wlan3-COFFEECUP_5 security-profile=coffeecup_free ssid=CoffeeCup_FreeWiFi wds-cost-range=0 wds-default-cost=0 wps-mode=disabled

Настроили firewall, обязательно сделали отдельное правило для icmp (чтобы не было скрытых проблем с раздачей Интернет от вышестоящих маршрутизаторов) и заложили будущий VPN. Пример для 4G свистка:

/ip firewall filteradd action=accept chain=input comment="Accept established,related" connection-state=established,relatedadd action=drop chain=input comment="Drop invalid" connection-state=invalidadd action=accept chain=input comment="Accept input icmp" protocol=icmpadd action=accept chain=input comment="Accept input ovpn" in-interface=ovpn-coffeecupadd action=accept chain=input comment="Accept input DNS for bridge_guest" dst-port=53 in-interface=bridge_guest protocol=udpadd action=drop chain=input comment="Drop all input from !bridge" in-interface=!bridgeadd action=accept chain=forward comment="Accept established,related" connection-state=established,relatedadd action=drop chain=forward comment="Drop invalid" connection-state=invalidadd action=drop chain=forward comment="Drop all from WAN to !DSTNAT" connection-nat-state=!dstnat connection-state=new in-interface=LTE1_WAN

Qos выполнили через маркировку трафика, скоростные лимиты выбрали из реальных измерений (мы использовали сервис от Яндекс Интернетометр):

/ip firewall mangleadd action=mark-connection chain=prerouting comment="Managment connections" dst-address=192.168.15.21 dst-port=22,8291 new-connection-mark="Managment connections" passthrough=yes protocol=tcpadd action=mark-connection chain=forward comment="VIP connection" connection-mark=no-mark new-connection-mark="VIP connection" passthrough=yes src-address-list=VIPadd action=mark-packet chain=forward comment="VIP packets" connection-mark="VIP connection" new-packet-mark="VIP packets" passthrough=yesadd action=mark-connection chain=forward comment="LAN=>WAN connections" connection-mark=no-mark in-interface=bridge new-connection-mark="LAN=>WAN connections" out-interface=LTE1_WAN passthrough=yesadd action=mark-packet chain=forward comment="LAN=>WAN packets" connection-mark="LAN=>WAN connections" new-packet-mark="LAN=>WAN packets" passthrough=yesadd action=mark-connection chain=forward comment="Guest=>WAN connections" connection-mark=no-mark in-interface=bridge_guest new-connection-mark="Guest=>WAN connections" out-interface=LTE1_WAN passthrough=yesadd action=mark-packet chain=forward comment="Guest=>WAN packets" connection-mark="Guest=>WAN connections" new-packet-mark="Guest=>WAN packets" passthrough=yesadd action=mark-packet chain=output comment="Managment packets" connection-mark="Managment connections" new-packet-mark="Managment packets" passthrough=yesadd action=mark-connection chain=postrouting comment="OVPN connections" dst-address=IP_OUR_SERVER dst-port=1190 new-connection-mark="OVPN connections" out-interface=LTE1_WAN passthrough=yes protocol=tcpadd action=mark-packet chain=postrouting comment="OVPN packets" connection-mark="OVPN connections" new-packet-mark="OVPN packets" passthrough=yes/queue treeadd comment="Guest (bridge-guest)" max-limit=10M name=Guest parent=bridge_guestadd comment="LAN (bridge)" max-limit=10M name=LAN parent=bridgeadd comment="WAN (pppoe)" max-limit=10M name=WAN parent=LTE1_WANadd name=Guest_other packet-mark=no-mark parent=Guestadd name="LAN_LAN=>WAN" packet-mark="LAN=>WAN packets" parent=LANadd limit-at=128k max-limit=512k name=LAN_managment packet-mark="Managment packets" parent=LAN priority=1add name=LAN_other packet-mark=no-mark parent=LANadd name=LAN_ovpn packet-mark="OVPN packets" parent=LANadd name=LAN_vip packet-mark="VIP packets" parent=LAN priority=7add name="WAN_Guest=>WAN" packet-mark="Guest=>WAN packets" parent=WANadd name="WAN_LAN=>WAN" packet-mark="LAN=>WAN packets" parent=WAN priority=7add name=WAN_ovpn packet-mark="OVPN packets" parent=WAN priority=7add name=WAN_vip packet-mark="VIP packets" parent=WAN priority=6add name="Guest=>WAN" packet-mark="Guest=>WAN packets" parent=Guest queue=pcq-download-default

Задействовали семейные DNS сервера от Яндекса: все-таки рабочий Интернет, да и место общественное.

/ip dns set allow-remote-requests=yes servers=77.88.8.7,77.88.8.3

На практике было установлено, что некоторые провайдеры блокируют использование не своих DNS-серверов. Чтобы решить это, можно получать адреса DNS серверов от вышестоящего маршрутизатора при работе DHCP-клиента (активация use-peer-ntp) или вложить свои DNS запросы в VPN туннель, а на арендуемом сервере настроить NAT и включить ip forward:

#На роутере:/ip routeadd distance=1 dst-address=77.88.8.3/32 gateway=192.168.15.1add distance=1 dst-address=77.88.8.7/32 gateway=192.168.15.1#На сервере:iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -o eth0 -j SNAT --to your_server_ipecho '1' > /proc/sys/net/ipv4/ip_forward

Hotspot

Настало время настройки технологии Hotspot непосредственно на роутерах. MikroTik из коробки поддерживает саму технологию, однако мы ее кастомизировали под "Coffee Cup", а также выполнили все требования российского законодательства. В процессе был найден полезный ресурс (https://mikrotik-training.ru/), посвященный настройке оборудования MikroTik, наработками которого мы воспользовались в своем проекте. Приступим к описанию. Создали профиль для Hotspot. При подключении к сети free роутер показывает web страницы авторизации в сервисе Hotspot от имени сайта coffeecuptogo.com, время жизни cookie задали 4 часа (по истечении которых пользователя отправляются на переподключение). Работа технологии Hotspot, разумеется, касается только гостевой сети.

/ip hotspot profileset [ find default=yes ] dns-name=coffeecuptogo.com hotspot-address=192.168.10.1 html-directory=flash/hotspot http-cookie-lifetime=4h name=coffeecup/ip hotspotadd address-pool=pool_guest addresses-per-mac=1 disabled=no idle-timeout=none interface=bridge_guest name=hotspot_coffeecup/ip hotspot user profileset [ find default=yes ] keepalive-timeout=1h mac-cookie-timeout=4h

Здесь же в профиле пользователей создали скрипты, которые автоматически срабатывают при подключении и отключении пользователей. Логика у обоих скриптов одинаковая. Сначала собирается информацию на роутере, затем она отправляется методом http-get на наш сервер, на котором все это аккумулируется в базу данных (разберем ее позднее). Для защиты своего сервера от спама придумали ключ, который также передается и, в первую очередь, проверяется на сервере. На роутере собирается: имя роутера (для каждого бара задали его индивидуально), текущее время и дата на роутере (удобно их забирать здесь, а не получать на сервере, чтобы не заморачиваться потом в backend-е с часовыми поясами в разных барах), mac гостя, его ip в гостевой сети, а также текущие белый и серый ip адреса роутера (белый адрес мы берем через внешний сервис, хотя нет проблем его забирать на нашем сервере через массив $_SERVER в PHP, на котором написан наш backend), номер телефона клиента, который мы позже будем получать через форму авторизации в Hotspot и присваивать его значение в качестве имени пользователя (на сервер отправляется с первой цифрой 7), а также имя хоста телефона (может потом пригодится где-нибудь в маркетинге или статистике). Кстати новые версии iOS при подключении к точке доступа без пароля не передают имя хоста, что реализовано с целью сохранения конфиденциальности. Переменной LOGIN мы передаем отключился (LOGIN=2) ли клиент или наоборот подключился (LOGIN=1). Скрипт для аутентификации имеет вид:

#Out interface to internet:local INTERNETINTERFACE pppoe-out1;:local APIKEY 12345;#status ---> log in:local LOGIN 1;:local SITE oursite;:local PORT 1500;:local nas [/system identity get name];:local today [/system clock get date];:local time1 [/system clock get time ];:local ipuser [/ip hotspot active get [find user=$user] address];:local usermac [/ip hotspot active get [find user=$user] mac-address]:local hour [:pick $time1 0 2]; :local min [:pick $time1 3 5]; :local sec [:pick $time1 6 8];:set $time1 [:put ({hour} . {min} . {sec})] :local mac1 [:pick $usermac 0 2];:local mac2 [:pick $usermac 3 5];:local mac3 [:pick $usermac 6 8];:local mac4 [:pick $usermac 9 11];:local mac5 [:pick $usermac 12 14];:local mac6 [:pick $usermac 15 17];:local USERLONG "7$user";:set $usermac [:put ({mac1} . {mac2} . {mac3} . {mac4} . {mac5} . {mac6})]#ip addresses::local whiteip ([/tool fetch url="http://personeltest.ru/aways/site_for_white_ip/" output=user as-value]->"data");:local grayip [/ip address get [find interface=$INTERNETINTERFACE] address];#delete mask in ip:local grayipshort [:pick $grayip 0 [:find $grayip "/"]];#What host-name:foreach i in=[/ip dhcp-server lease print as-value where address=$ipuser] do={:if (($i->"address")=$ipuser) do={:set $host [($i->"host-name")];}}do {/tool fetch url="http://personeltest.ru/aways/$SITE:$PORT/\?api=$APIKEY&device=$nas\&tel=$USERLONG\&status=$LOGIN\&ipgray=$grayipshort\&ipnat=$ipuser\&mac=$usermac\&date=$today\&time=$time1\&host=$host"\keep-result=no} on-error={};

Скрипт для деаутентификации имеет вид:

#Out interface to internet:local INTERNETINTERFACE pppoe-out1;:local APIKEY 12345;#status ---> log out:local LOGIN 2;:local SITE oursite;:local PORT 1500;:local nas [/system identity get name];:local today [/system clock get date];:local time1 [/system clock get time ];:local hour [:pick $time1 0 2]; :local min [:pick $time1 3 5];:local sec [:pick $time1 6 8];:set $time1 [:put ({hour} . {min} . {sec})] :local USERLONG "7$user";#ip addresses::local whiteip ([/tool fetch url="http://personeltest.ru/aways/site_for_white_ip/" output=user as-value]->"data");:local grayip [/ip address get [find interface=$INTERNETINTERFACE] address];#delete mask in ip:local grayipshort [:pick $grayip 0 [:find $grayip "/"]];do {/tool fetch url="http://personeltest.ru/aways/$SITE:$PORT/\?api=$APIKEY&device=$nas\&tel=$USERLONG\&status=$LOGIN\&ipgray=$grayipshort\&date=$today\&time=$time1"\keep-result=no} on-error={};

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

/system logging add action=hotspot topics=hotspot,debug,info,!account/system logging action add name=hotspot target=memory

Наш скрипт обнаруживает в логе MikroTik сообщение с темой hotspot со словами login failed. Эти записи будут появляться автоматически. Со стороны клиента это выглядит так: загрузилась форма авторизации на Hotspot, пользователь ввел свой телефонный номер, нажал кнопку получить пароль, в течение 10 секунд ему приходит пароль посредством SMS, пользователь вводит этот пароль и получает Интернет. На роутере это выглядит немного по-другому: произошла попытка авторизации на сервисе Hotspot неизвестного пользователя (ошибка login failed), скрипт получает имя этого пользователя (из того же лога) и его короткий пароль посредством http-get на наш backend (на сервере генерируются случайные пароли в нужном нам формате, опишем это позже), создает такого пользователя Hotspot, отправляет номер телефона и пароль методом http-get в SMS центр (который пересылает пароль на номер пользователя) и очищает лог с темой hotspot (уменьшает его до 1 строки и сразу увеличивает до 1000 строк). Случайный пароль генерируется на сервере, потому что RouterOS не имеет встроенной функции генерации случайных чисел, а самодельные решения из математических операций со временем (и т.п.) не всегда дают нужный результат. Создание такого механизма на MikroTik заслуживает независимого исследования. Кроме этого сделали защиту от пользователей, которые попытаются получить много SMS (и обнулить наш счет в SMS центре). Для этого воспользовались не по назначению возможностями firewall, а именно адрес листом. Каждого пользователя Hotspot (фактически его номер телефона) скрипт записывает в /ip firewall address-list на 5 минут, а при попытке аутентификации на Hotspot, проверяет, нет ли там такого пользователя. Побочным явлением этого решения является появление посторонних записей в address-list попытка RouterOS определить IP адрес для каждой DNS записи. Просто не обращаем на это внимание. В качестве SMS центра выбран sms.ru, так как у заказчика уже был с ними договор и оформлены все необходимые документы, в следствие чего уже был закреплен корректный caller id Coffee Cup (в качестве номера телефона, от имени которого приходят SMS).

:local SITE oursite;:local PORT 1500;:foreach line in=[/log find buffer=hotspot message~"login failed"] do={:do {:local content [/log get $line message];:local pos1 [:find $content " (" 0];:if ($pos1 != " ") do={:local uname ""; :set uname [:pick $content ($pos1-10) ($pos1-0)];   :local unameforsms "7$uname";#Cheks user from spam:local sendtest yes;:foreach i in=[/ip firewall address-list print as-value where list=spam_cheks_list] do={:if (($i->"address")=$uname) do={:set $sendtest no;}}:if ($sendtest=yes) do={/ip firewall address-list add list=spam_cheks_list address=$uname timeout=00:05:00;#Password generation local pass ([/tool fetch url="http://personeltest.ru/aways/$SITE:$PORT" output=user as-value]->"data")#Add hotspot userdo {/ip hotspot user add name=$uname} on-error={};do {/ip hotspot user set password=$pass numbers=[find name=$uname]} on-error={};#SMSdo {/tool fetch url="http://personeltest.ru/aways/sms.ru/sys/send.php\?AUTH_DATA&phones=$unameforsms&mes=$pass" keep-result=no} on-error={}; :delay 1;}}}}#Clear hostpot log/system logging action set hotspot memory-lines=1;:delay 1;/system logging action set hotspot memory-lines=1000;

Российское законодательство обязывает нас сохранять объем оказания пользователям услуг связи, поэтому настроили связку коллектора и клиента Net-flow. На сервере с backend-ом:

apt install flow-toolsnano /etc/flow-tools/flow-capture.conf#comment all#IMPORTANT Traffic Flow Version need 5 !!-w /var/log/flow -n 275 -N 3 192.168.15.1/0/1234

На MikroTik (обращаем внимание на версию 5 протокола, так как коллектор работает именно с ней):

/ip traffic-flow set enabled=yes interfaces=bridge_guest/ip traffic-flow target add dst-address=192.168.15.1 port=1234 version=5

Кроме этого с целью сохранения конфиденциальности от третьих лиц (в том числе провайдера Интернет) передачу Net-flow трафика осуществляем по VPN каналу (ширины его полностью хватает для этой задачи). Настало время разобраться с формой авторизации в сервисе. При создании Hotspot в RouterOS появляется набор каталогов и файлов, отвечающих за его работу. Нас интересуют файлы /flash/hotspot/login.html и /flash/hotspot/alogin.html. Первый это страница авторизации на сервисе, а вторая это страница, которая будет показана пользователю после успешной авторизации. Подробнее об этом можно почитать тут https://wiki.mikrotik.com/wiki/Manual:Customizing_Hotspot.

"Родная" структура каталогов и файлов Hotspot на MikroTik"Родная" структура каталогов и файлов Hotspot на MikroTik

Сверстали (переделали) login.html под заказчика, сохранили необходимую RouterOS структуру web страницы. Подробно расписали политику конфиденциальности.

Переделанная страница авторизации на сервисе HotspotПеределанная страница авторизации на сервисе Hotspot

Очень хотелось на странице alogin.html просто сделать редирект на сайт заказчика, но у этого решения есть большой минус: сайт подгружается не моментально (временная задержка на редирект, да и скорость Интернета не всегда достигает отличных значений). Если сверстать эту страницу и положить ее в память роутера, то она будет показана пользователю моментально. То, что мы и сделали. Единственное ограничение - это объем страницы, ведь в нашем маршрутизаторе всего 16 Мб памяти и львиную ее долю забирает созданная RouterOS структура файлов и каталогов Hotspot. Можно, конечно, присоединить USB flash, но не очень хочется занимать свободный (не всегда) единственный USB порт на MikroTik. Мы уместили alogin.html со всеми ссылками в 500 кб. На этом настройка Hotspot закончена, настал черед разобрать backend.

Управление

Начнем с сервера. На нем работает база данных MySQL, в которую накапливается информация о регистрациях пользователей в Hotspot, передаваемая скриптами роутеров. Принимается и сохраняется в базу данных информация посредством backend страницы на PHP, она же генерирует пароли для пользователей. Создали админку для заказчика и прокинули VPN до роутеров (надо же их администрировать кому-то). Теперь подробнее.

Как мы помним, маршрутизаторы передают нам: имя роутера, текущее время и дату, mac гостя, его ip в гостевой сети, а также текущие белый и серый ip адреса роутера, номер телефона клиента, имя хоста телефона и статус (авторизация или деавторизация). Все это аккумулируется в таблице registration. Информацию о барах (имя устройства MikroTik и описательная информация о его расположении) накапливается в таблице coffeepoints (здесь нам все сразу известно). По просьбе заказчика ввели излишнюю таблицу users, в которой накапливается информация о пользователях сервиса: номер телефона, и в каком баре впервые он появился. Создали техническую таблицу status, в которой переводится придуманные нами коды 1 или 2 в значения login и logout. Для резервного копирования базы данных лучше, конечно, настроить автоматическую репликацию, однако в связи с не большими объемами хранения информации в нашем проекте мы пошли другим путям: в cron еженедельно выполняется mysqldump базы данных, результаты периодически копируются в ручную на локальный хост.

Структура базы данныхСтруктура базы данных

Разберем одностраничный код backend. В общем виде там все работает так: проверяется корректность передаваемого на сервер APIKEY, если все верно, тогда наполняется база данных. Сначала извлекается из базы данных информация, описывающая бар. Затем проверяется, новый ли пользователь пришел в бар (в этом случае заполняется таблица users), или информация о нем уже содержится в базе данных. Переводятся в текст коды status. Затем вся необходимая информация заполняется в таблицу registrations. Если APIKEY не передавался (или не верен), то просто генерируется случайный пароль.

//Проверка корректности ключаif ( $key_from_get === $api ) {Защита от спама пройдена}else {//Выводим просто временный пароль$pas1d = random_int (0, 9);$pas2d = random_int (0, 9);$pas3d = random_int (0, 9);$pas4d = random_int (0, 9);$password = "$pas1d$pas2d$pas3d$pas4d";echo $password;}

Осталось поговорить про админку, с которой заказчик сможет работать самостоятельно. Можно, конечно, просто установить на сервер готовые решения по работе с базой данных посредством web интерфейса (вроде phpmyadmin или adminer), но мы сделали все под ключ. Так как web дизайн это не наш конек, да и интереса к нему особо нет, то воспользовались нашим любимым getbootstrap.com. На выходе - строгий адаптивный frontend. В разделе Регистрации отображается журнал регистраций в сервисе, т.е. таблица registrations базы данных.

Админка для сервиса (раздел "Регистрации")Админка для сервиса (раздел "Регистрации")

В разделе Пользователи видим информацию из таблицы users, в разделе Бары из coffeepoints, в разделе Статусы из status, а раздел Подключения введен для отладки. Поля дата и время передаются роутерами не в совсем красивом формате, что можно преобразовывать на нашем backend, но на функционал это не сильно влияет. Добавили возможность фильтровать вывод, а также экспорт в "MS Exel". Да и вообще здесь можно писать код в свое удовольствие, с делом и просто так. Не судите строго.

Админка для сервиса (раздел "Пользователи")Админка для сервиса (раздел "Пользователи")

Пару слов о настройке VPN. Разумеется, VPN сервер вертится здесь же на арендуемом сервере (вот такой комбайн вышел), в качестве протокола выбран OpenVPN, как наиболее гибкий, безопасный и стабильный. С его настройкой нет никаких проблем: сделали инфраструктуру открытых ключей, нагенерировали сертификатов, самоподписали их. RouterOS, правда, умеет пока работать только с TCP соединением для OpenVPN, но это не беда. В целом, соединения устанавливаются и работают годами без проблем. В результате имеем удаленный доступ до роутеров из любой точки мира, самое главное не забываем работать в Safe mode (режим MikroTik, при котором в случае долгого обрыва канала управления маршрутизатор автоматически отменяет последнее изменение своей конфигурации), ведь настраивать удаленно firewall - это верная примета к дальней поездке. А также обращаем внимание на то, что по нашей ошибке при переносе настроенных конфигураций между роутерами, возможно совпадение mac адресов сетевых интерфейсов, что может доставить немного хлопот.

Заключение

Наконец наша статья подошла к концу. Опираясь на имеющиеся в Интернете наработки, мы самостоятельно запустили сервисы Hotspot для баров компании Coffee Сup, функционирующих в рамках действующего российского законодательства, используя силу оборудования MikroTik, мощь PHP и универсальность MySQL. Не боимся экспериментировать и разбираться с разными технологиями. Всех с наступающим 2021 годом!

Подробнее..

Настройка IPsec GRE туннель между FortiOS 6.4.5 и RouterOS 6.48.1

10.03.2021 14:15:34 | Автор: admin

Стояла задача объединить филиалы с головным офисом предприятия, где находилась серверная. Fortigate 60E организовывал доступ в интернет и выполнял роль межсетевого экрана в головном офисе, в филиалах выполняли роль доступа в интернет Микротик разных моделей. Также было необходимо настроить динамическую маршрутизацию OSPF и поднять IPsec VPN туннели с GRE. Порыскав на просторах интернета, нашел пару разрозненных статей о соединении Fortigate c микротик через IPsec VPN и GRE туннель. Решил объединить эту информацию в одной своей статье, чтобы в дальнейшем самому использовать как шпаргалку. О динамической маршрутизации OSPF напишу в следующей статье.

Итак, входные данные:

1.Головной офис предприятия HQ FortiOS 6.4.5:

  • Публичный IP X.X.X.X (сетевой интерфейс port1)

  • Внутренняя сеть 192.168.111.0/24 (сетевой интерфейс port2)

2.Филиал предприятия Branch Mikrotik RouterOS 6.48.1:

  • Публичный IP Y.Y.Y.Y сетевой интерфейс ether1

  • Внутренняя сеть 192.168.112.0/24 (сетевой интерфейс ether2)

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

Опущу основный настройки Fortigate и mikrotik, эта информация есть в интернете, сразу приступим к настройкам IPsec и GRE. Начнем настройку с mikrotik . Начнем с GRE, заходим утилитой Winbox на mikrotik в меню Interfaces->GRE Tunnel->+(нажимаем плюс, чтобы добавить туннель), за тем : - Local Address Y.Y.Y.Y - Remote Address X.X.X.X Укажем параметр "keepalive", который определяет находится ли туннель в рабочем состоянии. Если параметр не включен, то даже, если второй маршрутизатор будет выключен интерфейс все равно будет показывать рабочее состояние, что не удобно для диагностики. Использовать будем значение 10 попыток по 10 секунд. т. е., если в течении 100 секунд не будет никаких сигналов с противоположной стороны туннель перейдет в нерабочее состояние. При этом он автоматически включится, если противоположная сторона попытается установить соединение. В отличии от настройки GRE без IPsec в этой конфигурации должна быть отключена опция "Allow Fast Path", а параметр "Local Address:" является обязательным потому что без него не получится создать автоматические настройки IPsec. Если указать параметр IPsec Secret, то автоматически создадутся необходимые настройки IPsec. Но их поменять будет уже не возможно, поэтому не задаю параметр IPsec Secret.

Назначим IP адрес GRE-туннелю. Зайдем IP->Addresses->+

Команды консоли :

/interface greadd name=gre-tunnel1 keepalive=10s,10 local-address=Y.Y.Y.Y remote-address=X.X.X.X allow-fast-path=no/ip addressadd address=10.10.10.2/30 interface= gre-tunnel1

Настраиваем IPsec . Начнем с phase-1, идентификация устройств между собой, по заранее определенному IP адресу и ключу , настройки в IP->IPsec->Profiles.

Создаем Peer для phase-1, в IP->IPsec->Peers. Указываем имя name Branch-HQ, адрес удаленного FortiGate HQ, локальный адрес и profile1, который соответствует phase-1.

Теперь определяем ключ IPsec phase-1.

Настройка параметров phase-2, он согласует общую политику IPsec, получает общие секретные ключи для алгоритмов протоколов IPsec (AH или ESP), устанавливает IPsec SA. Идем IP->IPsec->Proposals

И создаем политики IPsec , IP->IPsec->Policies->General. Указываем имя Peer Branch-HQ, мы его настраивали выше. Src. Address внешний адрес нашего mikrotik Y.Y.Y.Y, Dst. Address внешний адрес FortiGate HQ X.X.X.X, и указываем протокол GRE в параметре Protocol - 47.

На вкладке Action выбираем Proposal porposal1, который мы тоже настраивали выше.

Настройка в консоли :

 /ip ipsec profileadd dh-group=modp1536,modp2048 enc-algorithm=aes-256 hash-algorithm=sha256 lifetime=24h name=profile1/ip ipsec peeradd address=X.X.X.X local-address=Y.Y.Y.Y name=Branch-HQ profile=profile1/ip ipsec proposaladd auth-algorithms=sha256 enc-algorithms= aes-256-cbc lifetime=30m name=proposal1 pfs-group=modp1536/ip ipsec policyadd peer=Branch-HQ src-address= Y.Y.Y.Y dst-address= X.X.X.X protocol=47 proposal=proposal1/ip ipsec identityadd peer=Branch-HQ secret=#!@BRaNCH@!#

Прописываем правила в файерволе IP->Firewall->Filter Rules:

В терминале :

/ip firewall filteradd chain=input protocol=17 dst-port=500,4500 in-interface=ether1 action=accept

Пока не поднята динамическая маршрутизация , создадим статический маршрут до локальной сети головного офиса :

/ip routeadd dst-address=192.168.111.0/24 gateway=10.10.10.1

На этом настройка mikrotik окончена , перейдем к настройки FortiGate.

На FortiGate настроим IPsec phase-1 в командной строке:

config vpn ipsec phase1-interface edit HQA-Branch set peertype any set proposal aes256-sha256 set dpd on-idle set dhgrp 5 14 set auto-discovery-sender enable set remote-gw Y.Y.Y.Y set psksecret #!@BRaNCH@!# set dpd-retryinterval 5 nextend

Phase-2 , не забываем указать protocol 47 и указать transport-mode (транспортный режим) для туннеля GRE:

config vpn ipsec phase2-interface edit "HQA-Branch" set phase1name "HQA-Branch" set proposal aes256-sha256 set dhgrp 5 14 set auto-negotiate enable set encapsulation transport-mode set protocol 47 nextend

Настроим GRE tunnel:

config system gre-tunnel edit "HQ-Branch" set interface "HQA-Branch" set remote-gw Y.Y.Y.Y set local-gw X.X.X.X nextend

Настроим локальный IP адрес туннельного интерфейса и укажем IP удаленного интерфейса:

config system interface edit "HQ-Branch" set ip 10.10.10.1 255.255.255.255 set remote-ip 10.10.10.2 255.255.255.252 set interface "HQA-Branch" nextend

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

config firewall policy edit 2 set name "Enable IPsec" set srcintf "HQA-Branch" set dstintf "HQA-Branch" set srcaddr "all" set dstaddr "all" set action accept set schedule "always" set service "ALL" next

Разрешим трафик из локальной сети головного офиса port2 в туннель GRE и наоборот:

config firewall policy     edit 3        set name "GRE HQ->Branch"        set srcintf "port2"        set dstintf "HQ-Branch"        set srcaddr "all"        set dstaddr "all"        set action accept        set schedule "always"        set service "ALL"    next    edit 4        set name "GRE Branch->HQ"        set srcintf "HQ-Branch"        set dstintf "port2"        set srcaddr "all"        set dstaddr "all"        set action accept        set schedule "always"        set service "ALL"    nextend

После туннелирования GRE, пакеты GRE должны быть защищены IPsec. Следовательно, remote-gw gre-tunnel должен указывать на интерфейс IPsec. Настраиваем статический маршрут:

config router static edit 1 set dst Y.Y.Y.Y/30 set device "HQA-Branch" next

Создадим статический маршрут до локальной сети филиала

edit 2        set dst 192.168.112.0 255.255.255.0        set device "HQ-Branch"    nextend

И теперь поднялся IPsec и GRE , трафик из локальной сети головного офиса попадает в локальную сеть филиала и наоборот.

Использовал следующие статьи:

1.Fortinet

2.Wiki Микротика

Это мой второй труд , прошу сильно не пинать.

Подробнее..

Прерывается голос, слышу эхо Проблема качества связи ip телефонии. Как можно решить самостоятельно?

07.04.2021 08:12:05 | Автор: admin
Источник: ЯндексКартинкиИсточник: ЯндексКартинки

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

Некоторые провайдеры, конечно подсказывают, что можно предпринять со своей стороны, в чем может быть проблема. Снимут дамп, сделают анализ и дадут рекомендации. Но таких крайне мало. Из памяти, пожалуй вспомню оператора Мобилон. Привет техподдержке, если читаете!

А что происходит, если провайдер не дал рекомендаций, не указал на причину?

Несомненно, у вас начнет закрадываться мысль о смене провайдера. Но решит ли это проблему? Если причина на нашей стороне, то очевидно, что проблема не решится, и качество будет также неудовлетворительным с новым провайдером. А переход, дело не простое и затратное. За такой исход событий руководство компании спасибо нам не скажет.

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

Что же еще можно предпринять? Казалось бы, вариантов больше не осталось...

Но может быть, все таки, разобраться самому? Возможно, это не так сложно?

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

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

Для диагностики нам понадобится научиться снимать дамп сети (sniffer) с роутера и маршрутизатор Mikrotik. А также, настроить очереди (QoS) на роутере.

Для упрощения схемы, я поделил весь процесс на этапы:

  1. Настроить и запустить sniffer

  2. Воспроизвести проблемный вызов

  3. Проанализировать sniffer в Wireshark

  4. Настроить на роутере выделенную полосу (QoS) для телефонии

  5. Протестировать связь

1. Настройка и запуск packet sniffer

Для того чтобы определить причину проблемы, необходимо снять dump звонка. В нем будет содержаться вся информация о состоянии сети во время вызова.

Настраиваем на Микротике packet sniffer: Tools->Packet Sniffer

На вкладке General оставляем значения по умолчанию.

Открываем настройку Packet SnifferОткрываем настройку Packet Sniffer

Вкладка Streaming: галочки Streaming Enabled и Filter Stream, в поле Server пишем адрес, куда будем отправлять данные, собираемые сниффером.

Прописываем адрес хоста куда слать снифферПрописываем адрес хоста куда слать сниффер

Я отправляю на свой ПК в той же сети, поэтому прописываю его локальный адрес. Но можно слать и на удаленный сервер, тогда прописываем его внешний ip.

Вкладка Filter: здесь необходимо в поле IP Address прописать ip адрес провайдера телефонии.

Желательно уточнить у самого провайдера адреса серверов, с каким сервером осуществляется обмен сигнальными сообщениями, а с каким - RTP.

Если не получилось выяснить адреса провайдера, то можно прописать просто 0.0.0.0/0

Но тогда в дампе будет очень много лишней информации, что затруднит анализ.

Я пообщался с техподдержкой своего провайдера, они порекомендовали прописать всю подсеть.

Прописываем адрес провайдера ip телефонииПрописываем адрес провайдера ip телефонии

Нажимаем Apply и Start. Внизу окна появится статус: running

Packet Sniffer запущенPacket Sniffer запущен

Сниффер на роутере запущен, теперь необходимо поймать пакеты.

На том ПК или сервере, адрес которого указали в поле Server, нужно запустить tcpdump.

На Windows:

а) нужно скачать утилиту tcpdump

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

tcpdump.exe можно запустить даже с флэшки

Для этого запускаем cmd от имени администратора и проваливаемся в директорию с файлом tcpdump.exe

Запускаем tcpdump на WindowsЗапускаем tcpdump на Windows

Вводим команду tcpdump -D

Нам отобразится список доступных интерфейсов.

Выводим список доступных интерфейсовВыводим список доступных интерфейсов

Запускаем дамп в онлайн режиме, чтобы найти интерфейс, который нам нужно слушать.

Например: tcpdump -i 1 -v -n host 192.168.88.1

где 1 - это номер интерфейса, а host - адрес роутера.

У меня пакеты летят на интерфейсе под 4, его и буду слушать.

Запускаем tcpdump onlineЗапускаем tcpdump online

Далее запускаем команду для отлова сниффера с Микротика:

tcpdump host 192.168.88.1 -i 4 -C50 -n -v -w name_sniffer.pcap

где i - номер интерфейса, С50 - ограничение размера записываемого файла до 50Мб, n - отображать IP адреса вместо имени хостов, v - уровень отображения получаемой информации (1-й уровень), w - записывать данные в файл.

Запустили tcpdump для отлова Packet SnifferЗапустили tcpdump для отлова Packet Sniffer

На Linux :

Необходимо установить утилиту tcpdump. Обычно она присутствует в стандартном репозитории.

Более подробно про установку можно посмотреть, например, здесь.

Запускаем команду:

tcpdump host 192.168.88.1 -i any -C50 -n -v -w /var/tmp/name_sniffer.pcap

После запуска tcpdump вы должны увидеть отсчет улавливаемых пакетов (на Linux), в поле Got. Если отсчет не идет, значит что-то сделали неверно, перепроверьте.

Запустили tcpdump для отлова Packet SnifferЗапустили tcpdump для отлова Packet Sniffer

2. Фиксируем проблемный звонок

Теперь, когда у нас tcpdump ловит сниффер с Микротика, нужно зафиксировать проблемный звонок.

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

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

Как мы слышим на записи, голос идет с прерываниями.

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

3. Останавливаем sniffer и анализируем его в Wireshark

Проблемный вызов необходимо проанализировать. Останавливаем tcpdump (Ctrl+C) и sniffer на Микротике (нажать Stop). Создастся файл name_sniffer.pcap.

Устанавливаем программу Wireshark. Скачать ее можно бесплатно с официального сайта. А на Линуксе можно установить из стандартного репозитория.

Открываем pcap файл в Wireshark и переходим в Телефония->Вызовы VoIP

Открываем pcap файл для анализаОткрываем pcap файл для анализа

В новом окне отобразятся все вызовы, которые попали в дамп. У меня такой один.

VoIP вызов в дампеVoIP вызов в дампе

Для удобства поиска вызовов (когда их в дампе много) установите галочку Время дня.

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

Дамп движения запросов звонка (последовательность потоков)Дамп движения запросов звонка (последовательность потоков)

Здесь мы увидим, с каким сервером провайдера идет обмен сигнальными сообщениями, а с каким сервером осуществляется передача голосовых пакетов (RTP).

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

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

Далее нас интересуют RTCP пакеты.

Из всего перехваченного сниффером трафика нужно отфильтровать только RTCP пакеты.

Прописываем фильтр:

(rtcp.ssrc.fraction>10)||(rtcp.ssrc.jitter>35)

- отобразить RTCP со значением потерь пакетов больше 10 или RTCP со значением джиттера больше 35.

Выбираем сообщение и разворачиваем RTCP -> Source 1 -> SSRC Contents

Анализ RTCP по звонкуАнализ RTCP по звонку

Здесь видим, что потеряно 50 пакетов из 256 и уровень джиттера 166 (хотя нормальный уровень это 30-70).

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

По каким причинам это может происходить?

  1. Забивается линия выделенная вам от интернет провайдера.
    Например, у нас 3Mб/с на "внешку". Устройства в локальной сети потребляют все 3Mб/с, но если просто сёрфить в браузере, то мы не заметим нехватку канала. Так как в этом случае, используется транспортный протокол TCP. А телефония использует UDP, которому свойственно теряться в процессе передачи, если весь ваш выделенный канал занят.

  2. Устройства подключены по воздуху (Wi-Fi).
    В таком случае будет высокий показатель джиттера.

  3. У провайдера на линии есть радиоканал.

  4. Проблема с вашим маршрутизатором.

  5. Проблемы на линии интернет провайдера

В этой статье, более подробно, рассмотрена причина под пунктом 1.

По остальным скажу кратко.

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

Пункт 3 и 5 - обратиться к интернет провайдеру, предоставив наши дампы, подтверждающие проблему.

Пункт 4 - диагностировать или заменить роутер.

Но в первую очередь, рекомендую всегда сначала проработать пункт 1.

4. Настраиваем выделенную полосу для ip телефонии

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

Для начала, измерьте фактическую скорость интернета на "внешку".

Я измеряю через speedtest.net

Можно еще с помощью 2ip.ru или утилитой iperf

На speedtest.net я выбираю Change Server город отличный от моего, чтобы исключить вероятность замера скорости в пиринге.

Настраиваю speedtest.net для замера скоростиНастраиваю speedtest.net для замера скоростиВыбираю Change ServerВыбираю Change ServerРезультаты измерения скорости интернетаРезультаты измерения скорости интернета

У меня на загрузку скорость 11Мб/с, на отдачу 14Мб/с. Хотя по договору должно быть 15М в обе стороны. Поэтому и рекомендую измерять, какая у вас скорость по факту, а не по бумагам. Это поможет корректно настроить очереди на роутере.

Для настройки очередей открываем на Микротике Queues

QueuesQueues

Cоздаем правила в разделе Simple Queues.

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

Я устанавливаю максимальные значения лимита меньше на 2М, чем полученные при замере.

Почему 2М? Беру с запасом, так как скорость может быть не постоянной и в моменте меняться как в большую, так и в меньшую сторону.

Настройки на вкладке GeneralНастройки на вкладке General

В Advanced выставить Queue Type распределение по pcq (это делается для того, чтобы устройства не мешали друг другу и равномерно использовали трафик).

Настройки на вкладке AdvancedНастройки на вкладке Advanced

Сохраняем это правило и создаем еще одно, для SIP.

Прописываем ip адрес (можно всю подсеть) провайдера ip телефонии.

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

Настройки General для SIPНастройки General для SIP

В Advanced устанавливаем Limit At. Это позволит для телефонии оставлять 1Мб/с в любом случае, даже если идет максимальная нагрузка на канал другими устройствами.

Вкладка Advanced при настройке QoS для SIPВкладка Advanced при настройке QoS для SIP

Сохраняем и устанавливаем правило SIP на верхнюю позицию.

Порядок QoS правилПорядок QoS правил

ВНИМАНИЕ!

  1. Чтобы очереди (QoS) начали работать, необходимо деактивировать правило Fasttrack в IP -> Firewall -> Filter Rules.

  2. Учитывайте порядок настроенных правил. Обработка осуществляется сверху вниз. Поэтому обязательно правило SIP поднимаем на самый верх.

Пояснение по настроенным QoS:

  • весь трафик, который идет на ip адреса отличные от адреса voip провайдера, ограничивается 12Мб/с на загрузку и 9Мб/с на отдачу

  • весь остаток от этого до 15Мб/с оставляем для телефонии

  • и на тот случай, что если даже трафик проскочит выше лимитов, для телефонии отведен 1Мб/с принудительно

Далее проверяем ходит ли вообще трафик в настроенных QoS.

Нужно открыть настройки очереди и перейти на вкладку Traffic.

График трафика local QoSГрафик трафика local QoSГрафик трафика sip QoSГрафик трафика sip QoS

На вкладке Statistic можно увидеть, количество дропнутых пакетов и распределенных по pcq.

Статистика local QoSСтатистика local QoS

Также можно проверить, как отрабатывают очереди, с помощью утилиты iperf.

5. Тестируем связь

Теперь, когда QoS настроены, нужно протестировать связь.

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

Я сделал несколько вызовов сотрудникам, и мы вместе убедились, что теперь прерываний не наблюдалось.

Вот пример одного из звонков.

В дампе этого вызова потерь пакетов не наблюдается.

Дамп звонка после настройки QoSДамп звонка после настройки QoSДамп звонка после настройки QoSДамп звонка после настройки QoS

Единственное, можно заметить, что уровень джиттера выше нормы.

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

Вы можете также и сами наглядно всё это увидеть в моих дампах. Скачать можно здесь:
дамп звонка до настройки QoS
дамп звонка после настройки QoS

Итог:

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

В некоторых организациях в локальной сети может находиться большое количество устройств с разными категориями. Например, помимо ip телефонии еще ip камеры, которые также используют udp протокол для передачи данных. Следовательно для ip камер тоже необходимо выделять QoS.

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

Более подробно про QoS можно изучить еще в этой статье.

Подробнее..

MikroTik Скрипт Массовое создание VPN (PPP) пользователей, из csv файла

17.12.2020 14:07:58 | Автор: admin

Не самая частая задача на устройствах MikroTik - одномоментное создание большого количества PPP(англ.Point-to-Point Protocol) пользователей. Но когда она возникает, это превращается в очень скучное и нудное дело, что следует исправить.

Предыдущую статью "MikroTik Скрипт: Уведомление о успешном входе на устройство или простой парсер журнала MikroTik" добавило в закладки в закладки 80+ пользователей, надеюсь и эта статья будет не менее полезна.

- Что, мой мальчик, получается ли тебе собрать слово "Вечность"?

- Трудно, моя госпожа, сложить слово "Вечность" из букв "Ж", "П", "О" и "А" - ответил Кай.

Скриптовый язык MikroTik никак нельзя назвать полноценным языком программирования, поэтому слово "Вечность" будем собирать из того что есть, добавляя костыли и перематывая синей изолентой (ведь нет ничего долговечней, чем ...).

Скрипт рассчитан на внимательных пользователей (регистр имени файла, структура файла) и не рассчитан на любознательных пользователей вида "что будет, если вместо IP адреса поставить деление на ноль?". "Защита от дурака" отсутствует, чтобы искусственно не раздувать размер скрипта.

Планируемая последовательность действий

  1. Скачиваем шаблон CSV файла (FileTemplate.zip на GitHub);

  2. Заполняем шаблон (проверено Microsoft Excel);

  3. Загружаем файл на устройство MikroTik;

  4. Создаем скрипт импорта PPP пользователей;

  5. Включаем Безопасный режим MikroTik;

  6. Запускаем скрипт;

  7. Смотрим лог и список PPP пользователей;

  8. Убедившись, что все прошло хорошо - выключаем Безопасный режим MikroTik;

  9. Пишем в комментарий к статье, что всё прошло хорошо (неплохо указать модель устройства, версию RouterOS).

Создание файла

Настоятельно рекомендую использовать шаблон файла с GitHub (в этом случае пропустите этот раздел).

Но вы конечно можете создавать свой файл с любым расширением (в этом случае настраивайте :set Content [:pick $Content 62 $ContentLen]; вместо 62 выставляя свое значение от начала последовательности, в скрипте "отрезается" 62 символа - с учетом "шапки" таблицы в шаблоне).

Как разделитель элементов используется символ ";", но вы можете указать свой символ.

Как разделитель строк используется символ "\r", поэтому шаблон предоставлен в .zip формате с сохранением всех символов, т.к. множество редакторов, в том числе на GitHub отрезают "лишние" по их мнению символы.

Логика скрипта

Укажите в строке :local FileName "FileTemplate.csv"; название импортированного файла (рекомендую скопировать полное название из списка Files);

Проверка, что размер файла не превышен, запись в журнал устройства при превышении размера и остановка скрипта. Для RouterOS6 существует ограничение на размер переменной в 4КБ (у меня это было 80 пользователей, в RouterOS7 вроде как обещают снять ограничения);

"Разбираем" файл, разбивая его на строки и запуская деление на элементы в каждой строке;

Значение найденного элемента присваиваем соответствующему ключу массива ColumnsArray;

Закончив разбор строки, формируем команду MikroTik для создания PPP пользователя;

Если имя пользователя уже существует - пропускаем создание пользователя (вы можете самостоятельно добавить удаление пользователя, если требуется массовое пересоздание пользователей);

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

Выполняем сформированную команду создания пользователя;

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

Создать скрипт

Для запуска скрипта необходимы разрешения: read, write, test, policy.

[System] -> [Scripts] -> [+] -> [Name: CreatePPPUsers] -> [Policy: read, write, test, policy]

Внимание: излишние права (выставляются по умолчанию новому скрипту) могут привести к появлению ошибки "could not run script ParseLogAccountEvents: not enough permissions" (RouterOS 6.48), устанавливайте только указанные в статье права.

Код скрипта

# Name: CreatePPPUsers v1# Description: Bulk create VPN users from a file# Author: Yun Sergey, MHelp.pro 2020# License: GPL-3.0 License# Description, purpose and questions: https://mhelp.pro/mikrotik-script-bulk-create-vpn-users-from-a-file/# More scripts Mikrotik: https://mhelp.pro/tag/mikrotik/:local FileName "FileTemplate.csv";:log warning "Script CreatePPPUsers: running. Import from file: $FileName";:if ([/file get $FileName size]  > 4096) do={    :log error "Error run script CreatePPPUsers: file size exceeded 4 KB (size constraint of a variable in Router OS 6). Split the file $FileName into several parts.";    :error "File size exceeded 4 KB. Stop script."};:local Content [/file get $FileName contents];:local ContentLen [:len $Content];:set Content [:pick $Content 62 $ContentLen];:local StartCursor 0;:local EndCursor;:local LineEndCursor;:while ($StartCursor < [:len $Content]) do={    :set LineEndCursor [:find $Content "\r" $StartCursor];    :local  Cont;    :local ColumnsArray { "01Name"="" ; "02Password"="" ; "03Service"="" ; "04Profile"="" ; "05LocalAdress"="" ; "06RemoveAddress"=""};    # START PARSING STRING    :foreach Key,Value in=$ColumnsArray do={        :local Symbol [:pick $Content $StartCursor];        :if ($Symbol =";") do={:set StartCursor ($StartCursor - 1)};        :set EndCursor [:find $Content ";" $StartCursor];        :if (($EndCursor > $LineEndCursor) or ([:typeof $EndCursor]="nil")) do={:set EndCursor [:find $Content "\r" ($StartCursor-1)];};        :set Cont [:pick $Content $StartCursor $EndCursor];        :set ($ColumnsArray -> $Key ) $Cont;        :set StartCursor ($EndCursor+1);    };    # END PARSING STRING    # START CREATE COMMAND    :local UserName ($ColumnsArray -> "01Name");    :if ([/ppp secret find name=$UserName ]) do={        :log info "Add PPP user: $UserName - already exist! Skipped.";    } else={        :local Command "/ppp secret add name=$UserName";        :local UserPassword ($ColumnsArray -> "02Password");        :if ($UserPassword != ";") do= {:set Command ("$Command" . " password=$UserPassword")};        :local UserService ($ColumnsArray -> "03Service");        :if ($UserService != ";") do= {:set Command ("$Command" . " service=$UserService")};        :local UserProfile ($ColumnsArray -> "04Profile");        :if ($UserProfile != ";") do= {:set Command ("$Command" . " profile=$UserProfile")};        :local UserLocalAdress ($ColumnsArray -> "05LocalAdress");        :if ($UserLocalAdress != ";") do= {:set Command ("$Command" . " local-address=$UserLocalAdress")};        :local UserRemoveAddress ($ColumnsArray -> "06RemoveAddress");        :if ($UserRemoveAddress != ";") do= {:set Command ("$Command" . " remote-address=$UserRemoveAddress")};        [:parse $Command];    };    # END CREATE COMMAND    :set StartCursor ($EndCursor+2);};:delay 2;:log warning "Script CreatePPPUsers: completed.";

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

Если вам интересны другие мои скрипты MikroTik, их можно увидеть здесь или на GitHub.


Если вы использовали скрипт, оставьте пожалуйста обратную связь "Работает. Модель устройства и версия RouterOS". Это поможет другим. Спасибо.

Проверено: MikroTik hAP ac lite (RouterBOARD 952Ui-5ac2nD), RouterOS 6.47.8 (stable).

Подробнее..

RADIUS немного о Mikrotik, NPS и не только

10.01.2021 16:05:45 | Автор: admin
  • Цель статьи

  • Определение

  • Компоненты

  • Общие понятия

  • Сфераприменения

    • -login

    • -VPN (ppp*)

    • -wifi

    • -dot1x

  • диагностика

  • выводы

Цель

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

Определение, назначение, общие сведения

RADIUS - это протокол, для авторизации, аутентификации и учёта (AAA).

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

Сервер RADIUS может иметь свою базу данных с учетными данными (например файлы илиmysql) или работать в паре с другим сервером, например Active Directory.

Кроме AAA позволяет передать некоторые дополнительныеданные (настройки) клиенту прошедшему аутентификацию, в том числе vendor-specific attributes (VSA). У Mikrotik такие тоже есть, позже пройдемся по самым интересным.

Существуют много популярных приложенийрадиус сервера, самый популярные: freeRADIUSи Служба NPS (Network Policy Server) Windows Server. Более подробно мырассмотрим второй вариант.

Компоненты кейса

  • Суппликант - устройство которое намеренопройти процедуру авторизации и аутентификации.

  • Аутентификатор - устройство к которому подключается суппликант, которое получаету суппликанта данные авторизации и которое проверяет их на RADIUS сервере. NB! Является клиентом для радиус-сервера.

  • RADIUS сервер (он же радиус сервер, он же сервер аутентификации).

Настройка

Установку роли описывать не буду, существует 100500 статей в картинках, например: тыц

  1. Добавлениерадиус клиента на радиус-сервере Намнужно заполнить "понятное имя", IP адрес и придумать пароль (а.к.а. "секрет"), которыйпонадобится при настройке аутентификатора (mikrotikв нашем случае)

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

Политики имеют порядок и обрабатываются по нему одна за другой. Если подключение не соответствует условиям политики, то проверяется следущаяи так далее. К примеру, это поможет разделить правила обработки для проводных\беспроводных и впн клиентов. {.is-warning}

  1. Добавление политики запросов на подключение

  2. Добавление сетевой политики

Некоторые типовые кейсы применения радиус сервера :

  1. централизованная аутентификация на устройствах поддерживающихaaa

  2. аутентификация для vpn (pptp\l2tp)

  3. аутентификация вwifi

  4. аутентификация устройств при подключении к порту rj45 - dot802.1x

Итак подробнее, + некоторые плюшки. Для всех наших пунктов нам нужнонастроить радиус клиента вmikrotik

/radius add address=10.10.11.100 comment="PVE AD" secret=STRONG_SECRET_PASSWORD service=ppp,login,hotspot,wireless,dhcp,ipsec,dot1x timeout=600ms

address -Адрес радиус сервера secret - пароль, который мы совсем недавно настраивали для радиус клиента service -сервисы в mikrotik, которые могут использовать радиусдля аутентификации.

Отдельно стоит отметить пункт timeout=600ms, если вы используете радиусчерез медленные каналы с большими задержками, стоит увеличитьэто значение.

Теперь можно начинать настраиватьинтересные вещи.

1. настроим входна микротик

/user aaaset accounting=yes default-group=read use-radius=yes

Стоит уделить внимание параметру default-group он означаетгруппу по умолчанию,вкоторая применится к пользователю.

Теперь настроим NPS:

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

ОбратимсякWikimikrotik, мы можем заметить RADIUS атрибут, который позволяет определитьдоступы какой группыприменятся к пользователюкоторый аутентифицируется на устройстве черезRADIUS. *Mikrotik-Group - Router local user group name (defines in /user group) for local users; HotSpot default profile for HotSpot users; PPP default profile name for PPP users. * воспользовавшись промт'оммы понимаем что этот атрибут позволяет задать нам имя встроенной группы при авторизации , или задать имя профиля при аутентификациив сервисыvpn или hostspot. этот атрибут мы буем использовать и позже.что бы отделить мух от котлет приавторизации для впн мы будем использовать дополнительные условия, но это позже.

итак, как мы этого добьемся мы можем создать вSystem -> users ->groupдве группы со специфичными параметрами доступа, а можем и воспользоваться уже существующими, к примеруfullиread.

Но все это ничего без второй части, нам необходимо настроитьNPS. Давайте создадим в остнастке Пользователи и компьютерыДве группы пользователей admins-network иadmins-junior. И два пользователяnet-juniorи net-admin,добавим их в соответствующие группы.

Политику запроса на подключение мы уже создали, перейдем к сетевым политикам. в Оснастке NPSсоздадим двеполитики mikrotik-login-juniorиmikrotik-admin-network ,в условиях первойзададим :

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

Сразу попробуем авторизоваться ивидим что попали в нужную группуread

В методах проверки подлинности указываем :

Политика mikrotik-admin-networkбудет отличаться тем что в условияхвыберем группу admins-networkа значение отрибутаMIKROTIK_GROUPзададим как full Результат ожидаемый, мы залогинилисьв микротик под полными правами:

/user active print detailFlags: R - RADIUS, M - by-romon 0 R when=jan/05/2021 10:36:52 name="net-admin" address=10.10.15.7 via=winbox     group=full 1 R when=jan/05/2021 10:37:04 name="net-admin" address=10.10.15.7 via=telnet     group=full

Перейдем к впн, и к стразу более интересному сценарию.

Предположим мы хотим отделитьадминов, от остальных работников. Выдадим админам профиль с подсетью которая будет иметь доступ к management vlanи не только, и выдадимотстальным сотрудникам профильс подсетью которая будет меть ограниченый доступ только к 1c, RDP, etc.. . Предположим, мы используюем для впнl2tp\ipsec/ Для этого создадим в микротик два профиля в PPP -> profile

/ip pool add name=pool_l2tp_admin ranges=10.10.21.10-10.10.21.250/ip pool add name=pool_l2tp_users ranges=10.10.22.10-10.10.22.250/ppp profile add dns-server=10.10.21.1 local-address=10.10.21.1 name=l2tp-vpn-admin remote-address=pool_l2tp_admin use-compression=no use-encryption=yes/ppp profile add dns-server=10.10.22.1 local-address=10.10.22.1 name=l2tp-vpn-users remote-address=pool_l2tp_users use-compression=no use-encryption=yes

В настройки правил форейвола дляограничения доступа подсетей япожалуй не буду углубляться,подразумевается что вы понимаете как изодной подсети запретить доступ кресурсу икак разрешить. (с)предпологается, что вы немного сетевик. Касательно примера подсети10.10.21.0/24необходимо разрешить форвард в подсети серверов и managementа подсети 10.10.22.0/24необходимо разрешить только доступк корпоративным сервисам, но не к сетям управления.

Настроим NPS. В остнастке Пользователи и компьютеры создадим 2 группы пользователей vpn-admins иvpn-users, знакомого нам net-adminвключим в 1ю группу, а net-buhво вторую. Политика запросов на подключение у нас будет использоваться та же. А политики сети созадим. В Условиях важно не только задать группу пользователей, но и тип порта NAS

Знакомым нам образом добавим атрибут указывающий какой профиль микротика использовать.

Методы проверки подлинности используем как и в прошлый раз. В настройках Сервера VPNрекомендуется указать точно такой же тип.

На вскидку полезными так же могут отказаться атрибуты : Mikrotik-Rate-Limit - дляограничения скорости vpnклиентов

Настроим тестовое поключение и увидим что получилиIPиз пуладля сетевых администраторов.

Теперь настроим политику дляобычных пользователей:

Результат - пользователь получилipизнужной подсети

Wifiи Dot1x

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

  • настроить службу центрасертификацииWindowsтыц, актуально и для следующего пункта

  • настроить GPO для распространения CAсертификата домена тыц

  • GPOавтоматического получения сертификата компьютераdocs.microsoft

  • GPOвключение службы dot1X (проводная автонастройка) исоздать Политики проводных сетей (802.3) для выбора способа проверки подлинности тыц

  • GPOАвтоматическое подключение кWifiдо логина пользователя тыц

Данные пункты не маленькиечто бы включать их в эту статью, но достаточно освещены в статьях интернета.

wifi

Настройку WiFiкаждый настраивает как ему удобно. Я к примеру,предпочитаю CapsMan,дажеесли это будетединственная APв сети. В любом случае нас интересует только Security Profile/Security Cfg.

Создадим политику сети: В условиях выберем Тип порта NAS= Беспроводная - IEEE 802.11

А в методах проверки подлинности следующее.

Как понять что все получилось или что то идет не так )? - все просто в первую очередь идем в логи. Видим событие с подробной информациейкто куда и когда ходил и согласно какой политике получилразрешение или отказ ы доступе.

Какие радиус атрибуты могут быть нам полезны:

  • Framed-Pool - можемдля отдельных групп пользователей использоватьсвойipпули выполнять какие то манипуляции на основе этого вфорейволе

  • Filter-Id - применять какое то правило форейвола сразу к клиенту

  • Mikrotik-Wireless-VLANID - указать в какойvlanдолжен попасть клиент (Возможно, однажды, по заявкампользователейя дополню статью примером с ипользованиемvlanвwifi)

  • устанавливать лимитыпо обьему или/и скорости трафика

  • имногие другие параметры из вики, либо их комбинации с условиями сетевой политики, смотря сколько у вас фантазии :)

dot1x

Зачем нужен dot1X и как его настроить.. очень много интересных слов можно было бы тут написать, но все сказанодо нас. Например на каналеодного прекрасного тренераили wiki

Половина смысла с саркальной точки зрения в dot1xв том, что в случае успешной проверки подлинности наше устройство попадетв влан указанный нами в микротике или в влан который мы поличим в качестве атрибута у радиуса. Еслипроверка подлинности пройдет с отказом или ответ не будет получен от радиуса (например в случае его недоступности), то порт перейдет в изолироованный режим (будет заблокирован любой трафик на порту) или в случае если указан Reject VLAN IDто попадет в влан,для которогомы настроили(я надеюсь все таки настроили) максимально безопасные правилафорейвола для чужеродных устройств .

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

Настроим политики сети: В условиях необходимо отобрать проводные клиенты

Параметры аутентификации:

В настройках атрибутами выдадим рабочий влан

К примеру вот так выглядит отказ вавторизации:

А вот так успешное подключение:

Диагностика

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

  • логи mikrotik

    Идем в system logging add topics=radius,debug action=memory disabled=noи пробуем что то делать, в log printпоявятся записи связанные с радиусом. -логи Службы

  • политики сети и доступа

    я уже приводил пример, еще раз - искатьздесь, и читать внимательно сообщения

  • возможны проблемы из заwindows брандмауерапочинить можно

Get-NetFirewallRule -DisplayGroup "Сервер политики сети" | where DisplayName -like "*RADIUS*" | Set-NetFirewallRule -Service Any

илидляанглоязычной версии:

Get-NetFirewallRule -DisplayGroup "Network Policy Server" | where DisplayName -like "*RADIUS*" | Set-NetFirewallRule -Service Any 
  • radclientиз пакета freeradius-utils. Позволяет из командной строки проверить некоторые типы авторизации, к примеру подключение кvpn

Тест:

echo "User-Name = USER,User-Password=PASSWORD,NAS-Port-Type=Virtual" | radclient -s 10.10.11.100:1812 auth SHARE_NPS_SECRET -x

Вывод программы:

Sent Access-Request Id 177 from 0.0.0.0:42354 to 10.10.11.100:1812 length 56       User-Name = "USER"       User-Password = "PASSWORD"       NAS-Port-Type = Virtual       Framed-Protocol = PPP       Cleartext-Password = "PASSWORD"Received Access-Accept Id 177 from 10.10.11.100:1812 to 10.10.15.7:42354 length 94       Mikrotik-Group = "pptp-nps"       Framed-Protocol = PPP       Service-Type = Framed-User       Class = 0xa1cd098c00000137000102000a0a0b6400000000ec967e14be8346ce01d6d63b3e2ca9d70000000000000092Packet summary:       Accepted     : 1       Rejected     : 0       Lost         : 0       Passed filter : 1       Failed filter : 0

Выводы

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

Если какой то из пунктов непонятен, пишите. попробую показать или помочь разобраться.

Если в статье нашли ошибки, неточности или знаете как сделать лучше тоже пишите.

Благодарности:

Спасибо @aslancherkesov за злого редактора и свежий взгляд на буквы.

Подробнее..

Из песочницы Двухфакторая аутентификация VPNMikrotik просто и масштабируемо

15.06.2020 12:08:41 | Автор: admin
Здравствуйте!

На написание данной статьи меня побудило прочтение аналогичного содержания статьи пользователя nkusnetsov. По количеству просмотров видно, что сообществу интересна данная тема.

Поэтому я решил поделиться с вами собственным решением, которое было ранее реализовано мной и в базовом виде обладает:

  • Низким уровнем вхождения и простотой кода (для понимания/отладки другим сотрудником)
  • Простые скрипты ROS не создают никакой нагрузки и работают даже на hAP Lite
  • Масштабируемость возможность подключения большого количества VPN-шлюзов с целью снижения нагрузки или географического распределения
  • Возможность использования Mikrotik CHR в качестве VPN-сервера
  • 1хN 1 SMS-шлюз на неограниченное количество роутеров с возможностью расширения при росте нагрузки
  • Возможность привязки отдельного роутера к конкретному модему (для чего? об этом позже)
  • Использование всего одного php скрипта на удаленном сервере
  • Не важно какое устройство инициировало VPN-соединение, авторизация по ссылке из SMS

При несложной доработке кода:

  • Возможность вести log авторизаций сотрудников на сервере (возможность реализована в расширенной версии, если есть интерес выложу)
  • Увеличить отказоустойчивость и снижение нагрузки системы путем отправки SMS рандомно с нескольких модемов


Постановка задачи и решение


Задача 1


В процессе разработки данного решения была поставлена задача минимизировать количество usb-модемов уменьшив стоимость владения, упростить администрирование, локализовать модемы в одном месте и тем самым улучшить ремонтопригодность системы.

Было решено использовать один роутер установленный на надежном канале как базовый SMS-шлюз. Единственное я не знал какова будет нагрузка на систему, справятся модемы и не заблокирует ли оператор. Поэтому я заложил возможность подключения нескольких модемов и дальнейшего разбиения системы на группы. Причем дополнительные модемы могут быть подключены к базовому шлюзу через простой usb-hub. Но для полноценного функционирования, в минимальном функционале, нужен один модем в не зависимости от количества роутеров.

Задача 2


Предусмотреть возможность использования локальных сим-карт в зоне установки роутера.
Пример: широкая филиальная сеть с несколькими магазинами в Казахстане. Отправка sms-сообщения из РФ будет стоить достаточно дорого. Данное решение позволяет сотрудникам из РК получать sms с локального номера.

Но в процессе размышлений оказалось, что решение уже было найдено и реализовано в Задаче 1.

Задача 3


Авторизация туннеля с мобильного устройства без необходимости физически находиться на авторизуемом устройстве.

Цель возможность авторизовывать не только пользовательские туннели, но и любые vpn-соединения: Mikrotik->Mikrotik, Сервер->Mikrotik и т.д При этом пользователю, ответственному за данные туннели, необходимо просто перейти по ссылке из SMS сообщения, в которой также отображается какой туннель хочет авторизоваться.

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

Решение данной задачи уже однозначно подразумевало использование RouterOS API (или SSH). Победу одержало API, как наиболее простой вариант.

Логика


  1. Пользователь авторизуется с заранее добавленным логином и паролем
  2. VPN-шлюз заносит его ip в адресный лист ожидания и отправляет POST запрос на сервер
  3. Сервер получает данные, проверяет, формирует код-авторизации и отправляет на контактный номер SMS вида: To autorize user 79001112233 connection open http_://synome.ru/?ruid=vrG7yYMbZ6&auth=YU6zc
  4. Пользователь переходит по ссылке с любого устройства
  5. Сервер делает запрос на роутер, проверяет наличие в адрес-листе записи с кодом авторизации в комментарии. Если запись найдена, удаляет ее, а пользователю отображает страницу удачной авторизации

Во всех остальных случаях, если что-то не прошло проверку пользователь получит Request error.

Настройка и код


Теперь перейдем от идейной части к настройке Mikrotik, коду и их описанию

Добавляем на Mikrotik:


Firewall


Обязательно создаем список разрешенных ресурсов, среди которых: собственный адрес MT, любой публичный DNS, адрес сервера на котором будет происходить авторизация
/ip firewall address-listadd address=10.10.0.1 list=Allow-listadd address=8.8.8.8 list=Allow-listadd address=synome.ru list=Allow-list


Добавляем правило блокирующее трафик VPN-пользователей из списка ожидания на любой хост кроме разрешенных
/ip firewall rawadd action=drop chain=prerouting dst-address-list=!Allow-list src-address-list=VPN-blocked disabled=no


PPP Profile


Создаем профиль в котором устанавливаем idle-таймаут соединения. Время должно быть меньше чем указанное в следующем скрипте On Up, в противном случае, если авторизация не была произведена, то после удаления списка из address-list пользователь получит доступ на время равное разнице (idle-таймаут минус address-list timeout)

Добавляем профиль
/ppp profileadd dns-server=10.10.0.1 idle-timeout=59m local-address=10.10.1.100 name=2F-VPN use-compression=no use-encryption=no use-mpls=no


Далее на последней вкладке Script добавляем:

On Up
:global pass "19RuOU89";:global ruid "vrG7yYMbZ6";:local userip [/ppp active get [find name=$user] address];# if phone number stored in comment#:local userphone [/ppp secret get [find name=$user] comment];# if phone number = username:local userphone $user;:local authkey [/tool fetch http-method=post http-data="ruid=$ruid&pass=$pass&tel=$userphone" url="http://personeltest.ru/away/synome.ru/" mode=http as-value output=user];/ip firewall address-list remove [find address=$userip];/ip firewall address-list add address=$userip list=VPN-blocked timeout=1h comment=($authkey->"data");:log info message="User connect:";:log info message=$userphone;:log info message=$userip;:log info message=($authkey->"data");


On Down
:local userip [/ppp secret get [find name=$user] remote-address];/ip firewall address-list remove [find address=$userip];:log info message="User disconnect:";:log info message=$user;:log info message=$userip;


Смысл скриптов

При подключении: в самом начале мы задаем логин и пароль роутера, которые будут проверяться на сервере. При авторизации пользователя получаем его номер телефона (может быть в имени или в комментарии) и локальный ip-адрес. Отправляем POST-запрос на сервер и получаем в ответе код авторизации. Добавляем ip-адрес в address-list VPN-blocked с кодом авторизации в комментарии и тайм-аутом на 1 минуту больше чем в профиле. Выводим все в лог.

При отключении: получаем ip-адрес пользователя, находим его в address-list и удаляем. Все выводим в лог.


PPP Secrets


Добавляем пользователя
/ppp secretadd comment="70001112233" name=70001112233 password=testuser profile=2F-VPN remote-address=10.10.1.100


Номер телефона можно указать прямо в name, но если хотим иметь возможность задавать один номер на несколько аккаунтов (для авторизации нескольких туннелей), то номер указываем в комментарии, при этом в скрипте On Up нужно изменить закомментированность строк

Изменение (вторую открываем, четвертую закрываем)
# if phone number stored in comment:local userphone [/ppp secret get [find name=$user] comment];# if phone number = username#:local userphone $user;


Ну и самое главное включаем PPTP или L2TP сервер.

На этом с Mikrotik работа закончена.

Серверная часть на PHP


Ниже приведен код. Он достаточно подробно комментирован, поэтому не буду писать лишний текст. Самое главное заменить данные в $host и $ruid_data на свои.

index.php
<?php// ------------------------------------------------------------------------------//  Copyright (с) 2020//  Author: Dmitri Agababaev, d.agababaev@duncat.net////  Copyright by authors for used RouterOS PHP API class in the source code files////  Redistributions and use of source code, with or without modification, are//  permitted that retain the above copyright notice// ------------------------------------------------------------------------------require_once('routeros_api.class.php');// Адрес по которому доступен данный скрипт$host = 'http://synome.ru/';// МАССИВ ДАННХ ВСЕХ РОУТЕРОВ, А ТАКЖЕ РОУТЕРА ЯВЛЯЮЩЕГОСЯ SMS-ШЛЮЗОМ$ruid_data = array(    // роутеры учавствующие в авторизации    // пароль в md5 , глобальный ip-адрес, логин входа на роутер, пароль, SMS-шлюз через который происходит отправка SMS    'vrG7yYMbZ6' => array('mdpass' => '5568ba82f332494d9ff8754b51e7b28a', 'ip' => '10.10.0.1', 'login' => 'user_vpn', 'password' => 'kji&@11az', 'smsgw' => 'SMS_gw1'),    // SMS-шлюзы    // ip-адрес шлюза (глобальный или локальный если в одной сети с сервером), логин, пароль, порт USB-модема, канал USB-модема    'SMS_gw1' => array('ip' => '172.16.1.3', 'login' => 'sms2F', 'password' => 'skIU8w!0', 'port' => 'usb1', 'channel' => '0'));// ВХОДНЕ ПРОВЕРКИ ЗАПРОСОВif (!$_REQUEST) die('Request error'); // если запроса нет  сбросif (!$_REQUEST['ruid']) die('Request error'); // если не указан ruid - сбросif (!array_key_exists($_REQUEST['ruid'], $ruid_data)) die('Request error'); // если роутер не существует  сбросif ($_REQUEST['auth']) autorize(); // если запрос на авторизацию, то пускаем без пароля и проверяем авторизациюif (!ruid_auth()) die('Request error'); // проверяем пароль роутера для отправки SMSif ($_REQUEST['tel']) send_authcode(); // если задан номер телефона, отправляем SMS// ПРОВЕРКА НА НАЛИЧИЕ РОУТЕРА В СПИСКЕ РАЗРЕШЕННХ и пароля авторизацииfunction ruid_auth() {  global $ruid_data;  if (!$_REQUEST['pass']) return false; // если пароль не задан  сброс  // проверяем md5-хэш пароля  if (md5($_REQUEST['pass']) == $ruid_data[$_REQUEST['ruid']]['mdpass']) return true;  return false;}// ФУНКЦИЯ ОТПРАВКИ ССЛКИ С КОДОМ АВТОРИЗАЦИИ ЧЕРЕЗ ROS APIfunction send_authcode() {  global $ruid_data;  global $host;  $sms_gw = $ruid_data[$_REQUEST['ruid']]['smsgw']; // данные sms-шлюза  // генерируем код авторизации  $auth_code = substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ123456789'), 0, 5);  // подключаем класс  $API = new RouterosAPI();  // Формируем сообщение отправляемое пользователю  только eng или транслит  $message = 'To autorize user '.$_REQUEST['tel'].' connection open  '.$host.'?ruid='.$_REQUEST['ruid'].'&auth='.$auth_code;  // если подключились отправляем SMS  if ($API->connect($ruid_data[$sms_gw]['ip'], $ruid_data[$sms_gw]['login'], $ruid_data[$sms_gw]['password'])) {      // Команда отправки SMS      $ARRAY = $API->comm("/tool/sms/send", array(      "port"=>$ruid_data[$sms_gw]['port'],      "channel"=>$ruid_data[$sms_gw]['channel'],      "phone-number"=>$_REQUEST['tel'],      "message"=>"To autorize user ".$_REQUEST['tel']." connection open  ".$host."?ruid=".$_REQUEST['ruid']."&auth=".$auth_code,));      // если отправка не удалась и получили ошибку модема, то выполняем сброс питания usb для перезагрузки модема      if($ARRAY['!trap']) {        $API->comm("/system/routerboard/usb/power-reset");        die('Stop with error: '.$ARRAY['!trap'][0]['message'].' Making power reset of usb-port');}  }  $API->disconnect();  die($auth_code);}function autorize() {  global $ruid_data;  // подключаем класс  $API = new RouterosAPI();  if ($API->connect($ruid_data[$_REQUEST['ruid']]['ip'], $ruid_data[$_REQUEST['ruid']]['login'], $ruid_data[$_REQUEST['ruid']]['password'])) {    // если подключились отправляем команду    $API->write('/ip/firewall/address-list/print', false);    $API->write('?comment='.$_REQUEST['auth'], false);    $API->write('=.proplist=.id');    // получаем ответ    $ARRAYS = $API->read();    // ЕСЛИ ЗАПИСЬ НЕ СУЩЕСТВУЕТ В АДРЕС-ЛИСТЕ - СБРОС    if (!$ARRAYS[0]) die('Request error');    // удаляем запись    $API->write('/ip/firewall/address-list/remove', false);    $API->write('=.id=' . $ARRAYS[0]['.id']);    $READ = $API->read();  }  $API->disconnect();  // ИНФОРМИРУЕМ ПОЛЬЗОВАТЕЛЯ ОБ УСПЕШНОЙ АВТОРИЗАЦИИ  die('      <html>      <body style="background-color: #282c34; color: #fff; height: 100vh; display: flex;">        <div style="margin: auto; max-width: 50%;">          <p style="font-size: 24pt; font-weight: bold; margin: -300px 0 50px;">            VPN-соединение установлено и авторизовано, можете продолжить работу          </p>          <p style="font-size: 14pt; color: #aaa;">             В случае недоступности сервисов обратитесь к вашему системному администратору<br/>          </p>        </div>      </body>      </html>');}?>


RouterOS API class PHP используемый в коде можно взять на GitHub.

Благодарю за внимание. Буду рад любым комментариям.
Подробнее..

Mikrotik (RouterOS) Wireguard

30.09.2020 22:05:00 | Автор: admin

Вступление

Один из способом сделать доступным некоторые внутренние (домашние) сервисы из Интернета является VPN. Можно, конечно, отдельные порты опубликовать и через ssh, но для более полноценной связи лучше использовать другие решения. Я уже писал и про ZeroTier, и про OpenVPN, и получил упреки, что незаслуженно забыл про Wireguard

Так или иначе, мне стало не хватать VPN клиента (в т.ч. и Wireguard) на отдельно стоящем серверочке, потребовалось связать (в данном случае с vNet в Azure, хотя это не принципиально) всю домашнюю сеть с несколькими ресурсами. И я решил, что пора уже сделать это через роутер, для полноценного site-to-site.

Хотя Keenetic и научился поддерживать Wireguard на новых прошивках, для старенькой Ultra я такой не нашел. С OpenWRT тоже не срослось (для Ultra II есть, а моя моедль старовата). Так что я решил, что пора проапгрейдиться. И, поскольку Mikrotik RouterOS выкатила бету 7 версии с Wireguard, я решил, что пора изучить это чудо.

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

Основные моменты

Взял я MikroTik hAP ac2. Модель старая, без излишеств, но все, что нужно, делает.

Хотя дела с Микротиками я раньше не имел, запустил его достаточно быстро. Были некоторые сложности с тем, что в настройке DHCP Server недостаточно установить Network, чтобы IP адреса начали раздаваться из этой сети. Оказалось, что есть еще и отдельный IP Pool. Но это мелочи. Так что довольно быстро я приступил к настройкам именно Wireguard.

Конечно же, ничего не заработало. Более того, на той стороне я даже не видел входящих пакетов.

Потом уже я обратил внимание, что в поле Endpoint указан только IP адрес, но отсутствует порт. Попробовал указать его явно, но обломался. Поле становится красным и не проходит валидацию.

Пошел разбираться с командной строкой. Для меня, в первый раз увидевшего RouterOS, там, конечно, не сахар. Более-менее, разобрался, конечно. Но как узнать, какие вообще параметры имеются, так и не понял. Ну т.е. до /interface wireguard peers я добрался. Даже про add догадался. Только вот при этом система спрашивала только interface, public-key и allowed-address. В общем, всякими переборами подобрал команду:

add allowed-address=192.168.66.128/25,10.10.0.0/16 endpoint=66.166.166.42:51820 \interface=wg0 persistent-keepalive=30 public-key="многобукв="

Т.е. порт можно указать только через командную строку. Впрочем, все равно не заработало.

Напомню, что wg0 был создан ранее через web-интерфейс. Или WinBox, не помню. Он чуток получше, чем веб-интерфейс, но порт тоже не давал указать. И тут до меня дошло, что на обычном Linux я ведь еще IP адрес своего локального хоста указываю. А тут его не задавал. Заработало только после:

/ip addressadd address=192.168.66.253/24 interface=wg0 network=192.168.66.0

Собственно все :) В сети есть инструкции, как установить Wireguard на Mikrotik с OpenWRT. Но как по мне, это извращение. А вот поднять его в родном RouterOS можно за несколько минут. Когда уже знаешь, как. Работает прекрасно, вообще без нареканий.

P.S. Адреса я, конечно, менял. Но allowed-address=192.168.66.128/25 и add address=192.168.66.253/24 не ошибка. Просто у меня к двум серверам подключение. Половина сети класса С на один сервер, половина на другой.

P.P.S. Почему Wireguard, а не OpenVPN? Например, производительность:

https://blog.entrostat.com/openvpn-vs-wireguard-network-performance-tests/

А еще простота настройки и кое-что по мелочи.

Подробнее..

Wi-Fi для мамы

07.12.2020 02:05:58 | Автор: admin

Постановка задачи


Сделать Wi-Fi в 2+ комнатной квартире, при этом чтобы скорость в любой локации должна быть не ниже 90Мбит/с на любом современном мобильном устройстве (IEEE 802.11ac).

Предполагаем, что наша типовая квартира содержит типовой набор пользователей:

  1. Просто пользователь (используем базовый ЯндексDNS)
  2. Боящаяся интернета бабушка (ЯндексDNS, без мошеннических сайтов и вирусов)
  3. Студент 5 курса, которому нужен Интернет без ограничений (выход в Интернет через VPN в Европу, DNS 8.8.8.8)
  4. Школьник 7 класса, которому по административным причинам надо выключать Интернет в 21:00 час по будням и в 22:00 часа по выходным (используем ЯндексDNS Семейный и по расписанию выключаем/включаем SSID).

Радио моделирование


Начну с того, что как правило, если в квартире бетонные стены и количество комнат 2 и более, то одной точкой доступа Wi-Fi будет не обойтись, ведь 20 Мбит/с на диване у окна сегодня нас уже не устраивают, а это значит что минимальный уровень сигнала на клиенском устройстве долже быть не ниже -65дБ.

Вот пример:
Ставим одну точку доступа в прихожей, в 5 ГГц диапазоне зона копрытия до -65дБ выглядит так:

imageimage
Поэтому надо добавить еще как минимум 2 точки доступа, получаем следующее:

imageimage
image

Так уже лучше, с количеством и расположением точек доступа определились.

Настройка Wi-Fi на базе Mikrotik hAP ac


1. Схема сети и адресный план

image
Piccy.info - Free Image Hosting

2. Обновление ПО и установка пакета поддержки multicast для IPTV. Это легко нагуглить.

3. Предлагаю создать 4 VLAN-а: 10,20,30,40, под каждого типа пользователя

/interface bridge vlanadd bridge=bridge_vlan_10 tagged=VLAN_10_TRUNK_ETH5,VLAN_10_TRUNK_ETH4 vlan-ids=10add bridge=bridge_vlan_20 tagged=VLAN_20_TRUNK_ETH5,VLAN_20_TRUNK_ETH4 vlan-ids=20add bridge=bridge_vlan_30 tagged=VLAN_30_TRUNK_ETH5,VLAN_30_TRUNK_ETH4 vlan-ids=30add bridge=bridge_vlan_40 tagged=VLAN_40_TRUNK_ETH5,VLAN_40_TRUNK_ETH4 vlan-ids=40/interface vlanadd interface=ether4 name=VLAN_10_TRUNK_ETH4 vlan-id=10add interface=ether5 name=VLAN_10_TRUNK_ETH5 vlan-id=10add interface=ether4 name=VLAN_20_TRUNK_ETH4 vlan-id=20add interface=ether5 name=VLAN_20_TRUNK_ETH5 vlan-id=20add interface=ether4 name=VLAN_30_TRUNK_ETH4 vlan-id=30add interface=ether5 name=VLAN_30_TRUNK_ETH5 vlan-id=30add interface=ether4 name=VLAN_40_TRUNK_ETH4 vlan-id=40add interface=ether5 name=VLAN_40_TRUNK_ETH5 vlan-id=40/interface bridge portadd bridge=bridge_vlan_10 interface=ether2 pvid=10add bridge=bridge_vlan_10 interface=ether3 pvid=10add bridge=bridge_vlan_10 interface=wlan_2.4_GHz pvid=10add bridge=bridge_vlan_10 interface=wlan_5_GHz pvid=10add bridge=bridge_vlan_10 interface=VLAN_10_TRUNK_ETH5 priority=0 pvid=10add bridge=bridge_vlan_20 interface=VLAN_20_TRUNK_ETH5 priority=0 pvid=20add bridge=bridge_vlan_30 interface=VLAN_30_TRUNK_ETH5 priority=0 pvid=30add bridge=bridge_vlan_40 interface=VLAN_40_TRUNK_ETH5 priority=0 pvid=40add bridge=bridge_vlan_20 interface=wlan_2.4_GHz_virtual_2 pvid=20add bridge=bridge_vlan_20 interface=wlan_5_GHz_virtual_2 pvid=20add bridge=bridge_vlan_30 interface=wlan_2.4_GHz_virtual_3 pvid=30add bridge=bridge_vlan_30 interface=wlan_5_GHz_virtual_3 pvid=30add bridge=bridge_vlan_40 interface=wlan_2.4_GHz_virtual_4 pvid=40add bridge=bridge_vlan_40 interface=wlan_5_GHz_virtual_4 pvid=40add bridge=bridge_vlan_10 interface=VLAN_10_TRUNK_ETH4 priority=0 pvid=10add bridge=bridge_vlan_20 interface=VLAN_20_TRUNK_ETH4 priority=0 pvid=20add bridge=bridge_vlan_30 interface=VLAN_30_TRUNK_ETH4 priority=0 pvid=30add bridge=bridge_vlan_40 interface=VLAN_40_TRUNK_ETH4 priority=0 pvid=40

4. Задать группы для интерфейсов

/interface listadd comment=defconf name=WANadd comment=defconf name=LAN/interface list memberadd list=LANadd interface=ether1 list=WANadd interface=bridge_vlan_10 list=LANadd interface=bridge_vlan_20 list=LANadd interface=bridge_vlan_30 list=LANadd interface=bridge_vlan_40 list=LAN

5. Задать IP адреса на LAN интерфейсах. Например, берем сеть 172.16.2.0.24 и делим ее на 4 штуки по /26

/ip addressadd address=172.16.2.126/26 interface=bridge_vlan_20 network=172.16.2.64add address=172.16.2.190/26 interface=bridge_vlan_30 network=172.16.2.128add address=172.16.2.254/26 interface=bridge_vlan_40 network=172.16.2.192add address=172.16.2.62/26 interface=bridge_vlan_10 network=172.16.2.0

6. Задать IP адрес на WAN интерфейсе (если он статический)

/ip addressadd address=XXX.XXX.XXX.XXX/XXX interface=ether1 network=XXX.XXX.XXX.XXX

7. Задать маршрут по-умолчанию в сторону провайдера

/ip routeadd distance=1 gateway=XXX.XXX.XXX.XXX

8. Задать DHCP сервера

/ip pooladd name=vlan_10_dhcp_pool ranges=172.16.2.21-172.16.2.59add name=vlan_20_dhcp_pool ranges=172.16.2.85-172.16.2.123add name=vlan_30_dhcp_pool ranges=172.16.2.159-172.16.2.187add name=vlan_40_dhcp_pool ranges=172.16.2.223-172.16.2.251/ip dhcp-server networkadd address=172.16.2.0/26 dns-server=77.88.8.8,77.88.8.1 domain=home.local gateway=172.16.2.62 netmask=26add address=172.16.2.64/26 dns-server=77.88.8.88,77.88.8.2 domain=home.local gateway=172.16.2.126 netmask=26add address=172.16.2.128/26 dns-server=8.8.8.8,8.8.4.4 domain=home.local gateway=172.16.2.190 netmask=26add address=172.16.2.192/26 dns-server=77.88.8.7,77.88.8.3 domain=home.local gateway=172.16.2.254 netmask=26/ip dhcp-serveradd address-pool=vlan_10_dhcp_pool disabled=no interface=bridge_vlan_10 name=dhcp_server_vlan_10add address-pool=vlan_20_dhcp_pool disabled=no interface=bridge_vlan_20 name=dhcp_server_vlan_20add address-pool=vlan_30_dhcp_pool disabled=no interface=bridge_vlan_30 name=dhcp_server_vlan_30add address-pool=vlan_40_dhcp_pool disabled=no interface=bridge_vlan_40 name=dhcp_server_vlan_40

9. Не забыть про igmp snooping для IPTV приставки

/interface bridgeadd igmp-snooping=yes name=bridge_vlan_10add igmp-snooping=yes name=bridge_vlan_20add igmp-snooping=yes name=bridge_vlan_30add igmp-snooping=yes name=bridge_vlan_40/routing igmp-proxy interfaceadd alternative-subnets=0.0.0.0/0 interface=ether1 upstream=yes

10. сделать VPN туннель до вашего VPS сервера для обхода блокировок (настройка сервера VPN на Debian будет ниже)

/interface l2tp-clientadd connect-to=XXX.XXX.XXX.XXX disabled=no ipsec-secret=XXXXXXX keepalive-timeout=disabled name=l2tp-out1 password=XXXXXX profile=default use-ipsec=yes user=XXXXXX

11. Сделать Policy Based Routing для трафика из того SSID, трафик от которого должен идти через VPN туннель.

/ip firewall mangleadd action=mark-routing chain=prerouting new-routing-mark=VPN_route_mark passthrough=yes src-address=172.16.2.128/26/ip routeadd check-gateway=ping distance=1 gateway=10.1.1.1 routing-mark=VPN_route_mark

12. Сделать NAT

/ip firewall natadd action=masquerade chain=srcnat out-interface-list=WAN src-address=172.16.2.0/25add action=masquerade chain=srcnat out-interface=l2tp-out1 src-address=172.16.2.128/26add action=masquerade chain=srcnat out-interface-list=WAN src-address=172.16.2.192/26

13. Можно убрать лишнее из правил межсетевого экрана, а потом закрыть то что хочется.

/ip firewall filteradd action=accept chain=input comment="defconf: accept established,related,untracked" connection-state=established,related,untrackedadd action=drop chain=input comment="defconf: drop invalid" connection-state=invalid disabled=yesadd action=accept chain=input comment="defconf: accept ICMP" protocol=icmpadd action=accept chain=input comment="defconf: accept to local loopback (for CAPsMAN)" dst-address=127.0.0.1add action=drop chain=input comment="defconf: drop all not coming from LAN" disabled=yes in-interface-list=!LANadd action=accept chain=forward comment="defconf: accept in ipsec policy" ipsec-policy=in,ipsecadd action=accept chain=forward comment="defconf: accept out ipsec policy" ipsec-policy=out,ipsecadd action=fasttrack-connection chain=forward comment="defconf: fasttrack" connection-state=established,related disabled=yesadd action=accept chain=forward comment="defconf: accept established,related, untracked" connection-state=established,related,untrackedadd action=drop chain=forward comment="defconf: drop invalid" connection-state=invalid disabled=yesadd action=drop chain=forward comment="defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat connection-state=new disabled=yes in-interface-list=WAN

14. Настроить профили безопасности для SSID

/interface wireless security-profilesset [ find default=yes ] supplicant-identity=MikroTikadd authentication-types=wpa-psk,wpa2-psk eap-methods="" group-ciphers=tkip,aes-ccm mode=dynamic-keys name=Profile_Home_wireless supplicant-identity="" \    unicast-ciphers=tkip,aes-ccm wpa-pre-shared-key=home-wifi-00 wpa2-pre-shared-key=home-wifi-00add authentication-types=wpa-psk,wpa2-psk eap-methods="" group-ciphers=tkip,aes-ccm mode=dynamic-keys name=Profile_Secure_wireless supplicant-identity=\    "" unicast-ciphers=tkip,aes-ccm wpa-pre-shared-key=secure-wifi-00 wpa2-pre-shared-key=secure-wifi-00add eap-methods="" group-ciphers=tkip,aes-ccm name=Profile_Children_wireless supplicant-identity="" unicast-ciphers=tkip,aes-ccm wpa-pre-shared-key=\    children-wifi-00 wpa2-pre-shared-key=children-wifi-00

15. Настроить сам Wi-Fi с четырьмя SSID

/interface wirelessset [ find default-name=wlan1 ] band=2ghz-g/n country=russia distance=indoors installation=indoor mode=ap-bridge name=wlan_2.4_GHz security-profile=\    Profile_Home_wireless ssid=Home_wireless tx-power=13 tx-power-mode=all-rates-fixed vlan-id=10 wireless-protocol=802.11 wps-mode=disabledadd keepalive-frames=disabled mac-address=XX:XX:XX:XX:XX:XX master-interface=wlan_2.4_GHz multicast-buffering=disabled name=wlan_2.4_GHz_virtual_2 \    security-profile=Profile_Secure_wireless ssid=Secure_wireless vlan-id=20 wds-cost-range=0 wds-default-cost=0 wps-mode=disabledadd keepalive-frames=disabled mac-address=XX:XX:XX:XX:XX:XX master-interface=wlan_2.4_GHz multicast-buffering=disabled name=wlan_2.4_GHz_virtual_3 \    security-profile=Profile_Home_wireless ssid=VPN_wireless vlan-id=30 wds-cost-range=0 wds-default-cost=0 wps-mode=disabledadd keepalive-frames=disabled mac-address=XX:XX:XX:XX:XX:XX master-interface=wlan_2.4_GHz multicast-buffering=disabled name=wlan_2.4_GHz_virtual_4 \    security-profile=Profile_Children_wireless ssid=Children_wireless vlan-id=40 wds-cost-range=0 wds-default-cost=0 wps-mode=disabledset [ find default-name=wlan2 ] band=5ghz-n/ac channel-width=20/40mhz-Ce country=russia distance=indoors installation=indoor mode=ap-bridge name=\    wlan_5_GHz security-profile=Profile_Home_wireless ssid=Home_wireless_pro tx-power=13 tx-power-mode=all-rates-fixed vlan-id=10 wireless-protocol=\    802.11add keepalive-frames=disabled mac-address=XX:XX:XX:XX:XX:XX master-interface=wlan_5_GHz multicast-buffering=disabled name=wlan_5_GHz_virtual_2 \    security-profile=Profile_Secure_wireless ssid=Secure_wireless_pro vlan-id=20 wds-cost-range=0 wds-default-cost=0 wps-mode=disabledadd keepalive-frames=disabled mac-address=XX:XX:XX:XX:XX:XX master-interface=wlan_5_GHz multicast-buffering=disabled name=wlan_5_GHz_virtual_3 \    security-profile=Profile_Home_wireless ssid=VPN_wireless_pro vlan-id=30 wds-cost-range=0 wds-default-cost=0 wps-mode=disabledadd keepalive-frames=disabled mac-address=XX:XX:XX:XX:XX:XX master-interface=wlan_5_GHz multicast-buffering=disabled name=wlan_5_GHz_virtual_4 \    security-profile=Profile_Children_wireless ssid=Children_wireless_pro vlan-id=40 wds-cost-range=0 wds-default-cost=0 wps-mode=disabled

16. Выключаем детскую сеть по расписанию:

/system scheduleradd interval=1d name=Switch_OFF_children_1 on-event=swich_off_children_2.4 policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \    start-date=nov/28/2020 start-time=21:00:00add interval=1d name=Switch_ON_children_1 on-event=swich_on_children_2.4 policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \    start-date=nov/28/2020 start-time=07:00:00add interval=1d name=Switch_OFF_children_2 on-event=swich_off_children_5 policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \    start-date=nov/28/2020 start-time=21:00:00add interval=1d name=Switch_ON_children_2 on-event=swich_on_children_5 policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \    start-date=nov/28/2020 start-time=07:00:00/system scriptadd dont-require-permissions=no name=swich_off_children_2.4 owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\    "interface wireless disable wlan_2.4_GHz_virtual_4"add dont-require-permissions=no name=swich_on_children_5 owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\    "interface wireless enable wlan_5_GHz_virtual_4"add dont-require-permissions=no name=swich_on_children_2.4 owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\    "interface wireless enable wlan_2.4_GHz_virtual_4"add dont-require-permissions=no name=swich_off_children_5 owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\    "interface wireless disable wlan_5_GHz_virtual_4"

17. Оставить возможность настраивать роутер локально

/ip neighbor discovery-settingsset discover-interface-list=LAN/tool mac-serverset allowed-interface-list=LAN/tool mac-server mac-winboxset allowed-interface-list=LAN18.Мелочи/system clockset time-zone-name=Europe/Moscow/system identityset name=Miktorik-1

На Miktorik-1, Miktorik-2 делаем все тоже самое, только меняя адреса VLAN-ов в соответствие с адресным планом.

VPN сервер на базе Debian


XXX.XXX.XXX.XXX - ваш public IP#sudo apt-get install libgmp3-dev gawk flex bison make#sudo wget https://download.openswan.org/openswan/openswan-latest.tar.gz#sudo tar -xvzf openswan-latest.tar.gz#cd openswan-2.6.51#sudo make programs#sudo make install#sudo nano /etc/ipsec.confconfig setup   nat_traversal=yes   virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12   oe=off   protostack=netkeyconn L2TP-PSK-NAT   rightsubnet=vhost:%priv   also=L2TP-PSK-noNATconn L2TP-PSK-noNAT   authby=secret   pfs=no   auto=add   keyingtries=3   rekey=no   ikelifetime=8h   keylife=1h   type=transport   left=XXX.XXX.XXX.XXX   leftprotoport=17/1701   right=%any   rightprotoport=17/%any   #sudo nano /etc/ipsec.secretsXXX.XXX.XXX.XXX %any: PSK "PASSWORD"#sudo nano /root/ipsec#sudo iptables --table nat --append POSTROUTING --jump MASQUERADE#sudo echo 1 > /proc/sys/net/ipv4/ip_forward#for each in /proc/sys/net/ipv4/conf/*#do#echo 0 > $each/accept_redirects#echo 0 > $each/send_redirects#done#sudo /etc/init.d/ipsec restar#sudo chmod +x /root/ipsec#sudo sh /root/ipsec#sudo nano /etc/xl2tpd/xl2tpd.conf[global]port = 1701ipsec saref = yessaref refinfo = 30[lns default]ip range = 10.1.1.2-10.1.1.100local ip = 10.1.1.1refuse chap = yesrefuse pap = yesrequire authentication = yesppp debug = yespppoptfile = /etc/ppp/options.xl2tpdlength bit = yesname = VPN-1#sudo nano /etc/ppp/options.xl2tpdrequire-mschap-v2ms-dns 8.8.8.8ms-dns 8.8.4.4asyncmap 0authcrtsctslockhide-passwordmodemdebugname VPN-1proxyarplcp-echo-interval 30lcp-echo-failure 4#sudo nano /var/log/syslog#sudo nano /etc/ppp/chap-secretsuser-1 VPN-1 PASSWORD *#sudo /etc/init.d/ipsec restartsudo /etc/init.d/xl2tpd restart#sudo ipsec verifyFIREWALL#sudo apt-get install ufw#sudo ufw disable#sudo ufw allow ssh#sudo ufw allow 500/udp#sudo ufw allow 1701/udp#sudo ufw allow 4500/udp#sudo ufw allow from 10.1.1.0/24#sudo ufw default allow routed#sudo ufw delete ssh#sudo ufw allow 4444#sudo ufw enable

Просмотр состояния FW

#sudo ufw status verbose

Просмотр логов если что-то блокируется

#sudo ufw logging low#sudo tail -f /var/log/ufw.log

Отключение логирования, чтобы не забивать место на диске

#sudo ufw logging off


Меняем порт ssh на другой

sudo nano /etc/ssh/sshd_configPort 4444sudo systemctl restart sshd

Проверка нет ли попыток взлома

sudo cat /var/log/auth.log | grep "authentication failure"

Готово!

Теперь VPN сервер будет работаеть даже с iPhone через 4G!
Подробнее..

Настраиваем отказоустойчивость Pi-Hole в связке с Mikrotik

06.05.2021 00:04:22 | Автор: admin

В прошлой статье мы внедрили домашний сервер DoH с использованием Pi-Hole, чем не только пофильтровали большое количество рекламы, но и инкапсулировали наши DNS-запросы в HTTPS, что вывело их из поля фильтрации запросов оператором связи.

Всем замечательно это решение, но у него есть один нюанс. Если вдруг у нас закончились деньги на счету у оператора связи или по каким-то другим причинам пропал канал связи до внешнего мира, мы даже не сможем пополнить счет, чтобы восстановить сервис, потому что не будет работать DNS. Или, например, если наш Pi-Hole по каким-то причинам перестал работать - вот вроде и вся сеть работает, и гугл пингуется, а пока не пропишешь другой DNS-сервер - не будет счастья. А если вы еще в этот момент заняты чем-то другим и не можете приступить к восстановлению незамедлительно - домашние негодуют, портят радостное существование своими жалобами и даже котики, чуя общую нервозность, стремятся нагадить вам в тапки.

Огорчать котиков - дело последнее, поэтому в этой статье я опишу, как вы можете внедрить автоматическое переключение с использования Pi-Hole на использование операторских (как, впрочем, и любых других) DNS при проблемах на Pi-Hole.

TL;DR

Настраиваем автоматическое переключение DNS-сервиса между Pi-Hole и Mikrotik, используя протокол VRRP в реализации демона keepalived.
Никаких волшебных know-how не открывается, простая пошаговая инструкция для тех, кому не хочется разбираться во всех хитросплетениях самому.

Что вам для этого потребуется

  1. Внедренное решение Pi-Hole из предыдущей статьи. Понятно, что описываемое решение можно использовать для отказоустойчивости в принципе чего угодно, но в данном конкретном случае мы сосредоточимся на именно этой реализации. Базовый Linux у решения - Ubuntu.

  2. Маршрутизатор Mikrotik в качестве бордера. Опять же, подойдет и OpenWRT, и EdgeRouter, и какой-нибудь софтовый на PC, но рассмотреть всё разнообразие в статье не получится никак. Если ваш роутер поддерживает VRRP - он сможет быть частью этого решения, а как конкретно его настраивать, если возникнут сложности, спросите в комментариях к посту. Впрочем, если ваш роутер VRRP не поддерживает - можно всё то же самое построить между двумя Pi-Hole или Pi-Hole и другим DNS-сервером.

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

  • IPv4-адрес нашего сервера Pi-Hole в домашней сети: 192.168.1.10 и он назначен как статический.

  • IPv4-адрес нашего маршрутизатора в домашней сети: 192.168.1.1 и он назначен как статический на интерфейсе bridge маршрутизатора.

  • Новый IPv4-адрес DNS: 192.168.1.9

  • Настройки на Linux выполняем от root (т.е. перед началом настройки выполняем командуsudo -i).

Логика решения и немного теории

Чтобы не превращать статью в совсем уж деревянную инструкцию "нажмите третьим пальцем левой руки на кнопку W", расскажу самую базовую теорию того, что мы пытаемся сделать.

Итак, название протокола VRRP расшифровывается как Virtual Router Redundancy Protocolи он входит в группу протоколов NHRP (Next-Hop Resolution Protocol). Почему-то многие люди считают, что с использованием этих протоколов можно резервировать только адреса шлюзов по умолчанию, хотя, разумеется, это не так. Самому протоколу совершенно без разницы, какие сервисы с его помощью резервируются, он работает на третьем уровне модели ISO/OSI и фактически просто создает виртуальный IP-адрес, который будет перемещаться между устройствами, входящими в VRRP-группу, по определенным критериям. Очевидно, что такая логика подразумевает существование этого адреса только на одном устройстве, поэтому обеспечить, например, балансировку нагрузки между серверами с помощью стандартного VRRP нельзя (но в нашем случае этого и не требуется). Для тех кейсов, где это необходимо, существует, например, проприетарный протокол Cisco GLBP, где адрес активен одновременно на всех устройствах группы, а балансировка осуществляется за счет разных ARP-ответов. По подобной GLBP логике работает и протокол CARP.

В случае VRRP все устройства, входящие в группу, анонсируют себя через рассылку мультикаст-пакетов на адрес 224.0.0.18, внутри которых передается множество технической информации. Из нее нам важен один параметр - приоритет. Логика простая - все устройства, входящие в группу, меряются приоритетом, у кого длиннее больше, тот и победил и приземлил на себя виртуальный IP группы. Остальные сидят в засаде и ждут, пока победитель зазевается и умрет (перестанет слать нужный мультикаст), в этом случае опять проходят выборы и опять побеждает устройство с наибольшим приоритетом. Если устройств с одинаковым приоритетом несколько - побеждает больший IP-адрес, но хорошим тоном считается таких ситуаций избегать и разруливать приоритеты явно.

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

На основе этой фичи вырисовывается логика всей нашей конструкции:

  1. Настраиваем на нашем маршрутизаторе в качестве основных DNS сервера провайдера

  2. Настраиваем между маршрутизатором и Pi-Hole VRRP с приоритетами 100 на маршрутизаторе и 90 на Pi-Hole

  3. Создаем на Pi-Hole скрипт, проверяющий работоспособность DNS и при успешности повышающий приоритет на Pi-Hole до 110

  4. Раздаем домашним клиентам по DHCP наш виртуальный IP-адрес как адрес DNS.

Настройка

1. Настройка DNS на Mikrotik

Если помните, в предыдущей статье мы много обсуждали, какой адрес DNS раздавать клиентам и куда форвардить запросы с маршрутизатора. Для целей же нашего нового решения важно на маршрутизаторе указать в качестве DNS-серверов именно сервера нашего провайдера - чтобы они оставались доступны при блокировке сервиса за неуплату, например. Поэтому или настраиваем получение DNS от оператора по DHCP, или идем в Winbox по пути IP - DNS и в поле Servers прописываем адреса DNS-серверов провайдера.

2. Настройка VRRP на Mikrotik

Создаем новый VRRP интерфейс с привязкой к интерфейсу Bridge и навязываем на него наш виртуальный адрес. Можно сделать в Winbox, но гораздо проще сделать это в терминале:

/interface vrrp add interface=bridge name=vrrp-dns version=2 vrid=10/ip address add address=192.168.1.9/24 interface=vrrp-dns network=192.168.1.0

Здесь vrrp-dns - это имя интерфейса (можете выбрать любое на свой вкус, главное совпасть в обеих командах), vrid - ID группы, можно тоже выбрать любой в диапазоне 1-255, нужно совпасть на обоих устройствах. Имя интерфейса bridge и IPv4-адреса нужно скорректировать под вашу домашнюю сеть.

После выполнения этого действия можно попинговать 192.168.1.9 - он уже должен отвечать с маршрутизатора, если пинг не закрыт файрволом.

3. Настройка VRRP на Pi-Hole

Устанавливаем демон keepalived:

apt install keepalived

Создаем файл конфигурации демона /etc/keepalived/keepalived.conf:

! Configuration File for keepalivedvrrp_script check_dns {  script "/etc/keepalived/check_dns.sh"  interval 5 # every 5 seconds  weight 20 # add 20 points if OK  timeout 5 #   rise 2 # avoid dampening  fall 2 # avoid dampening}vrrp_instance VI_1 {    state MASTER    interface ens160    virtual_router_id 10    priority 90    advert_int 1    virtual_ipaddress {        192.168.1.9/24    }    track_script {        check_dns    }}

Здесь обратите внимание на имя интерфейса, на котором сейчас работает Pi-Hole - в примере дефолтное ens160, у вас может быть другое (проверить можно, например, через команду ifconfig).

Создаем скрипт проверки живости DNS /etc/keepalived/check_dns.sh:

#!/bin/bashhost -s -4 amazon.com 127.0.0.1 > /dev/null 2>&1

и не забываем сделать его исполняемым:

chmod +x /etc/keepalived/check_dns.sh

С методикой проверки DNS вы можете экспериментировать как угодно. Для себя я выбрал проверку резолвинга адреса amazon.com. Плюс этого варианта в том, что TTL этой записи - 1 минута, поэтому дольше чем на минуту ваш Pi-Hole закэшировать запись не сможет и, соответственно, на это время максимум и отложится убегание сервиса в случае потери связи с миром. Основной принцип, который надо помнить - если скрипт выдает 0 в качестве error code, то keepalived будет считать, что всё хорошо, и добавит приоритета. Любой другой error code - и адрес уползет на Mikrotik.

Теперь достаточно перезапустить сервис:

systemctl restart keepalived

и всё заработает. В логе Mikrotik можно будет увидеть запись, подобную этой:

vrrp-dns now BACKUP, got higher priority 110 from 192.168.1.10

Вы можете проверить, что теперь на адресе 192.168.1.9 отвечает Pi-Hole, самый простой способ проверки - это резолвинг имени pi.hole:

nslookup pi.hole 192.168.1.9Server:192.168.1.9Address:192.168.1.9#53Name:pi.holeAddress: 192.168.1.10

Обратите внимание, что резолвиться будет в адрес сервера Pi-Hole, а не в наш виртуальный IP - это правильно и так и должно быть.

4. Настройка DHCP на Mikrotik

Ну и наконец нам надо научить DHCP-сервис Mikrotik раздавать клиентам правильный адрес DNS. Это удобнее сделать из WinBox - там вы увидите все свои пулы. Идем по пути IP - Networks, смотрим глазами на все сети, которые у вас связаны с Pi-Hole сейчас и изменяем поле DNS Servers с адреса Pi-Hole 192.168.1.10 на виртуальный адрес 192.168.1.9.

Обновляем аренду адреса на компьютерах, проверяем, что получили правильный адрес DNS, проверяем, что резолвинг работает (например, командой nslookup pi.hole - уже без прямого указания имени используемого сервера). Радуемся.

Особо ответственные могут каким-либо образом сломать своему DNS-серверу резолвинг и проконтролировать, что по истечении таймаута виртуальный адрес переползет на Mikrotik. Но это уже зависит от вашей фантазии.

Заключение

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

На вопросы, традиционно, отвечу и с настройками помогу.

Подробнее..

MikroTik основы настройки DNS

18.03.2021 18:13:59 | Автор: admin

Если в магазине вас угораздило купить роутер MikroTik себе домой и вы не знаете зачем он вам, а отравление DNS кэша вашим провайдером не дает вам спать по ночам, то этот пост для вас.

Можно не мучаться и поставить DNS от Yandex, Google, Adquard и прочее, а можно пойти более сложным путем:

Открываем сайтhttps://root-servers.orgи ищем свой город, смотрим какие там есть корневые сервера DNS

В Питере их 5

Если их несколько, выбираем какой больше нравится вам :)

Далее находим официальный сайт данной компании, в моем случае этоhttps://www.verisign.com и на сайте ищем раздел с публичным DNS.

В данном случае нас перенаправляют на сайтhttps://www.publicdns.neustar, идем туда и копируем адреса в блокнот :)

Открываем WinBox или через http, кому как больше нравится.

1. Первым делом удаляем автополучение DNS провайдера:

открываем настройки интерфейса и убираем галочку "use peer dns"

2. В настройке DNS (IP -> DNS), вводим IP DNS сервера (начиная с сервера который у вас в городе). Размер кэша укажите сколько не жалко (учитывайте свободное место).

На этом можно было бы закончить, но мы пойдем далее.

Помимобелыхофициальных DNS резолверов есть еще итемная сторонаальтернативные корневые серверы DNS, например, выберем OpenNIC (остальные добавляются подобным образом). Нас интересуют поддерживаемые доменыhttps://www.opennic.org:

и IP адресаhttps://wiki.opennic.org/#anycast_tier_2_dns_resolvers

Далее открываем терминал и добавляем статические маршруты

/ip dns static add comment="OpenNIC" forward-to=185.121.177.177,169.239.202.202,2a05:dfc7:5::53::1,2a05:dfc7:5::5353::1 regexp=".*(\\.bbs|\\.chan|\\.cyb|\\.dyn|\\.geek|\\.gopher|\\.indy|\\.libre|\\.neo|\\.null|\\.o)\$" type=FWD

/ip dns static add comment="OpenNIC" forward-to=185.121.177.177,169.239.202.202,2a05:dfc7:5::53::1,2a05:dfc7:5::5353::1 regexp=".*(\\.oss|\\.oz|\\.parody|\\.pirate|\\.opennic.glue|\\.dns\\.opennic\\.glue)\$" type=FWD

Проверяем

В настройках DNS делаем очистку кэша.

Если пользуетесь Microsoft Edge, отключаем "улучшайзеры", в других браузерах аналогично.

Ребутим все что можно отребутить :)

и наслаждаемсяhttps://www.dnsleaktest.com

Что мне это дало? Нормально заработали уведомления от mihome, перестали "тупить" китайские лампочки :) Ну и немного ощущаешь себякулхацкеромчуть более независимым от своего провайдера :)

Подробнее..
Категории: Mikrotik , Чулан , Dns

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru