Спам на WordPress: как я сделал свой плагин пока искал доступные аналоги Cloudflare
Примерно раз в пару месяцев – ко мне обращаются клиенты с одной и той же болью: сайт заваливает спамом. Автоматические регистрации, мусор в комментариях (иногда даже там, где комментариев в принципе нет), и, конечно, заявки, от которых у отделов продаж начинает дергаться глаз. Поскольку я в основном работаю с WordPress и 1С-Битрикс, вопросы прилетают именно по этим CMS. Про Битрикс – как-нибудь отдельно, сегодня сосредоточимся на WordPress.
Раньше все решалось довольно быстро. Пока Cloudflare не начали блокировать и замедлять, можно было обойтись без уродливых капч, скрытых полей и прочих костылей. Даже с базовым пониманием DNS и HTTP-заголовков за пару часов удавалось отрезать до 99% спама. Лично мне хватало трех бесплатных WAF-правил, чтобы подчистить и спамеров, и особо наглых парсеров.
А что сейчас с WAF?
После того как Cloudflare стал недоступен, на рынке какое-то время фактически оставался один вариант – DDoS-Guard. Но тарифы с доступом к WAF для малого и среднего бизнеса оказались, мягко говоря, не по карману. Да и сам факт платить за то, что раньше было бесплатным, вызывает понятное раздражение.
Сегодня WAF есть почти у всех крупных игроков: Яндекс, МТС, Ростелеком. Но ценник кусается – от 10 тысяч рублей в месяц за сайт, плюс тарификация по запросам. А если учесть, что одна страница может генерировать от 30 до 500 запросов, становится понятно: для малого бизнеса это просто не вариант.
Что остается?
На фоне таких "вкусных" предложений приходится идти по более грубому пути – блокировать страны, IP и диапазоны через .htaccess. Если сайт на VPS, можно подключить fail2ban, iptables и прочие инструменты, но WordPress на VPS – редкость. В большинстве случаев это обычный shared-хостинг.
При этом .htaccess – тоже не бесконечный. Чем больше список IP, тем сильнее страдает скорость открытия страниц. У меня был кейс, где за неделю мы набрали более 7000 диапазонов – это около 2 миллионов IP. На таких масштабах либо переезд на VPS, либо дорогой WAF.
Есть и другая проблема: пользователь при блокировке видит унылый 403 Forbidden. С учётом того, как сейчас распространены VPN, вы рискуете потерять нормального клиента – он просто решит, что сайт «лежит».
Откуда вообще идет спам?
Основной поток – это серверы из Азии, Европы, США и некоторых российских хостеров с сомнительной репутацией. Но просто взять и отрезать весь зарубежный трафик нельзя. Спамеры и обычные пользователи (особенно с VPN) часто сидят в одних и тех же диапазонах IP. Заблокируете США – заодно заблокируете Googlebot, а это уже удар по SEO. Плюс реальные пользователи с VPN – это все еще ваши потенциальные клиенты.
Важно: все, о чем речь дальше, не про защиту от DDoS на сетевом уровне. Это про фильтрацию прикладного мусора – форм, комментариев и регистраций.
Как родилась идея
Аналоги, конечно, есть. Но все — зарубежные. Отсюда проблемы с оплатой, особенно для компаний работающих в белую, и завышенный ценник. Плюс туда обычно напихано куча лишнего функционала, который сам по себе тормозит сайт. В общем, стало понятно: нужно делать свое.
Как это сделано
Для определения страны по IP я выбрал сервис 2ip.io — старый, проверенный, без сюрпризов. Для сайтов с посещаемостью до 10 000 уникальных в месяц хватает бесплатного лимита. Если трафик выше — примерно 40 рублей за каждую тысячу сверх.
В итоге плагин получил следующий набор возможностей:
1. Геоблокировка по странам. Можно выбрать, откуда трафик не нужен. Все остальное пропускается. Поисковые боты вроде Google и Яндекса не блокируются по умолчанию, так что SEO не страдает.
2. Белый список IP. Ваш офис, разработчики, мониторинги — все, что должно работать всегда, проверяется в первую очередь.
3. Черный список IP. Жесткая блокировка до любых других правил. Даже при списке в сотни тысяч адресов всё работает быстро за счёт кэширования.
4. Работа с ботами. Есть готовые группы (поисковики, соцсети, мониторинги, CLI), плюс гибкие правила по User-Agent. Можно как разрешать, так и запрещать конкретные строки. При этом кастомные разрешения имеют приоритет.
5. Защита комментариев WordPress. Часто спам идет напрямую, минуя интерфейс сайта. Плагин ловит такие запросы и применяет те же фильтры. Поисковые боты комментарии не пишут, так что для них здесь поблажек нет.
6. Кастомная страница блокировки. Вместо «403 Forbidden» пользователь видит нормальное объяснение — например, просьбу отключить VPN. Все настраивается.
7. Статистика. Логи за последние 7 дней: IP, страна, User-Agent, что произошло. Есть виджет прямо в админке WordPress.
Про производительность тоже не забыл. Геоданные кэшируются на 24 часа — повторные заходы не тратят лимит API. Белые и черные списки работают через Object Cache: если есть Redis или Memcached, все подхватывается автоматически. Поддерживаются разные сценарии — от Cloudflare до обычного shared-хостинга.
Для мультисайтов тоже всё предусмотрено: каждая установка получает свои настройки и статистику.
Что дальше
Плагин уже доступен публично. Первые пользователи подключились, спам режется, фидбэк в целом положительный. Сейчас собираю список улучшений — в приоритете аналитика, блокировки по ASN и более гибкие правила для форм.
Параллельно делаю аналогичное решение для 1С-Битрикс — там архитектура сложнее, но логика та же.
Есть бесплатный триал на 7 дней — включается автоматически при установке, без регистрации и смс. Если зайдет, можно выбрать подходящую лицензию.
Если у вас был похожий опыт борьбы со спамом на WordPress — будет интересно сравнить подходы. Ну и любая обратная связь тоже пригодится.