запрет брут форса l2tp и список доверенных клиентов

Здесь выкладываем скрипты
Ответить
Аватара пользователя
Maxval
Сообщения: 7
Зарегистрирован: 10 май 2014, 10:00

28 окт 2017, 14:39

Всем доброго времени суток :-): Захотелось мне ограничить подключения к моему l2tp. Собственно гугление и RTFM помогли найти часть нужной информации, а именно о том как организовать защиту от кулхацкеров. В моем случае выглядит это так:

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

/ip firewall filter
add action=drop chain=input comment="Block l2tp brute forcer" 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

Есть 5 попыток подключения в течении 1 минуты, после чего ip заносится в blacklist. Вроде бы все ок на первый взгляд, НО потестировав обнаружил странную вещь. Если подключиться с Iphone и тут же отключиться, происходит более 5 запросов и выдается бан. Пытался сделать что-то типа white списка, чтобы успешно подключенные клиенты туда заносились на сутки и могли спокойно отключаться и подключаться сколько угодно раз в минуту (айпишники динамические, заранее не известны). Но ничего дельного не получилось, пытался плясать от "connection state: established и related", но не получается отсеять именно успешно авторизованных клиентов l2tp с ipsec. Может есть у кого-то какие-то идеи по данному вопросу? :ne_vi_del:


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

28 окт 2017, 15:01

У меня только идея :mi_ga_et:

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

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

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

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



На работе(ах): 2xCCR1016-12G, RB3011UiAS и hAP lite (RB941)
Дома: CCR1016-12G, RBcAP2n (standalone), RB wAP LTE kit
Для тестов(под рукой): RB3011UiAS, hAP mini (RB931) и что-то ещё по мелочи
MTCNA
MTCRE
Аватара пользователя
Maxval
Сообщения: 7
Зарегистрирован: 10 май 2014, 10:00

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 клиент залетает со своим внешним ип в адрес лист фаервола и в течении дня больше не проверяется. Спасибо за помощь =)


sergey.kudinov-godlevskiy
Сообщения: 1
Зарегистрирован: 17 янв 2019, 16:30

17 янв 2019, 16:36

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 клиент залетает со своим внешним ип в адрес лист фаервола и в течении дня больше не проверяется. Спасибо за помощь =)
Слишком сложно, вот держите.


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

17 янв 2019, 18:44

sergey.kudinov-godlevskiy писал(а):
17 янв 2019, 16:36
Слишком сложно, вот держите.
По вашей ссылке
Изображение
А такое, это то же самое, что и ничего.


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

26 апр 2019, 08:34

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 сек. осуществить подключение
  • Если подключение было разорвано, то подключаться можно без предварительного стука на правильный порт. Пока ип находится в белом списке
Я, конечно, подозреваю, что есть куда более правильные способы. Но оно работает! Да и додумано головой, не знающей покоя ) Что принесло удовлетворение от проделанной работы )
Прошу форумчан поправить, если что не так с моими правилами, касающиеся данного сегмента. Кидайте тапками, если я изобрел велосипед, все это не нужно, и можно обойтись куда более простыми решениями


Erik_U
Сообщения: 927
Зарегистрирован: 09 июл 2014, 12:33

26 апр 2019, 09:22

ПОднять IPSEC внутри L2TP, и блочить на ошибке фазы2.

Но у меня, например, заранее известны операторы, которыми пользуются клиенты VPN.
Их подсети собраны в адрес лист, который в разрешающих соединение L2TP правилах указан в SRC_AddressList.


Ответить