MikroTik Настройка Firewall вторая часть

За несколько лет работы, мы для себя нашли некоторую золотую середину в настройке Firewall MikroTik, и естественно хотим поделиться её с вами.

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

Первая часть

MikroTik Firewall Filter

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

/ip firewall filter
add chain=input in-interface-list=ISP action=jump jump-target=ISP-Input
add chain=forward in-interface-list=ISP action=jump jump-target=ISP-Forward

add chain=ISP-Input connection-state=established
add chain=ISP-Input connection-state=related 
add chain=ISP-Input connection-state=untracked 
add chain=ISP-Input connection-state=invalid action=drop
add chain=ISP-Input jump-target=ISP-Input-Allow action=jump
add chain=ISP-Input action=drop

add chain=ISP-Forward connection-state=established 
add chain=ISP-Forward connection-state=related 
add chain=ISP-Forward connection-state=untracked 
add chain=ISP-Forward connection-state=invalid action=drop
add chain=ISP-Forward connection-nat-state=dstnat 
add chain=ISP-Forward action=drop

add chain=ISP-Input-Allow protocol=icmp 
add chain=ISP-Input-Allow dst-port=22 protocol=tcp 
add chain=ISP-Input-Allow dst-port=1701 protocol=udp 

Главной особенностью нашего фаервола заключается в том, что вам нет необходимости помнить в каком порядке расставлять правила для открытия нужных портов на маршрутизаторе, вы всегда работает ТОЛЬКО с одной цепочкой ISP-Input-Allow.

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

Interface List

Создадим отдельный лист, где перечислим все наши локальные интерфейсы, в которых находятся наши пользователи, только не стоит добавлять все интерфейсы, а только те, где действительно есть и ходит трафик. В моём случае это 5 интерфейсов ether5.2 ether5.3 ether5.4 ether5.5, ether5.6 я таким образом именую vlan интерфейсы, но в вашем случае могут быть разные bridge-ы и просто интерфейсы.

/interface list add name=Local
/interface list member
add list=Local interface=ether5.2
add list=Local interface=ether5.3
add list=Local interface=ether5.4
add list=Local interface=ether5.5
add list=Local interface=ether5.6

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

Отлично теперь у нас есть лист с которым мы будем работать.

Firewall Filter

И так начнём с простого, займёмся безопасностью.

Firewall Filter Local input

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

/ip firewall filter
add chain=input in-interface-list=Local action=jump jump-target=Local-Input

Теперь мы в данной цепочке разрешим весь трафик established, related, untracked.

add chain=Local-Input connection-state=established
add chain=Local-Input connection-state=related 
add chain=Local-Input connection-state=untracked 

Также необходимо отбросить invalid.

add chain=Local-Input connection-state=invalid action=drop

Стоп!!! Стоп!!! Стоп

А вы не заметили, что мы начали создавать по сути одинаковые правила, для разных интерфейсов, мне кажется или это “перебор”?! А вам?

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

Собственно на данном этапе мы разрешили пакеты, которые связаны с уже установленными соединениями и пакеты которые идут мимо connection-tracker, untracked, с ними мы разберёмся позже.

Так как мы настраиваем цепочку input мы работаем с пакетами которые идут непосредственно на сам маршрутизатор.

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

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

add chain=Local-Input action=jump jump-target=Local-Input-All

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

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

add chain=Local-Input-All protocol=icmp 

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

add chain=Local-Input-All protocol=udp dst-port=53 

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

Нам необходимо более выборочно поступить к настройкам фаервол, допустим нам надо разрешить управление Mikrotik для его дальнейшей настройки только с интерфейса ether5.3 это наш некий management.

Мы в этой же цепочке, укажем ещё и интерфейс.

add chain=Local-Input-All in-interface=ether5.3 protocol=tcp dst-port=22,8291 

Т.е. Мы конкретизировали ещё и интерфейс.

А теперь нам надо заблокировать весь оставшийся трафик, но уже не в цепочке Local-Input-All, а в Local-Input. Так когда трафик закончится обрабатываться в цепочке Local-Input-All он вернётся в цепочку Local-Input.

add chain=Local-Input action=drop

Всё, теперь у нас есть конфигурация, которая разрешает с любого локального интерфейса доступ к dns и icmp, а также с интерфейса ether5.3 соединение непосредственно с ssh и winbox.

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

Firewall Filter Local Forward

А теперь поговорим непосредственно про проходящий трафик, а именно трафик из локальных сетей. Ещё раз напомню что у нас пять интерфейсов vlan ether5.2, ether5.3, ether5.4, ether5.5 и ether5.6.

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

Конечно всё зависит от задачи и поставленного ТЗ, но так как мы с вами работаем без ТЗ =), то делать будет по-простому, а именно ориентироваться в наших правилах, на пакет которые пришёл с определённого интерфейса.

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

add chain=forward in-interface=ether5.2 action=jump jump-target=Forward-from-ether5.2
add chain=forward in-interface=ether5.3 action=jump jump-target=Forward-from-ether5.3
add chain=forward in-interface=ether5.4 action=jump jump-target=Forward-from-ether5.4
add chain=forward in-interface=ether5.5 action=jump jump-target=Forward-from-ether5.5
add chain=forward in-interface=ether5.6 action=jump jump-target=Forward-from-ether5.6

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

Создадим последним правилом драпающим все пакеты

add chain=forward action=drop

Теперь у нас фаервол имеет концепцию Нормально закрытый фаервол, всё что не разрешено то запрещено и надо будет помнить так как при добавлении VPN-ов или новых интерфейсов у вас будет всё с них запрещено.

Также необходимо добавить ещё два правила, ПЕРЕД нашими forward, а именно:

add chain=forward connection-state=established 
add chain=forward connection-state=related 
add chain=forward connection-state=invalid action=drop

Эти правила необходимы для того, чтобы уменьшить количество трафика (pps) на правила в кастомных цепочках, ну и также облегчить удобство настройки. Эти правила должны быть всегда перед правилами forward/jump

А теперь поколдуем с нашими цепочками.

Начнём с самой простой, гостевой wifi

add chain=Forward-from-ether5.6 out-interface-list=ISP 

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

Продолжим с цепочкой VoIP

Предположим, что у нас настроен provision для телефонов, а также у нас есть несколько важных\нужный серверов.

Создадим адрес лист чтобы не плодить сущности

/ip firewall address-list
add address=192.168.5.3 list=ActiveDirectoryServers
add address=192.168.5.5 list=ActiveDirectoryServers
add chain=Forward-from-ether5.4 dst-address=192.168.5.2 protocol=udp dst-port=69 comment="TFTP"
add chain=Forward-from-ether5.4 dst-address=192.168.5.2 protocol=udp dst-port=5060 comment="SIP"
add chain=Forward-from-ether5.4 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=53 comment="DNS"
add chain=Forward-from-ether5.4 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=123 comment="NTP"
add chain=Forward-from-ether5.4 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=636 comment="LDAP BOOK"
add chain=Forward-from-ether5.4 dst-address=192.168.5.4 protocol=udp dst-port=514 comment="LOG"

Обратите внимание на TFTP и SIP, нам не надо разрешать related порты, например такие, как RTP 10000-20000 (в большинстве случаев), так как NAT хелперы мы не отключали. Привет, всем (у кого горит) любителям хелперов =))), а если серьёзно, то вы должны выбрать для себя, то как будет строиться ваш подход, либо вы отключаете хелпер и настраиваете “всё и вся” либо вы возлагаете часть работы на хелпер, решать только вам, оба кейса “имеет место быть”.

Это конечно не входит в данную статью, но помните один важный нюанс, потеря данных аутентификации к SIP серверу может привести к прямым потерям, в виде счёта от вашего провайдера, отсюда надо помнить такую вещь! Не пренебрегайте настройками безопасностей в локальной сети, как показывает практика чаще всего из локальной сети разрешено всё! Установите на вашу PBX системы как минимум fail2ban и естественно не забудьте его настроить.

management vlan

Сеть в которой находить различное оборудование, необходимо минимум настроек

add chain=Forward-from-ether5.3 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=53 comment="DNS"
add chain=Forward-from-ether5.3 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=123 comment="NTP"
add chain=Forward-from-ether5.3 dst-address=192.168.5.4 protocol=udp dst-port=514 comment="LOG"

Локальная сеть

Тут та мы и с вами нагородим

add chain=Forward-from-ether5.2 out-interface-list=ISP
add chain=Forward-from-ether5.2 src-address-list=PCadmins
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=icmp
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=445 comment="AD-SMB"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=123 comment="AD-W32Time"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=464 comment="AD-Kerberos password change"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=389 comment="AD-LDAP"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=53 comment="AD-DNS"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=88 comment="AD-Kerberos"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=135 comment="AD-RPC Endpoint Mapper"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=464 comment="AD-Kerberos password change"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=389 comment="AD-LDAP"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=636 comment="AD-LDAP SSL"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=3268 comment="AD-LDAP GC"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=3269 comment="AD-LDAP GC SSL"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=53 comment="AD-DNS"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=49152-65535 comment="AD-RPC for LSA, SAM, NetLogon, FRS, DFSR"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=88 comment="AD-Kerberos"

Согласно документации https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/config-firewall-for-ad-domains-and-trusts

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

Так же мы разрешаем во всех направлениях БЕЗ ограничения трафик с некого листа PCadmins в котором вы перечислите IP адреса или доменные имена компьютеров администраторов, с них разрешён любой трафик. В идеале конечно, выделить отдельную сеть под такие задачи, но что имеем то и имеем.

Серверная сеть

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

add chain=Forward-from-ether5.5 protocol=icmp
add chain=Forward-from-ether5.5 src-address=192.168.5.2 dst-address-list=voip.provider protocol=udp dst-port=5060
add chain=Forward-from-ether5.5 src-address=192.168.5.2 dst-address-list=voip.provider protocol=tcp dst-port=5060
add chain=Forward-from-ether5.5 src-address-list=ActiveDirectoryServers out-interface=ether5.2 
add chain=Forward-from-ether5.5 src-address-list=ActiveDirectoryServers out-interface-list=ISP protocol=udp dst-port=53

Итоговая таблица правил фаервола:

/ip firewall filter
add chain=input in-interface-list=Local action=jump jump-target=Local-Input

# Local-Input -->
add chain=Local-Input connection-state=established 
add chain=Local-Input connection-state=related 
add chain=Local-Input connection-state=untracked 
add chain=Local-Input action=jump jump-target=Local-Input-All
add chain=Local-Input connection-state=invalid action=drop
add chain=Local-Input action=drop
# Local-Input <--

# Local-Input-All -->
add chain=Local-Input-All protocol=icmp 
add chain=Local-Input-All protocol=udp dst-port=53 
add chain=Local-Input-All in-interface=ether5.3 protocol=tcp dst-port=22,8291 
# Local-Input-All <--

# Forward -->
add chain=forward connection-state=established 
add chain=forward connection-state=related 
add chain=forward connection-state=invalid action=drop
add chain=forward in-interface=ether5.2 action=jump jump-target=Forward-from-ether5.2
add chain=forward in-interface=ether5.3 action=jump jump-target=Forward-from-ether5.3
add chain=forward in-interface=ether5.4 action=jump jump-target=Forward-from-ether5.4
add chain=forward in-interface=ether5.5 action=jump jump-target=Forward-from-ether5.5
add chain=forward in-interface=ether5.6 action=jump jump-target=Forward-from-ether5.6
add chain=forward action=drop
# Forward <--

# Forward-from-ether5.6 -->
add chain=Forward-from-ether5.6 out-interface-list=ISP 
# Forward-from-ether5.6 <--

# Forward-from-ether5.5 -->
add chain=Forward-from-ether5.5 protocol=icmp
add chain=Forward-from-ether5.5 src-address=192.168.5.2 dst-address-list=voip.provider protocol=udp dst-port=5060
add chain=Forward-from-ether5.5 src-address=192.168.5.2 dst-address-list=voip.provider protocol=tcp dst-port=5060
add chain=Forward-from-ether5.5 src-address-list=ActiveDirectoryServers out-interface=ether5.2 
add chain=Forward-from-ether5.5 src-address-list=ActiveDirectoryServers out-interface-list=ISP protocol=udp dst-port=53
# Forward-from-ether5.5 <--

# Forward-from-ether5.4 -->
add chain=Forward-from-ether5.4 dst-address=192.168.5.2 protocol=udp dst-port=69 comment="TFTP"
add chain=Forward-from-ether5.4 dst-address=192.168.5.2 protocol=udp dst-port=5060 comment="SIP"
add chain=Forward-from-ether5.4 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=53 comment="DNS"
add chain=Forward-from-ether5.4 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=123 comment="NTP"
add chain=Forward-from-ether5.4 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=636 comment="LDAP BOOK"
add chain=Forward-from-ether5.4 dst-address=192.168.5.4 protocol=udp dst-port=514 comment="LOG"
# Forward-from-ether5.4 <--

# Forward-from-ether5.3 -->
add chain=Forward-from-ether5.3 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=53 comment="DNS"
add chain=Forward-from-ether5.3 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=123 comment="NTP"
add chain=Forward-from-ether5.3 dst-address=192.168.5.4 protocol=udp dst-port=514 comment="LOG"
# Forward-from-ether5.3 <--

# Forward-from-ether5.2 -->
add chain=Forward-from-ether5.2 out-interface-list=ISP
add chain=Forward-from-ether5.2 src-address-list=PCadmins
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=icmp
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=445 comment="AD-SMB"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=123 comment="AD-W32Time"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=464 comment="AD-Kerberos password change"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=389 comment="AD-LDAP"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=53 comment="AD-DNS"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=udp dst-port=88 comment="AD-Kerberos"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=135 comment="AD-RPC Endpoint Mapper"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=464 comment="AD-Kerberos password change"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=389 comment="AD-LDAP"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=636 comment="AD-LDAP SSL"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=3268 comment="AD-LDAP GC"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=3269 comment="AD-LDAP GC SSL"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=53 comment="AD-DNS"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=49152-65535 comment="AD-RPC for LSA, SAM,NetLogon, FRS, DFSR"
add chain=Forward-from-ether5.2 dst-address-list=ActiveDirectoryServers protocol=tcp dst-port=88 comment="AD-Kerberos"
# Forward-from-ether5.2 <--

Если что-то забыл, не серчайте, пишите в группу в телеге или в ВК, обязательно поправим.

Поделиться

Обсуждение