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

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

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

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

Итак, начнём. Нам необходимо задать ряд правил для цепочек input (входящий в роутер трафик) и forward (проходящий через роутер трафик). Для этого мы подключаемся к нашему роутеру и переходим в раздел IP — Firewall при помощи команды

[admin@MikroTik] ip firewall filter

И командой print проверяем, есть ли у нас какие-то правила. Если есть, то нам сперва нужно их удалить, для этого используем команду

[admin@MikroTik] /ip firewall filter remove numbers=0,1,2,3,4

где numbers=0,1,2,3,4, это номера наших правил.

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

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

Рис. 1.

Теперь приступим к созданию новых правил для Firewall. Не покидая раздел /ip firewall filter задаём следующие правила:

Разрешаем пинг для цепочек input и forward, командами:

add chain=input protocol=icmp action=accept comment=”Allow Ping”

add chain=forward protocol=icmp action=accept

Разрешаем успешно установленные соединения для цепочек input и forward, командами:

add chain=input connection-state=established action=accept comment=”Accept established connections”

add chain=forward connection-state=established action=accept

Разрешаем родственные соединения для цепочек input и forward, командами:

add chain=input connection-state=related action=accept comment=”Accept related connections”

add chain=forward connection-state=related action=accept

Запрещаем недействительные соединения для цепочек input и forward, командами:

add chain=input connection-state=invalid action=drop comment=”Drop invalid connections”

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

Разрешаем UDP протокол для цепочек input и forward, командами:

add chain=input protocol=udp action=accept comment=”Allow UDP”

add chain=forward protocol=udp action=accept

add chain=forward src-address=192.168.0.0/24 in-interface=ether2 action=accept comment=”Access to Internet from local network”

мы разрешаем выход в интернет, для нашей локально сети. Только вместо 192.168.0.0/24 вы должны указать префикс именно вашей локальной сети. А вместо ether2, интерфейс, к которому у вас подключена локальная сеть. В случае, когда вы подключаетесь к провайдеру по протоколу PPPoE или любому другому туннельному протоколу (VPN), вместо имени физического порта, нужно указывать имя вашего подключения, например pppoe-out1.

Ещё одним правилом, мы ограничиваем доступ к нашему роутеру, только адресами нашей локально сети:

add chain=input src-address=192.168.0.0/24 action=accept comment=”Access to Mikrotik only from our local network”

Здесь, как и в предыдущем случае, вместо 192.168.0.0/24, вы должны указать реальный префикс именно вашей локально сети.

Последние два правила запрещают прохождение всех остальных пакетов:

add chain=input action=drop comment=”All other drop”

add chain=forward action=drop

После чего, уже знакомой нам командой print, мы можем проверить, что все правила у нас верны.

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

Рис. 2.

Так же, все правила можно посмотреть в графическом интерфейсе в разделе IPFirewall на вкладке Filter Rules

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

Рис. 3.

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

В разделе меню IPFirewall на вкладке Filter Rules, добавляем новое правило красной кнопкой + в левом верхнем углу окна.

Для примера я возьму первое правило:

add chain=input protocol=icmp action=accept comment=”Allow Ping”

В открывшемся окне, на вкладке General, мы выбираем цепочку Chain input, а протокол, Protocol icmp.

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

Рис. 4.

Переходим на вкладку Action, где в поле Action выбираем acept.

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

Рис. 5.

И если нужно добавить комментарий, то нажимаем в правой части окна кнопку Comment и добавляем необходимый комментарий.

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

Рис. 6.

После чего сохраняем правило.

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

Однако, есть ещё и способ для ленивых. Все эти правила, можно добавить одним действием при помощи скрипта. Вот этот скрипт:

# ip firewall filter rules add

/ip firewall filter

add chain=input protocol=icmp action=accept comment=”Allow Ping”

add chain=forward protocol=icmp action=accept

add chain=input connection-state=established action=accept comment=”Accept established connections”

add chain=forward connection-state=established action=accept

add chain=input connection-state=related action=accept comment=”Accept related connections”

add chain=forward connection-state=related action=accept

add chain=input connection-state=invalid action=drop comment=”Drop invalid connections”

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

add chain=input protocol=udp action=accept comment=”Allow UDP”

add chain=forward protocol=udp action=accept

add chain=forward src-address=192.168.0.0/24 in-interface=ether2 action=accept comment=”Access to Internet from local network”

add chain=input src-address=192.168.0.0/24 action=accept comment=”Access to Mikrotik only from our local network”

add chain=input action=drop comment=”All other drop”

add chain=forward action=drop

Копируем этот скрипт, переходим в раздел меню SystemScripts, добавляем новый скрипт, нажимаем кнопку Apply, а затем кнопку Run Script. Всё! Готово!

После этого, окно скрипта можно закрыть, а сам скрипт удалить. Наши правила созданы.

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

Рис. 7.

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

Алексей специально для asp24

Если Вы нашли ошибку в тексте, то выделите ее мышкой и нажмите Ctrl + Enter или нажмите здесь.

Большое спасибо за Вашу помощь! Мы скоро исправим ошибку!

Сообщение не было отправлено. Пожалуйста, попробуйте еще раз.

Сообщение об ошибке

Ваш комментарий (не обязательно):

Об авторе Aleksej

45 Comments

Пересмотрите правило
add chain=forward src-address=192.168.0.0/24 in-interface=ether2 action=accept comment=”Access to Internet from local network”
и коментарий к нему. Если ether2, интерфейс, к которому у вас подключен провайдер, оговаривать в правиле следует out-interface

Всё верно. В таком виде, как сейчас приведено в статье, интернет в локальной сети работать не будет, т.к. попадёт под действие последнего правила.

Там ошибочка в тексте…
Не “А вместо ether2, интерфейс, к которому у вас подключен провайдер.”
А надо “А вместо ether2, интерфейс, к которому у вас подключена локальная сеть.”

Такая ситуация у меня на 1,2,3,4 порту висит по компу, если я из строки add chain=forward src-address=192.168.0.0/24 in-interface=ether2 action=accept comment=”Access to Internet from local network” уберу команду in-interface=ether2, то они все смогут выходить в интернет? или же так не стоит делать?

Так делать не стоит.
Нужно сперва в свойствах каждого порта, кроме 1, выбрать Master: ether1.
После чего, возле 2, 3 и 4 порта, должна появиться буква S в списке интерфейсов. Теперь можешь смело указывать in-interface=ether1 и это будет верно для всех четырех портов.

Вместо создания Master-Slave можно порты 2,3,4 объединить в bridge и его указать в качестве интерфейса in-interface=bridge-local

Програмний міст працюватиме значно повільніше ніж апаратний свіч

Сделал как сказал Михаил, но если убрать парметр “in-interface=*******” то тоже все работает, почему не стоит опускать этот параметр, ведь я всеравно указываю свою подсеть(src-address=192.168.0.0/24)?

А вместо ether2, интерфейс, к которому у вас подключена локальная сеть. В случае, когда вы подключаетесь к провайдеру по протоколу PPPoE или любому другому туннельному протоколу (VPN), вместо имени физического порта, нужно указывать имя вашего подключения, например pppoe-out1.

Не пойму, при чем здесь тип подключения к провайдеру, сначала речь идет о ether2, который локальный, а потом рекомендуется указать pppoe-out1. Разъясните пожалуйста, никак не врублюсь.

Здравствуйте, нужна помощь.
Мне для работы IPTV надо добавить следующие правила (как пишет провайдер)
1: chain=input action=accept protocol=igmp
2: chain=forward action=accept protocol=udp dst-port=1234
но в каком порядке очереди я бы их не ставил, IPTV работает только пару минут после перезагрузки роутера, потом обрубается. Подскажите может мне надо добавить еще какие нибудь правила и в каком порядке в очереди они должны стоять? Привила только ваши 13 и эти 2 для IPTV ничего лишнего.

возможно у вас правила для IPTV идут после запрещающих?

Михаил, а где правило chain=input action=accept protocol=udp dst-port=1234 ?

Отвечу сам себе… Проблема была в том, что на одном из компьютеров стояла Windows 7 сборки “сервер”, месяц выяснял в чем проблема, да и уж точно не ожидал, что проблема в программном обеспечении одного из компьютеров сети.

Есть у меня в фильтре

0 chain=input action=drop protocol=tcp src-address=0.0.0.0/0 in-interface=pppoe-out1 dst-port=!53
1 chain=input action=drop protocol=udp src-address=0.0.0.0/0 in-interface=pppoe-out1 dst-port=!53

То есть, у меня блокируется всё по тцп и удп на входящий интерфейс пппое, кроме порта 53. Верно?

Я вот не понимаю иерархии правил фаервола. У меня вроде всё заблокировано, но те порты, которые прописаны в нате на проброс на локальные машины доступны из-вне все равно, не смотря на “полное” правило блокировки в фильтрест. То есть получается что все что не прописано в натах блокируется этим правилом?

Как в правилах по статье открыть PPTP? Добавлено выше всех правил после разрешения ICMP:
chain=input action=accept protocol=tcp dst-port=1723
chain=input action=accept protocol=gre
На ether2 включен proxy-arp, пинги ходят, доступа к машинам в локальной сети нет. PPTP-сервер настроен так: http://asp24.com.ua/blog/nastrojka-pptp-server-mikrotik/

А рабочая группа совпадает?

пробовал и по ip или даже банально по рдп попробовать зайти на машину никак.

Петя, в mikrotik первыми выполняюстя правила в NATe, а потом уже в firewall

Добрый день,
Мне нужно ограничить доступ к порту 22 только для 5 ИП адресов.
Как я могу это сделать?
Спасибо!

Поясню.
Я 22 порт прокидаю через микротик на свой линукс сервер. И хочу извне подключатся только с определенных ИП. Как можно это сделать? Спасибо!

IP в лист Addresses List, с именем, типа “22-block”.
Потом правило

chain=forward dst-address-list=22-block protocol=tcp dst-port=22 action=block

А… тогда:
dst-address-list!=22-block

Что-то я туплю под вечер…
action=drop

как запретить определенному ip все кроме тим вивер и обновления для антивируса аваст ?

Ствтья требует доработки. Тут если выше инпут и форвард эстаблишед разрешены туда и обратно. то какой смысл этиъ правил:

add chain=forward src-address=192.168.0.0/24 in-interface=ether2 action=accept comment=”Access to Internet from local network”

add chain=input src-address=192.168.0.0/24 action=accept comment=”Access to Mikrotik only from our local network”

ведь порядок правил никто не отменял. Не знай какой у Вас версии а у меня 6.22

Прекрасний стандартний фаервол, Но если создать PPPoE и в ети правила добавить
6 chain=input action=accept protocol=tcp dst-port=1723 log=no log-prefix=”

7 chain=input action=accept protocol=gre log=no log-prefix=”"

то правило15
15 X chain=forward action=drop log=no log-prefix=”"
вступает в конфликт когда есть две внутрение сети например 192.168.1.х и 11.11.11.х когда из интернета внешний впн конектится к роутеру, к сети примеру 11.11.11.х(где сервер) пропадает у всех коннект с сети 192.168.1.х а у удаленних он и не появляется а они получают тоже 11,11,11,х.
Как правильно в даном случае настроить правило forward? Правило просто запарковано.
Большое спасибо за статью.

Алексей, большое спасибо за статью!
Все доступно и понятно даже для таких новичков, как я.

Разбираюсь с вашим набором правил для firewall:
/ip firewall filter

add chain=input protocol=icmp action=accept comment=”Allow Ping”

add chain=forward protocol=icmp action=accept

add chain=input connection-state=established action=accept comment=”Accept established connections”

add chain=forward connection-state=established action=accept

add chain=input connection-state=related action=accept comment=”Accept related connections”

add chain=forward connection-state=related action=accept

add chain=input connection-state=invalid action=drop comment=”Drop invalid connections”

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

add chain=input protocol=udp action=accept comment=”Allow UDP”

add chain=forward protocol=udp action=accept

add chain=forward src-address=192.168.0.0/24 in-interface=ether2 action=accept comment=”Access to Internet from local network”

add chain=input src-address=192.168.0.0/24 action=accept comment=”Access to Mikrotik only from our local network”

add chain=input action=drop comment=”All other drop”

add chain=forward action=drop

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

Cпасибо за статью. Но никак не могу разобраться с возникшими чудесами, может быть поможете? У меня CRS109-8G-1S-2HnD-iN, вроде бы сделал все по Вашей инструкции, но видно, где-то накосячил и ни как не могу найти где. Настройки получаю от провайдера, все, что подключено проводами работает ОК, интернет есть. Проблема с wifi подключением сетевое подключение есть, сам виден и сетевые ресурсы видит и доступ к ним имеет, но с интернетом, какая-то фигня. В браузере страницу не показывает ни по ip ни по домену, при этом внешний IP (например 81.19.93.5 – rambler.ru) без проблем с этого компа пингуется. Кроме того, по RDP c этом компа удается совершенно нормально подключить к удаленному (не локальному) серверу, а вот с отображением web-страниц засада При подключении этого компьютера через wifi к другим сетям (или просто при замене роутера на не Микротик) таких проблем нет Может подскажете, в каком направлении посмотреть, а то уже мозг кипит, а решения нет.. (

У вас очень похоже на проблему с mtu, нужно уменьшать его значение через mangle

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

Александр, вопрос к Вам.

Микрот crs12524g1srm. Доступ в интернет. Внешний айпи статика.

вот нат:
add action=masquerade chain=srcnat out-interface=wan
add action=dst-nat chain=dstnat dst-port=5000 protocol=tcp to-addresses=\
192.168.1.199 to-ports=5000
add action=dst-nat chain=dstnat dst-port=5001 protocol=tcp to-addresses=\
192.168.1.200 to-ports=5001
add action=dst-nat chain=dstnat dst-port=111 protocol=tcp to-addresses=\
192.168.1.199 to-ports=111
add action=dst-nat chain=dstnat dst-port=2049 protocol=tcp to-addresses=\
192.168.1.199 to-ports=2049
add action=dst-nat chain=dstnat dst-port=892 protocol=tcp to-addresses=\
192.168.1.199 to-ports=892
add action=dst-nat chain=dstnat dst-port=19998 protocol=tcp to-addresses=\
192.168.1.199 to-ports=19998
add action=dst-nat chain=dstnat dst-port=1723 protocol=tcp to-addresses=\
192.168.1.199 to-ports=1723
add action=dst-nat chain=dstnat dst-port=548 protocol=tcp to-addresses=\
192.168.1.199 to-ports=548
add action=dst-nat chain=dstnat dst-port=8000 protocol=tcp to-addresses=\
192.168.1.249 to-ports=8000
add action=dst-nat chain=dstnat dst-port=554 protocol=tcp to-addresses=\
192.168.1.249 to-ports=554
add action=dst-nat chain=dstnat dst-port=801 protocol=tcp to-addresses=\
192.168.1.11 to-ports=80
add action=dst-nat chain=dstnat dst-port=802 protocol=tcp to-addresses=\
192.168.1.12 to-ports=80
add action=dst-nat chain=dstnat dst-port=803 protocol=tcp to-addresses=\
192.168.1.13 to-ports=80

Описание проблемы, их две:
1. Внутри серой локальной сети 192.168.1.0 есть регистратор видеокамер айпи, производство Hikvision. Как видно из процитированного ната, все требуемые ему порты (8000 и 554) прописаны, и регистратор ВИДЕН из мира, равно как и из локальной сети (смотрится видео живое или воспроизведение с помощью утилиты для IOS). НО! В другой сети, за роутером другого производителя, стоит точно такой же регистратор. При просмотре камер из-вне, то есть, например, с сотового провайдера через 3g, видны ОБА регистратора, все работает как часы.
Но стоит мне подключиться телефоном по вайфай во внутреннюю сеть офиса, как я перестаю видеть ВНЕШНИЙ регистратор. При этом, если я выключаю в НАТе правила для внутреннего регистратора, то я сразу начинаю видеть внешний, удаленный (локальный при этом перестает быть виден из мира это логично, проброс портов-то отключен).
То есть мой диагноз таков при включенных правилах НАТа для регистратора роутер перехватывает пакеты, идущие по таким же портам, и засовывает их на порты локального регистратора. Как отучить его от такого пиратства и отжима?:-)
2. андроид приставка к телевизору, на которой смотрятся фильмы через софтину fs.to. Приставка подключена по вифи, внутренний адрес, разумеется. После загрузки роутера минут 15 все работает, после чего софт прекращает поиск и демонстрацию фильмов, выдавая сообщение о проблемах с доступом к интернету. При этом, на этой же приставке продолжает работать ютюб. Проверено на другой приставке другого типа но с тем же софтом это не проблема одного устройства.

Забегая назад, после обнаружения подобных проблем я вернул старый роутер (Linksys e4200), все работает.
Забегая вперед у меня два роутера crs12524g1srm дома и в офисе. И дома и в офисе одни и те же проблемы. Провайдеры разные.


Источник: asp24.com.ua