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

Здесь выкладываем скрипты
vyacheslav.judov
Сообщения: 1
Зарегистрирован: 13 дек 2018, 02:06
Откуда: Брянск

31 июл 2019, 10:46

Спасибо за содержательную информацию. Благодаря этой ветке понял, что делал не так.

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


Аватара пользователя
Volant
Сообщения: 53
Зарегистрирован: 26 фев 2018, 18:32
Контактная информация:

27 авг 2019, 20:35

Вопрос имею - каким образом с помощью данных правил выполняется главная задача(судя по названию темы) - защита от брута аккаутнов l2tp сервера?

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

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
у меня вот как то не получилось понять... что должно заставить источник брута(ip адрес) попасть в блеклист?

В блеклист отлично попадает l2tp клиент на айфоне, авторизируясь через 3g(медленное подключение), с правильной парой логин/пароль - вообще без вариантов - блеклист обеспечен. Может прокатить если используется достаточно быстрое подключение к инету, wi fi например, а может и не прокатить - какая либо задержка в аторизации и прохождение всех этапов(l2tp_stage1-5) обеспечена, а дальше - бан. Нормально проходят авторизацию клиенты на винде или том же микротике и то, благодаря высокоскоростному подключению, думаю, что через что то медленное(тот же 3g) можно легко попасть в бан.
Главная задача не выполняется(у меня не получилось) - сколько не стучись с НЕправильной парой логин/пароль - не понимаю, что в данных правилах должно заставить ip источника брута, в итоге, попасть в блеклист?

Прошу старших товарищей разъяснить, как добиться выполнения задачи:
1. нормальная авторизация клиентов даже с использованием медленного подключения
2. занесение в ip источника брута в блеклист
или ткнуть носом в то, чего я, возможно, не вижу(не понимаю)


KARaS'b
Сообщения: 1123
Зарегистрирован: 29 сен 2011, 09:16

27 авг 2019, 23:01

Давайте разберем правило, хотя бы одно

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

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=""
Согласно этому правилу, любое новое! (это важно - connection-state=new) входящее соединение по портам 1701,500,4500 добавляется в адрес лист "l2tp_stage1" на одну минуту.
Следующее правило (правило выше на строчку) работает точно так же, за двумя исключениями - оно работает только для адресов из списка "l2tp_stage1" и если с этих адресов происходит новое! подключение по тем же портам, то оно добавляет эти адреса в следующий список, тоже на одну минут.
Как это работает: Брутфорсер пытаясь подобрать связку логин пасс создает новое подключение к вашему микроту, что автоматически добавляет его в адрес лист l2tp_stage1, как и всех, даже "хороших", но поскольку у брутфорсера нет правильной связки логина и пасса, его соединение прерывается, дальше он пробует еще и еще, что заставляет его создавать новые соединения, а микрот добавлять его адрес в последующие списки, пока он не дойдет до списка с блокировкой и не получит запрет на подключение. В то же время обладатели "правильных" логинов и паролей останавливаются на этом этапе (или хотя бы на одном из следующих), так как их соединения устанавливаются и уже не подпадают под connection-state=new, поскольку установленные соединения становятся established. Соответственно, если он будет пытаться подобрать пароль и будет подключаться реже 1 раза в минуту, что бы не попасть в список №2 и все последующие списки, то он никогда не заблокируется вашим микротом, но при этом его быстрее съедят черви, чем он подберет верную связку логин пасс от вашего l2tp сервера :hi_hi_hi: . Отталкиваясь от этого, можно сделать выводы, что ваш айфон почему-то ведет себя как типичный брутфорсер - с очень частой периодичностью создает новые соединения к l2tp серверу, что заставляет микрот добавлять его в списки "выше" и в конечном итоге блокировать.


Аватара пользователя
Volant
Сообщения: 53
Зарегистрирован: 26 фев 2018, 18:32
Контактная информация:

28 авг 2019, 01:54

KARaS'b писал(а):
27 авг 2019, 23:01
Давайте разберем правило, хотя бы одно

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

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=""
Как работают все эти правила мне как раз таки вполне понятно, ничего хитрого в них нет.
KARaS'b писал(а):
27 авг 2019, 23:01
Согласно этому правилу, любое новое! (это важно - connection-state=new) входящее соединение по портам 1701,500,4500 добавляется в адрес лист "l2tp_stage1" на одну минуту.
Вы совершенно правы - любое новое!(входящее соединение) - это справедливо для ssh, для telnet, фиг знает для чего еще... но это совершенно не работает с ppp соединениями... т.к при попытке коннекта ppp соединение проходит в рамках одной сессии - при вводе неверной пары лог/пасс соединение НЕ прерывается и ни в какой l2tp_stage1 оно не попадает и следовательно никакого продолжения, согласно правилам, не имеет - сервер тупо отвергает коннект и все.
При попытке коннекта с правильной парой лог/пасс в рамках этой же одной сессии происходит столько connection-state=new, что все наши l2tp_stageХ-ХХ легко забиваются, а дальше - привет. Но может и пронесет - зависит от кол-ва l2tp_stage - чем больше, тем больше шансов состояться коннекту.. но это же полная ерунда - повезет/не повезет.
зы
удивительно - столько постов и никто это не протестировал? имею в виду попытку брута. С коннектом, с правильной парой лог/пасс - здесь понятно - коннектится, скриптом в профайле заносится внешний ip в l2tp_success - вроде как все хорошо...

Логично следующее - что бы вся эта кухня нормально работала, нужно что то отлавливать при ответе сервера на неверную пару лог/пасс... Погуглил...
Написал все в сервер

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

 /ip firewall filter
;;; for_block_l2tp_brute-forcer
chain=input action=accept tcp-flags="" protocol=udp src-address-list=l2tp_success dst-port=1701,500,4500 log=no log-prefix="" 

chain=input action=reject reject-with=icmp-network-unreachable protocol=udp src-address-list=l2tp_blacklist dst-port=1701,500,4500 log=no log-prefix="" 

chain=output action=add-dst-to-address-list dst-address-list=l2tp_stage2 address-list=l2tp_blacklist address-list-timeout=3d content=M=bad log=no log-prefix="" 

chain=output action=add-dst-to-address-list dst-address-list=l2tp_stage1 address-list=l2tp_stage2 address-list-timeout=1m content=M=bad log=no log-prefix="" 

chain=output action=add-dst-to-address-list address-list=l2tp_stage1 address-list-timeout=1m content=M=bad log=no log-prefix="" 

;;; for_l2tp
chain=input action=accept protocol=udp dst-port=1701,500,4500 log=no log-prefix="" 


/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
Протестировал.. и шо имею сказать - такиработает..)


Axizdkr
Сообщения: 13
Зарегистрирован: 31 янв 2013, 15:27

21 окт 2019, 09:17

Зачем городить 3 списка, 3 правила, если можно сделать 1 вместо них, указав там рейт-лимит?
По сути получается 3 попытки в минуту.
это одним правилом делается

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

chain=output action=add-dst-to-address-list dst-limit=3/1m,3,src-address/300 address-list=l2tp_blacklist address-list-timeout=3d content="M=bad" log=no log-prefix=""
это 3 пакета в минуту, бёрст 3, смотреть по сорс адресу, за последние 5 минут(300 секунд).
Не хочу критиковать, просто действительно интересно зачем списки городить когда уже есть механизм готовый, он плохо работает?


Axizdkr
Сообщения: 13
Зарегистрирован: 31 янв 2013, 15:27

21 окт 2019, 09:40

Давно dst-limit не пользовался, оказывается он срабатывает пока не достигнут порог, поэтому надо правило с лимитом поставить выше правила которое в список добавляет, как то так получается готовая схема выглядит.

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

/ip firewall filter
add chain=input action=drop protocol=udp src-address-list=l2tp_blacklist dst-port=1701,500,4500 log=no log-prefix=""
add action=accept chain=output content="M=bad" dst-limit=1/1m,2,dst-address/8m20s protocol=udp src-port=1701,500,4500
add action=add-dst-to-address-list address-list=l2tp-brutforce address-list-timeout=3d chain=output content="M=bad" protocol=udp src-port=1701,500,4500
из очевидных плюсов - порог срабатывания можно регулировать без добавления новых списков/правил просто меняя значения на вкладке extra правила которое разрешает вводить неверный пароль.


xSav
Сообщения: 2
Зарегистрирован: 22 окт 2019, 18:41

22 окт 2019, 19:02

Axizdkr писал(а):
21 окт 2019, 09:40
как то так получается готовая схема выглядит.
Попробовал эту схему. Для теста создал l2tp соединение с зикселя на микрот с неправильным логином и пассом. В списки то зиксел заносится но слать неверные логин и пасс не перестает. Так как я понял это из-за того что происходит это все в пределах одного соединения. Надо как-то после трех попыток сделать дроп того который попадает в список бана
(это с позиции новичка. только изучаю)


Axizdkr
Сообщения: 13
Зарегистрирован: 31 янв 2013, 15:27

24 окт 2019, 11:26

не важно новое соединение или текущее, правило блока должно отрабатывать, у вас просто выше ВАШЕ разрешающее правило стоит под этот тип трафика, поэтому не отрабатывает правило на дроп, но это предположительно, так-то не экстрасенс.


xSav
Сообщения: 2
Зарегистрирован: 22 окт 2019, 18:41

16 ноя 2019, 15:37

Оно отработает только в RAW прероутинге


Axizdkr
Сообщения: 13
Зарегистрирован: 31 янв 2013, 15:27

16 ноя 2019, 21:06

чего?


Ответить