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