Поиск по сайту:

Как защитить SSH с помощью Fail2Ban на CentOS 7


Введение

Хотя подключение к вашему серверу через SSH может быть очень безопасным, сам демон SSH является службой, которая должна быть доступна в Интернете для правильной работы. Это сопряжено с некоторым неотъемлемым риском и предлагает вектор атаки для потенциальных нападавших.

Таким образом, любая служба, доступная в сети, является потенциальной целью. Если вы обратите внимание на журналы приложений для этих служб, вы часто увидите повторяющиеся систематические попытки входа в систему, которые представляют собой атаки методом грубой силы со стороны пользователей и ботов.

Служба под названием Fail2ban может смягчить эту проблему, создав правила, которые автоматически изменяют конфигурацию вашего брандмауэра iptables на основе предопределенного количества неудачных попыток входа в систему. Это позволит вашему серверу реагировать на незаконные попытки доступа без вашего вмешательства.

В этом руководстве мы расскажем, как установить и использовать Fail2ban на сервере CentOS 7.

Установите Fail2ban на CentOS 7

Хотя Fail2ban недоступен в официальном репозитории пакетов CentOS, он упакован для проекта EPEL. EPEL, расшифровывающийся как Extra Packages for Enterprise Linux, можно установить с пакетом выпуска, который доступен в CentOS:

  1. sudo yum install epel-release

Вам будет предложено продолжить — нажмите y, а затем Enter:

yum prompt
Transaction Summary ============================================================================ Install 1 Package Total download size: 14 k Installed size: 24 k Is this ok [y/d/N]: y

Теперь у нас должна быть возможность установить пакет fail2ban:

  1. sudo yum install fail2ban

Снова нажмите y и Enter, когда будет предложено продолжить.

После завершения установки используйте systemctl, чтобы включить службу fail2ban:

  1. sudo systemctl enable fail2ban

Настройка локальных параметров

Служба Fail2ban хранит файлы конфигурации в каталоге /etc/fail2ban. Там вы можете найти файл со значениями по умолчанию, который называется jail.conf. Поскольку этот файл может быть перезаписан обновлениями пакета, мы не должны редактировать его на месте. Вместо этого мы напишем новый файл с именем jail.local. Любые значения, определенные в jail.local, переопределяют значения в jail.conf.

jail.conf содержит раздел [DEFAULT], за которым следуют разделы для отдельных служб. jail.local может переопределить любое из этих значений. Кроме того, файлы в /etc/fail2ban/jail.d/ можно использовать для переопределения настроек в обоих этих файлах. Файлы применяются в следующем порядке:

  1. /etc/fail2ban/jail.conf
  2. /etc/fail2ban/jail.d/*.conf в алфавитном порядке
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local в алфавитном порядке

Любой файл может содержать раздел [DEFAULT], выполняемый первым, а также может содержать разделы для отдельных джейлов. Последнее значение vavalue, установленное для данного параметра, имеет приоритет.

Начнем с написания очень простой версии jail.local. Откройте новый файл с помощью nano (или любого другого редактора):

  1. sudo nano /etc/fail2ban/jail.local

Вставьте следующее:

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

[sshd]
enabled = true

Это переопределяет три параметра: устанавливает новое bantime по умолчанию для всех служб, гарантирует, что мы используем iptables для конфигурации брандмауэра, и включает sshd тюрьма.

Выйдите и сохраните новый файл (в nano нажмите Ctrl-X для выхода, y для сохранения и Enter для подтверждения имени файла). Теперь мы можем перезапустить службу fail2ban с помощью systemctl:

  1. sudo systemctl restart fail2ban

Команда systemctl должна завершиться без вывода. Чтобы проверить, что служба работает, мы можем использовать fail2ban-client:

  1. sudo fail2ban-client status
Output
Status |- Number of jail: 1 `- Jail list: sshd

Вы также можете получить более подробную информацию о конкретном джейле:

  1. sudo fail2ban-client status sshd

Изучите доступные настройки

Версия jail.local, которую мы определили выше, является хорошим началом, но вы можете настроить ряд других параметров. Откройте jail.conf, и мы рассмотрим некоторые настройки по умолчанию. Если вы решите изменить какие-либо из этих значений, помните, что их следует скопировать в соответствующий раздел jail.local и изменить там, а не изменять на месте.

  1. sudo nano /etc/fail2ban/jail.conf

Настройки по умолчанию для всех джейлов

Сначала прокрутите раздел [DEFAULT].

ignoreip = 127.0.0.1/8

Вы можете настроить исходные адреса, которые Fail2ban игнорирует, добавив значение к параметру ignoreip. В настоящее время он настроен так, чтобы не запрещать любой трафик, исходящий с локальной машины. Вы можете включить дополнительные адреса для игнорирования, добавив их в конец параметра, разделенные пробелом.

bantime = 600

Параметр bantime устанавливает период времени, в течение которого клиент будет заблокирован, если ему не удалось правильно пройти аутентификацию. Это измеряется в секундах. По умолчанию установлено значение 600 секунд или 10 минут.

findtime = 600
maxretry = 3

Следующие два параметра, на которые следует обратить внимание, — это findtime и maxretry. Они работают вместе, чтобы установить условия, при которых клиент должен быть забанен.

Переменная maxretry устанавливает количество попыток аутентификации клиента в течение временного интервала, определенного findtime, прежде чем он будет заблокирован. С настройками по умолчанию Fail2ban заблокирует клиента, который безуспешно пытается войти в систему 3 раза в течение 10-минутного окна.

destemail = root@localhost
sendername = Fail2Ban
mta = sendmail

Если вы хотите настроить оповещения по электронной почте, вам может потребоваться переопределить настройки destemail, sendername и mta. Параметр destemail задает адрес электронной почты, на который должны приходить сообщения о бане. sendername устанавливает значение поля \From в электронном письме. Параметр mta определяет, какая почтовая служба будет использоваться для отправки почты.

action = $(action_)s

Этот параметр настраивает действие, которое Fail2ban предпринимает, когда хочет установить бан. Значение action_ определено в файле незадолго до этого параметра. Действие по умолчанию — просто настроить брандмауэр так, чтобы он отклонял трафик от хоста-нарушителя до тех пор, пока не истечет время запрета.

Если вы хотите настроить оповещения по электронной почте, вы можете изменить это значение с action_ на action_mw. Если вы хотите, чтобы электронное письмо содержало соответствующие строки журнала, вы можете изменить его на action_mwl. Вы должны убедиться, что у вас настроены соответствующие параметры почты, если вы решите использовать почтовые оповещения.

Настройки для отдельных джейлов

После [DEFAULT] мы столкнемся с разделами, настраивающими отдельные джейлы для разных сервисов. Обычно они включают в себя порт для блокировки и logpath для отслеживания попыток злонамеренного доступа. Например, тюрьма SSH, которую мы уже включили в jail.local, имеет следующие настройки:

[sshd]

port    = ssh
logpath = %(sshd_log)s

В этом случае ssh является предопределенной переменной для стандартного порта SSH, а %(sshd_log)s использует значение, определенное в другом месте стандартной конфигурации Fail2ban (это помогает сохранить jail.conf переносимый между различными операционными системами).

Другой параметр, с которым вы можете столкнуться, — это filter, который будет использоваться для определения того, указывает ли строка в журнале на неудачную аутентификацию.

Значение filter на самом деле является ссылкой на файл, расположенный в каталоге /etc/fail2ban/filter.d, с удаленным расширением .conf. . Этот файл содержит регулярные выражения, которые определяют, является ли строка в журнале плохой. Мы не будем подробно рассматривать этот файл в этом руководстве, потому что он довольно сложный, а предопределенные настройки хорошо соответствуют соответствующим строкам.

Однако вы можете увидеть, какие фильтры доступны, заглянув в этот каталог:

  1. ls /etc/fail2ban/filter.d

Если вы видите файл, который, похоже, связан с используемой вами службой, вам следует открыть его в текстовом редакторе. Большинство файлов довольно хорошо прокомментированы, и вы должны быть в состоянии сказать, от какого типа условий был разработан сценарий. У большинства этих фильтров есть соответствующие (отключенные) разделы в jail.conf, которые при желании мы можем включить в jail.local.

Например, представьте, что мы обслуживаем веб-сайт с помощью Nginx, и поймем, что защищенная паролем часть нашего сайта перекрывается попытками входа в систему. Мы можем указать Fail2ban использовать файл nginx-http-auth.conf для проверки этого условия в файле /var/log/nginx/error.log.

На самом деле это уже настроено в разделе с именем [nginx-http-auth] в нашем файле /etc/fail2ban/jail.conf. Нам просто нужно добавить параметр enabled для тюрьмы nginx-http-auth в jail.local:

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

[sshd]
enabled = true

[nginx-http-auth]
enabled = true

И перезапустите службу fail2ban:

  1. sudo systemctl restart fail2ban

Мониторинг журналов Fail2ban и конфигурации брандмауэра

Важно знать, что такой сервис, как Fail2ban, работает по назначению. Начните с использования systemctl для проверки состояния службы:

  1. sudo systemctl status fail2ban

Если что-то здесь не так, вы можете устранить неполадки, проверив журналы для модуля fail2ban с момента последней загрузки:

  1. sudo journalctl -b -u fail2ban

Затем используйте fail2ban-client, чтобы запросить общий статус fail2ban-server или любого отдельного джейла:

  1. sudo fail2ban-client status
  2. sudo fail2ban-client status jail_name

Следите за журналом Fail2ban, чтобы узнать о последних действиях (нажмите Ctrl-C, чтобы выйти):

  1. sudo tail -F /var/log/fail2ban.log

Список текущих правил, настроенных для iptables:

  1. sudo iptables -L

Показать правила iptables в формате, отражающем команды, необходимые для включения каждого правила:

  1. sudo iptables -S

Заключение

Теперь вы сможете настроить некоторые базовые политики запрета для ваших сервисов. Fail2ban очень легко настроить, и это отличный способ защитить любой сервис, использующий аутентификацию.

Если вы хотите узнать больше о том, как работает Fail2ban, вы можете ознакомиться с нашим руководством о том, как работают правила и файлы fail2ban.