Базовая настройка защиты роутера MikroTik: настройка устройства, настройка сетевого экрана, защита от сканирования портов, защита от подбора пароля.
? В статье даны примеры команд в терминале MikroTik. Если при вставке команды в терминал, происходит автоматическая вставка команд (при выполнении вы получаете ошибку bad command name или expected end of command), нажмите сочетание Ctrl+V, чтобы отключить эту возможность.
Содержание
- Пользователи
- Сервисы
- Обновление
- Интерфейсы
- Соседи
- Межсетевой экран
Статья на других языках:
?? — MikroTik Protection (basic device security setting)
?? — Protección MikroTik (configuración básica de seguridad del dispositivo)
?? — MikroTik Protection (paramètre de sécurité de base de l’appareil)
?? — MikroTik-Schutz (grundlegende Geräte Sicherheitseinstellung)
?? — MikroTik Protection (basisinstelling apparaatbeveiliging)
Пользователи
Создайте нового пользователя с уникальным именем и удалите встроенную учетную запись системного пользователя по умолчанию — admin.
[System] -> [Users]
Не используйте простые имена пользователя, пароль должен соответствовать требованиям безопасности.
Если доступ к устройству имеют несколько пользователей, вы можете более подробно задать права выбранному пользователю. Создайте новую группу и определите права пользователей этой группы.
[System] -> [Users] -> [Groups] -> [+]
Сервисы
Отключить неиспользуемые сервисы
Отключаем сервисы MikroTik, которые не планируем использовать.
[IP] -> [Services]
- api, порт 8728 — если не используем API доступ, отключаем;
- api-ssl, порт 8729 — если не используем API доступ с сертификатом, отключаем;
- ftp, порт 21 — если не используем FTP доступ, отключаем;
- ssh, порт 22 — если не используем SSH доступ, отключаем;
- telnet, порт 23 — если не используем Telnet доступ, отключаем;
- www, порт 80 — если не используем доступ через Web браузер (http), отключаем;
- www-ssl, порт 443 — если не используем доступ через Web браузер (https), отключаем.
Изменить порт Winbox
Измените номер порта Winbox по умолчанию — 8291, на другой, свободный номер порта — Port (в примере порт 30122).
[IP] -> [Services] -> [winbox: port=Port]
При изменении порта, следите чтобы не назначить Winbox порт используемый другой службой, список — здесь.
Обновление
В оборудовании MikroTik (как и в оборудовании других сетевых вендоров) периодически находят уязвимости — своевременное выполнение обновлений необходимая мера для обеспечения безопасности устройства.
[System] -> [Packages] -> [Check for updates] -> [Check for updates]
Если обновление версии будет найдено, выполните обновление устройства.
? Скрипт Проверка обновления RouterOS, пришлет уведомление о выходе новой версии прошивки.
Интерфейсы
Объединим внутренние (доверенные) и внешние (недоверенные) интерфейсы в списки, для удобства дальнейшего управления.
Список «Внутренние интерфейсы»
Помещаем в этот список интерфейсы локальной сети, VPN подключения и т.д.
[Interfaces] -> [Interfaces] -> [Interface List] -> [Lists] -> [+] -> [Name=InternalInterfaces, Comment="Trusted network interfaces (internal, clients vpn, etc)."]
или:
/interface list add name=InternalInterfaces comment="Trusted network interfaces (internal, clients vpn, etc)."
Список «Внешние интерфейсы»
Помещаем в этот список внешние интерфейсы (интернет и т.д.).
[Interfaces] -> [Interfaces] -> [Interface List] -> [Lists] -> [+] -> [Name=ExternalInterfaces, Comment="Untrusted network interfaces (internet, external etc)."]
или:
/interface list add name=ExternalInterfaces comment="Untrusted network interfaces (internet, external etc)."
Соседи
Настроим обнаружение устройства используя Neighbor Discovery только для внутренних интерфейсов или разрешенных интерфейсов.
Разрешаем обнаружение только с интерфейсов перечисленных в списке InternalInterfaces.
[IP] -> [Neighbor] -> [Discovery Settings] -> [interface=InternalInterfaces]
или:
/ip neighbor discovery-settings set discover-interface-list=InternalInterfaces
Межсетевой экран
Настраиваем ограничения доступа к роутеру и устройствам сети с помощью межсетевого экрана MikroTik.
⚠️ Перед добавлением ограничивающих правил — включите Безопасный режим MikroTik!
Разрешить установленные и связанные соединения
Правило «Trusted» — разрешаем уже установленные и связанные подключения, для снижения нагрузки на центральный процессор роутера.
[IP] -> [Firewall] -> [Filter Rules] -> [+] -> [General: Chain=input, Connection state=established,related; Action: Action=accept; Comment="Rule #0 "Trusted": allow established, related connections."]
или:
/ip firewall filter add action=accept chain=input connection-state=established,related comment="Rule #0 \"Trusted\": allow established, related connections."
Помещаем правило первым в списке Filter Rules (поместите правило ориентируясь на его номер в комментарии).
Отбросить недействительные пакеты
Правило «Drop Invalid Packet» — отбрасывает недействительные пакеты.
[IP] -> [Firewall] -> [Filter Rules] -> [+] -> [General: Chain=input, Connection state=invalid; Action: Action=drop; Comment="Chain: Input. Rule #1 "Drop Invalid Packet": drop packets connection state: invalid."]
или:
/ip firewall filter add chain=input action=drop connection-state=invalid comment="Chain: Input. Rule #1 \"Drop Invalid Packet\": drop packets connection state: invalid."
Помещаем правило после правила Trusted, в списке Filter Rules (поместите правило ориентируясь на его номер в комментарии).
Разрешить ICMP
Правило «ICMP» — разрешает ICMP трафик на устройство.
[IP] -> [Firewall] -> [Filter Rules] -> [+] -> [General: Chain=input, Protocol=icmp; Action: Action=accept; Comment="Chain: Input. Rule #3 "ICMP": accept icmp packets."]
или:
/ip firewall filter add chain=input protocol=icmp action=accept comment="Chain: Input. Rule #3 \"ICMP\": accept icmp packets."
Поместите правило ориентируясь на его номер в комментарии.
Черный список
Создать список
Создаем список BlackList, в который будем помещать IP адреса, которым по какой-то причине запрещен доступ к MikroTik или защищаемым устройствам.
[IP] -> [Firewall] -> [Address Lists] -> [Name: BlackList, Comment="Deny access to the router and local network, from IP addresses from this list."]
или:
/ip firewall address-list add list=BlackList comment="Deny access to the router and local network, from IP addresses from this list."
Создать правило
Создадим правило «BlackList» отклоняющее запросы от IP адресов из списка BlackList.
Для экономии ресурсов центрального процессора, запрещающее правило разместим в таблице Prerouting.
[IP] -> [Firewall] -> [Raw] -> [+] -> [General: Chain=prerouting; Advanced: Src. Address List=BlackList ; Action: drop; Comment="Rule #10 "BlackList": reject the connection with a device from the Blacklist."]
или:
/ip firewall raw add chain=prerouting src-address-list=BlackList action=drop comment="Rule #10 \"BlackList\": reject the connection with a device from the Blacklist."
⚠️ Правила размещенные в Prerouting выполняются до разделения трафика на цепочки Input и Forward!
Поместите правило по его номеру в комментарии.
На скриншоте видно дополнительные правила:
- Блокировка рекламы на сайтах
Блокировка сканеров портов
Правило превентивной блокировки — блокируем ботов/пользователей сканирующих порты устройств в интернете, для поиска уязвимостей. Составим список не используемых портов нашим роутером, внесем в BlackList IP адреса устройств, кто пытается обратиться к указанным портам.
Для защиты от сканеров, которые целенаправленно ищут устройства MikroTik — добавим в список неиспользуемые порты (сервисы MikroTik) и стандартный порт Winbox 8291 (который мы сменили по рекомендации). Добавим популярные уязвимые порты роутеров (если злоумышленник проверяет на роутере данные порты, полностью заблокируем ему доступ).
Применять правило будем только для новых соединений.
TCP порты ловушки
- 20 — FTP-DATA;
- 21 — FTP (если не используете загрузку файлов на роутер через FTP);
- 22 — SSH (если не используете управление роутером через SSH);
- 23 — Telnet (если не используете Telnet подключение к роутеру);
- 25 — SMTP;
- 53 — DNS (если ваш роутер не является DNS сервером для клиентов из интернета);
- 80 — HTTP (если не используете управление MikroTik через браузер);
- 110 — POP3;
- 161 — SNMP (если не используете удаленный мониторинг);
- 443 — HTTPS (если не используете управление MikroTik через браузер);
- 445 — MICROSOFT-DS;
- 3306 — MS SQL;
- 3128 — Squid;
- 3333 — Network Caller ID server;
- 3389 — Microsoft Terminal Server (RDP);
- 7547 — TR-069 (если не используете протокол управления CWMP);
- 8291 — Winbox (порт по умолчанию);
- 8080 — 8082 — Web прокси (если не используете Web Proxy MikroTik).
Создать правило
Помещаем IP адрес недоверенного устройства в BlackList, на 10 часов:
/ip firewall filter add action=add-src-to-address-list address-list=BlackList address-list-timeout=10h chain=input protocol=tcp connection-state=new dst-port=20-25,80,110,161,443,445,3128,3306,3333,3389,7547,8291,8080-8082 comment="Rule #1 \"Block TCP port scanning\": add a device scanning an unused port to BlackList."
Разместите правило, ориентируясь на его номер в комментарии.
? За 10 часов в BlackList находится около 500 IP адресов выполняющих попытки сканировать «уязвимые порты» роутера MikroTik.
Разрешим порт Winbox
Правило «Winbox» — разрешаем подключение на порт Winbox (в примере — 30122).
[IP] -> [Firewall] -> [Filter Rules] -> [+] -> [General: Chain=input, Protocol=tcp, Dst. Port=30122; Action: Action=accept; Comment="Chain: Input. Rule #10 "Winbox": accept Winbox port connections."]
или:
/ip firewall filter add chain=input protocol=tcp dst-port=30122 action=accept comment="Chain: Input. Rule #10 \"Winbox\": accept Winbox port connections."
Поместите правило ориентируясь на его номер в комментарии.
Сбрасываем неразрешенные соединения
Правило «Drop all» — отбросим все соединения, которые не были разрешены раньше и не входят в список доверенных (внутренних) интерфейсов (InternalInterfaces).
[IP] -> [Firewall] -> [Filter Rules] -> [+] -> [General: Chain=input, In. Interface List=[!]InternalInterfaces; Action: Action=drop; Comment="Chain: Input. Rule #15 "Drop All": drop_all packets that do not meet the early conditions, except from trusted interfaces."]
или:
/ip firewall filter add action=drop chain=input in-interface-list=!InternalInterfaces comment="Chain: Input. Rule #15 \"Drop All\": drop_all packets that do not meet the early conditions, except from trusted interfaces."
Поместите правило на последнюю позицию в правилах Firewall Filter Rules.
Блокируем Bruteforce
Правило «Bruteforce» — поместим IP адрес устройства в BlackList, при повторной неудачной попытке авторизации на устройстве.
При неудачной попытке авторизации MikroTik отправляет ответ с текстом «invalid user name or password» запросившему устройству.
Помещаем IP адрес устройства в BlackList, на 70 минут.
[IP] -> [Firewall] -> [Raw] -> [+] -> [General: Chain=output; Advanced: Content="invalid user name or password"; Action: Action=add-dst-to-address-list; Address List=BlackList, Timeout=01:10:00; Comment="Rule #15 "Bruteforce": add a device performing unsuccessful authorization to BlackList."]
или:
/ip firewall raw add chain=output content="invalid user name or password" action=add-dst-to-address-list address-list=BlackList address-list-timeout=1h10m comment="Rule #15 \"Bruteforce\": add a device performing unsuccessful authorization to BlackList."
? Защита MikroTik — базовая настройка безопасности, обсуждалось в этой статье. Я надеюсь, что теперь вы смогли настроить сервисы роутера и правила файрволла, улучшив защиту роутера MikroTik и устройств локальной сети. Однако, если вы столкнетесь с каким-то проблемами при настройке, не стесняйтесь написать в комментариях. Я постараюсь помочь.
Ограничение доступа к тем или иным ресурсам сети интернет на основе списков достаточно популярный способ фильтрации, несмотря на его недостатки. Действительно, в большинстве случаев требуется заблокировать достаточно небольшой список ресурсов, скажем, соцсети, с чем данный метод вполне успешно справляется. В данной статье мы поговорим о том, как настроить фильтрацию по спискам на роутерах Mikrotik, тем более что RouterOS предоставляет нам для этого достаточно широкие возможности.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Прежде всего поговорим об особенностях фильтрации в условиях современного интернета. Основной тенденцией последних лет является массовый переход на протокол HTTPS. Что это означает? В отличие от HTTP, который передает данные открытым текстом, HTTPS использует SSL-шифрование и все, что мы можем увидеть для такого соединения — это домен назначения. Какие именно страницы посещает пользователь на указанном домене и какие данные оттуда передаются мы видеть не можем.
Из этого следует, что мы не можем блокировать отдельные страницы, но можем заблокировать домен целиком. Для большинства сценариев этого вполне достаточно. Но здесь нас подстерегает другая неприятность, многие сайты используют CDN (Content Delivery Network, сеть доставки контента), такие как CloudFlare и заблокировав нужный вам сайт вы можете также ограничить доступ к большому количеству сторонних ресурсов. Что из этого может выйти все мы видели во время ковровых блокировок РКН против Телеграм.
Также следует понимать, что блокировка посредством черных списков применима лишь к небольшому числу ресурсов, например, популярные соцсети, попытка таким образом фильтровать весь нежелательный трафик выливается в необходимость постоянной актуализации списков и может привести к высокой нагрузке на оборудование. Для таких целей лучше использовать специализированные сервисы.
Другой вариант — белые списки, при всей видимой простоте и надежности, сталкиваются с другой проблемой. Многие сайты активно используют внешние ресурсы, с которых подгружают скрипты, шрифты, стили и т.д. и т.п. и некоторые из них могут являться критичными для обеспечения полноценной работы. Также могут возникнуть проблемы с HTTPS, если браузер не сможет проверить статус SSL-сертификата. Все это потребует грамотного анализа и добавления в белый список всех тех узлов, которые необходимы для нормальной работы каждого из разрешенных сайтов.
Создаем списки
Для настройки фильтрации нам понадобятся минимум два списка: список доменов и список пользователей. С доменами понятно, это те сайты, к которым мы хотим запретить доступ или, наоборот, разрешить. Создаются такие списки просто: IP — Firewall — Address Lists где добавляем новый адрес, в поле Name вписываем имя листа, если это первая запись, либо выбираем его из выпадающего списка. В поле Address указываем IP-адрес или доменное имя ресурса, при указании доменного имени в список будут внесены все IP-адреса сайта, и они будут обновляться с периодичностью указанной в TTL домена.
В нашем случае мы добавили домен yandex.ru в список WL (whitelist, белый список). Обратите внимание, что адреса www.example.com и example.com — это разные доменные имена, которые могут иметь разные IP-адреса (в целях балансировки нагрузки) и поэтому следует добавлять оба варианта (или проверять что между ними нет расхождений).
В командной строке это же действие можно выполнить так:
/ip firewall address-list
add address=yandex.ru list=WL
Таких списков мы можем создать сколько нам нужно, причем один и тот же адрес может входить сразу в несколько списков. Это удобно, если нужно обеспечить для разных групп пользователей доступ к разному набору сайтов. В итоге у вас должно получиться примерно следующее:
В данном примере реализовано два списка: WL — белый список и BL — черный список. Обычно в реальной жизни используется что-то одно, в нашем случае создание данных списков обусловлено сугубо учебными целями.
С доменами разобрались, остались пользователи. Существуют две политики применения правил: разрешено всем, кроме группы пользователей и запрещено всем, кроме группы пользователей. В любом случае у нас имеется группа пользователей, которая либо подвергается ограничениям, либо выводится из-под их действия. В грамотно спроектированной системе такая группа должна являться меньшинством, что обеспечит минимальную нагрузку на сетевое оборудование.
Также вспомним, что в руках у нас роутер, т.е. устройство, работающее на сетевом уровне (L3), а значит основные параметры, с которыми он может работать — это адрес источника и адрес назначения. Адрес назначения — это домен, выше мы его уже разобрали. Адрес источника — это как раз пользователь, точнее — сетевое устройство пользователя. В самом простом случае мы можем создать еще один список и добавить туда IP-адреса нужных устройств.
Но на практике адреса раздаются сервером DHCP, это не проблема, создаем резервирование IP-адреса, для чего следует перейти в IP — DHCP-Server — Leases и открыв запись нужного адреса нажать Make Static.
После чего закрываем и снова открываем запись и в поле Address List вводим, если это первая запись, или выбираем имя списка, куда будет добавлен IP-адрес данного компьютера, в нашем случае это список USER.
Либо через командную строку:
/ip dhcp-server lease
add address=192.168.186.199 address-lists=USER mac-address=00:0C:29:B4:D0:05 server=dhcp1
Таким образом мы получаем список пользователей, либо несколько списков, в которых указанные адреса будут находиться до тех пор, пока на сервере активно резервирование.
Черный список
Начнем с самого простого сценария — черного списка. Сначала настроим вариант, когда такой список применяется ко всем пользователям, кроме членов списка USER. Для этого перейдем в IP — Firewall — Filter Rules и создадим новое правило. На закладке General укажем Chain — forward и In. Interface — bridge1:
На закладке Advanced указываем Src. Address List — USER и ставим перед ним восклицательный знак (символ инверсии правила), что будет означать кроме входящих в группу. В поле Dst. Address List указываем BL — т.е. наш черный список доменов.
И наконец на закладке Action указываем действие, обычно везде в интернете указывают drop, хорошо, укажем и мы.
Данное правило должно располагаться самым первым в цепочке FORWARD, выше FastTrack.
Теперь попробуем посетить запрещенный сайт:
Страничка не грузится, однако браузер не понимает в чем дело и продолжает попытки ее грузить (т.е. в заголовке вкладки постоянно крутится колесико), это нагружает ресурсы ПК и не вносит ясности пользователю. Так происходит из-за того, что мы просто убиваем пакеты — действие drop, и отправитель не понимает почему нет ответа. Поэтому для внутренних ресурсов лучше использовать действие reject, которое отправляет назад пакет с сообщением что ресурс недоступен.
После замены действия при повторной попытке посетить ресурс мы сразу увидим сообщение о его недоступности:
Быстро добавить правило через командную строку можно так:
/ip firewall filter
add action=reject chain=forward dst-address-list=BL in-interface=bridge1 reject-with=icmp-network-unreachable src-address-list=!USER
Теперь немного изменим задачу, применим черный список только к группе USER. Для этого немного изменим условия на закладке Advanced, а именно укажем Src. Address List — USER без восклицательного знака, в итоге условие будет читаться как: если источник в группе USER и назначение в группе BL.
Или в командной строке:
/ip firewall filter
add action=reject chain=forward dst-address-list=BL in-interface=bridge1 reject-with=icmp-network-unreachable src-address-list=USER
Таким образом фильтрация по черным спискам не представляет особых сложностей. Все упирается в эти самые списки, которые нужно составлять и поддерживать в актуальном состоянии. Загрузить в роутер готовые списки из интернета также не очень хорошая идея, потому как каждый пакет будет проверяться на вхождение в список, что может вызвать серьезную нагрузку на роутер, при том, что подавляющее большинство адресов из этого списка ваши пользователи могут никогда не посещать. Поэтому следует трезво оценивать собственные ресурсы и возможности и применять списки там, где это действительно нужно.
Белые списки
На первый взгляд организация доступа в сеть по белым спискам ничем принципиально не отличается от черных, однако это не так, выше мы уже говорили почему и далее покажем это на примерах. А пока реализуем схему с доступом по белым спискам для всех, кроме группы USER.
Снова перейдем в IP — Firewall — Filter Rules и создадим новое правило. На закладке General также укажем Chain — forward и In. Interface — bridge1 , на Advanced указываем Src. Address List — !USER и Dst. Address List — !WL:
И на закладке Action указываем действие reject. Таким образом данное правило будет блокировать все соединения, если адрес отправителя не входит в группу USER и адрес назначения не входит в белый список WL.
Аналогичное действие через консоль:
/ip firewall filter
add action=reject chain=forward dst-address-list=!WL in-interface=bridge1 reject-with=icmp-network-unreachable src-address-list=!USER
Данное правило также следует располагать первым в цепочке FORWARD.
Добавим к разрешенным несколько адресов, в нашем случае yandex.ru и interface31.ru и попробуем открыть один их них. Яндекс открывается, но выглядит довольно непривычно.
Многие картинки, которые располагаются на иных серверах, включая сервера самого Яндекса, но имеющего другие IP-адреса просто не подгружаются. Хотя никаких фатальных последствий это не несет, как поисковик Яндекс работает. А вот в почту войти уже не получится, для этого придется разрешить как минимум mail.yandex.ru и passport.yandex.ru.
Теперь попробуем открыть наш сайт. А вот тут первый неприятный сюрприз:
Что это значит? Браузер не может проверить подлинность сертификата, а так как наш сайт использует HSTS, то доступ к нему будет невозможен, потому как подобные действия могут указывать на атаку с понижением степени защиты, чему HSTS должен препятствовать.
Для того, чтобы браузер смог проверить сертификат нам нужно разрешить доступ к сведениям центра сертификации, адреса нужных узлов можно найти в самом сертификате сайта:
В нашем случае оказалось достаточно добавить узел ocsp.int-x3.letsencrypt.org, сайт загрузился, но без комментариев, так как они реализованы на стороннем ресурсе и разрешение доступа к нему не решило проблемы. В этом случае вам придется либо заниматься долгим и кропотливым выяснением необходимых для работы ресурсов и занесением их в белый список, либо отказываться от части функционала сайтов.
Чтобы применить белый список только к участникам группы немного изменим правило: в Adwanced указываем Src. Address List — USER, т.е. без восклицательного знака. Теперь логика правила изменится и будут блокироваться все соединения для группы USER, кроме тех, которые разрешены белым списком.
Либо в командной строке:
/ip firewall filter
add action=reject chain=forward dst-address-list=!WL in-interface=bridge1 reject-with=icmp-network-unreachable src-address-list=USER
Как видим, технически организовать доступ по белым спискам не так уж сложно, гораздо сложнее обеспечить полноценную работу разрешенных сайтов, что требует достаточно долгой и кропотливой работы по выявлению и добавлению в список связанных ресурсов.
Layer 7 protocol
Layer 7 protocol — это методика поиска определенных вхождений в ICMP/TCP/UDP потоках при помощи регулярных выражений. На первый взгляд достаточно интересная возможность, существенно расширяющая степень контроля над проходящим трафиком, но есть один существенный недостаток. Как уже понятно из названия, данный вид фильтрации работает на прикладном (L7) уровне, т.е. полностью обрабатывается CPU и даже при небольшом количестве правил способен создать сильную нагрузку на оборудование, особенно старые (не ARM) модели.
Использовать L7 для блокировки сайтов не рекомендуют сами разработчики Mikrotik, справедливо замечая, что в большинстве случаев это не будет работать так, как задумано, но при этом вы будете впустую растрачивать вычислительные ресурсы роутера. На наш взгляд использовать L7 для задач, связанных с доступом к сайтам вообще бессмысленно. Современный трафик в подавляющем большинстве шифрованный и различного рода конструкции для анализа URL просто не будут работать, а управлять доступом на основе доменного имени вполне можно и на L3 (чем мы занимались выше).
По этой же самой причине не будут работать многие размещенные в интернете инструкции, где трафик фильтровался по содержимому, типам файлов или потоков, использовал параметры запросов и т.д. и т.п. Хотя мы до сих пор встречаем статьи, в которых по L7 пытаются блокировать соцсети или Youtube, мотивируя это большим числом адресов, использованием CDN, поддоменов и т.д. и т.п. Однако все это не выдерживает никакой критики, соцсети и видеохостинги прекрасно блокируются по доменному имени.
Мы не рекомендуем использовать L7 во всех тех случаях, когда задачу можно решить иным образом, применяя его только для решения специфичных задач. Например, выявления и блокировки какого-либо вида трафика.
Поставим для примера следующую задачу: заблокировать возможность установления SSH-соединений для клиентов сети. Решение в лоб — заблокировать исходящие соединения на 22 порт не принесет успеха, так как SSH-сервер может работать на произвольном порту. Поэтому нужно при помощи специальных паттернов определить наличие именно SSH-трафика и каким-то образом его блокировать.
Где брать паттерны? Опытные пользователи могут запустить сетевой сканер (tcpdump, Wireshark) и проанализировать доступное содержимое пакетов и на основании полученной информации составить регулярное выражение. Либо воспользоваться сайтом l7-filter.sourceforge.net, однако большая часть паттернов оттуда работать не будет. Во-первых, сайт достаточно старый, последний раз обновлялся в 2009 году, во-вторых, очень многие протоколы перестали использоваться в открытом виде, а используют SSL-шифрование. В этом случае вы просто увидите SSL-поток, блокировать который бессмысленно, так как вы заблокируете практически весь интернет.
Для решения нашей задачи сначала перейдем в IP — Firewall — Layer 7 protocol и создадим новый фильтр: в поле Name напишем произвольное имя, в нашем случае SSH, а в поле Regexp внесем регулярное выражение паттерна:
^ssh-[12]\.[0-9]
Также можно выполнить команду в терминале:
/ip firewall layer7-protocol
add name=SSH regexp="^ssh-[12]\\.[0-9]"
Что делать дальше? Самое очевидное решение — использовать данный фильтр в правилах брандмауэра является примером того, как делать не надо. В этом случае через L7 фильтр будет проходить каждый пакет, что вызовет сильную нагрузку на CPU роутера.
Поэтому мы пойдем другим путем и на основании L7 фильтра будем маркировать соединения, которых гораздо меньше, чем пакетов. Перейдем в IP — Firewall — Mangle и создадим новое правило: на закладке General выставляем Chain — prerouting, Protocol — tcp и Сonnection Mark — no mark:
На закладке Advanced указываем использование созданного нами фильтра Layer 7 Protocol — SSH:
В Action указываем действие mark-connection, задаем марку соединения New Connection Mark — SSH-CONN и обязательно ставим флаг Passthrough для прохождения пакета далее по цепочке:
Затем добавим еще одно правило: General — Chain — prerouting, Protocol — tcp и Connection Mark — SSH-CONN:
А в действиях добавим mark packet, New Packet Mark — SSH-PCK и снимем флаг Passthrough:
Все тоже самое быстро делается в командной строке:
/ip firewall mangle
add action=mark-connection chain=prerouting connection-mark=no-mark layer7-protocol=SSH new-connection-mark=SSH-CONN passthrough=yes protocol=tcp
add action=mark-packet chain=prerouting connection-mark=SSH-CONN new-packet-mark=SSH-PCK passthrough=no protocol=tcp
Многие читатели не работают с брандмауэром дальше таблицы Filter, поэтому что, что мы сейчас сделали в Mangle может показаться им какой-то особой магией. Коротко поясним наши действия. Первое правило проверяет все немаркированные соединения и те из них, которые сосуществуют фильтру L7, т.е. SSH-соединения получают метку SSH-CONN и продолжают движение по цепочке. Следующее правило проверяет соединения и все пакеты соединений, промаркированных как SSH-CONN снабжает меткой SSH-PCK.
Таким образом мы пометили все пакеты, относящиеся к SSH-соединениям, но L7 фильтр мы используем только для соединений, не нагружая роутер проверкой каждого пакета. Теперь запретим транзит таких пакетов, для этого вернемся в IP — Firewall — Filter Rules и создадим правило, на закладке General которого укажем: Chain — forward, Рrotocol — tcp, In Interface — bridge1 и Packet Mark — SSH-PCK:
На закладке Action ставим действие drop. То же самое в консоли:
/ip firewall filter
add action=drop chain=forward in-interface=bridge1 packet-mark=SSH-PCK protocol=tcp
Ставим это правило также в начало цепочки FORWARD и если вы все сделали правильно, то установить SSH-соединение из вашей сети больше никому не удастся.
Следует понимать, что выше был лишь пример того, как можно использовать Layer 7 protocol на Mikrotik, в реальной ситуации следует несколько раз подумать и прибегать к возможностям L7 только тогда, когда все остальные варианты исчерпаны. Также старайтесь как можно более подробно описывать условия, для правил использующих L7 фильтры, чтобы максимально уменьшить нагрузку на процессор роутера.
Фильтрация по MAC-адресам
Наши читатели с завидным постоянством спрашивают нас как можно организовать фильтрацию по MAC-адресам. Мы уже говорили и повторим еще раз, что считаем такую фильтрацию не самым оптимальным способом, потому что для идентификации следует использовать более высокоуровневые параметры: пользователя или IP-адрес. Но если сильно хочется, то почему бы и нет.
Среди условий в правилах брандмауэра есть опция MAC-адреса, но в одном правиле можно указать только один адрес, т.е. для каждого MAC вам придется создать свою копию правила, что увеличит нагрузку на устройство и сделает набор правил трудночитаемым.
В тоже время MAC-адрес нам нужен для одной единственной цели — идентифицировать пользователя, что мы также можем сделать и по IP-адресу, для этого нам нужно будет преобразовать MAC в IP, который уже можно добавить в один из списков и использовать представленные нами выше правила. В этом нам снова поможет таблица Mangle.
Откроем IP — Firewall — Mangle и добавим правило, на закладке General укажем Chain — prerouting, In Interface — bridge1, на Advanced в поле Src. MAC Address укажем MAC-адрес нужного устройства.
И на закладке Action добавим действие add src to address list, где в поле Address List укажем требуемый список пользователей, в нашем случае USER, а в поле Timeout укажите требуемое время жизни записи, это нужно для того, чтобы запись обновилась при смене обладателем MAC IP-адреса. На скриншоте мы, в тестовых целях, использовали 5 секунд, в реальной жизни руководствуйтесь здравым смыслом и выбирайте более высокие значения.
Это же правило в командной строке:
/ip firewall mangle
add action=add-src-to-address-list address-list=USER address-list-timeout=5s chain=prerouting in-interface=bridge1 src-mac-address=00:0C:29:B9:FF:2E
Теперь первый пришедший с данного устройства пакет добавит его IP-адрес в указанный нами список, тем самым связав его с текущим MAC на время указанное в Timeout. Для каждого следующего устройства необходимо создать подобное правило, также не забывайте снабжать каждое из них комментарием, чтобы впоследствии вам и вашим коллегам было понятно о каком именно устройстве идет речь.
Заключение
Как видим возможности RouterOS позволяют решать достаточно сложные задачи используя даже недорогие роутеры. Но следует понимать ограничения всех вышеперечисленных методов, осознавая их достоинства и недостатки. А также соотносить свои требования с возможностями оборудования. Если понимать и принимать во внимание эти факторы, то фильтрация по спискам на Mikrotik будет эффективным инструментом в руках администратора. В противном случае вы получите только разочарование и иные негативные последствия. Поэтому пожелаем вам благоразумия и напомним: хороший администратор выбирает для каждой задачи наиболее подходящий инструмент, что является признаком профессионализма. А фанатизм еще никого до добра не доводил.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Firewall на микротик состоит из следующих составляющих, это цепочки (chain) и действия в этих цепочках (Action), а также различные фильтры к трафику который обрабатывается в цепочках.
Нужно разобраться с MikroTik, но не определились с чего начать? В курсе «Настройка оборудования MikroTik» все по порядку. Подойдет и для начала работы с этим оборудованием, и для того, чтобы систематизировать знания. Это видеокурс из 162 уроков и 45 лабораторных работ, построен на официальной программе MTCNA. Проходить можно, когда удобно и пересматривать по необходимости – материалы курса выдаются бессрочно. Также есть 30 дней на личные консультации с автором. На пробу выдают 25 уроков бесплатно, заказать их можно на странице курса.
Содержание
- Firewall Chain
- FirewallAction
- Фильтрация в firewall
- Примеры настройкиfirewall
Firewall Chain
В Mikrotik существуют следующие цепочки
Input – цепочка для обработки пакетов поступающих на маршрутизатор, имеющих в качестве адреса назначение ip самого маршрутизатора.
Forward – в этой цепочки обрабатываются пакеты проходящие через маршрутизатор
Output – цепочка для обработки пакетов созданных маршрутизатором, например когда мы с маршрутизатора пингуем или подключаемся по telnet
Из описания понятно, что для защиты маршрутизатора нужно использовать цепочку input. А для обработки трафика от пользователей и к пользователям использовать chain forward. Использование Output мне не приходилось.
Firewall Action
В цепочках можно осуществлять следующие действия
Параметр | Действие |
Accept | Разрешить |
add-dst-to-address-list | Добавить ip назначение в список адресов указанный в Address List |
add-src-to-address-list | Добавить ip источника в список адресов указанный в Address List |
Drop | запретить |
fasttrack-connection | Обрабатывать пакеты включив FastTrack т.е пакеты будут проходить по самому быстрому маршруту, минуя остальные правила firewall и обработку в очередях |
Jump | Прыжок, переход на другую цепочку заданную в Jump target |
log | Запись в лог |
passthrough | Перейти к следующему правилу не делая никаких действий(полезно для сбора статистики) |
Reject | Отбить пакет с причиной указанной в Reject with |
Return | Вернуть пакет в цепочку из который он пришел |
tarpit | захватывает и поддерживает TCP-соединения (отвечает с SYN / ACK на входящий пакет TCP SYN) |
Фильтрация пакетов которые могут попасть в цепочки может осуществляться по
Src.Address – адрес источника
Dst.Address – адрес назначения
Protocol – Протокол(TCP, UDP и т.д)
Src.Port – порт источника
Dst.Port –порт назначения
In.Interface –входящий интерфейс
Out.Interface – исходящий интерфейс
Packet.Mark – метка пакета
Connection.Mark –метка соединения
Routing Mark – метка маршрута
Roting table — адрес получателя которых разрешен в конкретной таблице маршрутизации
Connection Type – тип соединения
Connection State — состояние соединения (установлено, новое и т.д)
Connection NAT State – цепочка NAT (srcnat, dstnat)
Примеры настройки firewall
Рассмотрим некоторые примеры по настройки firewall на маршрутизаторе микротик.
Настройка безопасности Микротик
Для начала настроим безопасность на наше маршрутизаторе, Для этого сделаем следующие
1.Запретим пинговать наше устройство
2.Запретим доступ к микротику всем кроме локальной сети и разрешенных ip адресов
Для настройки подключаемся к роутеру с помощью утилиты winbox и идем в меню IP-Firewall. Вкладка Filter Rules и нажимаем добавить.
Запрещаем пинги на наше устройство, для этого, на вкладке general, chain выбираем input protocol icmp
На вкладке Action выбираем drop
Запрещаем доступ к управлению маршрутизатора. Для начала создаем лист с нашими разрешенными адресами, переходим в IP-Firewall, вкладка Address Lists, добавляем новый лист
Name – название нашего листа
Address – адреса относящиеся к этому листу, можно указывать как отдельные адреса так и сети.
Дальше создаем новое правило, снова переходим в Filter rules и добавляем его
Затем переходим на вкладку Advanced и в качестве Src. List выбираем созданный лист
В действии Action выбираем разрешить accept.
Можно было не создавать лист, а на вкладке General в параметре Src. Address прописать нашу сеть, просто мне удобнее работать со списками адресов, в будущем для добавления нового адреса нужно его просто добавить в лист allow_ip.
Следующим шагом запрещаем все входящие соединения. Добавляем правило на chain input, и в действии ставим drop. Должно получится следующие
Здесь следует отметить что обработка правил идет сверху вниз, т.е правило запрещающее все подключения должно находится внизу, иначе разрешающие правила не сработают.
Для того что бы поменять местами правило, нужно кликнуть по строке и с зажатой левой кнопкой мыши перетащить его на нужное место.
На самом деле, правило по запрете ping можно было не создавать, т.к последнее правило блокирует все попытки доступа к роутеру, в том числе и пинг.
Доступ пользователей в интернет
Допустим нам нужно дать доступ в интернет только для определенной сети. Для этого создаем два разрешающих правила в chain forward. Первое правило разрешает исходящий трафик из нашей сети
Action ставим accept. Можно как указать Src. Address, так и использовать Address Lists, как мы это делали выше. Следующим правилом разрешаем прохождение пакетов в нашу сеть.
B следующим правилом запрещаем все остальные сети,
Action выбираем drop. В результате получится следующее
Запрет доступа пользователя в интернет
Если нам нужно запретить доступ в интернет определенным пользователям, давайте сделаем это через Address Lists, что бы в дальнейшем проще было добавлять или удалять правила, переходим на вкладку address Lists и создаем список block в который добавим адреса для блокировки.
Создаем запрещающее правило firewall в chain forward, в котором на вкладке Advanced в Src. Address List выбираем наш список для блокировки
В Action выбираем Drop. Теперь, наше правило нужно поставить выше разрешающего правила, иначе оно не сработает, как это сделать я писал выше, в результате получится следующая картина
Аналогично можно запретить доступ к внешним ресурсам, так же создаем список для блокировки, но в настройка firewall уже указываем его в качестве Dst. Address List. Кроме ip адреса в список можно вносить и доменные имена, например если мы хотим запретить доступ пользователей в соцсети, одноклассники или вконтакте.
Доступ только к сайтам
В следующим примере рассмотрим как разрешить пользователям выход в интернет только по 80 и 443 порту и запретить все остальные, для этого создадим разрешающее правило в chain forward, Protocol выбираем tcp и в параметре Dst.Prort указываем разрешенные порты
Тоже самое можно сделать с помощью запрещающего правила, используя оператор отрицания «!», а Action установить drop
Это означает, запретит все порты кроме 80 и 443.
Конечно, все возможности firewall на микротик я показать не смогу, но основные параметры думаю понятны.
Внимание! при настройке firewall на MikroTIK, настоятельно рекомендую проводить их в «Safe Mode» как ее включить описано здесь, в противном случае вы рискуете потерять доступ к маршрутизатору.
Обучающий курс по настройке MikroTik
Нужно разобраться с MikroTik, но не определились с чего начать? В курсе «Настройка оборудования MikroTik» все по порядку. Подойдет и для начала работы с этим оборудованием, и для того, чтобы систематизировать знания. Это видеокурс из 162 уроков и 45 лабораторных работ, построен на официальной программе MTCNA. Проходить можно, когда удобно и пересматривать по необходимости – материалы курса выдаются бессрочно. Также есть 30 дней на личные консультации с автором. На пробу выдают 25 уроков бесплатно, заказать их можно на странице курса.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Настроить 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!
Время на прочтение
8 мин
Количество просмотров 29K
Подготовленный ранее цикл статей, посвященный организации безопасности сетей, построенных на оборудовании MikroTik, вызвал определенный интерес у сообщества. В процессе обсуждения представленного материала стало понятно, что у некоторых пользователей подобное оборудование установлено дома (не удивительно, ведь сама простая модель стоит всего 1500 рублей), в связи с чем решено подготовить отдельный материал, посвященный возможностям RouterOS по организации родительского контроля. Поговорим о различных подходах, настройках, сопрягаемых решениях, касающихся предметной области.
Материалы поделены на две статьи. В первой части подробно рассмотрим организацию функционирования DNS, поговорим о работе с проходящим через маршрутизатор трафиком на L3 уровне посредством Firewall Filter и связанного с ним Ip Kid-control. Во второй части статьи подробно рассмотрим прикладное применение маркировки трафика посредством Firewall Mangle и сделаем выводы, касающиеся возможностей оборудования MikroTik по организации родительского контроля. Что-то новое никому не известное материалы статьи не раскрывают, но при этом показывают прикладное применение различных сетевых настроек, и решение поставленной задачи.
▍ 1. Настройка DNS
Определим имеющиеся условия. Роутер MikroTik подключен к интернет провайдеру, работает NAT, раздается сеть Wi-Fi, которой пользуются все члены семьи. Классическое домашнее решение. Первое, с чего следует начать, это с указания настроек для DNS сервера маршрутизатора:
/ip dns set allow-remote-requests=yes servers=77.88.8.7,77.88.8.3
В примере указаны, так называемые, семейные общедоступные сервера от Яндекса, которые должны «фильтровать» часть взрослого контента. На самом деле, там полно всего, чего бы многие предпочли не показывать детям. На рынке существуют более гибкие платные настраиваемые под себя решения, такие как Skydns и другие. Они имеют личные кабинеты, в которых выполняются необходимые настройки. Всего 500 рублей в год, очень даже адекватная стоимость.
Чтобы заданные на клиентах статические DNS сервера не смогли отработать (хотя вряд ли дети смогут сделать что-то подобное), редиректим все DNS запросы на маршрутизатор:
/ip firewall nat
add action=redirect chain=dstnat comment="Redirect DNS in NAT" dst-port=53 protocol=udp src-address=10.0.0.0/24 to-ports=53
Гипотетическим минусом использования платных DNS серверов является факт передачи открытой привязанной к себе (или членам семьи) информации третьим лицам, тем же DNS провайдерам. Поэтому идем дальше. Будем использовать общедоступные DNS сервера, при этом для не благонадежных сайтов установим статические записи прямо на MikroTik:
/ip dns static add address=127.0.0.1 regexp=\\\\*example\\.com\$
Как видно из примера, запросы на сайты вида example.com, other.example.com, abrakatabra.example.com (субдомены) будут направлены на localhost, другими словами, в никуда. Команда для очистки кеш DNS сервера, если что:
/ip dns cache flush
Подготовим простейшую html страничку заглушку для родительского контроля:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Родительский контроль</title>
</head>
<body>
<h1>Заблокировано!</h1>
</body>
</html>
Чтобы ее демонстрировать при попытках перехода детей на контент, запрещенный родителями, нужно развернуть web сервер. Сделать это на MikroTik, конечно, заманчиво. Скажу сразу, что пытаться прикручивать сюда работу Hotspot – это плохая идея, потому что он предназначен для других целей и не нужно городить огород. Как вариант, можно воспользоваться технологией виртуального роутера от MikroTik (/metarouter). Как это сделать ранее рассмотрено на Хабре. Однако есть минимальные требования к аппаратной части вашего роутера: процессор mips или ppc, наличие свободных 48Мб оперативной памяти и 24Мб на диске. А это уже не устройства для дома, и 1500 рублями здесь не отделаешься. Поэтому рекомендую посмотреть в сторону одноплатника Raspberry Pi или VDS всего за 130 рублей в месяц:
Вынести страницу заглушку на внешний сервер – это отличная идея, ведь всегда его можно использовать и под другие задачи, а также никаких проблем с электричеством и вписыванием железа в семейный интерьер. Устанавливаем web сервер:
apt install apache2
a2enmod ssl
mkdir -p /var/www/example.com/
chown www-data:www-data /var/www/example.com/
Сюда кладем нашу HTML заглушку => /var/www/example.com/index.html
nano /etc/apache2/sites-available/example.com.conf
<VirtualHost *:443>
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /root/example.com.crt
SSLCertificateKeyFile /root/example.com.key
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/example.com/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
a2ensite example.com.conf
a2dissite 000-default.conf
systemctl restart apache2
Запросы к web серверу на любые домены отправляем на нашу страницу заглушку (<VirtualHost *:443 / 80>), при этом запросы по HTTPS редиректим на HTTP. Сертификат используем невалидный (или самоподписанный), о чем, конечно, браузер будет нас настойчиво уведомлять:
Теперь необходимо составить список сайтов, которые подлежат родительской блокировке. Начнем логировать все DNS запросы прямо на RouterOS (пропускаем мимо содержание пакетов):
/system logging action add name=DNS target=memory
/system logging add action=DNS topics=dns,!packet
Логи можно собирать и обрабатывать на удаленном устройстве, например на VDS при помощи Graylog. Данный вопрос уже раскрыт ранее. Для того, чтобы все остальные члены семьи, в том числе телевизор, не попадал под контроль, следует настроить на маршрутизаторе следующие действия:
1) В DHCP сервере статически закрепить IP адреса за детскими устройствами:
/ip dhcp-server lease
add address=10.0.0.254 client-id=1:11:22:33:cc:bb:aa mac-address=11:22:33:cc:bb:aa server=server_home
add address=10.0.0.253 client-id=1:22:33:44:cc:ba:aa mac-address=22:33:44:cc:ba:aa server=server_home
Или так:
/ip dhcp-server lease make-static numbers=1
/ip dhcp-server lease make-static numbers=2
2) Собрать полученные IP адреса в один address-list:
/ip firewall address-list
add address=10.0.0.254 list=children
add address=10.0.0.253 list=children
3) Указать в DHCP сервере общедоступные DNS (предварительно отключив описанное выше правило /ip firewall nat add action=redirect…):
/ip dhcp-server network
add address=10.0.0.0/24 dns-server=77.88.8.8,77.88.8.1 gateway=10.0.0.1 netmask=24
4) Перехватывать DNS запросы от детских устройств и натировать соответственно:
/ip firewall nat
add action=dst-nat chain=dstnat comment="DST-NAT Children to localDnsServer" dst-port=53 protocol=udp src-address-list=children to-addresses=10.0.0.1
Теперь представим, что у нас есть еще дача, на которой необходимо так же иметь родительский контроль, кроме этого родственники с детьми, друзья, коллеги, которые просят сделать им аналогичные сервисы. Тогда уже есть смысл вынести DNS сервер с MikroTik на VDS, IP адрес которого использовать на различных устройствах. Настраиваем необходимый софт:
apt install bind9 dnsutils
nano /etc/bind/named.conf.options
options {
interface-interval 0;
version none;
recursion yes;
forwarders { 77.88.8.7; 77.88.8.3; };
allow-query { 127.0.0.1; 192.168.15.0/24 };
};
Имеем ввиду, что зоны, которые не обслуживаются нашим сервером, будут рекурсивно запрошены у forwarders. Таким образом, ваш сервер может быть задействован в DDOS атаках, когда боты найдут IP вашего VDS и начнут постоянно запрашивать ANY DNS записи для атакуемого ресурса. Или обратная вариация, когда запрашиваться будут значительные легитимные ANY DNS записи, а в качестве источника запроса указываться IP адрес атакуемого ресурса (DNS Amplification Attack). Поэтому рекомендую ограничить запросы только с VPN сетки 192.168.15.0/24 (или пула IP вашего провайдера хотя бы).
Далее настраиваем зоны, которые будем «глушить»:
nano /etc/bind/named.conf.local
zone "example.com" {
type master;
file "/etc/bind/db.example.com ";
};
nano /etc/bind/db.example.com
$TTL 360
$ORIGIN example.com.
@ IN SOA example.com. admin.example.com. (
1 ; Serial
1d ; Refresh
1h ; Retry
1w ; Expire
2h ; Negative Cache TTL
)
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
@ IN A IP VDS сервера
ns1.example.com. IN A IP VDS сервера
ns2.example.com. IN A IP VDS сервера
* IN A IP VDS сервера
Разумеется, сюда же на VDS переедет и web сервер с HTML заглушкой. Настраиваем логирование DNS запросов, чтобы можно было их анализировать и дополнять блокируемые зоны:
nano /etc/apparmor.d/usr.sbin.named
/var/log/bind9/** rw,
/var/log/bind9/ rw,
systemctl restart apparmor
mkdir /var/log/bind9
chown bind:bind /var/log/bind9/
nano /etc/bind/named.conf
logging {
channel my_file {
file "/var/log/bind9/bind.log" versions 3 size 100m;
severity info;
print-time yes;
print-category yes;
print-severity yes;
};
category default { my_file; };
category queries { my_file; };
category lame-servers { null; };
};
systemctl restart bind9
tail /var/log/bind9/bind.log -F
Лог будет выглядеть примерно так:
14-Oct-2021 00:10:52.237 queries: info: client @0xb3785670 192.168.1.8#37426 (example.com): query: example.com IN A + (192.168.1.9)
14-Oct-2021 00:10:52.243 queries: info: client @0xb3785670 192.168.1.8#33533 (example.com): query: example.com IN AAAA + (192.168.1.9)
Здесь мы настроили Bind9 — наиболее распространенный DNS сервер. Конечно, он должен работать как минимум в паре, так называемые master и slave. Однако MikroTik разрешает работать только с одним сервером.
Если зон будет много, тогда есть смысл выбрать более мощное виртуальное устройство. Сейчас это стоит не больших денег. В результате получается что-то вроде нашего собственного частно-коллективного решения, которое можно обкрутить web интерфейсом, внутренней логикой и после этого даже попытаться монетизировать )).
▍ 2. Firewall Filter
Теперь вернемся к нашему MikroTik и покажем, как еще можно ограничить трафик. В дело вступает Firewall. RouterOS позволяет динамически создавать address-list по доменному имени:
/ip firewall address-list
add address=youtube.com list=Block_site_by_dns_name
add address=vk.com list=Block_site_by_dns_name
add address=www.youtube.com list=Block_site_by_dns_name
Доменные имена автоматически разрезолвятся в IP адреса:
/ip firewall address-list print
Flags: X - disabled, D - dynamic
# LIST ADDRESS CREATION-TIME TIMEOUT
3 Block_site_by_dns_name youtube.com oct/10/2021 22:25:51
5 Block_site_by_dns_name vk.com oct/10/2021 22:26:40
6 D ;;; vk.com
Block_site_by_dns_name 87.240.190.72 oct/10/2021 22:26:40
7 D ;;; vk.com
Block_site_by_dns_name 87.240.190.78 oct/10/2021 22:26:40
8 D ;;; vk.com
Block_site_by_dns_name 87.240.190.67 oct/10/2021 22:26:40
9 D ;;; vk.com
Block_site_by_dns_name 93.186.225.208 oct/10/2021 22:26:40
10 D ;;; vk.com
Block_site_by_dns_name 87.240.139.194 oct/10/2021 22:26:40
11 D ;;; vk.com
Block_site_by_dns_name 87.240.137.158 oct/10/2021 22:26:40
12 D ;;; youtube.com
Block_site_by_dns_name 173.194.221.91 oct/10/2021 22:36:53
13 D ;;; youtube.com
Block_site_by_dns_name 173.194.221.136 oct/10/2021 22:36:53
14 D ;;; youtube.com
Block_site_by_dns_name 173.194.221.93 oct/10/2021 22:36:53
15 D ;;; youtube.com
Block_site_by_dns_name 173.194.221.190 oct/10/2021 22:36:53
Ну и далее просто блокируем весь не угодный трафик на L3:
/ip firewall filter
add action=accept chain=input comment="Accept established,related" connection-state=established,related
add action=drop chain=input comment="Drop invalid" connection-state=invalid
add action=accept chain=forward comment="Accept established,related" connection-state=established,related
add action=drop chain=forward comment="Drop invalid" connection-state=invalid
add action=drop chain=forward comment=Drop_sites_by_address_list dst-address-list=Block_site_by_dns_name
Первые правила перед блокировкой важны. Они разгружают ваш маршрутизатор, так как установленные и связанные с ними соединения не будут обрабатываться всеми правилами Firewall.
▍ 3. Kid-control
В самом конце данной статьи расскажу про имеющееся в RouterOS готовое решение Kid-control. Его функционал позволяет удобно автоматизировать то, что можно всегда сделать скриптами. Добавляем по MAC адресам в /ip kid-control device
все детские устройства:
/ip dhcp-server lease print
Flags: X - disabled, R - radius, D - dynamic, B - blocked
# ADDRESS MAC-ADDRESS HOST-NAME SERVER RATE-LIMIT STATUS LAST-SEEN
0 D 10.0.0.253 AA:BB:11:22:33:44 LittleFood server_... bound 21m2s
/ip kid-control device add mac-address=AA:BB:11:22:33:44 name=Pasha_Iphone user=Pasha
После этого задаем поведенческие правила для работы детского интернета: в какой день недели ему работать и ограничения по скорости.
/ip kid-control add name=Pasha
В результате RouterOS создаст динамические правила в Firewall Filter:
/ip firewall filter print
Flags: X - disabled, I - invalid, D - dynamic
0 D ;;; Pasha_Iphone, kid-control
chain=forward action=reject dst-address=10.0.0.253
Вот и весть /ip kid-control
от RouterOS, по мне так полная скука.
▍ 4. Подведем промежуточные итоги
Представленные возможности уже позволяют ограничить трафик, проходящий через ваш маршрутизатор. Но RouterOS на этом еще не заканчивается. Самое интересное будет в следующей части статьи. Там же будут сделаны общие выводы по комплексной технической организации родительского контроля на оборудовании MikroTik.