Сегодня рассмотрим защиту SSH-сервиса от атак Brute Force с помощью программы Fail2Ban, которая эффективно отслеживает сетевую активность и блокирует запросы с устройств, IP-адрес которых попал в чёрный список.
Установка Fail2Ban
Устанавливать Fail2Ban будем на операционную систему Ubuntu Server 18.04.
Перед установкой программы сперва выполним обновление системы:
sudo apt update
sudo apt dist-upgrade -y
Пакет Fail2Ban присутствует в официальном репозитории, поэтому его можно установить одной командой:
sudo apt install fail2ban -y
Настройка Fail2Ban для SSH
Все правки конфигурации мы будем производить в файле /etc/fail2ban/jail.local, этот файл будет подключен автоматически и его настройки имеют наивысший приоритет.
Откройте файл /etc/fail2ban/jail.local:
sudo nano /etc/fail2ban/jail.local
Если файл отсутствует, то сначала создадим его:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
В первую очередь нас интересует секция [DEFAULT]
. В ней содержатся основные правила:
- ignoreip — указание, какие IP-адреса не должны блокироваться. Вы можете задать через пробел несколько адресов, которые fail2ban не будет учитывать в своих проверках. Например, если у вас постоянный IP-адрес, то вы можете указать его, и тогда при ошибочном вводе пароля ваш IP не будет заблокирован.
- bantime — время в секундах, в течение которого подозрительный IP-адрес будет заблокирован.
- findtime — интервал времени в секундах, в течение которого программой будет определяться подозрительная активность.
- maxretry — число неудавшихся попыток авторизации в течение findtime секунд до попадания IP-адреса в бан.
Файл конфигурации fail2ban имеет по умолчанию подготовленные секции для различных сервисов. Найдём в нём секцию [sshd]
(в вашей системе это может быть [ssh]
или [ssh-iptables]
, если это так, то используйте ту секцию, которая у вас есть):
[sshd]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/auth.log
findtime = 600
maxretry = 3
bantime = 43200
- enabled — состояние (true/false) фильтра, показывающее, включен он или выключен.
- filter — какой фильтр применяется (со списком фильтров можно ознакомиться в /etc/fail2ban/filter.d/).
- action — действия, выполняемые при бане IP-адреса.
- logfile — файл с логами, которые будет отслеживать fail2ban.
Исходя из этого, конфиг, бан для IP на 12 часов, если с него в течение 10 минут было произведено 3 неудачных попытки авторизации
Можно подправить значения на свои. Далее сохраняемся (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 .Это убережёт вас от проникновения злоумышленников на сервер путём подбора пароля.
Если есть вопросы, то пишем в комментариях.