Вступление
Хотя подключение к вашему серверу через 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/
могут использоваться для переопределения настроек в обоих этих файлах. Файлы применяются в следующем порядке:
-
/etc/fail2ban/jail.conf
-
/etc/fail2ban/jail.d/*.conf
по алфавиту -
/etc/fail2ban/jail.local
-
/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.