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

Настройка Firewall в Mikrotik

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
28 марта 2022 г.
4205
19 минут чтения
Средний рейтинг статьи: 5

New Documentation

Маршрутизаторы Mikrotik включают линейку сетевого оборудования на платформе RouterBoard. Ее различные варианты применяют для решения разнообразных задач – от оснащения простой точки доступа с поддержкой Wi-Fi до мощных аппаратов со встроенным брандмауэром и QoS. Везде используется операционная система RouterOS, разработанная той же латвийской компанией, что выпускает сами устройства Микротик.

Настройка Firewall В Mikrotik (1)

Программная платформа стала настолько популярной, что отчасти перекочевала на компьютеры с поддержкой архитектуры x86. Чуть позже была разработана версия системы для облачных сервисов (версия Cloud Hosted Router). В этом материале мы рассмотрим, как настроить брандмауэр, задать необходимые параметры для защиты от хакерских атак. Ведь это основа безопасности офисной сети и приоритетное направление работы системных администраторов. 

Разработчики платформы RouterBoard предусмотрели ряд заводских настроек, применяемых уже при первом включении сетевого устройства. Но распространяется правило не на все решения, облачные системы CHR необходимо настраивать «с нуля». Поэтому их нужно вносить сразу, еще до начала эксплуатации. Об установке и базовой настройке Mikrotik CHR мы уже писали в блоге timeweb.cloud, поэтому сейчас сразу перейдем к настройкам файрвола.

Теория настройки файрвола

Сразу уточним, что в здесь мы рассмотрим настройку облачного варианта RouterOS CHR при помощи командной строки (CLI). При работе с WinBox и WebFig алгоритм будет таким же. 

Итак, начнем рассмотрение базовых понятий по настройке Mikrotik. Одно из основных здесь – «цепочка». На новых устройствах установлено 3 единицы, но пользователю доступны функции создания собственных.

Варианты:

  1. INPUT – входящий трафик, поступающий на устройство через Mikrotik Firewall.
  2. OUTPUT – исходящий трафик, передаваемый внешним клиентам из памяти оборудования.
  3. FORWARD – сквозной трафик, который передается от клиента клиенту, но через Mikrotik.

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

На случай, когда маршрутизатор Mikrotik выполняет роль промежуточного узла между отдельными сегментами сети, используют условия Forward. Термин «цепочка» принят не просто так. Firewall – это система, последовательно применяющая заданные правила и постепенно отсеивающая данные, что не соответствуют условиям. Такой подход снижает нагрузку на аппаратную платформу сетевого оборудования, исключают зависание пакетов при «одновременном обращении».

При настройке Микротика также придется столкнуться со статусами соединения. Каждое из них можно разделить на 4 условные категории:

  1. New – это только что созданное соединение, исходящее, входящее или сквозное.
  2. Established – коннект установлен, оборудование готово к передаче пакетов информации.
  3. Related – обращение осуществляется к одному из ранее созданных соединений, когда нужно изменить его назначение в служебных целях.
  4. Invalid – ошибочное обращение, когда маршрутизатор «не может понять» формат или иные критерии входящего соединения.

Последнее происходит, например, из-за некорректных настроек брандмауэра, сбоя в прошивке Mikrotik Firmware или при проблемах в локальной сети. Статус иногда используют как инструмент диагностики сетевого соединения. Предыдущие три применяют в штатной работе оборудования для поддержания работоспособности узла.

Теперь перейдем к практике

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

[admin@MikroTik] > ip firewall filter print 

Результат:

Flags: X - disabled, I - invalid, D – dynamic

Если ранее настройка еще не производилась, результат будет в виде подсказки про флаги, которыми можно управлять ситуацией. Все предлагаемые варианты команд отображаются путем нажатия кнопки со знаком вопроса <?> (с учетом раскладки клавиатуры).

Следующий шаг – переход в раздел настройки фильтрации, для этого есть команда:

[admin@MikroTik] > ip firewall filter 
[admin@MikroTik] /ip firewall filter>

Результат:

[admin@MikroTik] /ip firewall filter>

Теперь активируем парочку правил:

add action=accept chain=input comment="default configuration" connection-state=established,related

Рассмотрим составляющие последней команды:

  • add action=accept – ставится задача принять пакеты;
  • chain=input – будет применяться набор правил, соответствующий входящему трафику Input;
  • сomment=«default configuration» – поле для любых комментариев от пользователя, в этом случае внесена информация о том, что конфигурация будет применяться «по умолчанию»;
  • connection-state=established,related – устанавливаем полный список статусов, которые будут учитываться при приеме соединений.

Несмотря на довольно длинную строку, приведенный пример команды довольно прост по значению. Ее назначение укладывается во фразу: «Принимать входящие пакеты с подтвержденным статусом Established и Related». Все остальные блоки данных будут отклонены автоматически, пока владелец не изменит настройки фильтров. Теперь рассмотрим следующее правило, рекомендуемое при настройке Mikrotik RouterBoard.

Внесите в окне консоли команду:

add action=accept chain=input src-address-list=allowed_to_router

В приведенном примере наиболее интересен критерий src-address-list=allowed_to_router. Благодаря ему системный администратор может указать перечень разрешенных IP-адресов хостов, с которых допускается принимать пакеты данных. Перечень Mikrotik Address List вносят в файл с названием allowed_to_router, его можно редактировать в процессе эксплуатации сетевого оборудования. При необходимости создается любое количество списков под разными именами.

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

Подобный подход оправдан – операционная система работает только с теми пакетами, которые при настройке были разрешены для приема-отправки. Это снижает нагрузку на аппаратную платформу и риски перегрузки системы за счет отказа от обработки «никому не нужной» информации. Если нет входящих соединений с нужными характеристиками, линия вообще будет свободной. Настройка RouterOS позволяет запретить даже ответ на команду PING.

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

Команда включения ответа на запрос PING:

add action=accept chain=input protocol=icmp

Если все-таки понадобится заблокировать режим, значение action нужно заменить на drop. Тогда маршрутизатор прекратит принимать извне и обрабатывать ICMP-пакеты. Выглядеть команда будет следующим образом:

add action=drop chain=input protocol=icmp

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

add action=drop chain=input

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

[admin@MikroTik] /ip firewall filter> print Flags: X - disabled, I - invalid, D - dynamic 0 ;;; default configuration chain=input action=accept connection-state=established,related 1 chain=input action=accept src-address-list=allowed_to_router 2 chain=input action=accept protocol=icmp 3 chain=input action=drop

На «человеческом языке» работа маршрутизатора будет организована следующим образом:

  1. Извне на сетевое устройство приходит ICMP-пакет. Прибор сначала определяет, было ли соединение активно (пусть это будет правилом 0). Если хост пингуют в первый раз, то его статус будет New. Правило не применится, потому что текущее состояние не соответствует ни Established, ни Related.
  2. Следующим шагом (правило 1) маршрутизатор сверяет IP-адрес обращающегося хоста со списком allowed_to_router. Если изначально перечень не был сформирован, например, нет информации, какие адреса будут у клиентов сервиса, правило не срабатывает. Оно нужно для тех случаев, когда речь идет о конкретном перечне рабочих мест с фиксированным IP-адресом.
  3. Теперь о правиле 2. Если системный администратор принудительно включил реагирование на PING, маршрутизатор получит сигнал Accept (принять и обработать ICMP-пакет согласно протоколу). После обработки запроса сетевое оборудование отправляет эхо-ответ. На этом процедура реагирования завершается.

Приведем в пример еще один способ обслуживания. Например, когда на сетевое оборудование был отправлен UDP-пакет с неизвестного источника. В таком случае маршрутизатор отреагирует на обращение так:

  1. Правило 0. Статус коннекта не соответствует Established и Related, поэтому оно работать не будет.
  2. Правило 1. Перечень IP allowed_to_router еще не заполняли, поэтому оно тоже не сработает из-за невозможности идентификации обратившегося IP.
  3. Правило 2. Как и предыдущие, оно не применяется, потому что формат не соответствует ICMP.

Все, система подошла к краю цепочки Input. Здесь пакет «поджидает» правило, предназначенное для того, чтобы дропать данные, не соответствующие установленным правилам. В нашем примере из-за отсутствия возможностей для срабатывания правила chain=input action=drop оно работает всегда. И это приводит к отказу приема UDP-пакета независимо от отправителя. Мы разобрали, что именно значит дропнуть «левые» пакеты.

Теперь, когда понятна логика работы брандмауэра в Mikrotik RouterOS, можно приступать к другим настройкам. Например, создадим перечень допустимых адресов. Поэтому перейдем в «Главное меню», выбрав символ </> и утвердив операцию кликом на Enter. Теперь через консоль Mikrotik проверим, какие списки с IP уже существуют (возможно, ранее оборудование уже настраивалось).

Команда:

[admin@MikroTik] > ip firewall address-list 
[admin@MikroTik] /ip firewall address-list> print
Flags: X - disabled, D - dynamic
# LIST ADDRESS CREATION-TIME TIMEOUT

Если маршрутизатор новый, список будет пустым. Теперь нужно составить перечень актуальных IP в рабочей сети. Пусть это будет диапазон 192.168.88.0/24, исключение будет составлять 192.168.88.4 (на нем «висит» маршрутизатор). Указанную подсеть Mikrotik использует «по умолчанию», чтобы раздавать IP-адреса внутри локальной сети (офисной, домашней).

Теперь добавим указанный диапазон:

add address=192.168.88.0-192.168.88.254 list=allowed_to_router

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

[admin@MikroTik] /ip firewall address-list> 
print Flags: X - disabled, D - dynamic
# LIST ADDRESS CREATION-TIME TIMEOUT
0 allowed_to_router 192.168.88.2-192.168.88.254 feb/05/2021 13:01:55

Если все нормально, при обработке цепочки Input на этапе отработки правила 1 система уже начнет отрабатывать входящие пакеты. При идентификации адреса отправителя как входящего в «список доверия» правило применится, и пакеты будут передаваться дальше к заданному адресату.

Разделение адресов локального сегмента и интернета

Создание перечня IP-адресов – это основополагающий принцип настройки брандмауэра Микротик. Такой подход позволяет изначально отсеять обращения с «чужих» хостов. При администрировании рекомендуется придерживаться общепринятых стандартов, чтобы внутри системы бесперебойно работали разработки любой компании, например нормы, принятые инженерным советом интернета (IETF, Internet Engineering Task Force).

Названное международное сообщество работает с конца 80-х годов и практикует развитие протоколов и архитектур, используемых внутри глобальной сети. Результаты деятельности IEFT публикуются в виде информационных документов RFC (Request for Comments). В них содержится подробное описание стандартов, спецификаций. На сегодняшний день их принято несколько тысяч (на английском языке). Нас интересует RFC6890.

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

Перечень команд:

add address=0.0.0.0/8 comment=RFC6890 list=not_in_internet
add address=172.16.0.0/12 comment=RFC6890 list=not_in_internet
add address=192.168.0.0/16 comment=RFC6890 list=not_in_internet
add address=10.0.0.0/8 comment=RFC6890 list=not_in_internet
add address=169.254.0.0/16 comment=RFC6890 list=not_in_internet
add address=127.0.0.0/8 comment=RFC6890 list=not_in_internet
add address=198.18.0.0/15 comment=RFC6890 list=not_in_internet
add address=192.0.0.0/24 comment=RFC6890 list=not_in_internet
add address=192.0.2.0/24 comment=RFC6890 list=not_in_internet
add address=198.51.100.0/24 comment=RFC6890 list=not_in_internet
add address=203.0.113.0/24 comment=RFC6890 list=not_in_internet
add address=100.64.0.0/10 comment=RFC6890 list=not_in_internet
add address=240.0.0.0/4 comment=RFC6890 list=not_in_internet

Выполнить их нужно поочередно. В большинстве случаев рекомендуется внести в перечень подсеть 224.0.0.0/4. Ее резервируют для многоадресного вещания (мультикаст), подробная информация об этом поддиапазоне содержится в документе RFC2780. Второй диапазон 192.88.99.0/24 рассчитан на передачу трафика IPv6 через сети IPv4 (спецификация согласно документу RFC3068). Вносим такие изменения командой:

add address=224.0.0.0/4 comment=Multicast_RFC2780 list=not_in_internet
add address=192.88.99.0/24 comment="6to4_RFC 3068" list=not_in_internet

Теперь нужно проверить, сохранились ли внесенные изменения настроек:

[admin@MikroTik] /ip firewall address-list> print 
Flags: X - disabled, D - dynamic
# LIST ADDRESS CREATION-TIME TIMEOUT
0 allowed_to_router 192.168.88.2-192.168.88.254 feb/05/2021 13:01:55
1 ;;; RFC6890 not_in_internet 0.0.0.0/8 feb/05/2021 13:43:03
2 ;;; RFC6890 not_in_internet 172.16.0.0/12 feb/05/2021 13:43:03
3 ;;; RFC6890 not_in_internet 192.168.0.0/16 feb/05/2021 13:43:03
4 ;;; RFC6890 not_in_internet 10.0.0.0/8 feb/05/2021 13:43:03
5 ;;; RFC6890 not_in_internet 169.254.0.0/16 feb/05/2021 13:43:03
6 ;;; RFC6890 not_in_internet 127.0.0.0/8 feb/05/2021 13:43:03
7 ;;; RFC6890 not_in_internet 198.18.0.0/15 feb/05/2021 13:43:03
8 ;;; RFC6890 not_in_internet 192.0.0.0/24 feb/05/2021 13:43:03
9 ;;; RFC6890 not_in_internet 192.0.2.0/24 feb/05/2021 13:43:03
10 ;;; RFC6890 not_in_internet 198.51.100.0/24 feb/05/2021 13:43:03
11 ;;; RFC6890 not_in_internet 203.0.113.0/24 feb/05/2021 13:43:03
12 ;;; RFC6890 not_in_internet 100.64.0.0/10 feb/05/2021 13:43:03
13 ;;; RFC6890 not_in_internet 240.0.0.0/4 feb/05/2021 13:43:03
14 ;;; Multicast_RFC2780 not_in_internet 224.0.0.0/4 feb/05/2021 13:43:12
15 ;;; 6to4_RFC3068 not_in_internet 192.88.99.0/24 feb/05/2021 13:43:12

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

/ip firewall filter

Первое, что желательно сделать – чтобы брандмауэр не срабатывал на уже установленные коннекты (это создает бесполезную нагрузку на аппаратную платформу). Выполняется задача командой:

add action=fasttrack-connection chain=forward comment=FastTrack connection-state=established,related

Следом нужно обработать активные соединения согласно алгоритмам цепочки Forward:

add action=accept chain=forward comment="Established, Related" connection-state=established,related

Рекомендуется сразу отбросить «битые» соединения:

add action=drop chain=forward comment="Drop invalid" connection-state=invalid log=yes log-prefix=invalid

Затем желательно включить игнорирование пакетов, исходящих из локальной сети к частным IP-адресам. И активировать запись происходящего в лог-файле:

add action=drop chain=forward comment="Drop tries to reach not public addresses from LAN" dst-address-list=not_in_internet in-interface=bridge1 log=yes log-prefix=!public_from_LAN out-interface=!bridge1

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

add action=drop chain=forward comment="Drop incoming from internet which is not public IP" in-interface=ether1 log=yes log-prefix=!public src-address-list=not_in_internet

Защита от атак типа Brute Force (метод перебора)

В дополнение к фильтрации по IP-адресу желательно включить защиту от атак типа брутфорс. На сегодняшний день существует десятки тысяч ботов, систематически сканирующих сеть на предмет открытых портов Mikrotik, включая каналы SSH. Если происходит обнаружение подобного уязвимого места, бот начинает перебирать пароли с учетом популярных вариантов. Цель одна – захватить контроль над устройством и использовать его для спама.

В открытом доступе имеется большое количество словарей «стандартных» паролей. Они настолько огромные, что факт взлома оказывается вопросом времени. Но есть риски и «обычного» подбора символов, атака их перебором способна сломать любой барьер. Здесь все зависит лишь от мощности сервера, которых в «облаках» более чем достаточно. Поэтому лучше пресекать попытки подбора на первоначальном этапе, благо маршрутизаторы Mikrotik поддерживают такую функцию.

Первоначально нужно создать правило брандмауэра, при выполнении которого любые входящие соединения с IP-адресов из «черного списка» (ssh_blacklist) будут сбрасываться:

add chain=input protocol=tcp dst-port=22 src-address-list=ssh_blacklist action=drop comment="Drop SSH brutforce" disabled=no

Такой подход оправдан на случай, если «внутренний» пользователь действительно ошибся более 3 раз при вводе пароля, который банально забыл за время отпуска или больничного. Чтобы отсеять случаи «человеческого фактора», вносим возможность трех ошибок с интервалов 1 минуту. Более частые попытки явно означают начало атаки методом перебора. Если такое обнаружено, IP-адрес будет помещен в «черный список» и заблокирован на 10 дней.

Чтобы автоматизировать процесс контроля, создадим три дополнительных списка IP-адресов. Один назовем ssh_stage1. В него будут попадать все новые соединения, адресованные к порту SSH. Его система удалит через 1 минуту, это гарантирует удаление адреса из списка, если соединение было осуществлено успешно.

add chain=input protocol=tcp dst-port=22 connection-state=new action=add-src-to-address-list address-list=ssh_stage1 address-list-timeout=1m comment="Stage1" disabled=no

Вторую попытку нужно фиксировать в списке ssh_stage2, это гарантированно дает понять системе, что речь идет именно о дубле:

add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh_stage1 action=add-src-to-address-list address-list=ssh_stage2 address-list-timeout=1m comment="Stage2" disabled=no

При повторной ошибке IP-адрес перекидывается в список ssh_stage3. 

add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh_stage2 action=add-src-to-address-list address-list=ssh_stage3 address-list-timeout=1m comment="" disabled=no

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

add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh_stage3 action=add-src-to-address-list address-list=ssh_blacklist address-list-timeout=10d comment="" disabled=no

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

Базовая настройка NAT

Рассмотрим еще один распространенный вариант настроек. Он связан с NAT или Network Address Translation, технологией трансляции сетевых адресов. Ее применяют, когда необходимо обеспечить доступ к широкополосной сети всего с одним внешним IP-адресом. Например, в офисном помещении или многоквартирном доме.

Внутри сети рабочие места или сетевое оборудование будет иметь локальные IP-адреса из подсети 192.168.XXX.XXX. Маршрутизатор точно «знает», с какого устройства поступил запрос на доступ к внешнему ресурсу и куда отправить «обратные» пакеты данных. Но при запросе извне он отклонит его, потому что нет условий, позволяющих точно определить запрашивающий компьютер внутри офисной сети.

Решение на Mikrotik есть – это Port Forwarding, или «проброс портов». Эта методика позволяет обеспечить перенаправление внешнего запроса на нужное рабочее место. На уровне логики работа выглядит так: если порт XXXX получает TCP-запрос, маршрутизатор должен задать адрес 192.168.XXX.XXX на порт YYYY, куда требуется перенаправить его. Существует 2 способа настройки NAT на Mikrotik:

Вариант 1. Выходной IP-адрес может измениться

«По умолчанию» в настройках маршрутизатора нет ничего, относящегося к NAT. Поэтому нужно указать устройству, чтобы оно все приходящие из офисной сети данные выводили во внешнюю через указанный IP-адрес:

ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade

В этой команде ether1 – это интерфейс, видимый в интернете извне. Есть возможность составить целый перечень out_interface_list. Он подходит для офисных сетей, где используется динамический IP-адрес.

Вариант 2. Исходящий IP-адрес всегда постоянный

В другом случае, когда некоему офису выделен статический IP-адрес, понадобится команда:

ip firewall nat add chain=srcnat out-interface=ether1 action=src-nat to-addresses=XXX.XXX.XXX.XXX

Здесь XXX.XXX.XXX.XXX – это выделенный статический IP-адрес, а ether1 – выходной интерфейс, к которому предстоит сделать проброс портов. Например, возьмем сервер с IP 192.168.88.19, куда открыт удаленный доступ через порт 1122, расположенный в подсети 192.168.88.0/24. Проброс портов осуществим командой:

ip firewall nat add chain=dstnat in-interface=ether1 protocol=tcp dst-port=1122 action=dst-nat to-addresses=192.168.88.10 to-ports=22

Сразу уточним, что порт 1122 выбран специально. Нестандартные цифры сложнее атаковать извне, потому что боты чаще организуют их на стандартные порты. После применения указанных настроек маршрутизатор будет направлять TCP-пакеты, поступающие на порт 1122, на «местный» адрес 192.168.88.10 (через порт 22).

Заключение

В статье мы привели пример базовых возможностей создания основ защиты на базе RouterBoard (платформы, применяемой в устройствах Mikrotik). Предложенные команды актуальны в облачном варианте Микротика – CHR. На практике желательно изучить вопрос поглубже, чтобы закрыть все вероятные «дыры» и ограничить локальную сеть от доступа извне. И одновременно обеспечить работу необходимых портов, протоколов, поддержку нужных типов трафика.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону