Защита SSH от подбора пароля с помощью Fail2ban
Для обеспечения безопасности вашего сервера от атак, таких как брутфорс-взломы, рекомендуется настраивать и использовать аутентификацию по ключу вместо пароля.
Другим методом защиты может быть использование инструмента Fail2ban. Fail2ban анализирует журналы работы служб на сервере и, обнаружив подозрительную активность, автоматически блокирует IP-адреса потенциальных злоумышленников. Fail2ban может быть применен для защиты различных служб, таких как Apache, FTP, dovecot и многих других.
В данной статье мы рассмотрим базовую настройку Fail2ban для защиты службы SSH от атак перебора паролей.
Для установки Fail2ban на Ubuntu/Debian, выполните следующие команды:
sudo apt update
sudo apt install fail2ban -y
Для установки на CentOS:
sudo yum update && yum install epel-release
sudo yum install fail2ban
Далее, добавьте Fail2ban в автозагрузку:
sudo systemctl enable fail2ban
На Ubuntu, защита SSH будет активирована сразу после установки. По умолчанию, Fail2ban будет блокировать IP-адреса на 10 минут, если в течение 10 минут было совершено 5 неудачных попыток аутентификации.
Эти и другие параметры работы инструмента можно настроить в его конфигурационных файлах.
Конфигурационный файл Fail2ban
Настройки Fail2ban хранятся в конфигурационном файле /etc/fail2ban/jail.conf.
Настройки разделены на разделы. В разделе [DEFAULT] указаны общие параметры, применимые ко всем службам. Специфические настройки для конкретных служб прописываются в соответствующих разделах, таких как [sshd], [apache-auth], [vsftpd].
Рекомендуется не изменять параметры напрямую в файле jail.conf. Вместо этого, создайте файл jail.local в той же директории и внесите изменения в нем.
Вы можете либо скопировать оригинальный файл:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Либо создать новый пустой файл:
sudo touch /etc/fail2ban/jail.local
Затем внесите в файл jail.local только те настройки, которые вы хотите изменить. Остальные параметры будут наследовать значения из файла jail.conf.
Настройка защиты SSH
Откройте файл jail.local для редактирования:
sudo nano /etc/fail2ban/jail.local
Приведенный ниже пример демонстрирует возможные настройки, которые могут быть внесены в файл:
[DEFAULT]
ignoreip = 95.111.123.21
[sshd]
enabled = true
findtime = 120
maxretry = 3
bantime = 43200
Эти настройки означают следующее: если с IP-адреса, не входящего в список исключений, в течение 2 минут произойдут 3 неудачные попытки аутентификации, Fail2ban автоматически заблокирует этот адрес на 12 часов.
Секция DEFAULT предлагает настройки, такие как длительность блокировки (bantime), максимальное количество попыток (maxretry) и т. д. В данном руководстве мы описываем большинство настроек в отдельной секции для SSH, и в разделе DEFAULT оставляем только параметр ignoreip:
- ignoreip - это "белый список" IP-адресов, которые не будут автоматически блокироваться при неудачных попытках входа. Вы можете добавить сюда свой собственный IP-адрес (если он статический, а не динамический) с которого вы обычно подключаетесь к серверу. Также можно указать несколько адресов, разделяя их пробелами, или маски подсети.
Если не требуется использовать белый список, вы можете просто закомментировать эту строку, предварительно добавив символ #.
В разделе [sshd] вы можете указать настройки для обработки Fail2ban конкретной службы - SSH. В зависимости от системы, раздел может иметь разные названия, такие как [sshd], [ssh] или [ssh-iptables] (это можно проверить в файле jail.conf).
Важно помнить, что если какой-то параметр отсутствует в файле конфигурации, Fail2ban будет использовать значения по умолчанию. Таким образом, вам нужно указывать только те параметры, которые требуется изменить.
Здесь мы представляем параметры для настройки:
- enabled — обязательный параметр, который определяет активацию или деактивацию данной секции. Для активации этот параметр должен иметь значение true, которое, по умолчанию, уже установлено. Обратите внимание, что в CentOS этот параметр изначально закомментирован. Если вы редактируете копию основного файла jail.conf, убедитесь, что вы убрали символ # перед этим параметром, чтобы включить секцию;
- bantime — продолжительность блокировки в секундах, т.е. период, на который подозрительный IP-адрес будет заблокирован;
- maxretry — количество неудачных попыток в течение периода findtime, после которых будет выполнена блокировка;
- findtime — период в секундах, в течение которого событие (в данном случае, неудачная попытка подключения) должно повториться определенное количество раз (maxretry), перед тем как будет выполнена блокировка.
Кроме того, существуют и другие настраиваемые параметры, такие как:
- port — порт, используемый данной службой, например, SSH. Если SSH у вас использует нестандартный порт (не 22), укажите его здесь. В случае использования стандартного порта, указание этого параметра необязательно;
- logpath — путь к лог-файлу, который анализирует Fail2ban. По умолчанию, это стандартный путь к SSH-логам;
- action — действие, выполняемое при блокировке IP-адреса. По умолчанию, это блокировка IP-адреса с помощью правил iptables.
Чтобы заблокировать все порты для данного IP-адреса, можно использовать: action = iptables-allports.
Если на вашем сервере настроен firewalld или ufw, вы должны указать соответствующие значения для action: firewallcmd-ipset или ufw соответственно.
Полный список доступных действий можно найти в каталоге /etc/fail2ban/action.d.
После сохранения внесенных изменений, перезапустите Fail2ban:
sudo systemctl restart fail2ban.service
Проверка
После настройки Fail2ban рекомендуется проверить его функционирование. Лучше всего провести проверку не сразу, а через некоторое время после сохранения настроек, чтобы получить более наглядные результаты.
Заблокированные IP-адреса могут быть просмотрены в правилах iptables:
sudo iptables -L
Также, существует возможность просмотра журналов работы Fail2ban:
sudo tail /var/log/fail2ban.log
Дополнительную информацию можно получить через интерфейс Fail2ban:
sudo fail2ban-client status sshd