Настройка Firewall на шлюзе MikroTik
Настроить firewall на MikroTik достаточно просто, но пользователи либо не сильно много уделяют внимания этой одной из важных элементов настройки устройства, либо настраивают его неправильно, что показало большое количество взломанных устройств в 2019 году, когда была найдена уязвимость WinBox. Данная статья пытается помочь понять, как работает фильтрация трафика в MikroTik, что необходимо делать что бы защитить свои устройства, но не претендует на руководство к действию, каждый выбирает свой путь сам.
Для правильной настройки межсетевого экрана на любом устройстве необходимо понимать несколько вещей:
- Схема работы firewall.
- Как работает firewall на устройстве.
- Что мы хотим открыть и защитить.
- Схемы работы Firewall
- FireWall в MikroTik
- Создание правил в Firewall
- Примеры защиты устройств
- Отладка
- RAW
- IPv6 Firewall
Схемы работы Firewall
Их две, и они применимы к любому межсетевому экрану:
- Разрешить всё, что не запрещено.
- Запретить всё, что не разрешено.
В первой схеме по умолчанию на все пакеты не накладывается никаких ограничений и по необходимости блокируются только какие-то критические сервисы, например, сервисы предоставляющие удаленный доступ. По данной схеме работают большинство домашних маршрутизаторов, у которых разрешен весь трафик кроме соединений из вне, которые не были инициированы этим устройством или устройствами локальной сети, работающими через этот шлюз.
Во второй схеме все подключения по умолчанию блокируются, если необходим доступ к какому-либо сервису, то разрешаем его.
Какой режим работы firewall выбрать зависит от схемы сети, желания заморочиться понастраивать дополнительные правила и параноидальных наклонностей настраивающего. Для домашних и небольших сетей, где пара компьютеров и пара телефонов, вполне достаточно ограничить доступ нежелательного трафика из вне, а все остальное разрешить - схема #1, но применение схемы #2 может повысить общую безопасность в плане ограничения доступа к маршрутизатору из локальной сети или ограничения доступа к внешней сети из локальной. Если в сети используется несколько подсетей, например, для разделения основного сегмента сети и гостевой (Wi-Fi), то выбор очевиден - вариант #2.
FireWall в MikroTik
Доступ к настройке IP -> Firewall
, фильтрация настраивается во вкладках Filter Rules
и Raw
. Разница в правилах между вкладками в том, что правила на вкладке Raw
обрабатываются до того, как пакет попадет в Connection Tracker
, это позволяет фильтровать пакеты гораздо раньше, что требует меньших затрат ресурсов устройства, но и имеет меньше возможностей в правилах, эффективен при обработке большого объема трафика.
По умолчанию firewall в MikroTik работает по схеме #1 - разрешить всё, что не запрещено (обе вкладки пустые), все правила обрабатываются последовательно до тех пор, пока не будет найдено условие, под которое подпадает обрабатываемый пакет. Если правило, под которое подпадает пакет найдено, то выполняется действие, заданное в настройках для этого правила и обработка последующих правил не выполняется. Если обрабатываемый пакет не попадает не под одно условие, то по схеме #1, пакет будет передан далее согласно схеме прохождения пакетов:
Правила состоят из цепочек (Chain), в таблице Filter Rules по умолчанию три цепочки:
- Input - трафик, направленный к только этому устройству. На схеме такой трафик обрабатывается в блоке Filter Input.
- Output - трафик, направленный от этого устройства. На схеме такой трафик обрабатывается в блоке Filter Output.
- Forward - трафик, проходящий через это устройство, например, из локального компьютера в интернет и обратно, направление не имеет значение. На схеме такой трафик обрабатывается в блоке Filter Forward.
Помимо стандартных цепочек можно создавать пользовательские цепочки, это может быть полезно для создания блоков обработки пакетов и более наглядного его восприятия.
Следующим важным компонентом в работе 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 адреса с которых разрешен доступ к устройству.
Возможные параметры для фильтрации трафика:
- 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. Это означает, что если маршрутизатор или устройство в локальной сети установило соединение с ресурсом в сети интернет, например, зайти на сайт поисковика, то ответный трафик с сервера будет пропускаться, а весь остальной трафик из интернета будет блокироваться.
Необходимо создать два правила, первое для цепочки input, второе для цепочки forward, т.к. первая цепочка означает трафик, приходящий не посредственно на это устройство, вторая цепочка означает проходящий через роутер трафик. На вкладке General в поле Chain (цепочка) указываем Input (входящий трафик), в поле In Interface выбираем интерфейс, к которому подключен провод провайдера, в разделе Connection State выбираем Established, Related и в квадрате в начале поля ставим восклицательный знак нажав на него, это означает логическое НЕ, запись будет читаться как пакеты НЕ Established и НЕ Related. Другими словами, всё кроме выбранного.
На вкладке Action в поле Action выбираем Drop.
Создаем такое же правило для цепочки Forward. Что бы не заполнять все поля заново, дважды нажимаем на созданном правиле, в открывшемся окне нажимаем кнопку Copy, в открывшемся новом окне в поле Chain меняем input на forward. Нажимаем в обоих окнах кнопки OK, в списке Filter Rules появится два запрещающих правила.
В командной строке правила будут выглядеть так:
/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) откуда угодно.
Наш firewall работает по схеме разрешено всё кроме того, что запрещено, то, из локальной сети доступ к устройству не ограничен, а из внешней сети доступ ограничивают правила из примера #1. Что бы реализовать доступ к устройству из сети интернет все правила, связанные с этим должны в списке правил располагаться выше запрещающего.
Создаем новое правило для цепочки input, т.к. в данном случае доступ разрешается к этому устройству (маршрутизатору), в поле Protocol выставляем icmp, в поле In. Interface выбирается интерфейс, к которому подключен провод провайдера.
На вкладке Action выбираем accept.
Добавление правила из командной строки будет выглядеть так:
/ip firewall filter add chain=input protocol=icmp in-interface=ether1-wan-main action=accept
После нажатия кнопки OK правило добавится в самый низ таблицы, перетаскиваем его выше запрещающих правил захватив мышкой.
Пример #3. Firewall настроен как в примерах #1 и #2. Необходимо разрешить доступ RDP (порт 3389) к одному из компьютеров в локальной сети с определенного (доверенного) IP адреса, настройки NAT опускаем, рассматриваем только фильтрацию.
Как и в предыдущем примере разрешающее правило должно располагаться выше запрещающих ввиду того, что запрещающие правила блокируют доступ из внешней сети.
Создаем новое правило для цепочки forward, т.к. устройство находится за маршрутизатором, в поле Src. Address вносим IP адрес с которого разрешен доступ, в поле Protocol выставляем 6(tcp), в поле Dst. Port пишем 3389 (порт RDP по умолчанию) в поле In. Interface выбирается интерфейс, к которому подключен провод провайдера.
На вкладке Action выбираем accept, нажимаем OK и перемещаем правило выше запрещающих.
Напоминаю, что здесь мы рассматриваем только фильтрацию трафика, настройки 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. Но! Прежде чем их добавить необходимо позаботиться о разрешающих правилах, чтобы как минимум не потерять доступ к устройству.
- Разрешаем доступ к маршрутизатору для локальной сети и обратно.
Пусть у нас локальная сеть имеет адресацию 192.168.123.0/24, интерфейсы локальной сети объединены в бридж bridge-local-net, IP адрес маршрутизатора 192.168.123.1/32. Создаем два разрешающих правила, для входящего и исходящего трафика.
и
/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
- Разрешаем доступ к маршрутизатору из внешней сети для нескольких IP.
У нас есть несколько IP адресов, которым мы всецело доверяем (работа, дача, вайфайчик у любимой девушки) и с этих IP адресов мы хотим иметь доступ к нашему устройству. Создаем список с такими IP адресами в IP -> Firewall -> Address Lists назвав его WhiteList.
Создаем два разрешающих правила для цепочек input и output, соответственно указав для каждой цепочки в качестве входящего и исходящего интерфейса тот, к которому подключен провод провайдера.
На вкладке General задаем только тип цепочки и входящий/исходящий интерфейс.
На вкладке Advanced в поле Src. Address List выбираем созданный ранее список IP адресов WhiteList.
Обратное правило создается аналогично. Команды для добавления правил из терминала:/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
-
Предоставляем доступ в сеть интернет только определенным IP адресам локальной сети. Что бы не создавать правила для каждого адреса на вкладке IP -> Firewall -> Address Lists создадим список InternetAccess.
На вкладке Filter Rules добавляем правила для доступа в интернет по созданному списку (настройки NAT в данной статье не рассматриваются, только фильтрация).
Исходящий трафик не ограничиваем, цепочку выставляем Forward, Out. Interface - WAN интерфейс.
На вкладке Advanced в поле Src. Address List выставляем созданный ранее список InternetAccess. На вкладке Action выставляем accept.
В обратном, входящем, правиле разрешаем подключения только Established и Related, цепочка, как и в предыдущем правиле, будет Forward, но WAN интерфейс мы теперь указываем в поле In. Interface.
На вкладке Advanced в поле Dst. Address List выставляем созданный ранее список InternetAccess. На вкладке Action выставляем accept.
Добавление правил из терминала:/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.
Правило для исходящего трафика:
Правило для входящего трафика, разрешаем только Established и Related:
Добавление правил из терминала:/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. Если мы что-то сделали не так и связь с устройством потеряется, то изменения автоматически будут отменены.
Вносим запрещающие правила, если после добавления правил связь не потерялась, то надо нажать на кнопку Safe Mode еще раз.
Action = drop.
Правила 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
В итоге мы должны получить список примерно такого вида:
Отладка
При возникновении проблем любое из правил можно отправить в Log, для этого в свойствах правила на вкладке Action включаем логирование и в поле Log Prefix добавляем пояснение для упрощения поиска в логах.
В разделе Log при отработке правила будут примерно такие записи:
После отладки не забываем отключать в правилах логирование.
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!