fail2ban

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

Для защиты от такого подбора пароля (такую атаку часто называют брутфорсом) есть удачное и изящное решение — fail2ban.

Установка

Этот пакет есть в репозитории, и базовая установка очень проста:

apt install fail2ban

По умолчанию защита от брутфорса для SSH включена.

Основная идея Fail2ban — при превышении заданного числа неудачных вводов пароля подряд (по умолчанию — 6) бан IP, с которого были попытки подбора на заданное время (по умолчанию — 600 секунд).

Настройка

Параметры можно посмотреть и поменять в файле /etc/fail2ban/jail.conf. Существующие фильтры (т.е. правила, по которым определяется неудачная попытка ввода пароля) лежат в директории /etc/fail2ban/filter.d (можно их править или на их основе делать свои фильтры), а существующие правила реагирования — в директории /etc/fail2ban/action.d. Все файлы довольно хорошо откомментированы.

Ниже преведено несколько примеров конфигурации /etc/fail2ban/jail.conf.

Удалённый доступ

[ssh-iptables]

enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log/secure
maxretry = 3

Почта

[dovecot-iptables]

enabled  = true
filter   = dovecot
action   = iptables-multiport[name=DCOT, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath  = /var/log/maillog
findtime = 300
maxretry = 5
bantime  = 1800

[postfix-iptables]

enabled  = true
filter   = postfix
action   = iptables-multiport[name=PFIX, port="smtp,smtps", protocol=tcp]
logpath  = /var/log/maillog
maxretry = 5
bantime  = 7200

[sasl-iptables]

enabled  = true
filter   = sasl
action   = iptables-multiport[name=SASL, port="smtp,smtps", protocol=tcp]
logpath  = /var/log/maillog
findtime = 300
maxretry = 5
bantime  = 1800

Cтатистика по блокировке адресов

Вывести список правил, используемых fail2ban на сервере

fail2ban-client status

Status
|- Number of jail: 1
`- Jail list: sshd

По умолчанию это только SSH.

Просмотреть статус и статистику по службе sshd контролируемой fail2ban.

fail2ban-client -v status sshd

Loading configs for fail2ban under /etc/fail2ban
Loading files: [‘/etc/fail2ban/fail2ban.conf’]
Loading files: [‘/etc/fail2ban/fail2ban.conf’]
Using socket file /var/run/fail2ban/fail2ban.sock
Using pid file /var/run/fail2ban/fail2ban.pid, [INFO] logging to /var/log/fail2ban.log
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:

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

Можно использовать fail2ban-client чтобы снять блокировку

fail2ban-client set ssh unbanip 192.168.1.50

Без этого она будет снята автоматически через несколько минут или десятков минут, в зависимости от настроек.

Разблокируют адреса часто через iptables напрямую, fail2ban является просто оберткой парсящим лог и добавляющим правила в iptables.

Дополнительные сервисы при необходимости добавляются в каталог /etc/fail2ban/jail.d/

ls /etc/fail2ban/jail.d/

defaults-debian.conf

В нем на Debian изначально один файл, который включает отслеживание службы SSH

cat /etc/fail2ban/jail.d/defaults-debian.conf

[sshd]
enabled = true

Можно добавить дополнительные, сама конфигурация находится в /etc/fail2ban/jail.conf. В файле есть шаблоны для phpmyadmin, zoneminder и других сервисов.

Иногда при помощи регулярных выражений настраивают блокировку попыток подбора пароля к административному разделу сайта и добавляют шаблон в каталог /etc/fail2ban/jail.d.

##

WARNING ‘allowipv6’ not defined in ‘Definition’. Using default one: ‘auto’

/etc/fail2ban/fail2ban.conf

allowipv6 = auto

##

touch /var/log/auth.log
, , , , , ,