Как один VPS изменил наш процесс работы с доступами
Стал старшим backend-разработчиком и функциональным лидом десятка бэкендеров. По возрасту я и так был старшим. Теперь добавились серверы, GitLab, Proxmox и прочие радости инфраструктуры.
Однажды вечером пришёл PM: хостер сообщил о спаме с VPS давнего клиентского проекта. На разбирательство — 24 часа до блокировки.
На сервере обнаружились SSH-вход по слабому паролю, зачищенный auth.log, отсутствие архивных логов и непрерывные попытки авторизации. Время очистки журнала совпадало с началом роста CPU.
Закрыл вход по паролю и прямой вход root, настроил доступ по ключу, сменил пароль, добавил fail2ban. Собрал результаты проверок. Хостера они устроили, а вопрос «как узнаем о следующем подключении?» остался.
Через сессионный хук PAM добавил отправку событий во внешний логгер: учётная запись, адрес подключения, начало и конец сессии. Копии записей теперь хранились отдельно от наблюдаемого сервера.
Раскатили это на dev и stage, затем на клиентские проды.
Следом собрал около двух десятков публичных SSH-ключей разработчиков. Раскладывать их вручную по проектам и окружениям оказалось отдельным видом спорта.
На выходных дописал панель управления со spatie/ssh под капото: проекты, окружения, разработчики. Выдача и отзыв SSH-доступов, включая офисный туннель, стали доступны из одного интерфейса.
При уходе сотрудника можно было одним действием запустить отзыв его SSH-доступов на управляемых серверах. Внешний журнал дал историю сессий, панель — единый процесс управления ключами.
Такие дела!