# Практическая работа №6 (“Fail2Ban-SSH и Brute-force attack”.)
## Цель работы:
Научиться настраивать Fail2Ban для SSH
## Задача:
1) Настроить SSH-сервер и SSH-клиент
2) Запретить доступ от root
3) Вывести журнал подключений пользователей SSH
4) Установить и настроить Fail2Ban для SSH
5) Провести несколько разных атак
## Основные понятия
1) ***SSH*** - это Secure Shell (безопасная оболочка), специальный протокол для передачи данных в безопасном режиме. Он очень часто применяется для удаленного управления компьютерами и устройствами по сети.
2) ***Fail2Ban*** - это бесплатная популярная программная платформа с открытым исходным кодом, разработанная для предотвращения вторжений, которую можно использовать для защиты вашего сервера от атак методом перебора паролей. Одной из главных задач Fail2ban является блокировка IP-адреса, активность которого имеет явный вредоносный признак.
3) ***Hydra*** - это программное обеспечение с открытым исходным кодом для перебора паролей в реальном времени от различных онлайн сервисов, веб-приложений, FTP, SSH и других протоколов. Это распараллеленный взломщик для входа в систему, он поддерживает множество протоколов для осуществления атак.
## Подготовка к работе
1) Для начала нужно обновиться:
> sudo apt-get update
2) Затем установим утилиту Fail2Ban
> sudo apt-get install fail2ban
После установки данной утилиты мы должны прописать команду для активации:
> service fail2ban start
3) После этого установим Hydra:
> sudo apt-get install hydra
Мы можем начинать!
## Работа с SSH (Сервер)
Установка пакетов SSH:
> sudo apt-get install ssh
После установки проверим состояние SSH:
> service sshd status

Режим работы SSH-сервера с настройками по-умолчанию хоть и является вполне работоспособным для небольших частных сетей, всё же нуждается в задании некоторых важных параметров для использования на высоконадёжных публичных серверах. Настройки демона хранятся в файле ***/etc/ssh/sshdconfig***
Просмотреть его содержимое можно командой:
> cat /etc/ssh/sshd_config
В первую очередь следует обратить внимание на следующие параметры: Port, AddressFamily, ListenAddress.
***Port***
Глобально задаёт номер порта, через который будет работать соединение и если оставить его стандартным, т. е. 22, то велика вероятность, что он будет слишком часто сканироваться роботами.

***AddressFamily*** и ***ListenAddress***

Если необходимо использовать доступ по паролю, то обязательно нужно отключать авторизацию по пустому паролю:
> PermitEmptyPasswords no

Следует также отключать root-доступ:
> PermitRootLogin no

Для применения сделанных настроек необходим перезапуск SSH-сервера:
> sudo systemctl restart sshd
Итоговый файл конфигурации выглядит следуюзим образом:


Остальное отавить по-умолчанию.
Очень полезным является параметр, позволяющий проводить авторизацию и шифрование трафика с помощью специальных SSH-ключей:
> PubkeyAuthentication yes
Следует заметить, что в таком случае серверу необходимо явно указывать, где хранятся открытые ключи пользователей. Это может быть как один общий файл для хранения ключей всех пользователей (обычно это файл etc/.ssh/authorized_keys), так и отдельные для каждого пользователя ключи. Второй вариант предпочтительнее в силу удобства администрирования и повышения безопасности:
> AuthorizedKeysFile etc/ssh/authorized_keys # Для общего файла
>
> AuthorizedKeysFile %h/.ssh/authorized_keys # Файл -> пользователь
Во втором варианте благодаря шаблону автоподстановки с маской «%h» будет использоваться домашний каталог пользователя.
## Fail2Ban знакомство
Все файлы конфигурации хранятся в следующей директории:
> ls -al /etc/fail2ban
Самый важный файл в данной конфигурации ***jail.conf***, поскольку в нём содержатся фильтры по умолчанию.
Пример вывода:

На моём примере вывода можно заметить файл с названием ***jail.local***, я его создала для того, чтобы не потерять записанный мною фильтр при перезапуске Fail2Ban.
Чтобы создать этот файл, нужно прописать команду ***nano jail.conf***, находять в директории /etc/fail2ban.
Далее нужно вписать следующие данные:

В логах под названием ***auth.log*** показываются все попытки аунтификации по sshd.
После настройки необходимо перезапустить сервис командой, это нужно для того, чтобы новые настройки вступили в силу:
> service fail2ban restart
Удостоверюсь, что Fail2Ban активен:
> service fail2ban status
Пример вывода:

### Проверка работоспособности
Попробуем подключиться по ssh и ввести три раза неправильно пароль:
Пример вывода:

## Вывод журнала подключений
Попробую подключиться по SSH:

Затем проверю на сервере историю подключений:
> cat /var/log/auth.log

## Проведение атак
### Fail2Ban VS Patator
Patator – это инструмент атак Brute-forcе для многоцелевого и гибкого использования в рамках модульной конструкции. Он использует инструменты и скрипты атак для получения паролей.
Необходимо создать 2 файла:
1. Файл с возможными именами пользователя
> sudo touch users_name.txt

2. Файл с возможными паролями пользователя
> sudo touch passwords.txt

Посмотрим свой ip адрес:

Чтобы начать брутфорс-атаку, необходимо использовать команду:
> patator ssh_login host=192.168.176.139 user=FILE0 password=FILE1 0=user_name.txt 1=passwords.txt -x ignore:mesg='Authentication failed'
Где:
`host=` - ip адрес цели
`user=FILE0 password=FILE1` - данные, которые будет использовать Potator при брутфорс-атаке
`0=user_name.txt 1=passwords.txt` - файлы, созданные нами, именно из них Potator будет брать данные для брутфорса
`-х ignore:mesg= 'Authentication failed'` - команда не выводить на экран строку, имеющую данное сообщение. Параметр фильтрации подбирается индивидуально. То есть в зависимости от версии и настроек сервера, сообщение об неудачной аутентификации может быть другим

### Patator без Fail2Ban

### Fail2Ban VS Hydra
При использовании такого инструмента, как Hydra, необходимо знать имя пользователя, в сторону которого будет проводиться брутфорс-атака.
Попробуем использовать Hydra:
> hydra -V -f -t 4 -l olpeach -P ./passwords.txt ssh://192.168.176.139
Где:
`l – использовать логин;`
`P – использовать пароль из файла со списком;`

### Hydra без Fail2Ban

### Fail2Ban VS Medusa
В нашем случае воспользуемся командой:
> medusa -h 192.168.176.139 -u olpeach -P passwords.txt -M ssh -f -v 6
`-h` - IР-адрес жертвы
`-u` - Логин
`-Р` - Путь к словарю
`-М` - Выбор модуля
`-f` - Остановка после нахождения валидной пары логин/пароль
`-v` - Настройка отображения сообщений на экране во время процесса подбора

### Medusa без Fail2Ban
