01.08.2026

Сервер попал в ботнет: как очистить и закрыть дыры

Сервер шлёт спам или майнит — признаки компрометации и план восстановления.

Хостинг пишет: с вашего IP идёт спам. Или `top` показывает неизвестный процесс на 200% CPU. Или соседи по сети жалуются на скан портов. Linux-сервер, который вчера просто крутил сайт, сегодня часть чужой инфраструктуры — ботнета, майнера, прокси.

Первый импульс — убить процесс и забыть. Через сутки он возвращается: в cron, в systemd, в скомпрометированном веб шелле, в ключе SSH, который никто не ротировал. Очистка без закрытия входа — театр.

Задача: остановить вред, понять вектор, вычистить устойчиво, вернуть сервис так, чтобы вас снова не включили в чужую сеть.

Признаки, которые нельзя игнорировать

Резкий рост исходящего трафика, очередь почты, незнакомые пользователи в `/etc/passwd`, странные задания cron, новые ключи в `authorized_keys`, процессы с именами под системные, отключённый мониторинг «сам собой».

Сайт при этом может «открываться». Компрометация часто параллельна бизнесу: майнер живёт рядом с PHP-FPM и тихо ест деньги на CPU.

Ошибки реакции

Чистить только то, что видно в `ps`. Persistence переживает перезагрузг.

Оставить сервер в проде и «лечить по живому» без снимка диска — потеряете улики и можете добить данные.

Переустановить ОС, но накатить старый диск с тем же веб корнем и теми же ключами. Бэкдор возвращается вместе с контентом.

Не менять секреты: пароли БД, токены CI, API-ключи — если их могли прочитать, они чужие.

Рабочий порядок восстановления

Изолируйте хост от сети или режьте исходящий трафик, сохранив доступ админам. Остановите вредящую нагрузку, но сохраните образ/снимки для анализа, если это важно для разбора.

Определите вектор: устаревший сервис, утечка SSH-ключа, уязвимое веб приложение, слабый пароль панели. Без вектора чистка — лотерея.

Предпочтительный путь для серьёзной компрометации — новый чистый хост или переустановка, перенос данных из проверенных источников (бэкап до инцидента или вычищенное дерево после диффа с эталоном), ротация всех секретов и ключей.

Минимум после инцидента:

  • аудит пользователей и SSH-ключей;
  • проверка cron/systemd/триггеров;
  • обновления и закрытие лишних портов;
  • целостность веб корня и отсутствие шеллов;
  • мониторинг CPU, исходящих соединений, очереди почты;
  • новый пароль/ключ везде, куда мог дотянуться доступ сервера.

Если сервер слал спам — разберитесь с репутацией IP/домена и с тем, не открыт ли у вас релей.

Как не поймать повтор

Патч менеджмент, минимальная поверхность SSH, отделение приложений, бэкапы с проверкой восстановление, алерты на аномалии. Ботнет любит забытые VPS и «временные» серверы, которые стали постоянными.

После очистки: укрепление

Закройте вектор входа обновлениями и конфигурацией: лишние сервисы выключены, вход по ключам, ограничение источников администрирования, своевременные патчи.

Включите наблюдение за аномалиями: внезапный CPU, необычные исходящие соединения, рост очереди почты, новые пользователи и ключи. Ботнет любит тишину.

Пересмотрите бэкапы: есть ли точка до компрометации, проверяли ли восстановление. Иногда единственный честный путь — восстановление данных в чистую систему, а не «лечение» заражённого диска.

Проведите короткий разбор: как узнали, сколько длилось, что улучшили в процессе. Без разбора через полгода история повторится на соседнем «забытом» VPS.

Доказательная база и коммуникации

Если инцидент может иметь юридические последствия, сохраните снимки и логи до агрессивной зачистки. Разговор с хостером, клиентами или страховкой проще вести на фактах.

Сообщайте бизнесу статус без лишней драмы и без утаивания: сервис изолирован, идёт восстановление, ожидаемое время, что уже проверено. Вакуум заполняется слухами.

Проверьте связанные системы: те же ключи SSH, те же пароли панели, те же токены CI. Компрометация одного хоста часто окно в соседние.

В конце закройте задачу не фразой «почистили», а списком изменений контроля: патчи, ключи, мониторинг, политика обновлений. Иначе через месяц ботнет найдёт вас снова.

Проверьте, не был ли сервер использован для атак на соседей: это влияет на репутацию IP и отношения с хостером. Иногда единственный выход — смена адреса после чистой пересборки.

Обновите инвентарь: какие ещё хосты с теми же ключами и паролями. Параллельная компрометация «тихого» тестовый контур — частый второй очаг.

Введите минимальный baseline для всех Linux-серверов: обновления, вход, агент мониторинга, запрет лишних сервисов. Ботнеты питаются исключениями из baseline.

Не возвращайте тот же набор «временных» исключений, через которые вас взломали: открытый SSH миру, общий пароль, забытый панельный доступ. Очистка без изменения привычек — пауза до следующего письма хостера.

Проверьте cron и systemd на всех похожих хостах, не только на пострадавшем. Persistence часто копируют шаблоном.

И отдельно усильте контроль исходящей почты и DNS-резолвинга с сервера: аномалии здесь часто выдают компрометацию раньше, чем «странный процесс» в топе.

После восстановления проверьте репутационные списки и очередь почты, если сервер участвовал в рассылке. Иначе чистый хост продолжит страдать от прошлого IP.

Добавьте контроль целостности критичных путей и алерт на новые sudo-права. Повторная компрометация часто начинается тихо, без майнера на весь CPU.

И проведите короткое обучение для тех, кто имеет доступ: фишинг ключей и слабые пароли панелей закрывают не только «сложными» средствами, но и дисциплиной.

Чистый сервер, новые секреты и закрытый вектор входа — единственная устойчивая тройка. Всё остальное лишь отодвигает следующее письмо от хостера.

Изоляция, чистая пересборка и ротация секретов важнее охоты за одним процессом в top — persistence всё равно переживёт наивную зачистку.

Итог

Попадание в ботнет — сигнал, что вход открыт и контроль потерян. Убить майнер недостаточно: нужны изоляция, понимание вектора, чистая пересборка или глубокая зачистка, ротация секретов и закрытие дыр.

Верните сервис с чистого контура и включите наблюдаемость исходящего трафика. Иначе следующий «непонятный» процесс на CPU снова объявит о себе письмом от хостера.

Нужна помощь с похожей задачей?

Опишите ситуацию — предложим решение на основе нашего опыта.

Заявка

Имя, Email, телефон и комментарий — остальное обсудим после заявки