Установка 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 <FILE>       Путь к сокету
-x Принудительно выполнить сервер
-h, —help Отобразить это справочное сообщение
-V, —version Распечатать версию

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

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

-c<DIR> Каталог конфигурации
-s<FILE> Путь к сокету
-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 <HOST>
Failed [-/\w]+ for .* from <HOST>
ROOT LOGIN REFUSED .* FROM <HOST>
[iI](?:llegal|nvalid) user .* from <HOST>

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

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

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

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

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

Чтобы строка журнала соответствовала вашему 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'     '\[<HOST>\] authentication failed'
fail2ban-regex '18-07-2008 12:13:01 [1.2.3.4] authentication failed' '\[<HOST>\] authentication failed'
fail2ban-regex '18-7-2008 12:13:01 [1.2.3.4] authentication failed'  '\[<HOST>\] 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 <HOST>"

Ограничения

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

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