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
Стоп!!! Стоп!!! Стоп
А вы не заметили, что мы начали создавать по сути одинаковые правила, для разных интерфейсов, мне кажется или это “перебор”?! А вам?
Мне лично не кажется это перебором, всё зависит от ситуации, но в большинстве случаев я лучше сделаю больше правил и всегда будут знать, какой трафик проходит по каким цепочкам.
Настройка MikroTik
Закажи настройку MikroTik непосредственно сейчас, поможем в поиске решения по любому кейсу связанному с MikroTik.
Предоставляю гарантию две недели на свою работу, оплата постфактум, работаю как с юридическими, так и физическими лицами.
Собственно на данном этапе мы разрешили пакеты, которые связаны с уже установленными
соединениями и пакеты которые идут мимо 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
.
- ether5.2 - сеть, где находятся компьютеры пользователей.
- ether5.3 - management vlan, сеть где находятся различные управляющие IP интерфейсы оборудования принадлежащий сетевой инфраструктуре.
- ether5.4 - VoIP здесь находятся телефонные аппараты.
- ether5.5 - серверная сеть, сюда входят все сервера, в том числе сервер телефонии PBX, файловая помойка и etc…
- ether5.6 - гостевой wifi.
Прежде чем начать нам необходимо выбрать концепцию либо стиль, каким образом будет строиться общий подход к формированию правил и на какой параметр мы будем ориентироваться в первую очередь. Очень часто я вижу предложения “делать как получится”, что в дальнейшем приводит к раздуванию объема правил в фаервола и дальнейшим неудобством его контроля.
Конечно всё зависит от задачи и поставленного ТЗ, но так как мы с вами работаем без ТЗ =), то делать будет по-простому, а именно ориентироваться в наших правилах, на пакет которые пришёл с определённого интерфейса.
Создадим пять правил
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 для телефонов, а также у нас есть несколько важных\нужный серверов.
- 192.168.5.2 - pbx\provision
- 192.168.5.3 - Active Directory\DNS\NTP
- 192.168.5.5 - Active Directory\DNS\NTP
- 192.168.5.4 - SYSLOG
Создадим адрес лист чтобы не плодить сущности
/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 <--
Если что-то забыл, не серчайте, пишите в группу в телеге или в ВК, обязательно поправим.
Поделиться
Обсуждение
Лицензия
Текст данной статьи распространяется под общедоступной лицензией CC BY-NC-ND 4.0, ознакомиться с тектом лицензии вы можете на данной странице.