Защита сетевых сервисов с помощью Fail2Ban (CentOS, Debian, Ubuntu)

Выделенный сервер

Удаленные серверы в ЕС

Мощные серверы для любых корпоративных данных и ПО

Арендовать сервер в ЕС

Установка Fail2ban

Чтобы установить программу Fail2ban, выполните следующие команды:

  • Для установки на Ubuntu, Debian:
    sudo apt-get update
    sudo apt-get install fail2ban
  • Для установки на CentOS:
    yum update
    rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    yum install fail2ban

Определения

Перед началом работы важно уточнить некоторые термины, используемые в следующих разделах:

  • filter – фильтр определяет регулярное выражение, которое должно соответствовать шаблону, соответствующему ошибке входа в систему или любому другому выражению
  • action – действие определяет несколько команд, которые выполняются в разные моменты времени
  • jail – джейл (досл. англ. «тюрьма») – это комбинация одного фильтра и одного или нескольких действий. Fail2ban может обрабатывать несколько фильтров одновременно
  • client – относится к скрипту fail2ban-client
  • server – относится к скрипту fail2ban-server

Сервер

Fail2ban состоит из двух частей: клиента и сервера. Сервер многопоточен и прослушивает в сокете Unix-команды. Сам сервер ничего не знает о файлах конфигурации. Таким образом, при запуске сервер находится в состоянии «по умолчанию», в котором не определены никакие джейлы. Для fail2ban-сервера доступны следующие опции:

**-b** Начать в фоновом режиме
**-f** Начать на переднем плане
**-s ** Путь к сокету
**-x** Принудительно выполнить сервер
**-h, —help** Отобразить это справочное сообщение
**-V, —version** Распечатать версию

Fail2ban-server не должен использоваться напрямую, за исключением случаев отладки. Опция -s , вероятно, является самой важной и используется для установки пути сокета. Таким образом, можно запускать несколько экземпляров Fail2ban на разных сокетах. Однако это необязательно, поскольку Fail2ban может одновременно запускать несколько джейлов.

Fail2ban-client является интерфейсом Fail2ban. Он подключается к файлу сокета сервера и отправляет команды для настройки и управления сервером. Клиент может прочитать конфигурационные файлы или просто быть использован для отправки одной команды на сервер с помощью командной строки или интерактивного режима (который активируется опцией -i). Fail2ban-client также может запустить сервер. Для fail2ban-клиента доступны следующие параметры:

**-c** Каталог конфигурации
**-s** Путь к сокету
**-d** Дамп конфигурации. Для отладки
**-i** Интерактивный режим
**-v** Увеличить количество подробностей
**—q** Уменьшать подробность
**-x** Принудительно выполнить сервер
**-h, —help** Отобразить это справочное сообщение
**-V**, —version Распечатать версию

Все настройки в файлах конфигурации можно настроить вручную. Конфигурация – это простой и эффективный способ настройки сервера. Fail2ban-client переводит конфигурацию в набор команд. Тем не менее, fail2ban-client имеет еще две команды для внутреннего использования. Первая – это старт. При вводе команды $ fail2ban-client start – клиент сначала попытается развернуть экземпляр сервера. Затем клиент ожидает запуска сервера, отправив ему запросы ping. Как только сервер отвечает на эти запросы, fail2ban-клиент анализирует конфигурацию и отправляет соответствующие команды на сервер.

Вторая команда – перезагрузка. Осуществляется вводом команды: $ fail2ban-client reload

Общие настройки

Файл fail2ban.conf содержит общие параметры для демона fail2ban-сервера, такие как уровень ведения журнала и целевой объект. Здесь также можно указать путь сокета, используемый для связи между клиентом и сервером.

Jails

Наиболее важным файлом является jail.conf, который содержит декларацию ваших джейлов. По умолчанию некоторые разделы вставляются в качестве шаблонов. Вы должны включить интересующие вас разделы и адаптироваться к вашей локальной конфигурации. Ниже приведен пример раздела ssh-iptables:
[ssh-iptables]
#enabled = false
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
# mail-whois[name=SSH, dest=yourmail@mail.com]
#logpath = /var/log/sshd.log
logpath = /var/log/auth.log
maxretry = 5

С этими настройками произойдет следующее:

* раздел ssh-iptables включен;
* использовать фильтр **sshd**.conf из субдиректории **filter.d** ;
* действие (действия), описанные в iptables.conf (подкаталог action.d), будет выполнено, если результат фильтра будет истинным. В этом примере дополнительное действие mail-whois.conf закомментировано.
* **auth.log** – этот лог-файл будет сканироваться фильтром.

Фильтр и действия объединяются, чтобы создать джейлы. В каждом джейле разрешен только один фильтр, но в отдельных строках можно указать несколько действий. Например, вы можете отреагировать на попытку взлома SSH, сначала добавив новое правило брандмауэра, затем извлекая некоторую информацию о нарушающем хосте, используя whois, и наконец, отправив уведомление по электронной почте. Или, может быть, вы просто хотите получить уведомление о вашей учетной записи Jabber, когда кто-то обращается к странице /donotaccess.html на вашем веб-сервере.

Fail2ban не ограничивается фильтром SSH. Он содержит фильтры и действия по умолчанию для многих демонов и служб. Вы можете легко изменять их или создавать новые. Если вы посмотрите файл filter.d, вы заметите несколько фильтров по умолчанию, которые не встречаются в стандартном jail.conf, которые поставляются вместе с источниками. В этом примере мы берем «sshd-ddos.conf». Чтобы интегрировать фильтр в fail2ban, отредактируйте свой jail.conf:
[ssh-ddos]
enabled = true
port = ssh,sftp
filter = sshd-ddos
logpath = /var/log/messages
maxretry = 2
Всегда помните, что нужно скорректировать $ logpath в ваш log-файл, как указано выше.

Jail Options

Каждый джейл может быть настроен путем настройки следующих параметров:

Название Настройки по умолчанию Описание
filter Имя фильтра, который будет использоваться джейлом для обнаружения совпадений. Каждое новое совпадение по фильтру увеличивает счетчик в джейле
logpath /var/log/messages Путь к файлу журнала, который предоставляется фильтру
maxretry 3 Количество совпадений (то есть значение счетчика), которое запускает действие запрета на IP-адрес
findtime 600 sec Счетчик устанавливается на ноль, если совпадение не найдено в секундах поиска
bantime 600 sec Продолжительность (в секундах) для запрета IP-адреса. Отрицательный номер для «постоянного» запрета

Фильтры

Каталог filter.d содержит в основном регулярные выражения, которые используются для обнаружения попыток взлома, сбоя паролей и т. д. Ниже приведен пример файла filter.d / sshd.conf с тремя возможными регулярными выражениями, соответствующими строкам лог-файла:
failregex = Authentication failure for . from
Failed [-/\w]+ for .
from
ROOT LOGIN REFUSED . FROM
[iI] (?:llegal|nvalid) user .
from

Если вы создаете свои собственные выражения failregex, информация, приведенная ниже, будет вам особенно полезна.

У failregex может быть несколько строк, любая из которых может соответствовать строке файла журнала.

В каждой строке failregex часть, соответствующая имени хоста или IP-адресу, должна быть завернута в (? P …)-сэндвич. Это специальное расширение регулярного выражения, связанное с Python, которое присваивает содержимое совпадения имени . Тег – это то, как вы указываете fail2ban, с которым соединялся хост, поэтому он должен присутствовать в каждой строке failregex. Если это не так, fail2ban выдаст сообщение об ошибке «No» host »group».

Для удобства вы можете использовать предопределенный объект в ваших регулярных выражениях. – это псевдоним для (? ::: f {4,6}:)? (? P \ S +), который соответствует либо имени хоста, либо адресу IPv4 (возможно, внедренному в адрес IPv6).

В сценариях действий тег заменяется IP-адресом хоста, который был сопоставлен в теге .

Чтобы строка журнала соответствовала вашему failregex, она должна совпадать в двух частях: начало строки должно соответствовать шаблону или регулярному выражению времени, а остальная часть строки должна соответствовать вашему failregex. Если failregex привязан с помощью ведущего ^, тогда привязка ссылается на начало остатка строки после отметки времени и промежуточного пробела.

Шаблон или регулярное выражение для соответствия отметке времени в настоящее время не документированы и недоступны для чтения или установки пользователями (cм. Ошибку Debian # 491253). Это проблема, если ваш журнал имеет формат метки, который fail2ban не ожидает, так как он не будет соответствовать никаким строкам. Из-за этого вы должны протестировать любой новый failregex в строке образца журнала, как в приведенных ниже примерах, чтобы убедиться, что он будет соответствовать. Если fail2ban не распознает вашу временную метку журнала, у вас есть две возможности: либо перенастроить ваш демон для регистрации с отметкой времени в более распространенном формате, например, в приведенной выше строке журнала; либо отправьте отчет об ошибке с просьбой указать свой формат метки времени.

В качестве примера вышеописанных пунктов выполните на консоли следующие команды и сравните результаты:
fail2ban-regex 'Jul 18 12:13:01 [1.2.3.4] authentication failed' 'authentication failed'
fail2ban-regex 'Jul 18 12:13:01 [1.2.3.4] authentication failed' '[] authentication failed'
fail2ban-regex '18-07-2008 12:13:01 [1.2.3.4] authentication failed' '[] authentication failed'
fail2ban-regex '18-7-2008 12:13:01 [1.2.3.4] authentication failed' '[] authentication failed'

Первая команда завершилась ошибкой с сообщением об ошибке «Нет» группы хостов. Вторая команда завершается успешно и находит адрес хоста 1.2.3.4. Третья команда выполнится успешно и находит адрес хоста 1.2.3.4. Ошибка в 4-й команде. Она говорит нам, — она говорит «… нет действительной даты/времени, найденного для …» — .

Actions

Каталог action.d содержит различные сценарии, определяющие действия. Действия выполняются в четко определенные моменты во время выполнения Fail2ban: при запуске/остановке джейла, при запрете/отключении хоста и т.д.

Тестирование/Проверка

Следующие команды помогут проверить ваши настройки: # fail2ban-client -d Проверить текущую конфигурацию. # fail2ban-regex "line" "failregex" Основные моменты по установке и настройке программы рассмотрены. В случае, если какой-то IP-адрес будет заблокирован Fail2ban по ошибке, удалить его из «черного списка» можно командой: sudo fail2ban-client se t JAIL unbanip IP Где JAIL — название секции конфигурационного файла jail.local, в соответствии с правилами которой была активирована блокировка, IP — адрес, который нужно разблокировать.Пример команды разблокировки: sudo fail2ban-client se t ssh-iptables unbanip 78.47.10.113 Проверит одно регулярное выражение failregex (например, заданное в sshd.conf) с одной строкой файла журнала. Не забудьте двойные кавычки вокруг вашей линии и определения failgegex. Fail2ban-regex также принимает для проверки файлы. Таким образом, легче протестировать и отладить свои собственные регулярные выражения. # fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf Вы можете использовать комбинацию: # fail2ban-regex /var/log/auth.log "Failed [-/\w]+ for .* from "

Ограничения

Время реакции
Прежде всего, помните, что Fail2ban является анализатором журналов. Он не может ничего сделать, пока что-нибудь не будет записано в лог-файлах. Многие демоны syslog буферизуют свои выходы. Это может повлиять на производительность Fail2ban. Таким образом, было бы неплохо отключить буферизацию вашего демона syslog.

Оценить время реакции довольно сложно. Fail2ban ждет 1 секунду, прежде чем запускать новые журналы для проверки. В большинстве случаев это должно быть хорошо. Однако можно получить больше ошибок входа, чем указано maxretry.

Эта статья была полезной?

Тэги:

#server

Понравилась статья?

Согласие на использование файлов cookie

Нажимая «Я согласен», вы даете согласие на использование cookie, чтобы предоставить вам релевантный опыт. Посетите «Управление cookie», чтобы дать ограниченное согласие. Подробнее

Настройки файлов cookie

Функциональные

Необходимые файлы cookie имеют решающее значение для основных функций веб-сайта, и без них веб-сайт не будет работать должным образом.

Аналитические

Аналитические файлы cookie используются для понимания того, как посетители взаимодействуют с веб-сайтом.

Рекламные

Рекламные файлы cookie используются для предоставления посетителям релевантной рекламы и маркетинговых кампаний.