Задача утилиты 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
.
Параметры в нём:
ignoreip
– IP-адрес, для которого будут игнорироваться проверки;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:
Ссылки по теме