Хостер заблокировал сайт за вирусы: как разблокировать быстро
Аккаунт отключён, сайт недоступен, письмо с отчётом антивируса. Что делать по шагам, как чистить и как правильно писать в поддержку.
Содержание
- Почему хостер выключает сайт и почему это в ваших интересах
- Первые тридцать минут: что сделать до любой чистки
- Читаем отчёт антивируса
- Как получить доступ к файлам, когда сайт отключён
- Порядок чистки, который работает
- Заявка на разблокировку: что приложить, чтобы не ходить по кругу
- Если это ложное срабатывание
- Сколько это занимает по времени
- После разблокировки: чек-лист на один вечер
- Сколько стоит и когда звать человека
- Частые вопросы
После блокировки за вирусы сайт разблокируют в среднем за сутки, а сама чистка занимает 6-16 часов для сайта с кастомной темой. Начинать надо не с чистки, а со снятия грязной копии и чтения отчёта антивируса: в нём уже есть список заражённых файлов.
Утром сайт не открывается, вместо страниц заглушка провайдера, а в почте письмо: аккаунт приостановлен, обнаружено вредоносное ПО, список файлов во вложении. Дальше обычно начинается паника, звонки в поддержку и эмоциональные письма, которые не ускоряют ровно ничего. Ситуация, когда хостинг заблокировал сайт за вирусы, лечится по регламенту: есть понятный порядок шагов, который вытаскивает проект из блокировки за несколько часов, а не за неделю. Ниже разбор: как читать отчёт антивируса, чем и в каком порядке чистить, что именно приложить к заявке на разблокировку и что сделать после, чтобы не приехать сюда снова через месяц.

За шесть лет абонентки я разбирал такие блокировки на Timeweb, Beget, Reg.ru, Sprinthost и на паре VPS с ISPmanager. Сценарий везде одинаковый до скуки, разница только в формулировках писем и в скорости ответа поддержки.
Почему хостер выключает сайт и почему это в ваших интересах
Shared-хостинг это общий сервер, где ваш сайт живёт рядом с сотней чужих. Когда на аккаунте заводится вредонос, страдает не только владелец. Заражённый сайт начинает рассылать спам с серверного IP, и весь сервер уезжает в списки Spamhaus. Скрипты майнера съедают CPU, из-за чего тормозят соседи. Фишинговая папка вида /wp-content/uploads/2026/04/sber-login/ приносит абузу от банка и жалобу в Safe Browsing, а следом хостера дёргает его собственный апстрим.
Поэтому провайдер не воспитывает вас и не вымогает деньги за платную чистку. Он тушит пожар у себя. Ровно так же он поступит с соседом, который заразится завтра.
Блокировки бывают трёх видов, и от вида зависит, что вам вообще доступно:
- сайт отдаёт заглушку, но панель, FTP и SSH работают. Самый частый и самый удобный случай: лечите спокойно;
- аккаунт заморожен целиком, доступа нет нигде. Так реагируют на рассылку спама и фишинг, то есть на то, за что хостер уже получил абузу;
- предупреждение без блокировки: письмо с отчётом и дедлайном в 24-72 часа. Это подарок, а не угроза, потому что чистить работающий сайт вдвое проще.
Отдельно про сроки. Автоматическое отключение по превышению лимитов CPU часто выглядит как блокировка за вирусы, хотя в письме про вирусы ни слова. Если сайт не открывается, а отчёта антивируса в почте нет, сначала проверьте нагрузку в панели, а не бросайтесь чистить то, чего нет.
Первые тридцать минут: что сделать до любой чистки
Главная ошибка на этом этапе одна: человек открывает файловый менеджер и начинает удалять всё, что показалось подозрительным. Через час выясняется, что снесены нужные файлы, а точку входа найти уже невозможно, потому что улики стёрты вместе с вредоносом.
Порядок такой:
- Сделать снимок текущего состояния, вместе с заразой. Это ваша единственная возможность потом откатиться и разобраться.
- Сохранить письмо хостера и отчёт антивируса отдельным файлом. В нём даты, а даты дальше понадобятся.
- Проверить, какие бэкапы есть и на какое число. Штатные копии хостера обычно хранятся 7-30 дней, этого хватает.
- Сменить пароль от панели управления и от FTP прямо сейчас. Если доступ утёк, чистка без смены пароля бессмысленна: вернут обратно за сутки.
- Остановить рекламные кампании, если они идут. Директ будет исправно жечь бюджет на заглушку хостера.
# снимок ДО любой чистки, вместе с вредоносом
cd ~
tar czf before-clean-$(date +%F).tar.gz public_html
mysqldump -u USER -p DBNAME > db-before-clean-$(date +%F).sql
# php-файлы, изменённые за последние 14 дней: типичное окно заражения
find public_html -type f -name "*.php" -mtime -14
-printf "%TY-%Tm-%Td %TH:%TM %pn" | sort
# классические маркеры веб-шелла
grep -rEl "eval[[:space:]]*(|base64_decode[[:space:]]*(|gzinflate[[:space:]]*(|preg_replace[[:space:]]*(.*/e"
public_html --include="*.php"
# php в папке загрузок: его там быть не должно вообще
find public_html/wp-content/uploads ( -name "*.php" -o -name "*.phtml" )
Последняя команда закрывает половину случаев. Каталог uploads доступен на запись для веб-сервера, и именно туда падает первый шелл после эксплуатации дырявого плагина загрузки файлов. Что с этим делать подробнее, я разбирал в статье про шелл в папке uploads.
Читаем отчёт антивируса
Хостеры сканируют разными движками: ImunifyAV на серверах с cPanel и ISPmanager, AI-Bolit у российских провайдеров, реже ClamAV с самописными сигнатурами. Отчёт приходит либо простыней в теле письма, либо HTML-файлом с деревом путей и вердиктами.
Читать его нужно по колонке вердикта, а не по количеству строк. Пятьсот детектов не значит, что сайт мёртв: часто это один шелл, размноженный по всем каталогам темы автоматом.
| Вердикт в отчёте | Что это на самом деле | Что делать |
|---|---|---|
PHP.Shell, CriticalPHP | веб-шелл, полноценная панель управления файлами | в карантин немедленно, вектор искать обязательно |
Backdoor.PHP.Generic | закладка для повторного входа, часто в wp-config.php или в конце functions.php | вырезать вставку, файл сверить с оригиналом |
SEO.Spam, Redirector | инъекция ссылок или редирект на мобильных, живёт в БД и в шаблоне | чистить и файлы, и таблицы wp_posts с wp_options |
JS.Injection | вставка в .js темы или в подключаемый скрипт | заменить файл из дистрибутива, проверить остальные |
Phishing.HTML | чужая страница логина в вашем uploads | удалить каталог целиком, сообщить хостеру отдельно |
HEUR, SuspiciousPHP | эвристика, вердикта по сути нет | сверять с оригиналом, чаще всего это ложное срабатывание |
Ложные срабатывания дают минифицированные скрипты, base64-спрайты в CSS, лицензионные проверки премиум-тем (там реально бывает обфускация), кэш-файлы плагинов и объёмные .htaccess. Отличить честно и быстро помогают контрольные суммы:
wp core verify-checksums # ядро WordPress против эталона
wp plugin verify-checksums --all # плагины из официального каталога
Если файл не проходит проверку и лежит в wp-includes, разговор окончен: это правка ядра, ядро надо менять. Если сумма совпала, а антивирус ругается, у вас ложное срабатывание, и его надо не удалять, а объяснять поддержке.
Как получить доступ к файлам, когда сайт отключён
Варианты по убыванию удобства:
- SSH, если тариф с shell. Все команды выше работают, чистка идёт в разы быстрее;
- файловый менеджер панели. Медленно, зато доступно почти всегда, даже когда сайт отдаёт заглушку;
- SFTP плюс локальная копия. Качаете, чистите на машине, заливаете обратно. Для сайта на пару гигабайт uploads это часы, поэтому качайте без
uploads, отдельно проверив его командой выше; - временная разблокировка по запросу. У Beget и Timeweb это штатная процедура: пишете, что приступаете к лечению, просите доступ к панели и SSH на сутки. Отвечают, как правило, в течение часа-двух в рабочее время.
Чего делать не стоит: переносить заражённый сайт на другой хостинг, чтобы он пока работал. Вы получите вторую блокировку у нового провайдера и репутацию клиента, который возит абузу. Восстанавливать бэкап месячной давности вслепую тоже так себе идея: заражение часто старше, чем кажется, и вы просто вернёте шелл вместе с контентом. Дату для отката берут из логов, а не из ощущений.
Порядок чистки, который работает
Карантин вместо удаления
Всё подозрительное переносится в отдельный каталог за пределами docroot, с сохранением исходных путей. Так вы в любой момент вернёте случайно задетый файл и покажете хостеру, что именно вычистили.
mkdir -p ~/quarantine
rsync -R public_html/wp-content/uploads/2026/04/about.php ~/quarantine/
rm public_html/wp-content/uploads/2026/04/about.php
Замена ядра и плагинов на заведомо чистые
Ковыряться в заражённых файлах ядра руками бессмысленно, там нет ничего вашего. Проще переложить:
cd ~
wget https://ru.wordpress.org/latest-ru_RU.tar.gz
tar xzf latest-ru_RU.tar.gz
rm -rf public_html/wp-admin public_html/wp-includes
cp -a wordpress/wp-admin wordpress/wp-includes public_html/
cp -a wordpress/wp-*.php public_html/ # wp-config.php свой, его не перезаписываем
Плагины из каталога переустанавливаются одной строкой, без потери настроек (настройки лежат в БД):
wp plugin list --field=name | xargs -n1 -I{} wp plugin install {} --force
Отдельная боль это нулёные темы и премиум-плагины, скачанные с торрента. Заменить их не на что, а именно в них чаще всего и сидит закладка от того, кто выложил сборку. Здесь выбор простой: покупать лицензию или выпиливать. Третьего варианта нет, я пробовал.
Разбор того, что осталось
После замены ядра остаются своя тема, uploads, корень сайта и wp-content. Смотреть по списку:
wp-config.php: посторонниеincludeиevalв конце файла, base64-строки, лишние определения констант;- корневой
index.php: он должен быть в две строки, всё сверх этого чужое; .htaccessв корне и вuploads: редиректы по User-Agent, разрешение исполнять php в загрузках;wp-content/mu-plugins/: каталог создаётся вредоносом сам, если его никто не заводил специально;- drop-in файлы
object-cache.php,advanced-cache.php,db.phpвwp-content: подключаются раньше плагинов и потому любимы бэкдорами; functions.phpтемы: обычно закладка в самом конце файла, после пустых строк.
Подробный маршрут чистки со всеми командами и разбором конкретных вставок у меня описан отдельно, в статье про то, как очистить WordPress от вирусов. Здесь важнее не пропустить базу.
База данных
Файлы вычищены, а редирект на мобильных остался. Значит, инъекция в БД:
SELECT option_name, LEFT(option_value, 80) AS preview
FROM wp_options
WHERE option_value LIKE '%<script%' OR option_value LIKE '%eval(%';
SELECT ID, post_title FROM wp_posts
WHERE post_content LIKE '%<script%' AND post_status = 'publish';
SELECT user_login, user_email, user_registered
FROM wp_users ORDER BY user_registered DESC LIMIT 10;
Последний запрос находит подарочных администраторов. Свежий пользователь с почтой на несуществующем домене и правами админа означает, что доступ к админке у злоумышленника есть до сих пор, и чистка файлов вам не поможет.
Точка входа
Пока не понятно, как вошли, чистка это уборка перед следующим визитом. В логах доступа видно POST-запросы к скрипту, которого у вас нет, или обращения к уязвимому плагину за минуту до появления первого лишнего файла. Разбор по шагам с примерами строк лога я делал в материале про то, как найти точку взлома по логам. Если логи хостер хранит только неделю, а заражение старше, качайте их прямо сейчас, до того как ротация съест остаток.
Заявка на разблокировку: что приложить, чтобы не ходить по кругу
Типичное письмо клиента в поддержку выглядит так: «почистили, включайте». Через два часа приходит ответ: «при повторном сканировании обнаружено вредоносное ПО», и всё по новой. Каждая такая итерация стоит от часа до суток простоя.
Работает другое. Заявка, из которой видно, что человек понимает, что делал:
Тема: Заявка на разблокировку после чистки, аккаунт cr43080, сайт example.ru
Здравствуйте.
По вашему отчёту от 16.10.2026 провёл чистку. Что сделано:
1. Удалены (перенесены в карантин вне docroot) 14 файлов из вашего списка,
полный перечень путей во вложении quarantine-list.txt
2. Ядро WordPress заменено на чистый дистрибутив 7.0 ru_RU,
wp core verify-checksums проходит без ошибок
3. Все 18 плагинов переустановлены из официального каталога,
плагин file-manager 6.9 (вектор заражения по логам) удалён
4. Удалён лишний администратор admin_sup (создан 09.10.2026),
сброшены пароли всех пользователей и соли в wp-config.php
5. Сменены пароли: панель хостинга, FTP, пользователь БД
6. Права приведены к 644 для файлов и 755 для каталогов,
php в uploads отсутствует (проверено find)
Прошу запустить повторное сканирование и снять блокировку.
Если сканер снова что-то найдёт, пришлите, пожалуйста, полные пути:
по первому отчёту два файла оказались ложным срабатыванием (см. ниже).
К письму прикладывайте список карантина и результат вашего собственного повторного сканирования. Хостеры обычно дают запустить проверку из панели, у Timeweb и Reg.ru это отдельный пункт в разделе безопасности.
Что не ускоряет разблокировку вообще: упоминание про уходящих клиентов, требование компенсации, просьба включить «хотя бы на час, я потом дочищу». Поддержка живёт по регламенту, и её регламент говорит: пока сканер видит детект, аккаунт закрыт.
Если это ложное срабатывание
Бывает, и чаще, чем хотелось бы. Классика: минифицированный slider.min.js с длинной base64-строкой внутри, вердикт HEUR.JS.Obfuscated. Или файл лицензионной проверки платной темы. Или .htaccess на 80 строк с правилами кэширования, который эвристика приняла за редиректор.
Спорить нужно предметно, одним сообщением:
- полный путь к файлу и его размер;
- откуда файл: плагин такой-то версии такой-то, скачан с wordpress.org;
- совпадение контрольной суммы с дистрибутивом (вывод
verify-checksumsилиmd5sumобоих файлов); - прямая ссылка на этот же файл в исходниках плагина или темы;
- просьба внести путь в исключения сканера по аккаунту.
Обычно хватает одной итерации, отвечает человек, а не робот. Ключевое слово тут «предметно»: на письмо «у меня нет вирусов, ваш сканер дурак» отвечают шаблоном.
Работает и обратная история: хостер снял блокировку, а вредонос остался. Сканеры видят сигнатуры, а не логику, и свежий аккуратный бэкдор в двадцать строк они пропускают. Снятая блокировка не равна вылеченному сайту, поэтому проверку после разблокировки делают отдельно.
Сколько это занимает по времени
| Этап | Реальный срок |
|---|---|
| Ответ поддержки на первую заявку | 1-4 часа в рабочее время |
| Временный доступ для лечения | 1-2 часа после запроса |
| Чистка визитки на WordPress, до 20 плагинов | 2-4 часа |
| Чистка магазина с кастомной темой и правками | 6-16 часов |
| Повторное сканирование хостером | от часа до суток |
| Снятие пометки в Яндексе и Google | 1-3 суток после запроса перепроверки |
Последняя строка отдельная беда: сайт уже работает, а в выдаче на нём висит красная плашка. Что с этим делать, я расписывал в статье про сайт в чёрном списке Яндекса и Google. Запрос на перепроверку подаётся из Вебмастера и Search Console руками, сам он не подаётся.
Итого от письма до полностью здорового сайта у аккуратного исполнителя выходит от половины рабочего дня до двух дней. Неделями это тянется у тех, кто чистит по одному файлу из отчёта и ходит в поддержку по кругу.
После разблокировки: чек-лист на один вечер
Сайт открылся, и на этом обычно все успокаиваются. Зря: повторное заражение через тот же вектор я вижу в трети случаев, и происходит оно в первые две недели.
- Сменить пароли: панель хостинга, FTP, пользователь БД, все админы WordPress, почта на домене (её часто угоняют вместе с сайтом).
- Обновить соли в
wp-config.phpсо страницы генератора api.wordpress.org, это разлогинит всех, включая чужие сессии. - Включить двухфакторку в админке и ограничить попытки входа.
- Обновить ядро, плагины и PHP до актуальной ветки. Дырявый плагин, через который вошли, надо не обновить, а выкинуть, если он давно заброшен.
- Проверить права: 644 на файлы, 755 на каталоги, 600 на
wp-config.php. Никаких 777, даже временно. - Запретить исполнение php в
uploadsчерез правило веб-сервера. - Настроить бэкапы наружу, в S3 или на отдельный аккаунт. Копия в
/wp-content/backups/умирает вместе с сайтом. - Через 7 и через 30 дней пересканировать и посмотреть в логи. Спящая закладка часто просыпается не сразу.
Пункт про php в загрузках закрывается парой строк в конфиге:
# public_html/wp-content/uploads/.htaccess
<FilesMatch ".(php|phtml|php5|phar|sh|pl)$">
Require all denied
</FilesMatch>
На nginx то же самое делается через location ~* /uploads/.*.php$ { deny all; } в конфиге сервера, на shared-хостинге об этом просят поддержку.
Сколько стоит и когда звать человека
Разовая чистка с разблокировкой у частного специалиста в 2026 году стоит порядка 8 000 — 15 000 рублей для визитки и 15 000 — 30 000 для магазина с правками в теме. Ночью и в выходные обычно с коэффициентом. Студии берут от 25 000 и часто продают вместе с этим годовую подписку на свой сканер.
Делать самому разумно, если у вас типовой WordPress без самописных модулей, есть SSH и не жалко вечера. Звать человека стоит, когда сайт приносит деньги каждый день, когда тема писалась под вас (сравнивать не с чем, и чистить придётся глазами), когда блокировка прилетела повторно или когда в отчёте фигурируют фишинговые страницы: там счёт идёт на часы, и одной чисткой дело не закончится.
Восстанавливать сайт с нуля вместо чистки почти никогда не выгодно. Даже простой корпоративный сайт заново обойдётся в районе 150 000 рублей и в месяц работы, тогда как чистка это один рабочий день. Я такие проекты не делаю принципиально: моя работа это обслуживание существующих сайтов, а не производство новых.
Если сайт уже лежит и письмо от хостера смотрит на вас из почты, напишите через форму на главной, в описании укажите хостинг, CMS и приложите отчёт антивируса. Обычно я отвечаю в течение рабочего дня и первым делом говорю, что можно сделать самому прямо сейчас, чтобы не терять часы. Если хочется, чтобы такие письма приходили не вам, а исполнителю, и приходили заранее в виде алерта мониторинга, посмотрите тарифы на обслуживание: годовой пакет с ежедневными бэкапами и обновлениями стоит дешевле одной внеплановой чистки.
Частые вопросы
Что делать, если хостер заблокировал сайт за вирусы
Снимите копию сайта прямо в заражённом виде, скачайте отчёт антивируса от хостера и запросите доступ к файлам по FTP или SSH. Чистить наугад до чтения отчёта бессмысленно.
Сколько времени занимает чистка
Простой сайт на типовой теме чистится за пару часов, сайт с кастомной темой и правками за 6-16 часов. Плюс время на ответ хостера по заявке на разблокировку.
Как ускорить разблокировку
Приложить к заявке список удалённых файлов, отчёт о смене паролей и о том, какую уязвимость закрыли. Заявка в стиле почистил, откройте обычно возвращается с повторным сканом и стоит ещё суток.
Что делать, если антивирус ошибся
Написать в поддержку и назвать конкретные файлы. Ложные срабатывания ловят минифицированные скрипты и легальные плагины с обфускацией.