Микротик как попасть с заблокированным фаерволл
Перейти к содержимому

Микротик как попасть с заблокированным фаерволл

Настройка firewall на mikrotik

Firewall на микротик состоит из следующих составляющих, это цепочки (chain) и действия в этих цепочках (Action), а также различные фильтры к трафику который обрабатывается в цепочках.

Нужно разобраться с MikroTik, но не определились с чего начать? В курсе «Настройка оборудования MikroTik» все по порядку. Подойдет и для начала работы с этим оборудованием, и для того, чтобы систематизировать знания. Это видеокурс из 162 уроков и 45 лабораторных работ, построен на официальной программе MTCNA. Проходить можно, когда удобно и пересматривать по необходимости – материалы курса выдаются бессрочно. Также есть 30 дней на личные консультации с автором. На пробу выдают 25 уроков бесплатно, заказать их можно на странице курса.

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)

Фильтрация в firewall

Фильтрация пакетов которые могут попасть в цепочки может осуществляться по

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.

Защита MikroTik (базовая настройка безопасности устройств)

Базовая настройка защиты роутера MikroTik: настройка устройства, настройка сетевого экрана, защита от сканирования портов, защита от подбора пароля.

�� В статье даны примеры команд в терминале MikroTik. Если при вставке команды в терминал, происходит автоматическая вставка команд (при выполнении вы получаете ошибку bad command name или expected end of command), нажмите сочетание Ctrl+V, чтобы отключить эту возможность.

Содержание

Пользователи

Создайте нового пользователя с уникальным именем и удалите встроенную учетную запись системного пользователя по умолчанию — admin.

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

Если доступ к устройству имеют несколько пользователей, вы можете более подробно задать права выбранному пользователю. Создайте новую группу и определите права пользователей этой группы.

Сервисы

Отключить неиспользуемые сервисы

Отключаем сервисы MikroTik, которые не планируем использовать.

  • 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).

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

MikroTik отключение неиспользуемых сервисов и изменение порта Winbox

Обновление

В оборудовании MikroTik (как и в оборудовании других сетевых вендоров) периодически находят уязвимости — своевременное выполнение обновлений необходимая мера для обеспечения безопасности устройства.

Если обновление версии будет найдено, выполните обновление устройства.

�� Скрипт Проверка обновления RouterOS, пришлет уведомление о выходе новой версии прошивки.

Интерфейсы

Объединим внутренние (доверенные) и внешние (недоверенные) интерфейсы в списки, для удобства дальнейшего управления.

Список «Внутренние интерфейсы»

Помещаем в этот список интерфейсы локальной сети, VPN подключения и т.д.

Список «Внешние интерфейсы»

Помещаем в этот список внешние интерфейсы (интернет и т.д.).

Настройка списков интерфейсов MIkroTik

Соседи

Настроим обнаружение устройства используя Neighbor Discovery только для внутренних интерфейсов или разрешенных интерфейсов.

Разрешаем обнаружение только с интерфейсов перечисленных в списке InternalInterfaces.

Настройка MikroTik Neighbor Discovery

Межсетевой экран

Настраиваем ограничения доступа к роутеру и устройствам сети с помощью межсетевого экрана MikroTik.

⚠️ Перед добавлением ограничивающих правил — включите Безопасный режим MikroTik!

Разрешить установленные и связанные соединения

Правило «Trusted» — разрешаем уже установленные и связанные подключения, для снижения нагрузки на центральный процессор роутера.

Помещаем правило первым в списке Filter Rules (поместите правило ориентируясь на его номер в комментарии).

Отбросить недействительные пакеты

Правило «Drop Invalid Packet» — отбрасывает недействительные пакеты.

Помещаем правило после правила Trusted, в списке Filter Rules (поместите правило ориентируясь на его номер в комментарии).

Разрешить ICMP

Правило «ICMP» — разрешает ICMP трафик на устройство.

Поместите правило ориентируясь на его номер в комментарии.

Черный список

Создать список

Создаем список BlackList, в который будем помещать IP адреса, которым по какой-то причине запрещен доступ к MikroTik или защищаемым устройствам.

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

Создадим правило «BlackList» отклоняющее запросы от IP адресов из списка BlackList.

Для экономии ресурсов центрального процессора, запрещающее правило разместим в таблице Prerouting.

⚠️ Правила размещенные в Prerouting выполняются до разделения трафика на цепочки Input и Forward!

Поместите правило по его номеру в комментарии.

MikroTik Firewall RAW таблица

На скриншоте видно дополнительные правила:

Блокировка сканеров портов

Правило превентивной блокировки — блокируем ботов/пользователей сканирующих порты устройств в интернете, для поиска уязвимостей. Составим список не используемых портов нашим роутером, внесем в 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 часов:

Разместите правило, ориентируясь на его номер в комментарии.

Правило MikroTik Firewall - Блокировать сканеры портов

�� За 10 часов в BlackList находится около 500 IP адресов выполняющих попытки сканировать «уязвимые порты» роутера MikroTik.

Разрешим порт Winbox

Правило «Winbox» — разрешаем подключение на порт Winbox (в примере — 30122).

Поместите правило ориентируясь на его номер в комментарии.

Сбрасываем неразрешенные соединения

Правило «Drop all» — отбросим все соединения, которые не были разрешены раньше и не входят в список доверенных (внутренних) интерфейсов (InternalInterfaces).

Таблица фильтров MikroTik Firewall

Поместите правило на последнюю позицию в правилах Firewall Filter Rules.

Блокируем Bruteforce

Правило «Bruteforce» — поместим IP адрес устройства в BlackList, при повторной неудачной попытке авторизации на устройстве.

При неудачной попытке авторизации MikroTik отправляет ответ с текстом «invalid user name or password» запросившему устройству.

Помещаем IP адрес устройства в BlackList, на 70 минут.

Правило брандмауэра - блокировка Bruteforce

�� Защита MikroTik — базовая настройка безопасности, обсуждалось в этой статье. Я надеюсь, что теперь вы смогли настроить сервисы роутера и правила файрволла, улучшив защиту роутера MikroTik и устройств локальной сети. Однако, если вы столкнетесь с каким-то проблемами при настройке, не стесняйтесь написать в комментариях. Я постараюсь помочь.

Комментарии 18

Здравствуйте. Воспользовался вашей статьей для защиты от Bruteforce.
Непонятно следующее в разделе «Блокируем Bruteforce»:
Где указывается повторная попытка? Мой роутер сразу заносит в черных список после первого ввода неверного пароля.
Так же мой роутер заносит в черный список только если стучатся через winbox. Попытки подбора пароля через браузер продолжают проходить. Где посмотреть корректность настройки?

Добрый день. Столкнулся с проблемой и незнаю в какую сторону копа. В сети с моим микротиком находятся еще два (другие модели), и один из них «занял» все адреса моей подсети. И теперь получается если я подключаю оборудование в сеть пишет что адрес занят. Подскажите что не так я настроил?
https://i116.fastpic.org/big/2021/1103/af/a072bf850d419a471d024fc10bf97baf.png

В разделе «Разрешить ICMP» опечатка:
Protocol=icmp; Action: Action=drop
исправить на action=accept

Большое спасибо Евгений! Поправил.

Как оградиться от влазивающей соседки. Доступ к роутеру и ноуту есть. Не таскать же их с собой. Пароли менять боится — докажу что не сосед лезет. Вот только восстановил сеть. Начались выбрасывания из сети

И кстати, её IP я не вижу. Даже в настройках роутера

Едрён-батон, хоть бы слово понял. Это что? Куда прописывать? Ребята, вы ж для чайников пишете. Третья сотня водки зазря ушла. Эхххх. Не быть мне под защитой.

Что именно непонятно? Попробую помочь.
В квадратных скобках указана последовательность нажатия кнопок в окне Winbox.

Просто фраза, типа, «введите». Не понимаю куда вводить. Не в досе же в конце концов прописывать). Где то в настройках роутера. А там их тьма тьмущая. И все не русские. А в языке ангелов я, извините, профан.

У каждого пункта статьи указано два варианта выполнения:
1. вариант нажимать на пункты меню Winbox, они подписаны в квадратных скобках;
2. вариант «вводить» в терминал MikroTik (в окне управления Winbox, нажмите на кнопку New Terminal).

Например в первом пункте Пользователи:
Нажмите на кнопку [System], потом на кнопку [Users], в открывшемся окне нажмите на вкладку [Groups], потом на кнопку [+] и введите параметры нового пользователя.

Но, если нет знаний по оборудованию MikroTik, я бы не рекомендовал самостоятельную настройку этого оборудования или использовать вариант QuckSet (Быстрая настройка) из меню Winbox (этот «матер настройки» в меру удобно и безопасно настроит устройство).
Хотя если есть время и любопытство, то можно встать на тернистый путь настройки устройства с 0. �� Но в комментариях это будет делать не так просто. ��

вот КМК полезные правила в RAW

/ip firewall raw
add action=drop chain=prerouting comment=»drop blocked list» dst-address-list=blocked_list
add action=drop chain=prerouting comment=»drop bruteforces» src-address-list=bruteforce_blacklist
add action=drop chain=prerouting comment=»drop from guest to local» dst-address-list=local_network src-address-list=guest_network
add action=drop chain=prerouting comment=»drop DNS» dst-port=53 in-interface-list=list_all_wan protocol=tcp
add action=drop chain=prerouting comment=»drop DNS» dst-port=53 in-interface-list=list_all_wan protocol=udp
add action=drop chain=prerouting comment=»drop SNPP» dst-port=444 in-interface-list=list_all_wan protocol=tcp
add action=drop chain=prerouting comment=»drop SNPP» dst-port=444 in-interface-list=list_all_wan protocol=udp
add action=drop chain=prerouting comment=»drop SMB» dst-port=445 in-interface-list=list_all_wan protocol=tcp
add action=drop chain=prerouting comment=»drop SMB» dst-port=445 in-interface-list=list_all_wan protocol=udp
add action=drop chain=prerouting comment=»drop NetBIOS» dst-port=137,138,139 in-interface-list=list_all_wan protocol=udp

1. Каждое правило которое будет добавлено в Firewall, является «преградой» для трафика, который проходит через ваш роутер. Обработка каждого правила затрачивает ресурсы CPU вашего роутера.
При больших объемах трафика, при большом количестве правил, при большом объеме выполняемых скриптов и слабом CPU роутера — это может оказаться проблемой, которая проявляется неожиданно.
Поэтому я стараюсь писать минимум правил и использовать объединение правил.

2. По мне это большой избыток правил, которые заставят CPU вашего роутера заниматься пустой тратой ресурсов. Посмотрите счетчик правила и оцените, какое количество пакетов, от общего числа блокируется данным правилом и оцените полезную нагрузку (каждое из правил это преграда для всех пакетов обрабатываемых роутером). В статье, все это будет отбрасываться последним правилом.
Так же рекомендую учесть «расположение роутера», большинство пользователей находится за NAT провайдера с «серым IP адресом», у них в целом отсутствует возможность прямого обращения извне и подобные правила будут создавать совершенно бесполезную нагрузку.
Например тестовый роутер с «белым IP адресом» заблокировал 8000 попыток обращения к уязвимым портам, а роутер за NAT провайдера — 270 попыток, за 6 дней.
Если количество обращений по данным портам — значительно, стоит выделить блокировку в отдельное правило, для снижения нагрузки на CPU роутера.

Если кто-то «хитрый» каким либо способом узнает вашу подсеть и пропишет у себя маршрут до вашей сети, то будучи в сети провайдера, попадет к вам в сеть. Хорошо бы запретить весь входящий трафик на wan не dst-nat
add action=drop chain=forward comment=»drop forward new in \»list_all_wan\» !dstnat» connection-nat-state=!dstnat connection-state=new in-interface-list=list_all_wan

Задача статьи не стоит «Всеобъемлющее руководство по максимальной защите MikroTik на все случаи жизни».

Сомнительной полезности правило в случае, если в локалку проброшены какие-то порты

Правило конечно крутое

/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.»

, но как быть с DNS ?

Я настраиваю Firewall по правилу «запрещено всё, что не разрешено» (и советую делать так же), хотя есть вариант настройки Firewall «разрешено всё, что не запрещено».
В моём случае трафик на 53 порт, с внешних интерфейсов будет отброшен финальным правилом, так же как и любой другой не разрешенный предыдущими правилами.
Я часто нахожу совет отклонения запросов на 53 порт (как и многих других) отдельным правилом, но перед написанием статьи у меня больше недели велись логи обращения к портам устройства.
Сравнив количество обращений к портам, были выбраны именно указанные в статье порты.
Я не отрицаю, что в практике сетевого администратора может быть и другой опыт, когда поток запросов на этот порт превысит совокупное обращение к другим портам, в этом случае, для снижения нагрузки на роутер, можно вынести отдельное правило в таблицу Prerouting (RAW).

Если я правильно понимаю, то вы запрещаете «TCP порты ловушки», но там отсутствует порт 53 (а там еще UDP).
На сколько я знаю, для микротика по нагрузке одинаково, сделаете вы 10 одинаковых правил с разными портами или сделаете одно правило с 10 портами через запятую.

Стена огня. Учимся настраивать файрвол на примере MikroTik

Файрвол, как и многое другое в RouterOS, пришел из Linux и представляет собой доработанный iptables. Поэтому многие мануалы по настройке iptables легко можно сконвертировать в формат RouterOS. Файрвол состоит из следующих таблиц:

  • Filter — занимается фильтрацией трафика — определяет, пропустить пакет в сеть или отбросить его. Мы будем рассматривать работу только этой таблицы;
  • NAT — Network Address Translation. Изменяет проходящие пакеты. Поменять адрес источника или порт назначения — дело именно этой таблицы. В основном она используется для обеспечения доступа в интернет из локалки и обратно. Иногда без NAT невозможно работать в плохо спроектированных сетях, а еще его, бывает, используют в качестве «костыля»;
  • Mangle — классифицирует и маркирует трафик и может менять некоторые поля в заголовке (TTL, ToS, DF). Применяется для построения сложных путей трафика (например, когда подключено два провайдера или нужны разные пути трафика для RDP и VoIP);
  • Raw — обрабатывает пакеты до их попадания в Connection Tracking. Пригодится для защиты от DoS или при работе с большими объемами трафика.

Таблицы состоят из цепочек. Цепочки в разных таблицах могут отличаться. Чуть позже станет ясно почему. В нашей таблице Filter три цепочки:

  • input — трафик к самому роутеру. Обязательное условие попадания в input — адресом назначения пакета должен быть один из адресов роутера, широковещательный адрес сети или широковещательный адрес работающей на роутере службы. Сюда попадает WinBox, SSH, WebFig, ping, VPN и другой трафик, предназначенный роутеру. Полный список можешь посмотреть в вики. В этой цепочке мы должны защищать сам роутер;
  • output — трафик от роутера. Ответы на прилетевшее в input или новые пакеты от роутера (пинг, VPN, SSH-сессия с самого роутера). Эта цепочка редко используется, так как часто роутер считается доверенным звеном и пакеты, генерируемые им, по умолчанию легитимны. Но, как показывает история взломов, контроль исходящего трафика может выявить заражение на начальных этапах;
  • forward — трафик, проходящий через роутер (когда пакет прилетел в один интерфейс и вылетел с другого или того же самого). Трафик из локалки в интернет, из интернета в локалку, из одного VLAN локалки в другой;
  • user chains — пользовательские цепочки. Админ может создавать цепочки правил по своему усмотрению. Это бывает полезно для декомпозиции больших конфигураций. К примеру, можно весь трафик на порты 80 и 443 завернуть в отдельную цепочку WEB и в ней уже делать десятки правил для фильтрации — это визуально упростит настройку, хотя качественно на прохождение трафика не повлияет.

Два важных момента, о которых нужно помнить.

Момент первый. У трафика в forward всегда есть входящий и исходящий интерфейсы — трафик влетел в input, обработался процессом маршрутизации и должен вылететь в output. У входного трафика не может быть исходящего интерфейса — он обработается внутри роутера и никуда дальше не полетит. Также у выходного трафика не может быть входящего интерфейса — этот трафик генерируется самим роутером (это либо новый трафик, либо созданный роутером ответ на трафик, пришедший в input).

Момент второй. У трафика не существует «внешнего» или «внутреннего» интерфейсов. Роутеру плевать, что ты считаешь внешним, — для него есть интерфейс, в который трафик вошел, и интерфейс, с которого трафик уйдет.

Правила образуют цепочки. У каждого правила может быть только одна цепочка. По умолчанию политика у всех цепочек — все разрешено. Правила срабатывают в таблицах в зависимости от их порядка: сначала пакет обработается первым правилом, затем вторым и так далее. Хорошим тоном считается упорядочивать правила внутри таблиц по цепочкам: сначала — пачка правил input, затем — forward, в конце — output.

Трафик будет проходить по правилам только в пределах своей цепочки. И если сначала идет input, потом forward, затем снова input, то трафик input все равно никогда не попадет в forward, то есть такое расположение правил не повлияет на прохождение трафика, а только запутает админа. В пределах одной таблицы пакет не перепрыгнет из одной цепочки в другую, пока админ это явно не укажет.

table_chain_rule

table_chain_rule

Другие статьи в выпуске:

Xakep #253. Сканеры уязвимостей

Connection Tracking

Еще одна важная вещь для понимания работы файрвола — механизм определения состояния соединений — Connection Tracking (или просто ConnTrack). У RouterOS есть специальная таблица, в которой хранятся данные о состоянии соединений. Благодаря ей работает NAT и многие другие части файрвола.

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

ConnTrack

ConnTrack

Для ConnTrack существуют четыре состояния пакетов:

  • new — новый пакет, не принадлежащий ни одному из известных потоков. Это может быть первый пакет для коннекта к серверу RDP, или первый пакет в потоке WinBox, или запрос к DNS. Система запоминает Source IP, Source Port, Destination IP, Destination Port и некоторые другие параметры и записывает эти данные в таблицу. Следующий пакет с такими же данными будет относиться к записанному потоку;
  • established — пакет, принадлежащий существующему потоку. То есть пакет, у которого Source IP, Source Port, Destination IP, Destination Port подходят под одну из записей таблицы ConnTrack (или обратный пакет);
  • related — пакет, порожденный другим потоком. Некоторые протоколы, такие как FTP, SIP, PPTP, используют для работы несколько потоков. Например, управляющие команды FTP ходят по порту TCP 21, но данные передаются с порта TCP 20. При попытке получения или отправки данных на FTP в потоке на порт 21 сервер сообщает: «А сейчас я открою 20-й порт, и ты забирай данные с него», после этого клиент посылает пакет на 20-й порт сервера. Этот пакет будет считаться related, так как он порожден потоком 21-го порта;
  • invalid — все, что не относится к перечисленным выше состояниям. Пример: сессия корректно закрылась, но из-за ошибок маршрутизации часть пакетов из середины сессии улетела другим путем. Когда они пришли, их сессия уже закрыта и роутер о них ничего не знает. Они не new и не относятся к существующим соединениям, поэтому считаем их invalid.

Состояние потока не связано с флагами TCP: SYN, ACK, FIN. Для UDP и других stateless-протоколов в таблице ConnTrack тоже содержатся все возможные состояния.

Connstate

Connstate

Работа ConnTrack требует ресурсов процессора и при больших объемах трафика может существенно нагрузить CPU. Но ConnTrack нужен не везде, и его можно отключить. Например, у провайдеров на стыке с вышестоящим провайдером стоят роутеры, которые молотят десятки гигабит трафика. На этих роутерах, как правило, нет NAT (прямая маршрутизация), а трафик фильтруется уровнем ниже, чтобы не перегружать и без того нагруженный бордер. То есть в этом случае ни к чему проверять каждый пакет на принадлежность какому-либо потоку.

Нажав кнопку Tracking, можно отключить механизм ConnTrack или подкрутить таймеры. В большинстве случаев тебе не понадобится заходить в эти настройки, но знать о них нужно. Режима ConnTrack три: что такое yes и no , думаю, понятно, а в режиме auto ConnTrack выключен до тех пор, пока хотя бы один пакет не попадет в существующие правила таблицы NAT или Filter.

WARNING

Выключенный ConnTrack ломает NAT и фичи файрвола, основанные на трекинге потоков: connection-bytes, connection-mark, connection-type, connection-state, connection-limit, connection-rate, layer7-protocol, new-connection-mark, tarpit.

Рекомендации по настройке

Переходим к практике настройки. В этой статье я расскажу о таблице Filter — той, что занимается фильтрацией трафика. Как мы выяснили чуть выше, за трафик к самому роутеру отвечает цепочка input, а за трафик, который проходит через роутер, — forward. Займемся защитой самого роутера.

Первое и самое главное, что нужно помнить при работе с файрволом, было описано еще в утерянной главе «Слова о полку Игореве»: «удаленная настройка файрвола — к дальней дороге». Так что уважай предков — чти их заветы и используй Safe Mode.

Работает этот режим так: ты нажимаешь кнопку Safe Mode в интерфейсе, и она остается нажатой. Дальше ты делаешь все, что собирался, но применятся эти изменения, только когда ты снова кликнешь по кнопке. Если они приведут к обрыву взаимодействия роутера и конфигуратора WinBox (например, если ты зафильтровал свои же пакеты или отключил интерфейс), то роутер вернется в состояние, которое было до входа в Safe Mode.

Запоминается только 100 действий, но этого хватит на большинство случаев. Перезагрузки не будет — откат мгновенный. Из консоли этот режим активируется по Ctrl-X.

Safe Mode

Safe Mode

Есть два подхода к настройке файрвола:

  • разрешено все, что не запрещено;
  • запрещено все, что не разрешено.

Ни один из них нельзя назвать однозначно правильным. Я приверженец второго подхода, но в незнакомых сетях применяю первый.

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

  1. Management: WinBox, SSH, в некоторых случаях WebFig, например для просмотра графиков нагрузки.
  2. Если провайдер выдает адрес по DHCP, то разрешить этот протокол на внешнем интерфейсе.
  3. Если роутер является сервером DHCP, то разрешить этот протокол на внутренних интерфейсах.
  4. То же самое с DNS.
  5. Если будем поднимать туннели, то разрешить их.
  6. OSPF.
  7. ICMP.
  8. NTP.
  9. Neighbor Discovery.
  10. SNMP. .

Определились? Открываем нужное и закрываем все остальное.

Файрвол работает по принципу «если [условие], то [действие]». Если выполняются условия, заданные во вкладках General, Advanced, Extra, то к пакету применяется действие из вкладки Action. На сегодня нам будет достаточно условий src/dst address, protocol, src/dst port, in/out interface, connection-state. Их значения понятны по названию, но если вдруг неясно — вперед, читать про основы TCP/IP. Самые распространенные действия: accept — разрешено, drop — запрещено (пакет просто уничтожится), reject — запрещено, но отправитель получит информацию, что пакет был уничтожен по причине, указанной в reject-with.

Каждое правило на пути пакета отнимает процессорное время. И если в небольших сетях это некритично, то при серьезных объемах трафика нужно учитывать этот момент. Рассмотрим на примере.

В этом случае при попытке подключиться к роутеру по SSH с адреса 10.11.0.11 файрвол будет шесть раз обращаться к CPU с вопросом, пропустить ли этот трафик. Выглядит это примерно так: «8291 — не наш порт — пропускаем дальше. 10.0.0.0/24 — не наша подсеть, пропускаем дальше. То же для 10.10.0.0/24, и только шестое правило подходит». На шестом шаге файрвол поймет, что трафик легитимный и его можно пропустить.

Пакеты FTP и весь другой неразрешенный трафик будет дергать CPU семь раз — первые шесть и последний дроп. И это в выдуманном примере из семи правил. В реальной жизни правил на порядок или два больше.

Первое, что мы можем сделать, — объединить два порта в одном правиле:

Немного снизили нагрузку. Но осталось три идентичных правила с разницей лишь в адресах. С помощью списка адресов (Address List) мы можем объединить их в одно.

Address List — фича RouterOS, которая позволяет объединять IP-адреса, подсети и DNS-имена в одну запись.

Создаем три записи в одном Address List.

Make Address List

Make Address List

И применяем его к нашему правилу.

Так из семи правил мы получили два и избавились от лишней нагрузки. По аналогии со списками адресов работают списки интерфейсов (я рассматривал их в предыдущей статье — «Защищаем MikroTik»): объединяем в один interface list интерфейсы разных провайдеров и вешаем правила уже не на сами интерфейсы, а на списки. Так мы не только уменьшим нагрузку, но и упростим жизнь админа: чем меньше правил, тем удобнее обслуживать систему.

Еще один способ облегчить работу файрволу — использовать ConnTrack. Понятно, что established-пакетов будет намного больше, чем new, related и invalid, вместе взятых. А раз мы разрешили первый пакет из потока, то все остальные пакеты в этом потоке можно считать легитимными. Поэтому просто создаем правило «разрешить established» и помещаем его в самом верху.

Выбирай нужные тебе протоколы и порты, создай соответствующие списки адресов и интерфейсов. Открой все, что нужно, и поставь последним правилом drop all. На этом основную настройку цепочки input можно считать завершенной.

К слову, по умолчанию файрвол снабжен достаточно крепкой настройкой — ее вполне хватит, чтобы нормально работала сеть практически любых размеров. Но всегда есть какие-то особенности и любой конфиг можно улучшить с учетом своих условий.

Для примера конфигурации можешь взять мой шаблон.

Траблшутинг

Когда файрвол не работает или работает не так, как подразумевалось при настройке, виноват админ. Магии не бывает. Первое, на что стоит обратить внимание при траблшутинге, — счетчики пакетов. Если счетчик не увеличивается, значит, трафик в него не попадает. А если трафик не попадает, значит, либо этого трафика просто нет, либо он был обработан стоящим выше правилом.

Счетчики

Счетчики

Ты же помнишь, что правила файрвола работают по принципу «кто первый встал — того и тапки»? Если пакет попал под действие правила, то дальше он уже не пойдет. Значит, нужно искать проблему выше. Просто копируем наше правило, action ставим accept (для траблшутинга не делай дроп — так при проверке можно сломать себе доступ или нарушить работу сети) и постепенно двигаем его наверх до первого увеличения счетчиков в этом правиле. Если через это правило уже проходил трафик, то счетчики будут ненулевые и можно пропустить нужные нам пакеты, — просто сбрось счетчики в этом правиле или во всех кнопками Reset Counters.

Reset Counters

Reset Counters

Предположим, мы нашли правило, в которое попадает наш трафик, а попадать не должен. Нужно понять, почему так происходит. В этом нам поможет опция Log. Во вкладке Action ставим галочку Log (можно написать префикс для правила, чтобы было проще отлавливать его в логах) и смотрим логи, где написаны все характеристики пакетов, попадающих под правило. Среди характеристик: цепочка, входящий и исходящий интерфейсы, адреса и порты источника и получателя, протокол, флаги, размер пакета, действия NAT.

Если даже в самом верху в правиле не будут увеличиваться счетчики, убирай правила из условия по одному. Начинай с интерфейсов — админы часто путаются в своих представлениях о том, откуда или куда должен идти трафик (например, при коннекте к провайдеру через PPPoE или в туннелях между филиалами или сложном роутинге). Счетчики пошли? Включаем лог и смотрим интерфейсы и другие параметры.

Если и это не помогает — пришло время тяжелой артиллерии. Идем в Tools → Torch и изучаем трафик на роутере. Может, ожидаемого трафика вовсе нет. Еще один крутой инструмент — аналог tcpdump — Tools → Packet Sniffer. Разбор работы этих инструментов тянет на отдельную статью (если она тебе интересна — сообщи об этом в комментариях к статье).

Чтобы упростить траблшутинг, можно использовать функцию комментирования. Если из-за комментов окно становится слишком большим и это мешает смотреть на правила, воспользуйся инлайновыми комментариями (Inline Comments). Так комменты встанут с правилом в одну строку и в окно будет умещаться больше правил.

Inline Comments

Inline Comments

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

Итоги

В этой статье приведены только основы настройки файрвола и главные методы диагностики. Кроме RouterOS, эти принципы применимы и для Linux. В следующей статье разберем более сложные правила, которые позволяют защититься от не самых простых атак, и разберем цепочку Forward, а также создадим свои цепочки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *