Фильтрация входящего трафика FILTER и RAW

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

1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку "Действия до настройки роутера".
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там /export hide-sensitive. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.
Ответить
dinosaur
Сообщения: 17
Зарегистрирован: 08 окт 2019, 12:57

05 апр 2020, 05:15

Добрый день, специалисты

Прошу помощи с загадочным (для меня) поведением роутера. Дано - белый IP снаружи, некоторые порты открыты для входящих подключений из WAN. Все адреса, которые обращаются к другим портам помещаются в mangle в черный список, и режутся в filter:
/ip firewall filter add action=drop chain=input comment=«drop black list connections» \connection-state="" in-interface-list=WAN src-address-list=blacklist
Все работает корректно (список заблокированных адресов растет - душа поёт, проблем с исходящими соединениями из локалки в интернет нет). Но наши руки - не для скуки, в сети наткнулся на мнение, что кошернее рубить входящие соединения в RAW prerouting (экономия ресурсов процессора). Рассудив что вроде бы да, звучит логично, творю:
/ip firewall raw add action=drop chain=prerouting comment=«drop black list connections» \in-interface-list=WAN src-address-list=blacklist
и довольно потирая руки (столько ресурсов процессора сэкономил же) иду спать. Утром довольный пытаюсь выйти в интернет с разных устройств - а никак. Совсем никак. Лезу в Winbox, не вижу ничего криминального (соединение с провайдером есть, туннель поднят, адреса внутрь раздаются), первым делом отключаю созданное накануне правило в RAW и включаю в FILTER, и о, чудо, все работает (черный список для обоих правил один и тот же). Очищаю список руками, опять включаю фильтрацию в RAW и по мере наполнения списка адресами кулхацкеров, доступ в сеть для локальных машин умирает (причем не одновременно ко всем адресам, а постепенно, но достаточно быстро, первые мгновения пинги наружу проходят по ip, но чуть погодя и это прекращается).
Ну собственно вопрос - почему?


Аватара пользователя
podarok66
Модератор
Сообщения: 3828
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

05 апр 2020, 10:42

Ну наверное стоило всё же выкладывать все работающие правила, а не обрезок. Проанализировать ваш этот список пополняющийся, возможно туда попадают ваши локальные адреса. Далее посмотреть на схему прохождения пакетов.
Изображение
RAW достаточно обобщающая штука. Так как она стоит в схеме до conntrack (кстати, он включён, надеюсь), решения о последующей цепочке ещё не принято. Ведь не даром есть только два варианта prerouting и output. Похоже, что у вас режутся пакеты, которые должны идти в forward. Хотя у меня есть правила в RAW подобного вида и работают он нормально. Нет общей картины, сложно понять что и как по одному правилу.
Не трогайте вы эту цепочку RAW без крайней нужды. Она требует осторожности и вдумчивого применения. Тем более сведения используя из сети, которые очень часто бывают отрывочными, вырванными из контекста, не привязанными в общей картине.
Ну и последнее, у вас что, роутер постоянно загружен на 80%? Что вообще потребовало срочного снижения нагрузки? Дроп пакетов по IP на входящей цепочке одним правилом - это мизер, который крайне мало влияет на общую загруженность железа. Правила, использующие layer7 и content просто на порядки более ресурсоёмки. Вот на них и стоит сосредоточить своё внимание. А ваш "забор" из одного правила на input по IP не окажет никакого влияния на загруженность не окажет.
А вообще вопрос, конечно очень интересный. Спасибо за него огромное. Надо самому сесть, почитать внимательнее про RAW и connection tracker. Как-то всегда обходил этот вопрос стороной. И в итоге вот честно сказать имею ооооччччень поверхностное представление о его работе.
Коллеги, кто в теме, прошу отписаться и просветить. Возможно, я где-то ошибаюсь в своих предположения, поправьте.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
dinosaur
Сообщения: 17
Зарегистрирован: 08 окт 2019, 12:57

05 апр 2020, 12:39

Спасибо за Ваш отклик. Объективных (и субъективных) причин борьбы за производительность нет, просто наткнулся на ночь глядя на утверждение, на мой взгляд разумное, которое в моих условиях оказалось не рабочим и хочется понять почему. Для отладки выключил все лишние правила firewall, в листе "allow to internet" - все локальные адреса которым можно ходить наружу, в blacklist соответственно те, кому отказано во входящих подключениях на WAN (в WAN интерфейсы, обращенные в сторону провайдера). blacklist на наличие локальный адресов проверил (нет их там, ну то то что правило FILTER работает корректно тоже косвенно подтверждает корректность наполнения списка). Вот как настроен firewall для экспериментов:

/ip firewall filter
add action=accept chain=input comment=\
"allow related & esteblished connections" connection-state=\
established,related
add action=accept chain=input comment="alllow eoip to twonky" disabled=yes \
dst-address=172.16.1.1 protocol=gre src-address=172.16.1.0/24
add action=drop chain=input comment="drop black list connections" \
connection-state="" disabled=yes in-interface-list=WAN src-address-list=\
blacklist
add action=drop chain=input comment="drop invalid connections" \
connection-state=invalid
add action=accept chain=input comment="allow local connections" \
in-interface-list=!WAN log-prefix=allow
add action=drop chain=input comment="drop everything else" log-prefix=\
"firewall input drop:"
add action=accept chain=forward comment=\
"allow related & esteblished connections" connection-state=\
established,related
add action=drop chain=forward comment="drop invalid connections" \
connection-state=invalid
add action=accept chain=forward comment="allow from local to internet" \
in-interface-list=!WAN out-interface-list=WAN src-address-list=\
"allow to internet"
add action=accept chain=forward comment="allow echo reply" icmp-options=8:0 \
in-interface-list=!WAN protocol=icmp
add action=drop chain=forward comment="drop everything else" log=yes \
log-prefix="firewall forward drop:"
add action=accept chain=output comment="accept everything"

/ip firewall mangle
add action=add-src-to-address-list address-list=blacklist \
address-list-timeout=1d chain=input comment=\
"port scan - record to black list" dst-port=!XXX,XXX,XXX,XXX,XXX \
in-interface-list=WAN log-prefix=" --- TCP PORT SCAN ATTEMPT --- " \
protocol=tcp
add action=add-src-to-address-list address-list=blacklist \
address-list-timeout=1d chain=input comment=\
"port scan - record to black list" dst-port=!XXX,XXX,XXX,XXX,XXX \
in-interface-list=WAN log-prefix=" --- UDP PORT SCAN ATTEMPT --- " \
protocol=udp

/ip firewall nat
add action=masquerade chain=srcnat comment="allow local to internet" \
out-interface-list=WAN src-address-list="allow to internet"

/ip firewall raw
add action=drop chain=prerouting comment="\?\?\? drop black list connections" \
disabled=yes in-interface-list=WAN src-address-list=blacklist

Отметил что интернет пропадает не "наглухо", а только нет доступа к новым адресам (на новый сайт зайти не могу, а если сайт открыт - шастать по его страничкам получается без проблем), то есть established соединения не режутся этим правилом. И да, на закладке filter пробовал отключить все запрещающие правила - результат нулевой.


Аватара пользователя
Vlad-2
Модератор
Сообщения: 2531
Зарегистрирован: 08 апр 2016, 19:19
Откуда: Петропавловск-Камчатский (п-ов Камчатка)
Контактная информация:

05 апр 2020, 14:55

Вы должны в таблице RAW не "резать" всё, а делать правила согласно каким-то условиям, включая порты.
То есть атаки на какие-то порты, по каким-то блоком портов - надо отловить и сразу их в RAW и "убить"
То есть таблица RAW сделана чтобы как на входе, сразу отсеить "пьяных" и "обкуренных" и не пустить
их в здание, так и тут, сразу те пакеты, что для нас/Вас являются не нужными, их отсеить.

НО Вы свои правила задаёте слишком обобщённо, и вот что получается (я от себя говорю и слегка обобщённо и поверхностно).
Рассмотрим пример:
компьютер запросил скажем сайт ya.ru и пройдя всё, на роутере формируется исходящее
соединение, от внешнего адреса и скажем порт исходящий 55384, и данные ушли на Яндекс, с Яндекса ответ
прилетает, вот тут, Ваши правила слишком общие, прилетает ответ с неизвестного IP (у яндекса их тьма) и с порта
тоже фанарного, но в пакете есть заголовок (в котором указан Ваш реальный айпи и порт 55384).
И повторюсь, в этом моменте Вы и режете и формируете отказ роутера. То есть формально роутер роет яму сам себе,
и со временем проваливается в ней (набивается много ответов которые попадают в ловушку Вашу).
Если бы можно было так просто закрывать всё, так бы давно делали.

Поэтому в RAW надо описать условия более конкретные, что откуда или хотя бы куда, на какой протокол,
и на какой порт, и уже получив атаки по портам этим, это всё сразу дропать.
А вот уже в таблице Filter Rules там можно более тактично и правильно гибко резать/запрещать.

P.S.
Не много сумбурно, но как мысль шла, так и поделился.

P.P.S.
Вот как я убиваю DNS-Flood (не говорю что идеально, но работает и не трогаю)
а) первые два правил: дроп пакетов уже с тех айпи, кто есть в адрес листе (то есть те, кто меня
уже за предыдущие 24 часа уже "щупал")
б) командой JUMP формирую аналитику (что делать правилу, а именно на 53 порту, и если интерфейс входит в
список интерфейсов list23-WANs-Local-R-IP-ALL (что означает все реальные айпи) принять данный пакет
в) дальше заносим его в адрес-лист (формируем его)
г) дропаем текущий (атакующий) пакет(ы)
Для красоты и удобства, я разделяю на TCP и UDP, (моя прихоть).

Код: Выделить всё

/ip firewall raw
add action=drop chain=prerouting in-interface-list=list23-WANs-Local-R-IP-ALL src-address-list="Log SRC-IP DNS atack TCP RAW=>"
add action=drop chain=prerouting in-interface-list=list23-WANs-Local-R-IP-ALL src-address-list="Log SRC-IP DNS atack UDP RAW=>"
add action=jump chain=prerouting dst-port=53 in-interface-list=list23-WANs-Local-R-IP-ALL jump-target=DNS_DROP_TCP_RAW protocol=tcp
add action=jump chain=prerouting dst-port=53 in-interface-list=list23-WANs-Local-R-IP-ALL jump-target=DNS_DROP_UDP_RAW protocol=udp
add action=add-src-to-address-list address-list="Log SRC-IP DNS atack TCP RAW=>" address-list-timeout=1d chain=DNS_DROP_TCP_RAW
add action=add-src-to-address-list address-list="Log SRC-IP DNS atack UDP RAW=>" address-list-timeout=1d chain=DNS_DROP_UDP_RAW
add action=drop chain=DNS_DROP_TCP_RAW src-address-list="Log SRC-IP DNS atack TCP RAW=>"
add action=drop chain=DNS_DROP_UDP_RAW src-address-list="Log SRC-IP DNS atack UDP RAW=>"



На работе(ах): 2xCCR1016-12G, RB3011UiAS и hAP lite (RB941)
Дома: CCR1016-12G, RBcAP2n (standalone), RB wAP LTE kit
Для тестов(под рукой): RB3011UiAS, hAP mini (RB931) и что-то ещё по мелочи
MTCNA
MTCRE
dinosaur
Сообщения: 17
Зарегистрирован: 08 окт 2019, 12:57

07 апр 2020, 08:23

Спасибо за ликбез, что то в этом роде я и предполагал. Вероятно у тех, у кого это правило работает как надо - несколько другой круг задач.


Аватара пользователя
Vlad-2
Модератор
Сообщения: 2531
Зарегистрирован: 08 апр 2016, 19:19
Откуда: Петропавловск-Камчатский (п-ов Камчатка)
Контактная информация:

07 апр 2020, 12:22

dinosaur писал(а):
07 апр 2020, 08:23
Спасибо за ликбез, что то в этом роде я и предполагал. Вероятно у тех, у кого это правило работает как надо - несколько другой круг задач.
Думаю круг задач у всех один и тот же, а вот пути решения - да, каждый выбирает сам.
Моя задача - популярные порты прикрыть/защитить.

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

Ещё раз, если можно было так просто - всё убивать на входе, то не было бы ДДоС атак и прочего.
Увы, Интернет многогранен, и подход к его фильтрации и безопасности должен
в каждом конкретном случаи быть уникальным и точным.



На работе(ах): 2xCCR1016-12G, RB3011UiAS и hAP lite (RB941)
Дома: CCR1016-12G, RBcAP2n (standalone), RB wAP LTE kit
Для тестов(под рукой): RB3011UiAS, hAP mini (RB931) и что-то ещё по мелочи
MTCNA
MTCRE
geneg
Сообщения: 1
Зарегистрирован: 29 авг 2020, 07:09

29 авг 2020, 07:26

Подскажите, а почему просто нельзя дропнуть весь входящий WAN udp на 53 порт в raw prerouting?


Аватара пользователя
varrkan
Сообщения: 1
Зарегистрирован: 04 окт 2013, 17:46

16 сен 2020, 15:07

geneg писал(а):
29 авг 2020, 07:26
Подскажите, а почему просто нельзя дропнуть весь входящий WAN udp на 53 порт в raw prerouting?
вот и у меня тот же вопрос :) Выбрать интерфейс-лист внешний и дропнуть... исключив только DNS провайдера или те, которые используются.


Ответить