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

Вступление

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

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

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

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

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

Хотя Fail2ban недоступен в официальном репозитории пакетов CentOS, он упакован дляEPEL project. EPEL, сокращение от Extra Packages for Enterprise Linux, может быть установлен с пакетом выпуска, которыйis доступен в 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/ могут использоваться для переопределения настроек в обоих этих файлах. Файлы применяются в следующем порядке:

  1. /etc/fail2ban/jail.conf

  2. /etc/fail2ban/jail.d/*.conf по алфавиту

  3. /etc/fail2ban/jail.local

  4. /etc/fail2ban/jail.d/*.local по алфавиту

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

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

sudo nano /etc/fail2ban/jail.local

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

/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 устанавливает значение поля «От» в электронном письме. Параметрmta определяет, какая почтовая служба будет использоваться для отправки почты.

action = $(action_)s

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

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

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

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

/etc/fail2ban/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:

/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

[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, вы можете ознакомиться с нашим руководством поhow fail2ban rules and files work.

Related