Сегодня рассмотрим защиту SSH-сервиса от Brute Force — атака перебором, при помощи программы Fail2Ban.
При покупки VPS или вы организуете свой сервер на Linux. Для администрирования данного сервера предоставляется/организуется доступ по SSH протоколу. Но как известно, если есть открытый порт, то его можно скомпрометировать (взломать). Для защиты от таких попыток взлома протокола SSH в Linux системах используется утилита Fail2Ban.
Установка Fail2Ban
Устанавливать Fail2Ban буду на операционную систему Ubuntu Server 20.04.
Перед установкой программы сперва выполним обновление системы:
sudo apt update && sudo apt dist-upgrade -y
Пакет Fail2Ban присутствует в официальном репозитории, поэтому его можно установить одной командой:
sudo apt install fail2ban -y
Настройка Fail2Ban для SSH
Всю настройку будем производить в файле /etc/fail2ban/jail.local
— этот файл будет подключен автоматически и иметь наивысший приоритет.
Но давайте сперва откроем другой файл, файл jail.conf
sudo nano /etc/fail2ban/jail.conf
В данном файле находим секцию [DEFAULT]
. В ней содержатся основные правила:
- ignoreip — указание, какие IP-адреса не должны блокироваться. Вы можете задать через пробел несколько адресов, которые fail2ban не будет учитывать в своих проверках. Например, если у вас постоянный IP-адрес, то вы можете указать его, и тогда при ошибочном вводе пароля ваш IP не будет заблокирован.
- bantime — время в секундах, в течение которого подозрительный IP-адрес будет заблокирован.
- findtime — интервал времени в секундах, в течение которого программой будет определяться подозрительная активность.
- maxretry — число неудавшихся попыток авторизации в течение
findtime
секунд до попадания IP-адреса в бан.
Также находим подготовленные секции для различных сервисов. Найдём секцию [sshd] (в вашей системе это может быть [ssh] или [ssh-iptables], если это так, то используйте ту секцию, которая у вас есть). Я приведу пример из ОС Ubuntu Server 20.04:
[sshd]
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Скопирована данный текст в файл jail.local
:
sudo nano /etc/fail2ban/jail.local
Добавим необходимую конфигурацию:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
- enabled — состояние (true/false) фильтра, показывающее, включен он или выключен.
- filter — какой фильтр применяется (со списком фильтров можно ознакомиться в /etc/fail2ban/filter.d/).
- action (backend) — действия, выполняемые при бане IP-адреса.
- logfile (logpath) — файл с логами, которые будет отслеживать fail2ban.
Можно подправить значения на свои. Далее сохраняемся (Ctrl+O) и выходим (Ctrl+X), перезапустим fail2ban для применения настроек:
sudo service fail2ban restart
К слову, fail2ban ведёт лог, поэтому если не удаётся перезапустить программу из-за некорректной конфигурации, то стоит заглянуть туда:
tail -n 20 -f /var/log/fail2ban.log
- -n — указывает, сколько последних строк из лога вывести на экран.
Для выполнения проверки достаточно несколько раз ввести неправильный пароль при авторизации и убедиться, что дальнейшие запросы от вас не обрабатываются. Следует обратить внимание на следующее:
- желательно проверку производить не с того же IP, с которого осуществляете настройку (чтобы иметь возможность разбанить себя и отредактировать конфиг).
- для проверки время бана лучше выставить поменьше.
- необходимо убедиться, что IP, с которого производится проверка, не был указан в
ignoreip
.
Заключение
Мы рассмотрели использование fail2ban для защиты SSH от брутфорса. Аналогичным образом можно защитить FTP, apache, postfix, dovecot и многие другие сервисы. Вот например статьи для защиты WordPress, защита OpenVPN или защита phpmyadmin .Это убережёт вас от проникновения злоумышленников на сервер путём подбора пароля.
[endtxt]