# Практика №1. Fail2Ban-SSH и Brute-force attack.
**Fail2ban** — простой в использовании локальный сервис, который отслеживает log–файлы запущенных программ, и на основании различных условий блокирует по IP найденных нарушителей.
В качестве SSH-сервера Будем использовать виртуальную машину под управлением ОС Ubuntu 20.04.
Первым делом обновим ОС и установим предложенные обновления.


Установим SSH-сервер на Ubuntu.

Для автоматического запуска службы нужно добавить её в автозагрузку. Для этого выполним следущющие команды и проверим статус службы:


Далее установим Fail2Ban:

Так как Fail2Ban запускается после перезагрузки или старте ОС, выполним следующие команды, а также проверим статус службы:

Ознакомимся со всеми файлами в директории Fail2Ban:

Самый важный файл - это jail.conf. Он содержит фильтры по умолчанию для определенных служб.
Теперь перейдём в нужную директорию и откроем файл конфигурации:


Нам рекомендовано создать дополнительный файл с расширением `.local` так как при обновлении Fail2Ban файл jail.conf может тоже обновиться и настройки будут возвращены на стандартные.
Создадим такой файл:

Далее необходимо создать фильтр для SSH:
```
[sshd] - указывает, что это сервис ssh
enable = true - указывает на то, что данные фильтр включен, истина или ложь true
укаем порт и log файл
port = ssh
```
Для того чтобы нам для Fail2Ban дать информацию куда смотреть, делаем следующее:


Данный файл показывает все попытки аунтификации по sshd, т.е. нам надо указать в фильтре следующее:
```
filter = sshd
logpath = /var/log/auth.log - указываем где брать информацию
maxretry = 3 - указываем какое количество попыток ввода пароля сделает пользователь прежде чем его заблокирует fail2ban
bantime = 3600 - указывает на какое количество времени заблокируется ip-адрес пользователя после неправильного ввода пароля 3 раза (вводится секундами т.е. 3600 сек. это 60 мин.) Также можно установить и больше, всё завист от того как часто атакуют сервер.
ignoreip = 127.0.0.1 - белый список ip-адресов, которые не будут попадать под фильтр
```
В итоге мы получаем следующую конфигурацию:

Сохраняем и выходим. Затем делаем перезагрузку сервиса для того, чтобы новая конфигурация применилась. После этого проверим, что Fail2Ban работает:

Теперь попробуем подключиться по SSH и ввести три раза неверный пароль и посмотрим статистику Fail2Ban. Как видим, заблокирован IP-адрес, с которого выполнялось подключение:


Теперь попробуем ещё одним способом с использованием утилиты `Hydra` при помощи собственного словаря с паролями, который мо сосздадим при помощи утилиты `pwdlogy`:




`sudo hydra -l osboxes -P /tmp/pwdlogy/gen.txt ssh://192.168.1.65 -v`
```
-R – восстановить ранее прерванную сессию Hydra;
-S – использовать SSL для подключения;
-s – указать порт;
-l – использовать логин;
-L – выбирать логины из файла со списком;
-p – использовать пароль;
-P – использовать пароль из файла со списком;
-M – взять список целей из файла;
-x – генератор паролей;
-u – по умолчанию hydra проверяет все пароли для первого логина, эта опция позволяет проверить один пароль для всех логинов;
-f – выйти, если правильный логин/пароль найден;
-o – сохранить результат в файл;
-t – количество потоков для программы;
-w – время между запросами в секундах;
-v – подробный вывод;
-V – выводить тестируемые логины и пароли.
4:4:1 - пароль размером четыре символа, состоящий только из цифр. А именно все пароли в диапазоне 0000-9999;
4:8:1 - пароль от четырех до восьми символов, только из цифр;
4:5:aA1. - пароль, размером от 4 до 5 символов, состоит из цифр, букв верхнего и нижнего регистра или точки.
```
**1. Подбор пароля Hydra (Fail2Ban OFF)**

**1. Подбор пароля Hydra (Fail2Ban ON)**

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

Разблокируем IP-адрес в Fail2Ban:

Сбросим блокировку Fail2Ban и проверим, что никто в данный момент не блокируется:

Также попробуем подбор пароля при помощи утилиты `Medusa` при помощи того же словаря. Как видим, выполняется подбор пароля:
`medusa -h 192.168.1.65 -u osboxes -Р /tmp/pwdlogy/gen.txt -М ssh -f -v 6`
```
Параметр Значение
-h IР-адрес жертвы
-u Логин
-Р Путь к словарю
-М Выбор модуля
-f Остановка после нахождения валидной пары логин/пароль
-v Настройка отображения сообщений на экране во время процесса подбора
```
**2. Medusa (Fail2Ban OFF)**

**2. Medusa (Fail2Ban ON)**

**3. Petator (Fail2Ban OFF)**
```
Параметр - Значение
ssh_login - необходимый модуль
host - наша цель
user - логин пользователя, к которому подбирается пароль или файл с логинами для множественного подбора
password - словарь с паролями
```


**3. Petator (Fail2Ban ON)**

**4. MSFCONSOLE (Fail2Ban OFF)**




**4. MSFCONSOLE (Fail2Ban ON)**
