Stupid House

Настройка Firewall на шлюзе MikroTik


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

Для правильной настройки межсетевого экрана на любом устройстве необходимо понимать несколько вещей:

  1. Схема работы firewall.
  2. Как работает firewall на устройстве.
  3. Что мы хотим открыть и защитить.

 

 

Схемы работы Firewall

Их две, и они применимы к любому межсетевому экрану:

  1. Разрешить всё, что не запрещено.
  2. Запретить всё, что не разрешено.

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

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

Какой режим работы firewall выбрать зависит от схемы сети, желания заморочиться понастраивать дополнительные правила и параноидальных наклонностей настраивающего. Для домашних и небольших сетей, где пара компьютеров и пара телефонов, вполне достаточно ограничить доступ нежелательного трафика из вне, а все остальное разрешить - схема #1, но применение схемы #2 может повысить общую безопасность в плане ограничения доступа к маршрутизатору из локальной сети или ограничения доступа к внешней сети из локальной. Если в сети используется несколько подсетей, например, для разделения основного сегмента сети и гостевой (Wi-Fi), то выбор очевиден - вариант #2.

 

FireWall в MikroTik

Доступ к настройке IP -> Firewall, фильтрация настраивается во вкладках Filter Rules и Raw. Разница в правилах между вкладками в том, что правила на вкладке Raw обрабатываются до того, как пакет попадет в Connection Tracker, это позволяет фильтровать пакеты гораздо раньше, что требует меньших затрат ресурсов устройства, но и имеет меньше возможностей в правилах, эффективен при обработке большого объема трафика.

По умолчанию firewall в MikroTik работает по схеме #1 - разрешить всё, что не запрещено (обе вкладки пустые), все правила обрабатываются последовательно до тех пор, пока не будет найдено условие, под которое подпадает обрабатываемый пакет. Если правило, под которое подпадает пакет найдено, то выполняется действие, заданное в настройках для этого правила и обработка последующих правил не выполняется. Если обрабатываемый пакет не попадает не под одно условие, то по схеме #1, пакет будет передан далее согласно схеме прохождения пакетов:

mikrotik firewall schema

Правила состоят из цепочек (Chain), в таблице Filter Rules по умолчанию три цепочки:

 

  • Input - трафик, направленный к только этому устройству. На схеме такой трафик обрабатывается в блоке Filter Input.

mikrotik firewall input traffic

  • Output - трафик, направленный от этого устройства. На схеме такой трафик обрабатывается в блоке Filter Output.

mikrotik firewall output traffic

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

mikrotik forward traffic

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

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

  • New - Новый пакет, не относящийся к текущим подключениям.
  • Established - Пакет принадлежит одному из существующих подключений из таблицы Connection.
  • Related - Пакет был порожден уже существующим подключением. Один из примеров протокол FTP, в котором передача команд происходит на порту 21, а передача данных на порту 20.
  • Invalid - Пакеты к которым не применимо не одно из предыдущих состояний.

В настройках MikroTik есть еще одно состояние:

  • Untracked - пакет, обработанный до того, как он попал в Connection Tracking и был обработан в RAW таблице.

 

Создание правил в Firewall

Добавление правил: IP -> Firewall -> Filter Rules -> +. На вкладке General задаются условия при совпадении которых происходит отработка правила, вкладка Action задает действие, выполняемое при совпадении условий правила. На вкладке Advanced располагаются дополнительные условия для правила не вошедшие в основной раздел, из практики в этом разделе наиболее часто используются пункты Src. Address List и Dst. Address List, в которых указываются списки адресов, например, IP адреса с которых разрешен доступ к устройству.

mikrotik firewall new rule

Возможные параметры для фильтрации трафика:

  • Chain - цепочка, направление трафика, значения по умолчанию: Input, Output, Forward. Единственный параметр обязательный к заполнению.
  • Src. Address - IP адрес источника пакета.
  • Dst. Address - IP адрес получателя пакета.
  • Protocol - фильтр по протоколу.
  • Src. Port - Порт(ы) с которого был отправлен пакет (доступен только при выборе соответствующего протокола).
  • Dst. Port - Порт(ы) на который отправлен пакет (доступен только при выборе соответствующего протокола).
  • Any. Port - Порт(ы) фигурирующий в пакете, не важно в каком направлении отправлен пакет (доступен только при выборе соответствующего протокола).
  • In. Interface - Интерфейс на который прилетел пакет.
  • Out. Interface - Интерфейс с которого отправлен пакет.
  • In. Interface List - Интерфейс из списка, на который прилетел пакет (список составляется в Interfaces -> Interface List).
  • Out. Interface List - Интерфейс из списка, с которого отправлен пакет (список составляется в Interfaces -> Interface List).
  • Connection State - Состояние подключения, значение берется из таблицы Connection.
  • Src. Address List (вкладка Advanced) - IP адрес из списка источников пакета (список составляется на вкладке IP -> Firewall -> Address List).
  • Dst. Address List (вкладка Advanced) - IP адрес из списка получателей пакета (список составляется на вкладке IP -> Firewall -> Address List).

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

В результате, если обрабатываемый пакет подпадает под условия правила, с этим пакетом выполняются указанные в настройке действия (Actions). Основные действия при обработке:

  • Accept - Обрабатываемый пакет считается доверенным и принимается для дальнейшей обработки устройством.
  • Drop - Пакет считается не желательным и удаляется.
  • Reject - Пакет считается не желательным и отбрасывается, но в отличии от предыдущего пункта, в ответ отсылается сообщение с причиной удаления. Это сделано для того, чтобы ускорить обработку запросов клиентом, т.к. если к пакету применить действие Drop, то клиент будет ожидать ответ до таймаута.

 

Примеры защиты устройств

Пример #1. Классический пример защиты домашнего роутера. На маршрутизаторе будет разрешен весь трафик для маршрутизатора и устройств в локальной сети выходящих через этот маршрутизатор в сеть интернет, кроме входящего трафика, не относящегося к Established и Related. Это означает, что если маршрутизатор или устройство в локальной сети установило соединение с ресурсом в сети интернет, например, зайти на сайт поисковика, то ответный трафик с сервера будет пропускаться, а весь остальной трафик из интернета будет блокироваться.

mikrotik firewall established connection type

Необходимо создать два правила, первое для цепочки input, второе для цепочки forward, т.к. первая цепочка означает трафик, приходящий не посредственно на это устройство, вторая цепочка означает проходящий через роутер трафик. На вкладке General в поле Chain (цепочка) указываем Input (входящий трафик), в поле In Interface выбираем интерфейс, к которому подключен провод провайдера, в разделе Connection State выбираем Established, Related и в квадрате в начале поля ставим восклицательный знак нажав на него, это означает логическое НЕ, запись будет читаться как пакеты НЕ Established и НЕ Related. Другими словами, всё кроме выбранного.

mikrotik firewall drop input wan

На вкладке Action в поле Action выбираем Drop.

mikrotik firewall drop input wan action

Создаем такое же правило для цепочки Forward. Что бы не заполнять все поля заново, дважды нажимаем на созданном правиле, в открывшемся окне нажимаем кнопку Copy, в открывшемся новом окне в поле Chain меняем input на forward. Нажимаем в обоих окнах кнопки OK, в списке Filter Rules появится два запрещающих правила.

mikrotik filter rules drop wan

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

/ip firewall filter add chain=input in-interface=ether1-wan-main connection-state=!established,related action=drop
/ip firewall filter add chain=forward in-interface=ether1-wan-main connection-state=!established,related action=drop

Пример #2. У нас firewall настроен как в примере #1, но нам необходимо чтобы устройство было доступно по протоколу ICMP (можно было проверить доступность устройства с помощью команды ping) откуда угодно.

mikrotik allow input icmp

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

Создаем новое правило для цепочки input, т.к. в данном случае доступ разрешается к этому устройству (маршрутизатору), в поле Protocol выставляем icmp, в поле In. Interface выбирается интерфейс, к которому подключен провод провайдера.

mikrotik firewall allow icmp

На вкладке Action выбираем accept.

mikrotik firewall allow icmp action accept

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

/ip firewall filter add chain=input protocol=icmp in-interface=ether1-wan-main action=accept

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

mikrotik filter rules drop wan allow icmp

Пример #3. Firewall настроен как в примерах #1 и #2. Необходимо разрешить доступ RDP (порт 3389) к одному из компьютеров в локальной сети с определенного (доверенного) IP адреса, настройки NAT опускаем, рассматриваем только фильтрацию.

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

mikrotik firewall allow access forward

Создаем новое правило для цепочки forward, т.к. устройство находится за маршрутизатором, в поле Src. Address вносим IP адрес с которого разрешен доступ, в поле Protocol выставляем 6(tcp), в поле Dst. Port пишем 3389 (порт RDP по умолчанию) в поле In. Interface выбирается интерфейс, к которому подключен провод провайдера.

mikrotik firewall allow rdp forward

На вкладке Action выбираем accept, нажимаем OK и перемещаем правило выше запрещающих.

mikrotik filter rules drop wan allow icmp rdp

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

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

/ip firewall filter add chain=forward src-address=8.8.8.8 protocol=tcp dst-port=3389 in-interface=ether1-wan-main action=accept

Пример #4. Необходимо настроить firewall по схеме #2 (запрещено всё, что не разрешено), при этом необходимо что бы ходил трафик локальной сети от маршрутизатора и обратно, был доступ к маршрутизатору из вне по списку определенных IP и в сеть интернет был доступ только с определенных IP адресов локальной сети.

Что бы запретить весь трафик в firewall в конец списка правил необходимо добавить три запрещающих правила для трех стандартных цепочек: input, output и forward. Но! Прежде чем их добавить необходимо позаботиться о разрешающих правилах, чтобы как минимум не потерять доступ к устройству.

  1. Разрешаем доступ к маршрутизатору для локальной сети и обратно.
    Пусть у нас локальная сеть имеет адресацию 192.168.123.0/24, интерфейсы локальной сети объединены в бридж bridge-local-net, IP адрес маршрутизатора 192.168.123.1/32. Создаем два разрешающих правила, для входящего и исходящего трафика.
    mikrotik drop all accept input localnet
    и
    mikrotik firewall all accept output localnet
    /ip firewall filter add chain=input src-address=192.168.123.0/24 dst-address=192.168.123.1/32 in-interface=bridge-local-net action=accept
    /ip firewall filter add chain=output src-address=192.168.123.1/32 dst-address=192.168.123.0/24 out-interface=bridge-local-net action=accept
  2. Разрешаем доступ к маршрутизатору из внешней сети для нескольких IP.
    У нас есть несколько IP адресов, которым мы всецело доверяем (работа, дача, вайфайчик у любимой девушки) и с этих IP адресов мы хотим иметь доступ к нашему устройству. Создаем список с такими IP адресами в IP -> Firewall -> Address Lists назвав его WhiteList.
    mikrotik firewall create whitelist
    Создаем два разрешающих правила для цепочек input и output, соответственно указав для каждой цепочки в качестве входящего и исходящего интерфейса тот, к которому подключен провод провайдера.
    На вкладке General задаем только тип цепочки и входящий/исходящий интерфейс.
    mikrotik firewall drop all accept input address list
    На вкладке Advanced в поле Src. Address List выбираем созданный ранее список IP адресов WhiteList.
    mikrotik firewall drop all accept address list advanced
    Обратное правило создается аналогично. Команды для добавления правил из терминала:
    /ip firewall filter add chain=input in-interface=ether1-wan-main src-address-list=WhiteList action=accept
    /ip firewall filter add chain=output out-interface=ether1-wan-main dst-address-list=WhiteList action=accept
    
  3. Предоставляем доступ в сеть интернет только определенным IP адресам локальной сети. Что бы не создавать правила для каждого адреса на вкладке IP -> Firewall -> Address Lists создадим список InternetAccess.
    mikrotik firewall address list allow internet
    На вкладке Filter Rules добавляем правила для доступа в интернет по созданному списку (настройки NAT в данной статье не рассматриваются, только фильтрация).
    Исходящий трафик не ограничиваем, цепочку выставляем Forward, Out. Interface - WAN интерфейс.
    mikrotik drop all allow internet by addr list
    На вкладке Advanced в поле Src. Address List выставляем созданный ранее список InternetAccess. На вкладке Action выставляем accept.
    mikrotik firewall drop all allow output address list advanced
    В обратном, входящем, правиле разрешаем подключения только Established и Related, цепочка, как и в предыдущем правиле, будет Forward, но WAN интерфейс мы теперь указываем в поле In. Interface.
    mikrotik firewall drop all allow internet by address list
    На вкладке Advanced в поле Dst. Address List выставляем созданный ранее список InternetAccess. На вкладке Action выставляем accept.
    mikrotik firewall drop all allow internet by address list advanced
    Добавление правил из терминала:

    /ip firewall filter add chain=forward out-interface=ether1-wan-main src-address-list=InternetAccess action=accept
    /ip firewall filter add chain=forward in-interface=ether1-wan-main connection-state=established,related dst-address-list=InternetAccess action=accept
    4. Предоставляем доступ во внешнюю сеть самому роутеру. Правила схожи с предыдущим примером, но делаются для цепочек Input и Output. Входящие/Исходящие адреса не указываются, т.к. со стороны роутера это будут все адреса, принадлежащие роутеру. Action = accept.
    Правило для исходящего трафика:
    mikrotik firewall drop all accept output
    Правило для входящего трафика, разрешаем только Established и Related:
    mikrotik firewall drop all allow input
    Добавление правил из терминала:
    /ip firewall filter add chain=output out-interface=ether1-wan-main action=accept
    /ip firewall filter add chain=input in-interface=ether1-wan-main connection-state=established,related action=accept
    5. Запрещаем весь трафик.
    Так как считаем, что все что необходимо было разрешено ранее, то добавляем три запрещающих правила для трех цепочек: Input, Output и Forward.
    Перед внесением запрещающих правил в WinBox включаем Safe Mode. Если мы что-то сделали не так и связь с устройством потеряется, то изменения автоматически будут отменены.
    mikrotik safe mode
    Вносим запрещающие правила, если после добавления правил связь не потерялась, то надо нажать на кнопку Safe Mode еще раз.
    mikrotik firewall drop all inpit
    Action = drop.
    mikrotik firewall drop all action
    Правила Output и Forward создаются аналогично, меняется только значение в поле Chain.
    /ip firewall filter add chain=input action=drop
    /ip firewall filter add chain=output action=drop
    /ip firewall filter add chain=forward action=drop
    В итоге мы должны получить список примерно такого вида:
    mikrotik firewall drop all rules

 

Отладка

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

mikrotik firewall logging

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

mikrotik log firewall

После отладки не забываем отключать в правилах логирование.

 

RAW

Если посмотреть на схему прохождения пакета, то мы видим, что входящий пакет первым делом попадает в блок RAW Preroutig, а на выходе в RAW Output - это и есть первая стена Firewall, первым делом пакет проверяется здесь, далее уходит на дальнейшую обработку и попадает в раздел Filter. Получается, что, обработав пакет в RAW таблице мы потратим меньше вычислительных мощностей устройства, это может иметь весомое преимущество если, например, необходимо закрыться от DDOS атаки, пакеты будут отсеиваться уже на самом входе.

Настройка правил в RAW таблице схожа с настройкой в разделе Filter, отличия только в том, что пакет не еще прошел обработку в Connection Tracking, поэтому возможности для фильтрации меньше. В разделе Chain есть только два вида цепочек Prerouting и Output. Первый это пришедший на интерфейс пакет, второй отправляемый с интерфейса пакет, тип (Connection State) и маркировка пакета на данном этапе не доступны.

 

IPv6 Firewall

Настраивается в разделе IPv6 -> Firewall. Настройка схожа с firewall для IPv4, основные отличия в оперирование IPv6 адресами и отсутствии NAT. При настройке на устройстве IPv6 адресации не забываем настроить и Firewall!

Tags:
Автор: muxa, 01.08.2021
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии