# Практика №1. Fail2Ban-SSH и Brute-force attack. **Fail2ban** — простой в использовании локальный сервис, который отслеживает log–файлы запущенных программ, и на основании различных условий блокирует по IP найденных нарушителей. В качестве SSH-сервера Будем использовать виртуальную машину под управлением ОС Ubuntu 20.04. Первым делом обновим ОС и установим предложенные обновления. ![](https://i.imgur.com/CfsLmaB.png) ![](https://i.imgur.com/vBt1Ntw.png) Установим SSH-сервер на Ubuntu. ![](https://i.imgur.com/89Jysc2.png) Для автоматического запуска службы нужно добавить её в автозагрузку. Для этого выполним следущющие команды и проверим статус службы: ![](https://i.imgur.com/phhIJfq.png) ![](https://i.imgur.com/820MotG.png) Далее установим Fail2Ban: ![](https://i.imgur.com/ENN0pUw.png) Так как Fail2Ban запускается после перезагрузки или старте ОС, выполним следующие команды, а также проверим статус службы: ![](https://i.imgur.com/9KrhHbZ.png) Ознакомимся со всеми файлами в директории Fail2Ban: ![](https://i.imgur.com/EICLfTm.png) Самый важный файл - это jail.conf. Он содержит фильтры по умолчанию для определенных служб. Теперь перейдём в нужную директорию и откроем файл конфигурации: ![](https://i.imgur.com/jAUu24U.png) ![](https://i.imgur.com/sZD8jp2.png) Нам рекомендовано создать дополнительный файл с расширением `.local` так как при обновлении Fail2Ban файл jail.conf может тоже обновиться и настройки будут возвращены на стандартные. Создадим такой файл: ![](https://i.imgur.com/IyHnjXU.png) Далее необходимо создать фильтр для SSH: ``` [sshd] - указывает, что это сервис ssh enable = true - указывает на то, что данные фильтр включен, истина или ложь true укаем порт и log файл port = ssh ``` Для того чтобы нам для Fail2Ban дать информацию куда смотреть, делаем следующее: ![](https://i.imgur.com/k0CSiqM.png) ![](https://i.imgur.com/wYovp2L.png) Данный файл показывает все попытки аунтификации по sshd, т.е. нам надо указать в фильтре следующее: ``` filter = sshd logpath = /var/log/auth.log - указываем где брать информацию maxretry = 3 - указываем какое количество попыток ввода пароля сделает пользователь прежде чем его заблокирует fail2ban bantime = 3600 - указывает на какое количество времени заблокируется ip-адрес пользователя после неправильного ввода пароля 3 раза (вводится секундами т.е. 3600 сек. это 60 мин.) Также можно установить и больше, всё завист от того как часто атакуют сервер. ignoreip = 127.0.0.1 - белый список ip-адресов, которые не будут попадать под фильтр ``` В итоге мы получаем следующую конфигурацию: ![](https://i.imgur.com/1M8bSxt.png) Сохраняем и выходим. Затем делаем перезагрузку сервиса для того, чтобы новая конфигурация применилась. После этого проверим, что Fail2Ban работает: ![](https://i.imgur.com/a2nq0ld.png) Теперь попробуем подключиться по SSH и ввести три раза неверный пароль и посмотрим статистику Fail2Ban. Как видим, заблокирован IP-адрес, с которого выполнялось подключение: ![](https://i.imgur.com/BcXppMy.png) ![](https://i.imgur.com/dQ2CEFN.png) Теперь попробуем ещё одним способом с использованием утилиты `Hydra` при помощи собственного словаря с паролями, который мо сосздадим при помощи утилиты `pwdlogy`: ![](https://i.imgur.com/xF9eoFS.png) ![](https://i.imgur.com/9EOCYp6.png) ![](https://i.imgur.com/xkoXX49.png) ![](https://i.imgur.com/DcjFvFz.png) `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)** ![](https://i.imgur.com/kVNtdPg.png) **1. Подбор пароля Hydra (Fail2Ban ON)** ![](https://i.imgur.com/BtDnr0Y.png) Убедимся, что количество неудачных попыток ввода пароля в логах Fail2Ban увеличилось: ![](https://i.imgur.com/CEnib9n.png) Разблокируем IP-адрес в Fail2Ban: ![](https://i.imgur.com/673Nc7y.png) Сбросим блокировку Fail2Ban и проверим, что никто в данный момент не блокируется: ![](https://i.imgur.com/v72T2Me.png) Также попробуем подбор пароля при помощи утилиты `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)** ![](https://i.imgur.com/rotZaJY.png) **2. Medusa (Fail2Ban ON)** ![](https://i.imgur.com/I23j9xa.png) **3. Petator (Fail2Ban OFF)** ``` Параметр - Значение ssh_login - необходимый модуль host - наша цель user - логин пользователя, к которому подбирается пароль или файл с логинами для множественного подбора password - словарь с паролями ``` ![](https://i.imgur.com/jEq8avy.png) ![](https://i.imgur.com/bJdGlru.png) **3. Petator (Fail2Ban ON)** ![](https://i.imgur.com/NMgUpOh.png) **4. MSFCONSOLE (Fail2Ban OFF)** ![](https://i.imgur.com/rtT401c.png) ![](https://i.imgur.com/1jftpb8.png) ![](https://i.imgur.com/mrWMvmc.png) ![](https://i.imgur.com/LmHHNAM.png) **4. MSFCONSOLE (Fail2Ban ON)** ![](https://i.imgur.com/egLLwSk.png)