Linux: установка и настройка Fail2ban

Автор: | 10/12/2014
 

Linux SecureЗадача утилиты Fail2ban – мониторинг файлов (таких как /var/log/secure) и поиск в них следов bruteforce и других попыток некорректной авторизации. Так же, проверяет сервисы SSH, Dovecot, Nginx и другие.

При обнаружении таковых – доступ с IP блокируется на фаерволе сервера.

Установка выполняется на CentOS 6.6.

Устанавливаем:

# yum install fail2ban

Структура конфигурационных файлов выглядит так:

# tree -L 1 /etc/fail2ban/
/etc/fail2ban/
├── action.d
├── fail2ban.conf
├── filter.d
└── jail.conf

Fail2ban состоит из двух частей – серверная, непосредственно сервер fail2ban, и fail2ban-client – клиент для работы с ним.

Получить помощь по работе с клиентом можно так:

# fail2ban-client --help

Все основные настройки для наблюдения за службами описаны в файле /etc/fail2ban/jail.conf.

Параметры в нём:

  • ignoreipIP-адрес, для которого будут игнорироваться проверки;
  • bantime – время в секундах, на которое будет установлен бан в IPTABLES, если установить -1 – “вечный бан”;
  • findtime – длительность интервала обнаружения “подозрительных совпадений” (в журналах),сли за этот интервал времени ничего подозрительного не обнаружено, то счётчику (counter) присваивается значение 0;
  • maxretry – количество “подозрительных совпадений” (т.е., значение счётчика counter), при котором срабатывает определённая операция по отношению к отслеживаемому IP-адресу;
  • action – операция, которая должна быть выполнена, если значение счётчика стало равным значению параметра maxretry, по умолчанию сервис (порт) блокируется для отслеживаемого IP-адреса;
  • port – наименование сервиса или номер соответствующего этому сервису порта, за которым ведётся наблюдение;
  • filter – имя фильтра, который должен использовать данный изолятор, чтобы выявлять “подозрительные совпадения” в журналах (фильтры хранятся в подкаталоге /etc/fail2ban/filter.d);
  • logpath – путь к файлу журнала, который должен обрабатываться с помощью заданного фильтра.

Для изменения настроек – можно применять файлы с расширением .local – они будут прочитаны сервером fail2ban после чтения файлов .conf – и, если потребуется, переопределят настройки, записанные в .conf.

Значения по умолчанию задаются в блоке [DEFAULT] файла /etc/fail2ban/jail.conf.

Рассмотрим блок [ssh-iptables], который отвечает за сервис SSH:

[ssh-iptables]

enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           sendmail-whois[name=SSH, [email protected], [email protected], sendername="Fail2Ban"]
logpath  = /var/log/secure
maxretry = 5
  • enabled  -активен;
  • filter – использование фильтра sshd.conf из каталога /etc/fail2ban/filter.d;
  • action – действие (скрипт iptables из каталога /etc/fail2ban/action.d, и  sendmail-whois);
  • logpath  – отслеживать журнал /var/log/secure;
  • maxretry – банить после 5 попыток.

Фильтры описываются RegExp-ом в файлах каталога /etc/fail2ban/filter.d, например:

# cat /etc/fail2ban/filter.d/sshd.conf
...
failregex = ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from <HOST>( via S+)?s*$
            ^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from <HOST>s*$
            ^%(__prefix_line)sFailed S+ for .*? from <HOST>(?: port d*)?(?: sshd*)?(: (ruser .*|(S+ ID S+ (serial d+) CA )?S+ %(__md5hex)s(, client user ".*", client host ".*")?))?s*$
            ^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>s*$
            ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>s*$
            ^%(__prefix_line)sUser .+ from <HOST> not allowed because not listed in AllowUserss*$
            ^%(__prefix_line)sUser .+ from <HOST> not allowed because listed in DenyUserss*$
            ^%(__prefix_line)sUser .+ from <HOST> not allowed because not in any groups*$
            ^%(__prefix_line)srefused connect from S+ (<HOST>)s*$
            ^%(__prefix_line)sReceived disconnect from <HOST>: 3: S+: Auth fail$
            ^%(__prefix_line)sUser .+ from <HOST> not allowed because a group is listed in DenyGroupss*$
            ^%(__prefix_line)sUser .+ from <HOST> not allowed because none of user's groups are listed in AllowGroupss*$
...

Настроим наш Fail2ban.

Копируем файл jail.conf:

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

Редактируем его, и включаем необходимые службы, и другие настройки, в том числе – ignoreip:

ignoreip = 127.0.0.1/8 77.***.***.40 37.***.***.56

Меняем [email protected] и [email protected] на свой:

[email protected]

Редактируем файл /etc/fail2ban/fail2ban.conf, меняем:

logtarget = SYSLOG

на:

logtarget = /var/log/fail2ban.log

Запускаем:

# service fail2ban start
Starting fail2ban: ERROR  No file(s) found for glob /var/log/exim/mainlog
ERROR  Failed during configuration: Have not found any log file for exim jail
                                                           [FAILED]

Проверяем /etc/fail2ban/jail.local, блок [exim]:

[exim]

enabled = true
filter  = exim
action  = iptables-multiport[name=exim,port="25,465,587"]
logpath = /var/log/exim/mainlog

Тогда как лог называется /var/log/exim/main.log.

Меняем, снова запускаем:

# service fail2ban start
Starting fail2ban:                                         [  OK  ]

Проверяем лог Fail2ban:

# tail -f /var/log/fail2ban.log
2014-12-07 14:26:08,022 fail2ban.filter [21254]: INFO    Set maxRetry = 3
2014-12-07 14:26:08,025 fail2ban.filter [21254]: INFO    Set findtime = 600
2014-12-07 14:26:08,025 fail2ban.actions[21254]: INFO    Set banTime = 600
2014-12-07 14:26:08,040 fail2ban.jail   [21254]: INFO    Jail 'dovecot-auth' started
2014-12-07 14:26:08,045 fail2ban.jail   [21254]: INFO    Jail 'pam-generic' started
2014-12-07 14:26:08,048 fail2ban.jail   [21254]: INFO    Jail 'ssh-iptables' started
2014-12-07 14:26:08,051 fail2ban.jail   [21254]: INFO    Jail 'exim' started
2014-12-07 14:26:08,057 fail2ban.jail   [21254]: INFO    Jail 'exim-spam' started
2014-12-07 14:26:08,060 fail2ban.jail   [21254]: INFO    Jail 'dovecot' started

Проверка статуса через fail2ban-client:

# fail2ban-client status
Status
|- Number of jail:      6
`- Jail list:           exim-spam, pam-generic, ssh-iptables, dovecot-auth, dovecot, exim

Статистика по конкретному сервису:

# fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables
|- filter
|  |- File list:        /var/log/secure
|  |- Currently failed: 0
|  `- Total failed:     0
`- action
   |- Currently banned: 0
   |  `- IP list:
   `- Total banned:     0

Проверка правил и имён цепочек в IPTABLES:

# iptables -L --line-numbers -v | grep fail2ban
1        0     0 fail2ban-exim  tcp  --  any    any     anywhere             anywhere            multiport dports smtp,urd,submission
2      126  7135 fail2ban-dovecot  tcp  --  any    any     anywhere             anywhere            multiport dports pop3,pop3s,imap,imaps,submission,urd,sieve
3        0     0 fail2ban-exim-spam  tcp  --  any    any     anywhere             anywhere            multiport dports smtp,urd,submission
4        0     0 fail2ban-SSH  tcp  --  any    any     anywhere             anywhere            tcp dpt:ssh
5     1424  957K fail2ban-pam  all  --  any    any     anywhere             anywhere
6      126  7135 fail2ban-dovecot-auth  tcp  --  any    any     anywhere             anywhere            multiport dports pop3,pop3s,imap,imaps,submission,urd,sieve
Chain fail2ban-SSH (1 references)
Chain fail2ban-dovecot (1 references)
Chain fail2ban-dovecot-auth (1 references)
Chain fail2ban-exim (1 references)
Chain fail2ban-exim-spam (1 references)
Chain fail2ban-pam (1 references)

Для удаления бана:

# iptables -D fail2ban-<CHAIN_NAME> -s <IP> -j DROP

Для проверки – я добавил порт 22 в конфигурацию sshd – и на следующий день получил письмо:

Hi,

The IP 122.226.102.231 has just been banned by Fail2Ban after
5 attempts against SSH.

Here is more information about 122.226.102.231:

Ссылки по теме

http://www.fail2ban.org

http://www.ibm.com

https://www.digitalocean.com

http://putty.org.ru