Поддержка сайтов пивоварни Knightberg
Knightberg — крафтовая пивоварня из Санкт-Петербурга, которая варит с 2007 года. У неё целое семейство сайтов: сайт самой пивоварни, сестринская Rock'N'Beer, шуточный «Жигулевский Пивздрав» в трёхлитровой банке с авоськой, журнал о пиве RealBrew и сайты фестивалей — СидрФест, Baltic Porter Day и «Настоящая выдержка». Все они живут на одном сервере, и с 2023 года я их поддерживаю.
Экскурсии с билетами
Пивоварня водит экскурсии: от амбара с солодом до бродильных танков и линии розлива, с дегустацией в конце. Билеты продаются через сервис qtickets, и раньше расписание на сайт приходилось переносить руками.
Я написал плагин, который сам забирает экскурсии из qtickets и выводит их на сайте:
- расписание обновляется само, а ответ сервиса запоминается на пять минут;
- если qtickets не отвечает, на сайте остаются последние удачные данные, а не пустой блок;
- если сбой случился на середине ответа, неполный список не попадёт в кэш и не покажется посетителям;
- экскурсии «с открытой датой» размечаются отдельно, а в админке есть диагностика, которая показывает, почему конкретное событие видно или скрыто на сайте.
Сервер после взлома
В сентябре 2026 года сайты взломали через уязвимость WordPress, известную как wp2shell. 24–25 сентября я провёл полную расчистку сервера:
- на всех семи сайтах удалил многочисленные вредоносные файлы, следы атаки и мусор в базах данных, которого было очень много;
- закрыл точку входа, через которую шла атака, запретил выполнение PHP в папках загрузок и закрыл xmlrpc;
- сменил пароли администраторов и баз данных, обновил ключи WordPress;
- обновил WordPress, все плагины, пакеты сервера, ядро, базу данных и панель управления хостингом;
- оставил только PHP 8.3, а каждый сайт перевёл в отдельный процесс под своим пользователем с отключёнными опасными функциями;
- отключил лишние службы и удалил ненужное ПО, настроил TLS 1.2+ и редиректы на HTTPS, перевыпустил просроченный сертификат;
- починил сбой загрузки сервера, из-за которого после перезагрузки не поднимался файрвол;
- настроил кэш Redis и OPcache, оптимизировал базу данных, веб-сервер и сетевой стек;
- перевёл планировщик WordPress на системный cron, настроил ротацию логов и ежедневные резервные копии;
- удалил из почтовой очереди 520 тысяч писем, которые сайты пытались разослать после взлома.
Заодно нашлась старая загадка: WordPress месяцами «не видел» обновлений плагинов. Виноват оказался доработанный кем-то плагин, который отправлял на сервер обновлений пустой список.
После расчистки все сайты работают в штатном режиме и загружаются ощутимо быстрее.
