Защита сетевых сервисов с помощью 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 используются для предоставления посетителям релевантной рекламы и маркетинговых кампаний.