Многие запущенные на сервере службы для корректной работы должны держать порты открытыми. Однако каждый открытый порт — это потенциально слабое место в безопасности.
Подключение к серверу по протоколу SSH довольно безопасно, но в то же время служба SSHd должна оставаться открытой для Интернета, а это связано с рисками, так как любая служба, открытая для запросов из сети, является потенциальной брешью в защите. Журналы таких служб регулярно фиксируют серии попыток входа, что говорит об атаках методом подбора.
Fail2ban — это инструмент для предотвращения вторжений, который работает совместно с межсетевым экраном, установленным на сервере. Fail2ban анализирует файлы журналов и создаёт правила, которые могут автоматически изменять поведение брандмауэра и используются для блокировки попыток подключения после нескольких неудачных попыток.
Рассмотрим процесс установки и настройки fail2ban на CentOS 7.
Установка Fail2Ban
Поскольку Fail2ban недоступен напрямую из CentOS, необходимо установить EPEL — репозиторий содержащий пакеты Fedora для CentOS (выполняйте от имени суперпользователя):
sudo yum install epel-release
Затем установите Fail2ban:
sudo yum install fail2ban
Установленная программа уже имеет базовую конфигурацию, достаточную для начала работы и защиты сервера. Запустим службу:
sudo systemctl start fail2ban
Настройка Fail2ban на CentOS 7
Файлы конфигурации лежат в папке /etc/fail2ban:
- jail.d — каталог с пользовательскими настройками для защиты отдельных сервисов;
- action.d — здесь описаны действия, которые будут выполнены при блокировке;
- filter.d — правила, в соответствии с которыми Fail2ban будет анализировать журналы для поиска подозрительных попыток входа;
- fail2ban.conf — общая конфигурация;
- jail.conf — список запрещающих правил.
Настройки в файлах, созданных при установке, изменять нельзя — можно сказать, что это шаблоны конфигурационных файлов. Они обновляются во время обновления приложения, а это означает, что все настройки, внесённые пользователями, будут стёрты. Для пользовательской настройки эти файлы нужно копировать и настраивать копии. Пользовательский файл jail.local переопределяет jail.conf.
- Скопируем файл с основными параметрами, чтобы создать локальную конфигурацию программы:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- Откроем новый локальный файл конфигурации для редактирования. В примере мы используем редактор vi:
sudo vi /etc/fail2ban/jail.local
Содержимое файла разбито на блоки в зависимости от области применения параметров.
В блоке [DEFAULT] расположены общие параметры, которые применяются к службам, включённым в Fail2ban, но не имеющим собственных блоков. За ним идут блоки с параметрами для отдельных служб, требующих защиты. Они имеют дефолтные настройки и отключены по умолчанию.
- Первый параметр — Ignoreip. Это перечисление адресов, которые Fail2ban будет игнорировать и не сможет добавить их в бан. Вписать можно IP-адреса, маски подсети и хосты DNS; единичные адреса или диапазоны разделяют пробелом. Если вы подключаетесь к серверу с выделенного IP-адреса, то также добавьте его в список исключений.
- Затем установите bantime. Параметр определяет, как долго хост-нарушитель будет оставаться в списке бана до автоматической разблокировки.
- Следующая настройка — findtime, временной промежуток для максимального количество попыток входа.
- Maxretry counts — максимальное количество попыток получить доступ, прежде чем IP-адрес хоста, пытающегося подключиться, будет заблокирован.
- Banaction — обычно устанавливается «iptables»; параметр отсылает к файлу конфигурации в /etc/fail2ban/action.d/, где записаны действия для блокировки.
- Action — сценарий действия, которое будет выполнено после banaction.
Bantime и findtime указываются в секундах.
Выбирайте для своих веб-проектов надёжного провайдера, которому можно поручить настройки и администрирование сервера. Например, аренда VPS от AdminVPS — это:
- бесплатное администрирование,
- NVMe-диски,
- быстрая техподдержка,
- защита от DDoS-атак,
- доступная цена,
- опция «Всё включено», которая позволит сэкономить на сисадмине.
Например, со следующими настройками хост с IP-адресом ХХХ.Х.Х.2 будет заблокирован на 10 минут, если за 10 минут с его адреса будет зарегистрировано 5 неудачных попыток получить доступ:
[DEFAULT]
ignoreip = ХХХ.Х.Х.1
banaction = iptables-multiport
bantime = 600
findtime = 600
maxretry = 5
Десятиминутного бана обычно достаточно, так как боты, попав в бан, чаще всего переключаются на следующую цель.
- Если на вашем сервере с CentOS 7 запущена служба Sendmail, то вы можете настроить уведомления от Fail2ban. Для этого введите свой e-mail в строке destemail, а в строке action укажите значение «%(action_mw)s».
- После того как вы выполнили базовые настройки, проверьте различные джейлы, доступные в параметрах конфигурации. Джейлы — это правила, которые Fail2ban применяет к любому данному приложению или файлу журнала. Кроме перечисленных выше настроек, каждый джейл содержит дополнительные:
- filter — отсылает к файлу в директории /etc/fail2ban/filter.d/, содержащему правила анализа журнала службы;
- logpath — директория лога с информацией о неудачных попытках получить доступ;
- Настройки SSH jail неактивны сразу после установки. Активируйте их, добавив «enabled = true» в модуль SSH jail.
[sshd]
enabled = true
Также укажите порт, который использует SSHd; если вы его не меняли, оставьте заданный по умолчанию.
- Вы можете включить любые другие модули jail таким же образом — добавив то же значение в строку enabled чуть ниже заголовка jail, такого как [sshd] в примере выше. Чтобы отключить модуль, укажите enabled = false. Внимательно проверьте все правила, прежде чем активировать их: при неправильной настройке они могут вызвать проблемы при запуске.
- Когда вы включите все нужные вам джейлы, сохраните файл конфигурации и выйдите из редактора.
- Затем перезапустите службу с помощью следующей команды:
sudo systemctl restart fail2ban
- Завершив настройку, добавьте Fail2ban в автозапуск.
Настройка Iptables
После этого вам следует проверить правила iptable на предмет недавно добавленных разделов jail для каждого из включённых модулей приложения.
sudo iptables -L
Забаненные IP-адреса появятся в виде списка. Вы также можете вручную забанить и разбанить IP-адреса из служб, для которых вы определили джейлы, с помощью следующих команд:
sudo fail2ban-client set <jail> banip <ipaddress>
Или:
sudo fail2ban-client set <jail> unbanip <ipaddress>
Теперь вы знаете всё необходимое о службе Fail2Ban, которая поможет предотвратить атаки на порты, а также можете сохранить себе эту инструкцию по настройке Fail2Ban на CentOS 7.
Читайте в блоге: