Межсетевой экран:Лженастройки и ошибки при настройке файрвола

Материал из MikroTik WiKi rus
Перейти к: навигация, поиск

Введение

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

  1. Лженастройки. Как правило, такие правила никак не влияют на работоспособность сети. Только замусоривают конфигурацию и этим затрудняют ее дальнейший анализ. Иногда могут и навредить. Основная примета этой категории это использование каких-то замысловатых параметров.
  2. Правила пустышки. Как правило ничего не делают. Ни хуже, ни лучше. Разве, что потребляют ресурсы процессора на обработку бессмысленных правил.
  3. Ошибки. Здесь название говорит само за себя.

Лженастройки

Эту категорию лженастроек я характеризую так: "Эта статья в Интернет выглядит умной. Я то же хочу внедрить у себя такое". Администраторы берут какие-то настройки и абсолютно не понимая что это, зачем это и с чем это едят копируют настройки к себе. Чаще всего встречаются следующие чудо-настройки.

BOGON

Описание

Эта настройка находится в топе по популярности среди всевозможных лженастроек. Выглядит она следующим образом: вначале делается список адресов с названием "BOGON" и после этого в файерволе этот самый "BOGON" запрещают для входящего интерфейса.

Через консоль это выглядит примерно так:

/ip firewall address list
add address=0.0.0.0/8 list=BOGON
add address=10.0.0.0/8 list=BOGON
add address=100.64.0.0/10 list=BOGON
add address=127.0.0.0/8 list=BOGON
add address=169.254.0.0/16 list=BOGON
add address=172.16.0.0/12 list=BOGON
add address=192.0.0.0/12 list=BOGON
add address=192.0.2.0/24 list=BOGON
add address=192.168.0.0/16 list=BOGON
add address=198.18.0.0/15 list=BOGON
add address=198.51.100.0/24 list=BOGON
add address=203.0.113.0/24 list=BOGON
add address=217.67.177.164 list=BOGON
add address=224.0.0.0/3 list=BOGON

/ip firewall filter
add action=drop chain=input in-interface=WAN src-address-list=BOGON

Развенчание мифа

Прежде всего определимся, что такое "BOGON". BOGON — это IP-адреса, которые не должны встречаться в таблицах маршрутизации в Интернет. Этим термином описываются частные и зарезервированные диапазоны адресов. Список этих сетей описывается в RFC 1918, RFC 5735 и RFC 6598. Обратите внимание, что речь идет именно про таблицу маршрутизации в Интернет, а не таблицу маршрутизации, в принципе. Такие адреса часто могут использоваться при DDoS атаках в качестве IP-адреса источника. Помимо просто BOGON есть еще и FULLBOGON про которые почему-то забывают.

У таких сетей есть один очень важный нюанс, который я еще ни разу не встречал что бы учитывали: Ни BOGON, ни FULLBOGON списки не являются статическими. Диапазоны IP-адресов могут, как добавляться, так и убираться из этих списков. Поэтому BOGON-список актуальный сегодня завтра может оказаться неактуальным и файервол начнет блокировать легитимный трафик.

Здесь я люблю задавать вопрос. Почему Вы решили заблокировать сеть 192.0.2.0/24, но при этом не стали блокировать 192.0.3.0/24 или 192.0.4.0/24 или 192.0.5.0/24. На этот вопрос я пока ответ ни разу не получил.

Идем дальше. Допустим, каким-то образом мы получили динамические "BOGON" и "FULLBOGON" списки, которые всегда будут находиться в актуальном состоянии. Может быть тогда блокирование этих самых БОГОНОВ будет иметь смысл? Возможно тогда и будет иметь, но куда проще настроить файервол правильно так, чтобы не требовалось создавать дополнительные правила. Для этого нам достаточно настроить файервол в нормально закрытом режиме и заблокировать invalid-трафик.

/ip firewall filter
add action=accept chain=input connection-state=established,related
add action=drop chain=input connection-state=invalid

Это правило обязательно должно быть вторым после правила, которое разрешает established и related трафик. Если сделать например так:

/ip firewall filter
add action=accept chain=input connection-state=established,related
add action=accept chain=input protocol=icmp
add action=drop chain=input connection-state=invalid

то мы рискуем получить уязвимость в виде возможности посылать на нас нелегитимный ICMP-трафик. И произойдет это следующим образом:

  1. Первый вредоносный пакет у которого в качестве источника будет указан адрес из BOGON-сети будет обработан на втором правиле, которое разрешает ICMP-трафик.
  2. Все дальнейшие пакеты будут обработаны самым первым правилом, которое разрешает established & related трафик.
  3. До правила блокирующего BOGON-сети "плохой" ICMP-трафик не дойдет.

Резюме

Для того, чтобы не получить проблемы с BOGON-сетями достаточно правильно настроить файервол. При этом в настройке BOGON-сети напрямую могут никак не участвовать.

Блокировка TCP-соединений по флагам

Эта лженастройка имеет много разных вариаций. В общих чертах она выглядит как попытка заблокировать что-то на основании флага TCP-соединения с помощью опции "tcp-flag". У этой лженастройки файервола на MikroTik много разных вариаций. Обычно их объединяет то, что есть несколько правил в которых обязательно будет встречаться что-то на подобие:

... protocol=tcp tcp-flags=fin,syn
... protocol=tcp tcp-flags=fin,psh,urg,!syn,!rst,!ack
... protocol=tcp tcp-flags=fin,syn,rst,psh,ack,urg

Правила пустышки

В основной своей массе эти правила сводятся к одному: разрешению того, что и так не запрещено.

Описание

Эта категория лженастроек не делает ничего кроме бессмысленного потребления ресурсов маршрутизатора. Выглядит это все примерно так:

/ip firewall filter
add action=accept chain=input protocol=icmp
add action=accept chain=input dst-port=161 protocol=udp src-address-list=zabbix
add action=accept chain=input dst-port=8291 protocol=tcp
add action=accept chain=input port=500,1701,4500 protocol=udp
add action=accept chain=input protocol=ipsec-esp
...
Далее нет ни одного запрещающего правила

Развенчание мифа

С пакетом, который попадает в файервол с таким набором правил происходит одно из двух:

  1. Пакет попадает под действие одного из правил и оказывается разрешенным.
  2. Пакет не попадает под действие ни одного из правил и так как нет запрещающего правила, то пакет оказывается разрешенным.

Т. е. в любом случае пакет оказывается разрешенным.

Резюме

Рекомендую сделать одно из двух:

  1. Сделать файервол нормально закрытым. Т. е. в зависимости от конкретной конфигурации в конце у нас должно появиться хотя бы одно запрещающее правило.
  2. Если Вы не понимаете, что и как надо запрещать, то лучше удалить все правила, что бы не потреблять лишние ресурсы процессора и не замусоривать конфигурацию. Огромным минусом будет то, что не зависимо от того будут правила или нет в такой настройке будет много уязвимостей.

Ошибки

Использование нормально открытого файервола

Описание

Очень часто для цепочки Input пытаются использовать нормально открытый файервол. Выглядит это примерно так:

/ip firewall filter
add action=drop chain=input dst-port=53 protocol=tcp
add action=drop chain=input dst-port=53 protocol=udp
add action=drop chain=input dst-port=22 protocol=tcp
add action=drop chain=input dst-port=80 protocol=tcp
add action=drop chain=input ...
add action=drop chain=input ...
add action=drop chain=input ...
add action=drop chain=input ...
...
Прочие запрещающие правила

Проблема

В это примере для цепочки Input используется нормально открытый файервол и блокируется то, что по мнению администратора представляет риск. Действительно держать 53-ий порт (DNS) открытым для Интернета это очень большой риск попасть на атаку типа "DNS Resolve" и получить загрузку процессора службой DNS под 100%.
Проблема в том, что при использовании нормально открытого файервола администратор устанет запрещать. Даже, если предположить, что администратор на 100% знает все, что надо запретить, то такую схему лучше не использовать потому, что значительно увеличится количество правил через которые будет проходит пакет. А чем большее количество правил будет пройдено пакетом, тем выше нагрузка на процессор устройства.

Решение

Сделать файервол нормально закрытым. Т. в нем должно быть запрещено все кроме того, что разрешено и будет небольшой "белый" список доступных сервисов. Например так:

/ip firewall filter
add action=accept chain=input connection-state=established,related
add action=drop chain=input connection-state=invalid
add action=accept chain=input protocol=icmp
add action=accept chain=input dst-port=8291 protocol=tcp
add action=accept chain=input port=500,1701,4500 protocol=udp
add action=accept chain=input protocol=ipsec-esp
add action=drop chain=input in-interface=WAN

Неверный порядок правил

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

Пример №1
Пример ситуации, когда блокирующее правило не сработает:

/ip firewall filter
...
add action=accept chain=input protocol=tcp
...
add action=drop chain=input dst-port=22
...

В этой ситуации правило, которое блокирует SSH-трафик (22-ой порт TCP) не сработает потому, что выше есть правило, которое разрешает любой TCP-трафик.


Пример №2
Еще один пример ситуации, когда блокирующее правило не сработает:

/ip firewall filter
...
add action=accept chain=forward dst-address=192.268.15.0/24
...
add action=drop chain=forward in-interface=Guest out-interface=LAN
...

Если рассматривать эту конфигурацию в отрыве от остальных настроек, то кажется, что трафик из "Guest" в "LAN" должен быть заблокирован, но если посмотреть конфигурацию целиком, то можно обнаружить, что сеть 192.168.15.0/24 принадлежит интерфейсу LAN:

/ip address
add address=192.168.15.254/24 interface=LAN network=192.168.15.0

Таким образом мы получаем, что у нас есть разрешающее правило выше запрещающего.


Пример №3
Пример ситуации, когда разрешающее правило не сработает потому, что выше есть запрещающее правило.

/ip firewall filter
...
 add action=drop chain=forward in-interface=DMZ out-interface=LAN
...
add action=accept chain=forward dst-port=80,443 protocol=tcp

В этом примере есть правило, которое разрешает TCP-трафик с портом назначения 80 и 443. Если рассматривать правило отдельно от остальных, то можно предположить, что из DMZ можно будет попасть в LAN с таким трафик. Но по факту это сделать не получится, т. к. выше есть запрещающее правило, которое блокирует любой трафик из DMZ в LAN.

Некорректное использование FastTrack

Многие читали про то, что с помощью FastTrack можно в разы увеличить производительность маршрутизатора. Как правило эту возможность используют в таком виде:

/ip firewall filter
add chain=forward action=fasttrack-connection connection-state=established,related

Но при этом зачастую не учитывают, что при использовании этой возможность игнорируется огромный объем настроек. Какой именно можно оценить посмотреть на то, как проходит FastTrack по схеме прохождения трафика:

FastTrack на схеме прохождения трафика MikroTik

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

FastTrack можно и нужно использовать, но не для всего подряд, а точечно выделяя какой-то конкретный вид трафика и пропуская этот выделенный трафик через FastTrack.

Видеокурс по MikroTik

Вы можете изучить настройку MikroTik с помощью видеокурса "Настройка оборудования MikroTik" . Курс содержит все темы из официального учебного курса MTCNA + много дополнительного материала, который полезен на практике.