Настройка 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 еще раз проверяем, и убеждаемся, что правил больше нет.
Рис. 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, мы можем проверить, что все правила у нас верны.
Рис. 2.
Так же, все правила можно посмотреть в графическом интерфейсе в разделе IP — Firewall на вкладке Filter Rules
Рис. 3.
И, как я обещал ранее, для приверженцев графического интерфейса, можно добавить все правила через него. Так как привала зависимы от их порядка в списке, то добавлять их надо точно в таком же порядке как они описаны. Делается это так:
В разделе меню IP — Firewall на вкладке Filter Rules, добавляем новое правило красной кнопкой + в левом верхнем углу окна.
Для примера я возьму первое правило:
add chain=input protocol=icmp action=accept comment=”Allow Ping”
В открывшемся окне, на вкладке General, мы выбираем цепочку Chain input, а протокол, Protocol icmp.
Рис. 4.
Переходим на вкладку Action, где в поле Action выбираем acept.
Рис. 5.
И если нужно добавить комментарий, то нажимаем в правой части окна кнопку Comment и добавляем необходимый комментарий.
Рис. 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
Копируем этот скрипт, переходим в раздел меню System — Scripts, добавляем новый скрипт, нажимаем кнопку Apply, а затем кнопку Run Script. Всё! Готово!
После этого, окно скрипта можно закрыть, а сам скрипт удалить. Наши правила созданы.
Рис. 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 дома и в офисе. И дома и в офисе одни и те же проблемы. Провайдеры разные.
Источник: