Сетевая операционная система RouterOS создавалась под устройства RouterBoard, которые выпускаются организацией Mikrotik. Однако в настоящее время она часто используется на x86 и в облаках. В данном материале мы расскажем, как правильно настроить межсетевой экран в упомянутой операционной системе.
Стоит отметить, что в этом материале будет задействована облачная версия RouterOS CHR. По большому счету вся настройка будет проходить точно так же, как и при применении WebFig и WinBox.
Немного теории: настройка firewall
“Цепочка” считается базовым понятием при любых работе с фаерволом MikroTik, объясняется это тем, что правила обработки трафика применяются не параллельно, а строго по очереди, формируя “цепь”. Изначально их количество равно трем, однако вы можете создать собственные цепочки. В дефолтный список входит:
- INPUT: Отвечает за входящие запросы, которые поступают на маршрутизатор;
- OUTPUT: Отвечает за исходящие запросы, которые генерируются маршрутизатором;
- FORWARD: Отвечает за запросы, которые проходят транзитом через маршрутизатор.
Проще говоря, если к нам приходит трафик из интернета или других сетей, то для работы с ним потребуется INPUT цепочка. Если же трафик исходит с нашей стороны в интернет или другие сети, то мы будем использовать OUTPUT цепочку. В том случае, когда маршрутизатор является промежуточным узлом, то обрабатывать такой трафик можно с помощью FORWARD цепочки.
Следует упомянуть о 4 видах статусов соединения, а именно:
- Established: Указывает на то, что соединение успешно установлено и готово к передаче данных;
- New: Указывает на то, что соединение является новым;
- Related: Указывает на то, что соединение уже причастно к одному из ранее созданных, однако применяется с другой целью.
- Invalid: Указывает на некорректность соединения, маршрутизатора не понимает как работать с ним.
Фильтрация
Запускаем CLI и ознакамливаемся с имеющимся правилами:
[admin@MikroTik] > ip firewall filter print
Flags: X - disabled, I - invalid, D - dynamic
На данном этапе у нас не отображаются правила, а только “легенда” флагов. Нам нужно зайти в настройку фильтров:
[admin@MikroTik] > ip firewall filter
[admin@MikroTik] /ip firewall filter>
Если вы желаете узнать о всех вариантах команд в разделе, то просто нажмите на клавишу “?”. Давайте пропишем первые правила и объясним с какой целью они применяются:
add action=accept chain=input comment="default configuration" connection-state=established,related
Итак, в данной команде содержится следующее:
-
За прием пакетов отвечает –
add action=accept
; -
Указание цепочки, в данном случае правило для входящих запросов –
chain=input
; -
Комментарий для удобства дальнейшей настройки –
comment=”default configuration”
; -
Прописываем статусы соединения, которые будут обрабатываться –
connection-state=established,related
.
Если рассматривать упомянутую команду в общем, то она означает - прием всех пакетов данных извне со статусом подключения Related и Established.
Рекомендуем указать еще одно правило, давайте его разберем:
add action=accept chain=input src-address-list=allowed_to_router
В команде один новый параметр – src-address-list=allowed_to_router
. В дальнейшем нам потребуются списки IP адресов с уникальными именами. Такое правило обеспечивает обработку пакетов только из списка с указанным именем и будет полезно при формировании списка разрешенных IP.
И последнее правило:
add action=drop chain=input
Она обеспечит отказ в обработке пакетов, которые не соответствуют правилам выше.
Перейдем к созданию списков разрешенных IP. Зайдем в CLI – ip firewall
и убедимся что список на данный момент пуст:
[admin@MikroTik] > ip firewall address-list
[admin@MikroTik] /ip firewall address-list> print
Flags: X - disabled, D - dynamic
# LIST ADDRESS CREATION-TIME TIMEOUT
Выполним добавление всех адресов локальной подсети 192.168.88.0/24 кроме адреса самого маршрутизатора:
add address=192.168.88.2-192.168.88.254 list=allowed_to_router
Выполним проверку:
[admin@MikroTik] /ip firewall address-list> print
Flags: X - disabled, D - dynamic
# LIST ADDRESS CREATION-TIME TIMEOUT
0 allowed_to_router 192.168.88.2-192.168.88.254 feb/05/2021 13:01:55
Созданную конфигурацию мы будем использовать далее для отправки трафика маршрутизатору из локальной сети.
Разделение адресов локального сегмента и интернета
Далее в данном руководстве мы разделим IP адреса на 2 группы, а именно внешний и локальный сегмент, так мы сможем в будущем понимать какой IP адрес из интернета, а какой нет. Сделаем мы это с помощью списков и уже известной команды:
add address=”IP_address” list=not_in_internet
Это действие необходимо произвести несколько раз с каждой зарезервированной подсетью. Полный список подсетей специального назначения, созданный RFC 6890, вы можете найти в интернете. В итоге все прописанные IP адреса будут считаться локальными.
Переходим ко второй цепочке – FORWARD, воспользовавшись уже сконфигурированными списками, мы обезопасим локальную сеть от аттак.
Создадим правило, которое будет отбрасывать попытки повторной установки соединения:
add action=fasttrack-connection chain=forward comment=FastTrack connection-state=established,related
Настроим прием транзитного трафика:
add action=accept chain=forward comment="Established, Related" connection-state=established,related
Исключим нежелательный трафик:
add action=drop chain=forward comment="Drop invalid" connection-state=invalid log=yes log-prefix=invalid
Исключим отправку трафика из локальной сети к частным IP:
add action=drop chain=forward comment="Drop tries to reach non public addresses from LAN" dst-address-list=not_in_internet in-interface=bridge1 log=yes log-prefix=!public_from_LAN out-interface=!bridge1
Исключим обработку пакетов, которые не отвечают требованиям NAT:
add action=drop chain=forward comment="Drop incoming packets that are not NATted" connection-nat-state=!dstnat connection-state=new in-interface=ether1 log=yes log-prefix=!NAT
Исключим трафик из внешней сети, но не с public IP:
add action=drop chain=forward comment="Drop incoming from internet which is not public IP" in-interface=ether1 log=yes log-prefix=!public src-address-list=not_in_internet
На этом базовая настройка завершена.
Защита от атак типа Brute Force (метод перебора)
Помимо установки фильтрации по адресам IP рекомендуется подключить защиту от атак типа брутфорс. В наше время существует очень большое количество ботов, которые способны самостоятельно сканировать сеть на открытые порты Mikrotik. В их список входят также каналы SSH. В том случае, когда бот находит подобную уязвимость он сразу же приступает к перебору паролей. В конечном итоге устройство может быть полностью захвачено, после чего оно начнет генерировать спам.
Чтобы бороться с данной проблемой необходимо прописать правило брандмауэра:
add chain=input protocol=tcp dst-port=22 src-address-list=ssh_blacklist action=drop comment="Drop SSH brutforce" disabled=no
Оно сбрасывает все соединения с адресов IP, которые находятися в черном списке. Переходим к созданию blacklist. Идентифицировать бота мы будем по факту ошибки ввода пароля более 3х раз подряд за минуту. Конфигурируем 3 списка: ssh_lvl1, ssh_lvl2 и ssh_lvl3.
При формировании подключения через SSH IP пользователя попадет в первый список, но автоматически ликвидируется через минуту:
add chain=input protocol=tcp dst-port=22 connection-state=new action=add-src-to-address-list address-list=ssh_lvl1 address-list-timeout=1m comment="Level1" disabled=no
Вторую попытку установки соединения будем регистрировать в другом списке, который назовем ssh_lvl2:
add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh_lvl1 action=add-src-to-address-list address-list=ssh_lvl2 address-list-timeout=1m comment="Level2" disabled=no
Когда ошибка повторится во 2й раз, то адрес IP автоматически переходит в третий список. Назовем его - ssh_lvl3:
add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh_lvl2 action=add-src-to-address-list address-list=ssh_lvl3 address-list-timeout=1m comment="Level3" disabled=no
В случае ошибки подключения в третий раз адрес будет блокироваться на период в 10 суток. Назовем этот список - ssh_blacklist:
add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh_lvl3 action=add-src-to-address-list address-list=ssh_blacklist address-list-timeout=10d comment="Blacklist" disabled=no
Базовая настройка NAT
Достаточно популярный метод настройки, который расшифровывается как Network Address Translation. Данная технология позволяет устройствам локальной сети выходить во внешнюю сеть используя только один публичный IP-адресом. В локальной сети устройства используют зарезервированные подсети, а в сеть выходят через маршрутизатор с NAT. Маршрутизатор получает пакет с локального IP и подменяет на нем обратный адрес с локального на внешний. Чтобы ответный пакет отправить нужному локальному устройству, изменяется также номер порта. Вся информация записывается в таблицу соответствия. Но когда из внешней сети приходит пакет, для которого нет записи в таблице, он отбросится, так как маршрутизатор не знает, какому устройству он предназначен.
Для предотвращения потери таких пакетов используется Port Forwarding. Мы явно указываем, какому устройству отправлять пакеты инициированные из внешней сети.
В статье рассмотрим один из способов настройки NAT, когда внешний IP-адрес может быть изменен.
Сперва необходимо сообщить маршрутизатору о намерении использовать NAT с помощью команды:
ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade
ether1 — интерфейс со стороны внешней сети.
Заключение
Мы рассмотрели только базовые нюансы по настройке firewall в Mikrotik. В данном материале не затрагивались сложные правила, так как мы пытались объяснить процесс настройки максимально просто. В открытом доступе существует много форумов, на которых можно обсудить более сложные правила и методы настройки.