Опыт по поиску и диагностике неисправностей растёт и сегодня очередной пост по теме администрирования серверов на Linux.
Сегодня обратился клиент с проблемой подключения по ssh.
Начинаем анализ
Первым делом смотрю в логи подключений:
/var/log/auth.log
Найдены интересные записи:
Jun 9 18:51:39 srv sshd[2230]: Accepted password for user from 218.106.13.19 port 58211 ssh2 Jun 9 18:54:46 srv sshd[2221]: Address 218.106.13.19 maps to net13.218.106.13.19.tmn.ittelec.ru, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
С этого адреса и происходит попытка подключения у клиента.
Здесь я вижу, что ssh-сервер делает попытку преобразовать ip-адрес в dns-запись, которая завершается неудачей, и ssh-сервер помечает это соединение как попытку перебора пароля.
Fail2ban - это инструмент, который отслеживает в log-файлах попытки обратится к сервисам, таким, как SSH, FTP, SMTP, Apache и другим, и если находит постоянно повторяющиеся неудачные попытки с одного и того же IP-адреса или хоста, fail2ban блокирует дальнейшие попытки с этого IP-адреса/хоста.
То есть, возьмем наш случай.
Если в лог-файле появляется запись с выражением “POSSIBLE BREAK-IN ATTEMPT!”, то fail2ban блокирует ip-адрес на 10 минут.
Блокировка адреса логируюется в файл /var/log/fail2ban.log:
2015-06-09 18:54:47,973 fail2ban.actions: WARNING [ssh] Ban 118.106.13.19
Время попыток подключения и блокировки совпадает до минуты.
Решение
Существую два пути:
- принудительно на сервере производить сопоставление ip-адреса и имени, добавив запись в файл /etc/hosts
- или выключить преобразование DNS в пакете ssh
Первый вариант хорош при статическом адресе для ssh-клиента, а второй - при динамическом.
Принято решение выключить DNS.
Открываю файл
/etc/ssh/sshd_config
в конец файла добавляю строку:
UseDNS no
И перезапускаю ssh:
service ssh restart