Да хватит уже ломиться!
Материал из База знаний Linux.ру
Если так случилось, что на вашей домашней Linux машине или тем более на сервере установлен ssh-сервер, то само собой его надо бы обезопасить. Не секрет, что многие сервера ломают не из каких-то корыстных мотивов, а просто потому что малолетние "хакеры" хотят доказать себе и всему миру, что они это могут. Конечно, инструкций по защите linux-серверов написано море, но позволю себе рассказать про личный опыт настройки pam_tally2. Просто как выяснилось, дело это сопряжено с многочисленными подводным камнями и не всегда так тривиально как расписано в мануалах.
Для начала в двух словах, что же такое вообще это pam_tally2? Собственно, как видно из названия это модуль PAM, который можно подключить на любом этапе входа в систему, а выполняет он функцию временной блокировки пользователя в случае если тот совершит n неудачных попыток входа. Таймаут, например, в 30 минут должен охладить горячую голову, что вот уже десятый раз пытается подобрать пароль к учётной записи root или oracle.
Решение описанное ниже я тестировал на Red Hat (RHEL 5) и на Ubuntu, так что не могу гарантировать работу на других системах.
Итак, первое, что необходимо сделать, это убедиться в том, что openssh собран с поддержкой PAM. Обычно это так и есть, но если после включение опции "UsePAM yes" перезапуск sshd будет вызывать ошибки, то тогда качайте исходники и собирайте ssh-сервер руками c опцией --with-pam.
Для того чтобы аутентификация с использованием PAM проходила нормально, необходимо в /etc/sshd_config исправить два занчения:
UsePAM yes ChallengeResponseAuthentication yes
Далее в папке /etc/pam.d/ правим файл sshd и дописываем в начало секции auth следующую строку:
auth required pam_tally2.so deny=5 onerr=fail unlock_time=1800
Значение unlock_time - это время в секундах на которое пользователь будет заблокирован после пяти (значение параметра deny) неудачных попыток входа.
В том же файле в начало секции account добавляем:
account required pam_tally2.so
Собственно в Ubuntu Linux на этом всё. Это если глобально. Ниже пойдут некоторые особенности RHEL 5.
Если в файле /etc/pam.d/system-auth есть строчки вида:
auth requisite pam_succeed_if.so uid >= 500 quiet auth required pam_deny.so
То их надо удалить или закомментировать.
Находим строку
auth sufficient pam_unix.so nullok try_first_pass
Изменяем её на:
auth required pam_unix.so nullok try_first_pass
Несколько тонкостей:
Можно добавить pam_tally2 не только в ssh, а вообще на любой тип входа в систему (разблокировка экрана, обычный вход, вход через gdm и т.д.). Для этого мы просто пишем строчки с pam_tally2 как это указанно выше не в /etc/pam.d/sshd, а в /etc/pam.d/system-auth для RHEL. В Ubuntu же общесистемные файлы разнесены по секциям common-auth и common-account (оба они в директории /etc/pam.d).
Просмотреть заблокированных пользователей можно выполнив от рута команду pam_tally2. Разблокировать пользователя не дожидаясь завершения срока его таймаута можно выполнив команду pam_tally2 -u username -r
P.S. На время опытов рекомендую держать где нибудь в сторонке открытую рутовую сесию, чтобы не оказаться перед наглухо закрытыми воротами :)
Спасибо Максиму Семочкину за данную статью!
