Назад | Перейти на главную страницу

fail2ban блокирует меня после серии * успешных * входов в систему

Я создал SSH-логин без пароля для одного из моих серверов, используя файл authorized_keys.

На сервере есть fail2ban, и я заметил, что после нескольких успешных входов я больше не мог войти в систему (тайм-аут соединения). Если я отключу fail2ban, я могу снова войти в систему. Есть ли способ настроить fail2ban, чтобы не считать мои успешные логины против меня?

Спасибо!

У меня была похожая ситуация. Даже при успешном входе в систему в файле журнала sshd (/ var / log / messages) появляется сообщение «Не удалось». Это вызвано этим регулярным выражением (см. Ответ Криса S):

^%(__prefix_line)sFailed [-/\w]+ for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$

соответствующие строки, подобные этой, из файла / var / log / messages:

Apr 18 14:07:02 hostname sshd[20972]: Failed none for root from 123.45.67.89 port 
50472 ssh2

Когда пользователь успешно входит в систему, в файле сообщений по-прежнему появляется сообщение «Нет ошибки».

Чтобы решить эту проблему, я изменил файл sshd_config (/ etc / ssh / sshd_config), чтобы указать

LogLevel INFO

скорее, чем

LogLevel VERBOSE

Это останавливает сообщение «Failed none» при успешном входе в систему, но сохраняет его на случай неудачного входа.

Я также подумал об обновлении файла конфигурации sshd.conf fail2ban и добавлении чего-нибудь в строку ignoreregex, но обновление sshd - более чистое решение.

Вы можете использовать параметр конфигурации ignoreip, чтобы указать fail2ban игнорировать ваш IP-адрес.

http://www.fail2ban.org/wiki/index.php/Commands

В /etc/fail2ban/jail.conf добавьте что-нибудь вроде

ignoreip = 127.0.0.1 192.168.0.0/24

В моем файле sshd.local есть эта строка, чтобы исправить аналогичную проблему. Сравните ваш, он должен быть похож:

failregex = ^%(__prefix_line)s(?:error: PAM: )?[A|a]uthentication (?:failure|error) for .* from <HOST>\s*$
            ^%(__prefix_line)sDid not receive identification string from <HOST>$
            ^%(__prefix_line)sFailed [-/\w]+ for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$
            ^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>\s*$
            ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
            ^%(__prefix_line)sUser \S+ from <HOST> not allowed because not listed in AllowUsers$
            ^%(__prefix_line)sauthentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S* rhost=<HOST>(?:\s+user=.*)?\s*$
            ^%(__prefix_line)srefused connect from \S+ \(<HOST>\)$

Это не решает вашу проблему, но, надеюсь, дает вам представление о том, почему это происходит.

Клиент ssh использует ключи ssh, как вы описали. Я предполагаю, что у вашего клиента есть более одного ключа ssh в указанном агенте ssh (ssh-add -l). В такой настройке ssh-клиент подключается к серверу и пытается аутентифицировать использование «одного из ключей».

Итак, что происходит, так это то, что ssh-клиент пробует один ключ за другим, пока один из них не будет принят сервером.

Если предположить 3 ключа ssh, в худшем случае будут две неудачные попытки, за которыми последует успешный вход. Многократное подключение с "findtime" fail2ban ... И вас забанят.

Я сейчас тоже ищу решение. Когда найду, поделюсь. ;)