Как защитить SSH с помощью Fail2Ban на CentOS 7
Введение
Хотя подключение к вашему серверу через SSH может быть очень безопасным, сам демон SSH является службой, которая должна быть доступна в Интернете для правильной работы. Это сопряжено с некоторым неотъемлемым риском и предлагает вектор атаки для потенциальных нападавших.
Таким образом, любая служба, доступная в сети, является потенциальной целью. Если вы обратите внимание на журналы приложений для этих служб, вы часто увидите повторяющиеся систематические попытки входа в систему, которые представляют собой атаки методом грубой силы со стороны пользователей и ботов.
Служба под названием Fail2ban может смягчить эту проблему, создав правила, которые автоматически изменяют конфигурацию вашего брандмауэра iptables на основе предопределенного количества неудачных попыток входа в систему. Это позволит вашему серверу реагировать на незаконные попытки доступа без вашего вмешательства.
В этом руководстве мы расскажем, как установить и использовать Fail2ban на сервере CentOS 7.
Установите Fail2ban на CentOS 7
Хотя Fail2ban недоступен в официальном репозитории пакетов CentOS, он упакован для проекта EPEL. EPEL, расшифровывающийся как Extra Packages for Enterprise Linux, можно установить с пакетом выпуска, который доступен в CentOS:
- sudo yum install epel-release
Вам будет предложено продолжить — нажмите y, а затем Enter:
yum promptTransaction Summary
============================================================================
Install 1 Package
Total download size: 14 k
Installed size: 24 k
Is this ok [y/d/N]: y
Теперь у нас должна быть возможность установить пакет fail2ban
:
- sudo yum install fail2ban
Снова нажмите y и Enter, когда будет предложено продолжить.
После завершения установки используйте systemctl
, чтобы включить службу fail2ban
:
- sudo systemctl enable fail2ban
Настройка локальных параметров
Служба Fail2ban хранит файлы конфигурации в каталоге /etc/fail2ban
. Там вы можете найти файл со значениями по умолчанию, который называется jail.conf
. Поскольку этот файл может быть перезаписан обновлениями пакета, мы не должны редактировать его на месте. Вместо этого мы напишем новый файл с именем jail.local
. Любые значения, определенные в jail.local
, переопределяют значения в jail.conf
.
jail.conf
содержит раздел [DEFAULT]
, за которым следуют разделы для отдельных служб. jail.local
может переопределить любое из этих значений. Кроме того, файлы в /etc/fail2ban/jail.d/
можно использовать для переопределения настроек в обоих этих файлах. Файлы применяются в следующем порядке:
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf
в алфавитном порядке/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
в алфавитном порядке
Любой файл может содержать раздел [DEFAULT]
, выполняемый первым, а также может содержать разделы для отдельных джейлов. Последнее значение vavalue, установленное для данного параметра, имеет приоритет.
Начнем с написания очень простой версии jail.local
. Откройте новый файл с помощью nano
(или любого другого редактора):
- 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
:
- sudo systemctl restart fail2ban
Команда systemctl
должна завершиться без вывода. Чтобы проверить, что служба работает, мы можем использовать fail2ban-client
:
- sudo fail2ban-client status
OutputStatus
|- Number of jail: 1
`- Jail list: sshd
Вы также можете получить более подробную информацию о конкретном джейле:
- sudo fail2ban-client status sshd
Изучите доступные настройки
Версия jail.local
, которую мы определили выше, является хорошим началом, но вы можете настроить ряд других параметров. Откройте jail.conf
, и мы рассмотрим некоторые настройки по умолчанию. Если вы решите изменить какие-либо из этих значений, помните, что их следует скопировать в соответствующий раздел jail.local
и изменить там, а не изменять на месте.
- 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
. . Этот файл содержит регулярные выражения, которые определяют, является ли строка в журнале плохой. Мы не будем подробно рассматривать этот файл в этом руководстве, потому что он довольно сложный, а предопределенные настройки хорошо соответствуют соответствующим строкам.
Однако вы можете увидеть, какие фильтры доступны, заглянув в этот каталог:
- 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
:
- sudo systemctl restart fail2ban
Мониторинг журналов Fail2ban и конфигурации брандмауэра
Важно знать, что такой сервис, как Fail2ban, работает по назначению. Начните с использования systemctl
для проверки состояния службы:
- sudo systemctl status fail2ban
Если что-то здесь не так, вы можете устранить неполадки, проверив журналы для модуля fail2ban
с момента последней загрузки:
- sudo journalctl -b -u fail2ban
Затем используйте fail2ban-client
, чтобы запросить общий статус fail2ban-server
или любого отдельного джейла:
- sudo fail2ban-client status
- sudo fail2ban-client status jail_name
Следите за журналом Fail2ban, чтобы узнать о последних действиях (нажмите Ctrl-C, чтобы выйти):
- sudo tail -F /var/log/fail2ban.log
Список текущих правил, настроенных для iptables:
- sudo iptables -L
Показать правила iptables в формате, отражающем команды, необходимые для включения каждого правила:
- sudo iptables -S
Заключение
Теперь вы сможете настроить некоторые базовые политики запрета для ваших сервисов. Fail2ban очень легко настроить, и это отличный способ защитить любой сервис, использующий аутентификацию.
Если вы хотите узнать больше о том, как работает Fail2ban, вы можете ознакомиться с нашим руководством о том, как работают правила и файлы fail2ban.