Всегда есть ненулевая вероятность, что где-нибудь кто-нибудь выберет не столь сложный и надежный пароль, который злоумышленник сможет подобрать простым перебором.
Для защиты от такого подбора пароля (такую атаку часто называют брутфорсом) есть удачное и изящное решение — 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
##