Защита роутера mikrotik от брутфорса vpn туннеля

В данной статье рассмотрим пример того, как настроить защиту от брутфорса (Brute force) на маршрутизаторе MikroTik. Для примера рассмотрим защиту для VPN (pptp, l2tp), ssh и ftp

Содержание

  • Введение
  • Описание тестового стенда
  • План работ. Краткое описание действий
  • Правила Firewall для защиты от брутфорс — атак на SSH и PPTP
  • Правила для SSH
  • Правила для PPTP
  • Блокировка ip-адресов из списка blacklist
  • Что выбрать DROP или REJECT?

Введение

В последнее время всё чаще встречаемся с брутфорсом (Brute force — метод взлома учетных записей посредствам подбора паролей к ним).  Чаще всего атака идет на стандартные сервисы и, соответственно, стандартные порты. Например:

  • SSH — TCP 22 port
  • PPTP — TCP 1723 port, GRE (не имеет порт)
  • L2TP — UDP 1701, 4500, 500 ports
  • RDP — TCP 3389 port
  • VNC — TCP 5900 port

Если вы используете сложные пароли, то подобрать их будет нелегко. Поэтому основная проблема, которая возникает при брутфорсе, это падение скорости сети. Часто это именно «скорость интернета». На входящий интерфейс маршрутизатора поступает большое количество пакетов с высокой скоростью, канал забивается, и «полезные» пакеты проходят с меньшей скоростью, чем хотелось бы.
Также стоит отметить, что многие серверы и маршрутизаторы ведут логи попыток авторизации. Если этих попыток тысячи, то размер логов может достигать нескольких десятков гигабайт. Это приводит к повышенной нагрузке на дисковую подсистему и быстрому расходу места.

В данной статье расскажем о том, как обезопасить себя от брутфорс (Brute force) — атак, используя маршрутизатор MikroTik.

Описание тестового стенда

  • Маршрутизатор Mikrotik
  • RouteOS 6.48.2
  • На маршрутизаторе открыт ssh и vpn-сервер(PPTP)

План работ. Краткое описание действий

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

Для защиты от брутфорс-атаки на SSH — TCP 22 port и PPTP — TCP 1723 port (для примера взяты стандартные порты) будем блокировать ip-адреса всех, кто попытается установить четыре соединения подряд с интервалом меньше одной минуты.

Реализуем это следующим образом:

  • При первом подключении по SSH добавляем ip-адрес в список ssh_stage1, если менее чем через одну минуту приходит ещё один запрос на подключение, добавляем в список ssh_stage2 и т.д. После списка ssh_stage3 идет список blacklist
  • Для подключений по PPTP такая же логика, только меняем название списков на pptp_stage1 — pptp_stage3
  • Для списка ip-адресов blacklist создадим правило блокировки в Firewall

Правила защиты от брутфорс — атак на SSH и PPTP

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

Для этого создадим: 

  • по 4 правила в IP-Firewall-Filter для SSH и для PPTP, которые будут добавлять ip-адреса для блокировки в список blacklist
  • правило блокировки в для всех ip-адресов из списка blacklist

Правила для SSH

/ip firewall filter

add chain=input protocol=tcp dst-port=22 connection-state=new \
src-address-list=ssh_stage3 action=add-src-to-address-list address-list=blacklist \
address-list-timeout=10d comment="blacklist" disabled=no

add chain=input protocol=tcp dst-port=22 connection-state=new \
src-address-list=ssh_stage2 action=add-src-to-address-list address-list=ssh_stage3 \
address-list-timeout=1m comment="ssh-stage3" disabled=no

add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh_stage1 \
action=add-src-to-address-list address-list=ssh_stage2 address-list-timeout=1m comment="ssh-stage2" disabled=no

add chain=input protocol=tcp dst-port=22 connection-state=new action=add-src-to-address-list \
address-list=ssh_stage1 address-list-timeout=1m comment="" disabled=no

Правила для PPTP

/ip firewall filter

add chain=input protocol=tcp dst-port=1723 connection-state=new \
src-address-list=pptp_stage3 action=add-src-to-address-list address-list=blacklist \
address-list-timeout=10d comment="blacklist" disabled=no

add chain=input protocol=tcp dst-port=1723 connection-state=new \
src-address-list=pptp_stage2 action=add-src-to-address-list address-list=pptp_stage3 \
address-list-timeout=1m comment="pptp-stage3" disabled=no

add chain=input protocol=tcp dst-port=1723 connection-state=new src-address-list=pptp_stage1 \
action=add-src-to-address-list address-list=pptp_stage2 address-list-timeout=1m comment="pptp-stage2" disabled=no

add chain=input protocol=tcp dst-port=1723 connection-state=new action=add-src-to-address-list \
address-list=pptp_stage1 address-list-timeout=1m comment="" disabled=no

правило для блокировки ip-адресов из списка «blacklist«

/ip firewall raw
add chain=prerouting src-address-list=blacklist action=drop \
comment="drop brute forcers" disabled=no

 Детальное описание правил

Для понимания детально рассмотрим каждую строку правил для SSH и правило блокировки ip-адерсов из списка «blacklist«.
Начнём с привил для SSH. Строки будем рассматривать с конца. Начнем с четвертой.

строка 4

add chain=input protocol=tcp dst-port=22 connection-state=new action=add-src-to-address-list \
address-list=ssh_stage1 address-list-timeout=1m comment="" disabled=no

Этой строкой «говорим» микротику добавить на одну минуту (address-list-timeout=1m) ip-адрес нового соединения (connection-state=new), поступившего на порт 22 TCP (protocol=tcp dst-port=22) в адрес-лист  (address-list=ssh_stage1)

строка 3

add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh_stage1 \
action=add-src-to-address-list address-list=ssh_stage2 address-list-timeout=1m comment="ssh-stage2" disabled=no

Этой строкой «говорим» микротику добавить на одну минуту (address-list-timeout=1m) ip-адрес нового соединения (connection-state=new), поступившего на порт 22 TCP (protocol=tcp dst-port=22) в адрес-лист  (address-list=ssh_stage2), если этот ip-адрес уже находится в списке ssh_stage1 (src-address-list=ssh_stage1)

Аналогично добавляем в список ssh_stage3 — строка 2

строка 1

add chain=input protocol=tcp dst-port=22 connection-state=new \
src-address-list=ssh_stage3 action=add-src-to-address-list address-list=blacklist \
address-list-timeout=10d comment="blacklist" disabled=no

Этой строкой «говорим» микротику добавить на десять дней (address-list-timeout=10d) ip-адрес нового соединения (connection-state=new), поступившего на порт 22 TCP (protocol=tcp dst-port=22) в адрес-лист  (address-list=blacklist), если этот ip-адрес уже находится в списке ssh_stage3 (src-address-list=ssh_stage3)

Блокировка ip-адресов из списка «blacklist«

/ip firewall raw
add chain=prerouting src-address-list=blacklist action=drop \
comment="drop brute forcers" disabled=no

После того как мы создали правила заполнения списка «blacklist«, нужно добавить правило блокировки всех ip-адресов, входящих в него. Для этого нужно правильно выбрать цепочку, в которой будем осуществлять блокировку, и вид блокировки. 

Цепочку предлагаю выбрать PREROUTING. Обратите внимание, что есть RAW PREROUTING и MANGLE PREROUTING.  В нашем случае используется RAW PREROUTING, так как эта обработка идет первой. Это позволит снизить нагрузку на процессор.
В официальной документации предлагают делать правило в цепочке INPUT. Возможно, это сделано для того, чтобы было удобней управлять правилами в разделе «IP-Firewall-Filter Rules«.

Вид блокировки. Что выбрать DROP или REJECT?

Для того, чтобы выбрать, нужно понимать разницу между drop и reject.

  • reject — отбросить пакет и отправить ICMP сообщение об отклонении
  • drop — просто отбрасывает пакет

В сети давно идет холивар на тему что лучше. Выбор зависит от того, какие задачи нужно решить и от чего защититься.

В нашем примере будем использовать Drop, это позволит снизить нагрузку на процессор и уменьшить исходящий трафик, так как маршрутизатор не будет отправлять ответ (как при reject), а просто сбрасывать соединение.

Обратите внимание, что  есть RAW PREROUTING и MANGLE PREROUTING.  В нашем случае используется RAW PREROUTING, так как эта обработка идет первой.

  • Yp Legal Solutions
  • Yale University Law School Lsat Score
  • Writing a Legal Opinion
  • Work from Home Legal Jobs for Freshers
  • Womble Bond Dickinson Am Law
  • Windscreen Banner Legal
  • Wife Cheating Legal Separation
  • Why Is the Executive Agreement so Important
  • Why Does Rawls Modify Standard Social Contract Theory
  • Who’s Who Legal Germany 2021
  • Who Is the Antagonist in Legally Blonde 2
  • Who Can Witness a Legal Charge
  • White and Case Legal Tech
  • Which of the following Is Not Currently an Exception to the Exclusionary Rule
  • Which Is Not Part of the Definition of Political Parties
  • Where to Mail Form 2553 and 8832
  • Where Is All Drugs Legal
  • When Would You Write an Informative Statement in Real Life
  • When Is It Legal to Use the Shoulder of the Road
  • When Can You Legally Get a Job in Canada

 https://hd.zp.ua/zashhita-routera-mikrotik-ot-brutforsa-vpn-tunnelya/

Иногда нужно защитить свой роутер от брутфорса VPN туннеля. Если с SSH это решается защитой от брутфорса по новым соединениям то с L2TP это не подойдет, так как обмен сообщениями идет в рамках одной сессии. И с точки зрения роутера устанавливается только одно соединение (после неправильного пароля связь не обрывается).

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

l2tp_error

Открываем поток, вскрываем пакет ответа о неправильном пароле и что же мы видим. Правильно — обычный текст о том что «нифига» не правильно. Ага, значит по этому мы и будем ловить

1м правилом режем коннекты кулхацкеров, после чего строим защиту.

код

1

2

/ip firewall filter

add action=reject chain=input src-address-list=black

если action=drop то пакеты по тихому дропаются.
если action=reject (оно по дефолту будет отправлять сообщение icmp network unreachable) то комп атакующего будет получать сообщение что данная сеть недоступна. Разница в том что при drop отправитель ничего не будет знать о судьбе пакетов и будет продолжать их слать,
а при reject его устройство получит уведомление что сеть недоступна и возможно перестанет отправлять нам пакеты.
Но reject больше грузит процессор роуетра. Поэтому нужно в каждом отдельном случае решать, что будет лучше с точки зрения нагрузки на роутер

код

1

2

3

4

/ip firewall filter

add action=add-dst-to-address-list address-list=black chain=output content=”M=bad” dst-address-list=level2

add action=add-dst-to-address-list address-list=level2 address-list-timeout=1m chain=output content=”M=bad” dst-address-list=level1

add action=add-dst-to-address-list address-list=level1 address-list-timeout=1m chain=output content=”M=bad”

Логика простая — если юзер логонится и получает ответ о непрвильном пароле то его заносим в адрес-лист1 на одну минуту. Если в течении этой минуты он опять неверно логонится то на минуту заносим его в адрес-лист2. Если же будучи в адрес-листе2 он опять неверно логонится то ему прямой путь в адрес-лист запрещенных. Потом можно дропать все пакеты от адресов из адрес-листа запрещенных, это как вам будет нужно.
Количество уровней выберете сами, 2-3 самое оптимальное число. что бы и себя не забанить если случайно 2 раза ошиблись и не мучать роутер долгими брутфорсами «дятлов» из интернета
С ув.erazel

   Сейчас просматривают тему: 0 ->
, и гостей: 1

  • Предыдущая тема
  • Следующая тема

Автор темы

Макс

Администраторы

Азъ: библиАтекарь

Возраст: 40 Водолей

Пол:

С нами: 15 лет 11 месяцев

Поблагодарил: 7141

Благодарностей: 26777

Предупреждений: 0

Иногда нужно защитить свой роутер от брутфорса VPN туннеля. Если с SSH это решается защитой от брутфорса по новым соединениям то с L2TP это не подойдет, так как обмен сообщениями идет в рамках одной сессии. И с точки зрения роутера устанавливается только одно соединение (после неправильного пароля связь не обрывается).
Тут нам на помощь придет небольшое знание структуры пакетов.

Защита роутера Mikrotik от брутфорса VPN туннеля

Открываем поток, вскрываем пакет ответа о неправильном пароле и что же мы видим. Правильно – обычный текст о том что “нифига” не правильно. Ага, значит по этому мы и будем ловить

1м правилом режем коннекты кулхацкеров, после чего строим защиту.

Код:[Выделить]
/ip firewall filter add action=reject chain=input src-address-list=black

если action=drop то пакеты по тихому дропаются.
если action=reject (оно по дефолту будет отправлять сообщение icmp network unreachable) то комп атакующего будет получать сообщение что данная сеть недоступна. Разница в том что при drop отправитель ничего не будет знать о судьбе пакетов и будет продолжать их слать,
а при reject его устройство получит уведомление что сеть недоступна и возможно перестанет отправлять нам пакеты.
Но reject больше грузит процессор роуетра. Поэтому нужно в каждом отдельном случае решать, что будет лучше с точки зрения нагрузки на роутер

Код:[Выделить]
/ip firewall filter add action=add-dst-to-address-list address-list=black chain=output content=”M=bad” dst-address-list=level2 add action=add-dst-to-address-list address-list=level2 address-list-timeout=1m chain=output content=”M=bad” dst-address-list=level1 add action=add-dst-to-address-list address-list=level1 address-list-timeout=1m chain=output content=”M=bad”

Логика простая – если юзер логонится и получает ответ о непрвильном пароле то его заносим в адрес-лист1 на одну минуту. Если в течении этой минуты он опять неверно логонится то на минуту заносим его в адрес-лист2. Если же будучи в адрес-листе2 он опять неверно логонится то ему прямой путь в адрес-лист запрещенных. Потом можно дропать все пакеты от адресов из адрес-листа запрещенных, это как вам будет нужно.
Количество уровней выберете сами, 2-3 самое оптимальное число. что бы и себя не забанить если случайно 2 раза ошиблись и не мучать роутер долгими брутфорсами “дятлов” из интернета

С ув.erazel

maxya Тётя шура тут
«Все постоянно твердят об авторских правах, но никогда — об авторских обязанностях.» © Жан-Люк Годар

Maxval писал(а): ↑

28 окт 2017, 16:22

Vlad-2 писал(а):У меня только идея :mi_ga_et:

Надо слегка обхитрить текущую защиту Вашу!
1) при успешном подключении скриптом вытаскивать адрес внешнего подключения и заносить в белый список
2) указать белый список ранее(перед) правилами Вашими! (то есть сначала смотрим белый, потом Блок-лист списки)
3) (и самое важное!) если подключение происходит с адреса из белого списка, то в файрволе с помощью Jump сразу «убегать» на правило:

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

add action=accept chain=input comment="Allow L2TP" dst-port=1701,500,4500 protocol=udp

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

В общем как всегда, методом научного тыка, гуглением и не пониманием происходящего удалось сделать как надо:

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

add action=accept chain=input comment="Block l2tp brute forcer" dst-port=1701,500,4500 protocol=udp src-address-list=l2tp_success tcp-flags=""
add action=drop chain=input connection-state="" dst-port=1701,500,4500 log=yes log-prefix="--==DROP L2TP brute forcer==--" protocol=udp src-address-list=l2tp_blacklist tcp-flags=""
add action=add-src-to-address-list address-list=l2tp_blacklist address-list-timeout=3d chain=input connection-state=new dst-port=1701,500,4500 protocol=udp src-address-list=l2tp_stage5 tcp-flags=""
add action=add-src-to-address-list address-list=l2tp_stage5 address-list-timeout=1m chain=input connection-state=new dst-port=1701,500,4500 protocol=udp src-address-list=l2tp_stage4 tcp-flags=""
add action=add-src-to-address-list address-list=l2tp_stage4 address-list-timeout=1m chain=input connection-state=new dst-port=1701,500,4500 protocol=udp src-address-list=l2tp_stage3 tcp-flags=""
add action=add-src-to-address-list address-list=l2tp_stage3 address-list-timeout=1m chain=input connection-state=new dst-port=1701,500,4500 protocol=udp src-address-list=l2tp_stage2 tcp-flags=""
add action=add-src-to-address-list address-list=l2tp_stage2 address-list-timeout=1m chain=input connection-state=new dst-port=1701,500,4500 protocol=udp src-address-list=l2tp_stage1 tcp-flags=""
add action=add-src-to-address-list address-list=l2tp_stage1 address-list-timeout=1m chain=input connection-state=new dst-port=1701,500,4500 protocol=udp tcp-flags=""
add action=accept chain=input comment="Allow L2TP" dst-port=1701,500,4500 protocol=udp

/ppp profile
add change-tcp-mss=yes local-address=10.0.0.1 name=L2TP-Server on-up="/ip firewall address-list add list=l2tp_success address=\$\"caller-id\" timeout=1d" remote-address=l2tp_pool use-encryption=yes use-mpls=yes

После успешного подключения по l2tp/ipsec клиент залетает со своим внешним ип в адрес лист фаервола и в течении дня больше не проверяется. Спасибо за помощь =)

Спасибо вам, все работает.

Видимо я слишком параноидален, но вот засела мысль, которую выкинуть из головы не получилось )
В общем сделал по вашему скрипту. В то же время наткнулся на другой гайд по порт-кногингу. И идея мне понравилась. Но, из-за своей параноидальности, взбрело в голову что возможен такой момент: Если вдруг, по какой-либо случайности, пакет попадет на правильный порт, то зная, или подобрав данные к доступу моего l2tp, есть вероятность, что доступ будет осуществлен. Решил объединить ваш скрипт и порт-кногинг.
У меня, к сожалению, нет опыта по настройке микротика. Даже не разобрался пока как сделать выгрузку правил фаерволла. Все сделал по гайдам.

Действовал методом тыка, вот что получилось:

Собственно логика такая:

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

Правильная последовательность действий для подключения:

  • Постучаться на правильный порт
  • В течение 10 сек. осуществить подключение
  • Если подключение было разорвано, то подключаться можно без предварительного стука на правильный порт. Пока ип находится в белом списке

Я, конечно, подозреваю, что есть куда более правильные способы. Но оно работает! Да и додумано головой, не знающей покоя ) Что принесло удовлетворение от проделанной работы )
Прошу форумчан поправить, если что не так с моими правилами, касающиеся данного сегмента. Кидайте тапками, если я изобрел велосипед, все это не нужно, и можно обойтись куда более простыми решениями

Другие наши интересноые статьи:

  • Значение лампочек на роутере tp link
  • Зеленая точка роутер в аренду
  • Зачем сим карта в роутере
  • Защита от ддос атак на роутере что это
  • Значок интернета горит красным на роутере tp link

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии