Базовая настройка межсетевого экрана в MikroTik
Введение
Фильтры брандмауэра используются для разрешения или блокировки определенных пакетов, пересылаемых в вашу локальную сеть, исходящих от вашего маршрутизатора или предназначенных для маршрутизатора.
Существует два способа настройки фильтрации:
- разрешение определенного трафика и запрет всего остального
- отброс только вредоносного трафика, весь остальной разрешен.
Оба метода имеют свои плюсы и минусы, например, с точки зрения безопасности первый метод гораздо более безопасен, но требует вмешательства администратора всякий раз, когда необходимо принять трафик для нового сервиса.. Эта стратегия обеспечивает хороший контроль над трафиком и снижает вероятность нарушения из-за неправильной конфигурации сети.
С другой стороны, при защите клиентской сети было бы административным кошмаром принимать весь трафик, который могут использовать пользователи. Поэтому тщательное планирование брандмауэра имеет важное значение в расширенных настройках.
Фильтр брандмауэра состоит из трех предопределенных цепочек, которые нельзя удалить:
- input - используется для обработки пакетов, поступающих на маршрутизатор через один из интерфейсов с IP-адресом назначения, который является одним из адресов маршрутизатора. Пакеты, проходящие через маршрутизатор, не обрабатываются по правилам входной цепочки
- forward — используется для обработки пакетов, проходящих через маршрутизатор
- output - используется для обработки пакетов, исходящих из маршрутизатора и покидающих его через один из интерфейсов. Пакеты, проходящие через маршрутизатор, не обрабатываются против правил выходной цепочки
Конфигурация фильтра брандмауэра доступна из ip/firewall/filter
и ipv6/firewall/filter
Пример брандмауэра
Давайте рассмотрим простой пример межсетевого экрана для защиты самого маршрутизатора и клиентов за ним для протоколов IPv4 и IPv6.
IPv4
Защита маршрутизатора
При настройке брандмауэра соблюдайте следующие правила:
- обработка только новых соединений для снижения нагрузки на маршрутизатор;
- принимайте только тот трафик, который требуется;
- отбрасывайте все остальное. Функцию
log=yes
можно настроить на регистрацию событий, но имейте в виду, что это может добавить некоторую нагрузку на ЦП при серьезных атаках.
Мы всегда начинаем с принятия уже известных и принятых подключений, поэтому первым правилом должно быть принятие «установленных» и «связанных» соединений.
/ip firewall filter add action=accept chain=input comment= "default configuration" connection-state=established,related |
Теперь мы можем продолжить, приняв несколько новых подключений, в нашем примере мы хотим разрешить доступ по протоколу ICMP с любого адреса, а все остальное только из диапазона адресов 192.168.88.2-192.168.88.254. Для этого мы создаем список адресов и два правила брандмауэра.
/ip firewall address-list add address= 192.168 . 88.2 - 192.168 . 88.254 list=allowed_to_router /ip firewall filter add action=accept chain=input src-address-list=allowed_to_router add action=accept chain=input protocol=icmp |
И наконец, мы отбрасываем все остальное:
add action=drop chain=input |
Полный набор только что созданных правил:
/ip firewall filter add action=accept chain=input comment= "default configuration" connection-state=established,related add action=accept chain=input src-address-list=allowed_to_router add action=accept chain=input protocol=icmp add action=drop chain=input /ip firewall address-list add address= 192.168 . 88.2 - 192.168 . 88.254 list=allowed_to_router |
Защита устройств в локальной сети
Концепция защиты пользователей очень похожа, за исключением того, что в этом случае мы блокируем нежелательный трафик и принимаем все остальное.
Сначала мы создадим address-list
с наименованием «not_in_internet» которое будем использовать для правил фильтра брандмауэра:
/ip firewall address-list add address= 0.0 . 0.0 / 8 comment=RFC6890 list=not_in_internet add address= 172.16 . 0.0 / 12 comment=RFC6890 list=not_in_internet add address= 192.168 . 0.0 / 16 comment=RFC6890 list=not_in_internet add address= 10.0 . 0.0 / 8 comment=RFC6890 list=not_in_internet add address= 169.254 . 0.0 / 16 comment=RFC6890 list=not_in_internet add address= 127.0 . 0.0 / 8 comment=RFC6890 list=not_in_internet add address= 224.0 . 0.0 / 4 comment=Multicast list=not_in_internet add address= 198.18 . 0.0 / 15 comment=RFC6890 list=not_in_internet add address= 192.0 . 0.0 / 24 comment=RFC6890 list=not_in_internet add address= 192.0 . 2.0 / 24 comment=RFC6890 list=not_in_internet add address= 198.51 . 100.0 / 24 comment=RFC6890 list=not_in_internet add address= 203.0 . 113.0 / 24 comment=RFC6890 list=not_in_internet add address= 100.64 . 0.0 / 10 comment=RFC6890 list=not_in_internet add address= 240.0 . 0.0 / 4 comment=RFC6890 list=not_in_internet add address= 192.88 . 99.0 / 24 comment= "6to4 relay Anycast [RFC 3068]" list=not_in_internet |
Краткое объяснение правил фильтра брандмауэра:
- пакеты со статусом connection-state=installed,related добавлены в FastTrack для более быстрой передачи данных, брандмауэр будет работать только с новыми подключениями;
- сброс недействительных соединений и регистрация их с префиксом «invalid»;
- отбрасывать попытки достичь непубличных адресов из вашей локальной сети, применять address-list=not_in_internet перед этим, "bridge" - это локальный сетевой интерфейс, log=yes попытки с префиксом "!public_from_LAN";
- отбрасывать входящие пакеты, которые не NAT, ether1 - публичный интерфейс, регистрировать попытки с префиксом "!NAT";
- перейти к цепочке ICMP, чтобы удалить нежелательные сообщения ICMP
- отбрасывать входящие пакеты из Интернета, которые не являются публичными IP-адресами, ether1 — публичный интерфейс, регистрировать попытки с префиксом "!public";
- отбрасывать пакеты из локальной сети, не имеющей локального IP-адреса, 192.168.88.0/24 — это подсеть, используемая локальной сетью;
/ip firewall filter 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 add action=drop chain=forward comment= "Drop tries to reach not public addresses from LAN" dst-address-list=not_in_internet in- interface =bridge log=yes log-prefix=!public_from_LAN out- interface =!bridge add action=drop chain=forward comment= "Drop incoming packets that are not NAT`ted" connection-nat-state=!dstnat connection-state= new in- interface =ether1 log=yes log-prefix=!NAT add action=jump chain=forward protocol=icmp jump-target=icmp comment= "jump to ICMP filters" 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 add action=drop chain=forward comment= "Drop packets from LAN that do not have LAN IP" in- interface =bridge log=yes log-prefix=LAN_!LAN src-address=! 192.168 . 88.0 / 24 |
Разрешить только необходимые коды ICMP в цепочке «icmp»:
/ip firewall filter add chain=icmp protocol=icmp icmp-options= 0 : 0 action=accept \ comment= "echo reply" add chain=icmp protocol=icmp icmp-options= 3 : 0 action=accept \ comment= "net unreachable" add chain=icmp protocol=icmp icmp-options= 3 : 1 action=accept \ comment= "host unreachable" add chain=icmp protocol=icmp icmp-options= 3 : 4 action=accept \ comment= "host unreachable fragmentation required" add chain=icmp protocol=icmp icmp-options= 8 : 0 action=accept \ comment= "allow echo request" add chain=icmp protocol=icmp icmp-options= 11 : 0 action=accept \ comment= "allow time exceed" add chain=icmp protocol=icmp icmp-options= 12 : 0 action=accept \ comment= "allow parameter bad" add chain=icmp action=drop comment= "deny all other types" |
IPv6
Защита маршрутизатора
Очень похоже на настройку IPv4, за исключением того, что нам придется иметь дело с большим количеством протоколов, необходимых для правильной работы IPv6.
Сначала создаем, address-list
из которого разрешаем доступ к устройству:
/ipv6 firewall address-list add address=fd12:672e:6f65: 8899 ::/ 64 list=allowed |
Краткое объяснение правила фильтра брандмауэра IPv6:
- работать с новыми пакетами, принимать установленные/связанные пакеты;
- удалить локальные адреса ссылок из интернет-интерфейса (публичного)/списка интерфейсов;
- принимать доступ к маршрутизатору с локальных адресов, принимать многоадресные адреса для целей управления, принимать ваш исходный список адресов для доступа к маршрутизатору;
- отбросьте все остальное;
/ipv6 firewall filter add action=accept chain=input comment= "allow established and related" connection-state=established,related add chain=input action=accept protocol=icmpv6 comment= "accept ICMPv6" add chain=input action=accept protocol=udp port= 33434 - 33534 comment= "defconf: accept UDP traceroute" add chain=input action=accept protocol=udp dst-port= 546 src-address=fe80::/ 10 comment= "accept DHCPv6-Client prefix delegation." add action=drop chain=input in- interface =in_interface_name log=yes log-prefix=dropLL_from_public src-address=fe80::/ 10 add action=accept chain=input comment= "allow allowed addresses" src-address-list=allowed add action=drop chain=input /ipv6 firewall address-list add address=fe80::/ 16 list=allowed add address=xxxx::/ 48 list=allowed add address=ff02::/ 16 comment=multicast list=allowed |
В некоторых настройках, где используется DHCPv6-ретранслятор, адрес src пакетов может не входить в диапазон link-local. В этом случае параметр src-address правила № 4 необходимо удалить или настроить для принятия адреса ретранслятора.
Защита устройств в локальной сети
Этот шаг более важен, чем для IPv4. В настройках IPv4 клиенты в основном имеют адреса из локального диапазона адресов и транслируются NAT на публичный IP, таким образом, они не доступны напрямую из публичных сетей.
IPv6 — это другая история. В большинстве распространенных настроек включенный IPv6 делает ваших клиентов доступными из публичных сетей, поэтому надлежащие правила фильтрации брандмауэра для защиты ваших клиентов являются обязательными.
Вкратце, мы рассмотрим самую базовую защиту локальной сети, которая должна:
- принимать установленные/связанные и работать с новыми пакетами;
- отбрасывать недействительные пакеты;
- принимать пакеты ICMPv6;
- принимать новые подключения только от ваших клиентов к публичной сети;
- отбрасывать все остальное.
/ipv6 firewall filter add action=accept chain=forward comment=established,related connection-state=established,related add action=drop chain=forward comment=invalid connection-state=invalid log=yes log-prefix=ipv6,invalid add action=accept chain=forward comment=icmpv6 in- interface =!in_interface_name protocol=icmpv6 add action=accept chain=forward comment= "local network" in- interface =!in_interface_name src-address-list=allowed add action=drop chain=forward log-prefix=IPV6 |
Действия
В таблице ниже показан список действий для фильтра, и связанных с ними свойств.
Свойство |
Описание |
---|---|
action ( имя действия ; По умолчанию: accept ) |
|
reject-with ( icmp-no-route | icmp-admin-prohibited | icmp-not-neighbour | icmp-address-unreachable | icmp-port-unreachable | tcp-reset | icmp-err-src-routing-header | icmp-headers-too-long ; По умолчанию: icmp-no-route ) |
Указывает ошибку ICMP, которая будет отправлена обратно, если пакет отклонен. Применимо, если
|
Фильтрация RAW-файлов
Таблица RAW брандмауэра позволяет выборочно обходить или отбрасывать пакеты перед отслеживанием соединения, таким образом значительно снижая нагрузку на ЦП. Инструмент очень полезен для смягчения DoS/DDoS-атак.
Конфигурация фильтра RAW доступна из ip/firewall/raw
для IPv4 и ipv6/firewall/raw
для IPv6.
Таблица RAW не имеет сопоставителей, зависящих от отслеживания соединения (например, connection-state, layer7 и т. д.).
Если пакет помечен для обхода отслеживания соединения, дефрагментация пакета не произойдет.
Также брандмауэр RAW может иметь правила только в двух цепочках:
- preroutingпредварительная маршрутизация) — используется для обработки любого пакета, входящего в маршрутизатор
- output - используется для обработки пакетов, исходящих из маршрутизатора и покидающих его через один из интерфейсов. Пакеты, проходящие через маршрутизатор, не обрабатываются против правил выходной цепочки
И имеет одно конкретное действие:
Свойство |
Описание |
---|---|
action ( имя действия ; По умолчанию: accept) |
|
Базовый пример RAW
Предположим, что у нас есть конфигурация OSPF, но из-за отслеживания соединений у OSPF возникают проблемы смежности. Мы можем использовать правила RAW, чтобы исправить это, не отправляя пакеты OSPF на отслеживание соединений.
/ip firewall raw add chain=prerouting protocol=ospf action=notrack add chain=output protocol=ospf action=notrack |