воскресенье, 2 августа 2015 г.

Mikrotik защита от buteforce в 2 строчки

Возник вопрос защиты микротика от попыток подбора пароля.
Поиск на просторах интернета принес много вариантов.
Основная идея в них - добавить ip адрес в blacklist после некоторого количества неудачных попыток.

Вот примеры таких конфигураций:
http://matthewsiemens.com/blocking-ssh-brute-force-attacks-in-mikrotik-routeros/
http://www.helpset.ru/как-настроить-и-защитить-mikrotik-от-перебора

Как видим, конфигурация достаточно "многословна".
Хотелось чего-то попроще, желательно без работы с address-list.

Придумался следующий вариант:

/ip firewall filter
add chain=input comment="prevent bruteforce ssh and winbox" connection-state=new dst-limit=1/1m,0,src-address/5m dst-port=22,8291 per-connection-classifier=src-address:1/0 protocol=tcp

add action=reject chain=input comment="prevent bruteforce ssh and winbox" connection-state=new dst-port=22,8291 protocol=tcp reject-with=tcp-reset

Первое правило разрешает устанавливать не более одного нового соединения (connection-state=new) с уникального ip адреса в минуту. Т.е. после неудачной попытки аутентификации сервер (ssh или winbox) закрывает соединение. Следующая попытка соединения попадает в правило №2 и клиент получает reject. Через минуту после первой попытки начнет работать правило №1. И опять разрешит попытку подключиться по ssh или winbox.

Приведенные выше правила действуют не столь радикально, как блокировки через address-list. Однако, они позволяют сильно замедлить брутфорс.

Давайте проверим это на практике.
Для тестового bruteforce используем классический Intercepter NG.
Проверяем ssh. Дефолтная настройка 5 потоков.
На микротик разрешен доступ по ssh.
За 5 минут Intercepter проверил 1600 паролей.

Добавляем правила в firewall и повторяем тест.
За те же 5 минут удалось проверить 30 паролей.


P.S. Эти правила не помогут против распределенного bruteforce (с разных ip). Но это уже совсем другая история.

воскресенье, 28 июня 2015 г.

Подсчет суммарного потребления памяти по пользователям на PowerShell

Возникла потребность узнать, кто из пользователей "выедает" больше оперативки на терминальнике.
Получился вот такой скрипт.
Отказ от ответственности чтобы прикрыть себе задницу ;)
1. Я не программист
2. Приоритетом была читабельность кода, а не его лаконичность
# подсчет выделенной памяти по пользователям
# полезно для териминальников


# получаем таблицу соответствия user_id и UserName
$owners = @{}
gwmi win32_process -ErrorAction SilentlyContinue |% {$owners[$_.handle] = $_.getowner().user}


# получаем список процессов и добавляем туда username
$Process_List = (get-process | select cpu,pm,vm,ws,processname,Id,@{l="Owner";e={$owners[$_.id.tostring()]}})

# можно отфильтровать по конкретному приложению
# в моем случае интересовало потребление памяти хромом
$Process_List = ($Process_List | where {$_.Processname -eq "chrome"} )

# групируем список по Owner
$Process_Group_By_Owner = ($Process_List | select cpu,pm,vm,ws,processname,Id,Owner | Group-Object -Property Owner)

# добавляем сортировку, приводим к удобным единицам измерения, округляем до 1 знака после запятой
$Process_Group_By_Owner | select Name, @{l="Mem"; e={($_.Group | Measure-Object -Sum WS | Select-Object -expandProperty Sum )}} | Sort-Object -Property Mem -Descending | select Name,@{l="MemGB";e={[math]::Round(($_.Mem/1GB),1)}} | ft -AutoSize