Содержание

Как настроить Fail2ban на CentOS и Ubuntu? Защита ssh.

Различные сервисы на вашем сервере доступные из сети (SSH, Apache, Nginx, Asterisk) зачастую подвержены брут-форс атакам. Самая распространенная проблема это подбор пароля от SSH логина администратора. Для защиты от таких атак идеально подойдет Fail2ban. Fail2ban умеет просматривать логии различных сервисов на сервере и на их основе менять правила фаервола. Например заблокировать IP адрес злодея в iptables.

В данной инструкции мы рассмотрим, как установить и настроить Fail2ban на сервере с CentOS или Ubuntu.

Установка на CentOS 7

Т.к. данный сервис  не доступен в официальном репозитарии CentOS, то сначала установим пакеты EPEL:

sudo yum install epel-release

И уже теперь установим сам Fail2ban:

sudo yum install fail2ban

Установка на Ubuntu 16

Сервис доступен в официальном репозитарии, но сначала рекомендуем обновить базу доступных пакетов:

sudo apt-get update

После чего устанавливаем утилиту:

sudo apt-get install fail2ban

Начальная настройка

Настройка будет одинаковая для всех Linux дистрибутивов. Fail2ban хранит свои конфигурационные файлы в папке

/etc/fail2ban

В ней вы можете найти файл jail.conf  который содержит настройки по умолчанию. Обращаем внимание, что данный файл может перезаписываться при обновлении пакетов. Поэтому для хранения ваших собственных настроен надо создать файл jail.local . Для этого выполните команду:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Также вы можете создавать файлы  с индивидуальными настройками в папке /etc/fail2ban/jail.d/ . Подобнее мы рассмотрим это далее. Настройки из этих файлов будут подтягивать и заменять указанные в jail.conf  в ходе работы Fail2ban. Настройки применяются из файлов в следующем порядке:

  1. /etc/fail2ban/jail.conf
  2. /etc/fail2ban/jail.d/*.conf, - любые файлы с расширением conf. Применяются в алфавитном порядке.
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local, - любые файлы с расширением local. Применяются в алфавитном порядке.

Все файлы могут содержать секцию [DEFAULT], содержимое которой будет применяться в первую очередь. Также в них могут содержаться секции для отдельных сервисов, так называемые  «jails».

Давайте сначала рассмотрим настройки по умолчанию, а затем сделаем собственные.

Если открыть файл jail.conf, то в нем в разделе [DEFAULT] находятся следующие основные параметры:

ignoreip = 127.0.0.1/8

Трафик с данных IP адресов не будет подвергаться анализу, игнорироваться при проведении проверки. Своего рода «белые список».

bantime = 600

Указывается в секундах.  Определяет на которой период времени будет блокироваться доступ, в случае срабатывания правила. 

findtime = 600

Указывается в секундах. Устанавливает период времени в течение которого подсчитывается количество срабатываний правил, после которого надо применять фильтр (бан). Работает в паре со следующим параметром «maxretry». Значения по умолчанию означают что если правило сработает 3 раза за 600 секунд, то IP адрес будет добавлен в бан.

maxretry = 3

Количество попыток. См. пояснение к параметру «findtime».

destemail = root@localhost

Если вы хотите получать уведомления о срабатывании блокировки, то в этом поле указывается email на который будет отправляться уведомление.

sendername = Fail2Ban

Работает в паре с «destemail». Определяет кто будет указан в качестве отправителя email нотификаций.

mta = sendmail

Работает в паре с «destemail». Определяет через какой сервис будут отправляться email.

action = $(action_)s Данный параметр определяем какой действие необходимо предпринять при срабатывании правила. Список возможных значений находится выше в файле jail.conf. Рассмотрим наиболее популярные:

action_ - простое изменение параметров фаервола.

action_mw – помимо настройки фаервола будет отправлена email нотификация.

action_mwl  - помимо настройки фаервола будет отправлена email нотификация с примером записи из лога.

В случае использования последних двух вариантов не забудьте сделать необходимые настройки email нотификации (см. выше).

Настройки для отдельных сервисов

После раздела [DEFAULT] идут индивидуальные настройки для каждого сервиса. Обычно они включают в себя параметр port, которые необходимо блокировать и logpath – логии которые необходимо анализировать на предмет атаки. Например, для SSH «jail» уже включен по умолчанию в /etc/fail2ban/jail.local и имеет следующие настройки:

[sshd]
# To use more aggressive sshd filter (inclusive sshd-ddos failregex):
#filter = sshd-aggressive
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

В данном примере ssh это предопределенная переменная для стандартного SSH порта. А %(sshd_log)s использует значение, которое определяется в других стандартных настройках Fail2ban. Параметр filter определяет является ли строка в логах индикатором об ошибочной авторизации или нет. По сути это отсылка к регулярным выражениям, которые находятся в файлах .conf  в папке /etc/fail2ban/filter.d. Правила формирования регулярных выражений мы не будем рассматривать, т.к. они достаточно сложные.

По умолчанию «jail» для отдельных сервисов выключены. Чтобы включить необходимо в jail.local в разделе сервиса добавить параметр:

enabled = true

Давайте сделаем это для SSH. Раздел sshd в /etc/fail2ban/jail.local  будет выглядеть следующим образом:

[sshd]
enabled = true
# To use more aggressive sshd filter (inclusive sshd-ddos failregex):
#filter = sshd-aggressive
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Чтобы настройки применились перезапустим fail2ban:

sudo systemctl restart fail2ban

 

Проверка и мониторинг работы

Чтобы убедиться, что fail2ban запущен и работает введем команду:

sudo systemctl status fail2ban

В случае проблем, логи можно посмотреть следующим образом:

sudo journalctl -b -u fail2ban

А также тут:

sudo tail -F /var/log/fail2ban.log

Чтобы увидеть статус всех «jail» или только из них можно воспользоваться следующими командами:

sudo fail2ban-client status
sudo fail2ban-client status «jail_name»

Например: 

sudo fail2ban-client status sshd

Чтобы просмотреть актуальные настройки Firewall введите:

sudo iptables –S

Тестирование защиты SSH

Чтобы убедиться что сделанные нами настройки fail2ban верны. Можно эмулировать атаку. Для этого попробуйте подключиться к серверу под защитой Fail2ban с другого сервер / устройства по SSH и ввести неверный пароль от учетной записи. Повторите эти действия несколько раз.

Важно! Не рекомендуем делать это на устройстве с которого вы в данный момент конфигурируете сервер, т.к. в случае успеха ваша текущее соединение будет сброшено.

В случае верных настроек, когда блокировка fail2ban сработает, при попытке подключения вам будет показано предупреждение Permission denied или отказано в доступе к серверу.

На сервере с fail2ban в текущих настройках Firewall вы также найдете строку с описанием блокировки:

sudo iptables –S

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j DROP
-A fail2ban-ssh -s 0.0.0.0/32(ваш IP) -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -j RETURN

Вторая снизу строка в данном примере означает что ваш указанный IP адрес был заблокирован.

Как просмотреть список заблокированных IP

Чтобы посмотреть список текущих заблокированных IP адресов введите команду:

sudo fail2ban-client status «jail_name»

Чтобы увидеть список активных jails введите:

sudo fail2ban-client status

Заблокированные IP адреса будут указаны в следующем виде:

`- action
   |- Currently banned: 2
   |  `- IP list:       1.1.1.1 2.2.2.2

Также как указывалось выше заблокированные IP можно найти в данных iptables командой:

sudo iptables –S

Как разблокировать IP адрес

Для того чтобы разблокировать ( удалить / достать из бана) IP адрес, необходимо ввести команду:

fail2ban-client set  «jail_name» unbanip «IP адрес»

Например:

fail2ban-client set  sshd unbanip 1.1.1.1