Распространенность оборудования Mikrotik растет с каждым днем, все больше устройств, а значит и RoS, появляется не только в корпоративном секторе, но и у обычных, домашних пользователей.
К сожалению, не смотря на вполне нормальные настройки по умолчанию, которые можно сделать через Quick Set, в интернете можно встретить множество советов очистить конфигурацию, и сделать как-то по «особому», с «нуля». В этой статье я хочу поделится своим опытом и дать рекомендации, как изменить конфигурацию из Quick Set под свои нужды, при этом сохранив достаточный уровень защищенности.

Что такое Quick Set?


Quick Set — это мастер автоматической конфигурации, который помогает быстро, не погружаясь в глубины тонкой настройки RoS, настроить роутер и начать им пользоваться. В зависимости от устройства, вам могут быть доступны несколько шаблонов:

  • CAP — Режим управляемой точки доступа, требует наличия настроенного CAPsMAN
  • CPE — Режим WiFi клиента, когда интернет вам приходит по WiFi
  • HomeAP [dual] — Режим домашней точки доступа, тут количество настроек уменьшено, а их названия приближены к сленгу «домашних пользователей»


  • PTP Bridge AP\CPE — Режим организации беспроводного моста, одна точка настраивается в AP, остальные в CPE
  • WISP AP — Почти то-же, что и HomeAP, но настроек больше, и названия более «профессиональные»
  • Basic AP — Почти пустая конфигурация, подходит для развертывания автономно управляемых точек доступа (без CAPsMAN)

Дальше мы будем в основном настраивать HomeAP\WISP AP, но советы пригодятся и в других конфигурациях.

Безопасность


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

Доступность на внешних интерфейсах


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



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

/interface list add exclude=dynamic name=discover



Добавим в список discovery интерфейсы, на которых мы хотим, чтобы протокол Neighbors Discovey работал.

Теперь настроим работу протокола, указав список discovery в его настройках:



В простой, домашней конфигурации, в списке discovery могут быть интерфейсы, на которых может работать протокол доступа по MAC адресу, для ситуаций, когда IP не доступен, поэтому настроим и эту функцию:



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

Защита от DDoS


Теперь, добавим немного простых правил в пакетный фильтр:

/ip firewall filter
add action=jump chain=forward connection-state=new in-interface-list=ISP jump-target=anti-DDoS
add action=jump chain=input connection-state=new in-interface-list=ISP jump-target=anti-DDoS
add action=drop chain=forward connection-state=new src-address-list=BAN-DDoS
add action=return chain=anti-DDoS dst-limit=15,15,src-address/10s
add action=add-src-to-address-list address-list=BAN-DDoS address-list-timeout=1d chain=anti-DDoS
add action=jump chain=input connection-state=new dst-port=22,8291 in-interface-list=ISP jump-target=anti-BruteForce-3 protocol=tcp
add action=drop chain=forward connection-state=new src-address-list=BAN-BruteForce-3
add action=return chain=anti-BruteForce-3 dst-limit=4/1m,1,src-address/1m40s
add action=add-src-to-address-list address-list=BAN-BruteForce-3 address-list-timeout=1d chain=anti-BruteForce-3

И поместим их после правила defcon для протокола icmp.

Результатом будет бан на сутки для тех, кто пытается открыть более 15 новых соединений в секунду. Много или мало 15 соединений, вопрос спорный, тут уже сами подбирайте число, я выбрал 50 для корпоративного применения, и таких банит у меня 1-2 в сутки. Вторая группа правил гораздо жестче, блокирует попытки соединений на порт ssh(22) и winbox(8291), 3-и попытки за минуту, и отдыхай сутки ;). Если вам необходимо выставить DNS сервер в интернет, то подобным правилом можно отсекать попытки DNS Amplification Attacks, но решение не идеальное, и ложно-положительных срабатываний бывает много.

RFC 1918


RFC 1918 описывает выделение адресных пространств для глобально не маршрутизируемых сетей. Поэтому, имеет смысл блокировать трафик от\к таким сетям, на интерфейсе, который смотрит к провайдеру, за исключением ситуаций, когда провайдер выдает вам «серый» адрес.

/ip firewall address-list
add address=10.0.0.0/8 list="RFC 1918"
add address=172.16.0.0/12 list="RFC 1918"
add address=192.168.0.0/16 list="RFC 1918"
/ip firewall filter
add action=drop chain=input comment="Drop RFC 1918" in-interface-list=WAN src-address-list="RFC 1918"
add action=drop chain=forward comment="Drop RFC 1918" dst-address-list="RFC 1918" out-interface-list=WAN
add action=drop chain=output comment="Drop RFC 1918" dst-address-list="RFC 1918" out-interface-list=WAN

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

А вот набор маршутов в «черную дыру»
/ip route
add comment="RFC 1918" distance=249 dst-address=10.0.0.0/8 type=blackhole
add comment="RFC 1918" distance=249 dst-address=172.16.0.0/12 type=blackhole
add comment="RFC 1918" distance=249 dst-address=192.168.0.0/16 type=blackhole

Этот набор маршрутов направит весь трафик до сетей RFC 1918 в «черную дыру», однако, если будут маршруты с меньшей метрикой, то такой трафик пойдет через эти маршруты. Полезно для гарантии того, что приватный трафик не просочится во внешнюю сеть.
За совет благодарим achekalin

UPnP


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



SIP Conntrack


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



IPv6 туннели


Если вы не используете IPv6 или не хотите что-бы рабочие машины с Windows поднимали IPv6 туннели без спроса, тогда заблокируйте следующий трафик:
/ip firewall filter
add action=drop chain=forward comment="Teredo TCP" dst-port=3544 protocol=tcp
add action=drop chain=forward comment="Teredo UDP" dst-port=3544 protocol=udp
add action=drop chain=forward comment=6to4 protocol=ipv6

За совет опять благодарим achekalin

Динамические и вложенные списки интерфейсов


Эта функция появилась совсем недавно (с версии 6.41), и она очень удобная. Однако, есть неприятный баг (я о нём сообщил, но его еще не исправили), суть в том, что после презапуска роутера, правила файрволла, которые используют эти списки, не работают для интерфейсов входящих в дочернии списки. Лечится передобавлением дочерних списков. Автоматизация простая:

В Sheduler на событие start пишем скрипт (списки интерфейсов для конфигурации с балансировкой):

/interface list
set ISP1TUN include=""
set ISP include=""
set TUN include=""
:delay 2
set ISP1TUN include=ISP1,TUN1
set ISP include=ISP1
set TUN include=TUN1

WiFi


В городской среде, когда эфир крайне зашумлен, имеет смысл отказаться от каналов в 40MGhz, это увеличивает удельную мощность сигнала на канале, так как 40MGHz канал по сути, это два канала по 20MGHz.

Bridge & ARP


Если у вас роутер раздает интернет и дает клиентам настройки по DHCP, имеет смысл установить настройку arp=reply-only, а в DHCP Server включить add-arp=yes





Такая настройка помешает выставить IP адрес вручную, так как роутер согласится работать только с той парой MAC-IP, которую выдавал сам.

Прочее


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

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


  1. Tihon_V
    18.04.2018 21:17

    Буквально на днях обнаружил, что в актуальной версии GNS3 есть шаблон Mikrotik CHR (bugfix-ветка и более старые версии).
    Очень рекомендую для тестирования и написания конфигураций (у не лицензированной версии есть ограничения).


    1. Tabletko
      18.04.2018 22:41

      Не активированная лицензия работает бессрочно, но скорость портов ограничена 1Mbit/s. Если зарегистрироваться на mikrotik.com и на CHR перевыпустить лицензию, указав логин и пароль, то можно получить любую лицензию в триальном режиме на 60 дней.


  1. Ivashka80
    18.04.2018 21:42

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


  1. TheManiac
    19.04.2018 01:21

    Люблю Mikrotik


  1. jozols
    19.04.2018 07:19

    А не будет ли так, что при DDOS роутер ляжет раньше именно благодаря дополнительным правилам firewall — типа «более 15 новых соединений в секунду». CPU же никакой на домашних роутерах. Кому нибудь помогли хоть раз эти фильтры, что везде публицируют на форумах? Или только сердце/ЧСВ греют счетчики и забаненные IP :) Не лучше будет доступ к сервисам ограничить по IP или вообще отключить?


    1. MagicGTS Автор
      19.04.2018 07:26

      Тут главная цель атаки — исчерпание лимита соединений самого роутера (SYN flood атака). От такой атаки может спасти, но проверить мне пока нечем ;)


    1. Henry7
      19.04.2018 09:31

      Для защиты CPU Firewall's rule переносят из «Filter Rules» в «Raw»


      1. MagicGTS Автор
        19.04.2018 11:04

        Да, вариант дропать неугодных в RAW лучше по производительности, но целиком перенести правила не выйдет, в RAW нет отслеживания connection-state=new.
        Вариант с блокировкой в RAW:

        /ip firewall filter
        add action=jump chain=forward connection-state=new in-interface-list=ISP jump-target=anti-DDoS
        add action=jump chain=input connection-state=new in-interface-list=ISP jump-target=anti-DDoS
        add action=return chain=anti-DDoS dst-limit=15,15,src-address/10s
        add action=add-src-to-address-list address-list=BAN-DDoS address-list-timeout=1d chain=anti-DDoS
        /ip firewall raw
        add action=drop chain=prerouting in-interface-list=ISP src-address-list=BAN-DDoS
        /ip firewall filter
        add action=jump chain=input connection-state=new dst-port=22,8291 in-interface-list=ISP jump-target=anti-BruteForce-3 protocol=tcp
        add action=return chain=anti-BruteForce-3 dst-limit=4/1m,1,src-address/1m40s
        add action=add-src-to-address-list address-list=BAN-BruteForce-3 address-list-timeout=1d chain=anti-BruteForce-3
        /ip firewall raw
        add action=drop chain=prerouting in-interface-list=ISP src-address-list=BAN-BruteForce-3


    1. 14th
      19.04.2018 12:19

      В том и отличие Mikrotik — наличие ресурсов за вменяемые деньги. Хотя понятно, в случае качественной атаки их не хватит, но хотя бы от «пионеров» защищаться хватает.


  1. poco
    19.04.2018 11:42

    Для защиты роутера я поступаю проще: отсекаю всё входящее извне доверенной сети, кроме 1 порта. Когда надо стучусь в этот порт — создается на минуту запись адреса с которого можно зайти на роутер. Дальше есть эта минута чтоб зайти.


    1. MagicGTS Автор
      19.04.2018 11:43

      knock-knock — хорошая методика и её стоит использовать, не забывая и про другие.


    1. Alabastr
      19.04.2018 13:19

      И это правильно. 8291 оставляется и все. Из винбокса можно получить доступ к терминалу.


  1. achekalin
    19.04.2018 12:48
    +1

    Еще полезно добавить низкоприоритетные blackhole-маршруты для RFC 1918 сетей:

    /ip route add distance=249 dst-address=10.0.0.0/8 type=blackhole
    ...(то же для остальных RFC 1918 сетей)...


    Если в локалке используется адресация из этого диапазона (скажем, 10.50.50.0/24), то она перекроет, как с более точной маской, и с меньшей дистанцией, указанное выше, но для остального трафика подсети 10/8 отлично сработает.


    1. MagicGTS Автор
      19.04.2018 12:55

      Элегантно. При таком решении не очень то и нужно делать правила в Firewall, хотя от проблемы «серых» адресов не поможет. Все равно придется «вырубать» диапазон для провайдера.


      1. achekalin
        19.04.2018 13:06

        А зачем «для провайдера» трафик фильтровать? Трафик этих сетей в его сторону полетел бы только по маршруту по умолчанию, т.е. по маршруту с маской /0. /8 в приведенном выше варианте blackhole-маршрута перебьет /0. Если же провайдер вам передает какие-то маршруты по DHCP, скажем, для установления связи с ним, то они будут более специфическими, чем /8 — так что на подсеть провайдера трафик убиваться в blackhole не будет.

        Или я вас не понимаю?


        1. MagicGTS Автор
          19.04.2018 13:19

          Встречал такую ситуацию (BeeLine+L2TP):
          10.1.1.0/24 — сеть в которой вам выдали адрес в сети провайдера (соответственно и шлюз по умолчанию).
          10.2.2.0/24 — сеть L2TP серверов.
          В варианте без «вырубки» диапазона, L2TP сервера станут недоступны. Или придется давать до них маршруты руками.
          Как не крути, решение в такой ситуации будет не самым изящным при любом раскладе.


          1. achekalin
            19.04.2018 13:25

            Почему? В момент подключения к провайдеру у вас в таблице будет:


            • 10.0.0.0/8 (249) -> bh
            • 10.1.1.0/24 (1) -> выданный вам gw
            • 10.2.2.0/24 (1) -> сервера

            явно по маске и приоритетам сети /24 будут доступны, а остальное в 10/8 — нет. Когда вы подключитесь по l2tp, у вас таблица станет такой примерно:


            • 10.0.0.0/8 (249) -> bh
            • 10.1.1.0/24 (1) -> выданный вам gw
            • 10.2.2.0/24 (1) -> сервера
            • 0.0.0.0/0 (1) -> выданный вам gw

            что на практике означает, что трафик на /24 подсети полетит на них, трафик на 10/8 умрет, а остальное, кроме 10/8 — полетит на шлюз (т.к. /0 менее специфичная маска, чем /8).


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


            1. MagicGTS Автор
              19.04.2018 13:29

              А откуда у вас взялся маршрут до 10.2.2.0/24? Вы его должны прописать сами, тогда все заработает. Иначе, весь трафик до 10.2.2.0/24 будет завернут и BH.


              1. achekalin
                19.04.2018 13:36

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

                1. Клиент по dhcp получает адрес из сети 10.10.0.0/16, и сразу адрес ДНС серверов, которые умеют ресолвить адрес l2tp сервера вида «server.local» (грубо говоря).
                2. В настройках l2tp соединения прописан именно сервер с именем server.local — и на нем авторизация пройдет, только если по dhcp получил все же настройки.
                3. А уж из соединения по l2tp получает маршрут на 0.0.0.0/0.

                Но если даже и не так, все равно вы как раньше, так и сейчас должны прописать маршрут (10.2.2.0/24 в вашем примере), bh тут не причем.


                1. MagicGTS Автор
                  19.04.2018 13:40

                  Ну да, решение само по себе красивое, но в определенных ситуациях не покрывает все случаи.


                  1. achekalin
                    19.04.2018 13:43

                    Так оно и не перекрывает ничего, кроме подчистки забытого. Если бы не делать маршруты в bh, в вашем случае вы же все равно должны маршрут до подсети провайдера прописать, правильно? bh добавляет к этому спокойствие, что вы не будете мусорить в WAN приватным трафиком (который, вообще говоря, провайдер и так отфильтрует, или хотя бы должен отфильтровать).


                    1. MagicGTS Автор
                      19.04.2018 14:09

                      С вашего позволения, могу ли я добавить это в статью?


                      1. achekalin
                        19.04.2018 14:10

                        Конечно, буду только рад!