Многие запущенные на сервере службы для корректной работы должны держать порты открытыми. Однако каждый открытый порт — это потенциально слабое место в безопасности.
Подключение к серверу по протоколу 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.
Читайте в блоге:
- Сетевые настройки в CentOS: от базовых команд до устранения неполадок подключения
 - Как установить и скачать Yii2: руководство по установке фреймворка
 - Проблемы с сокетами у Bitrix: как исправить ошибки и вернуть нормальную работу сайта
 

