Я создал 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 ... И вас забанят.
Я сейчас тоже ищу решение. Когда найду, поделюсь. ;)