На сайте открыто комментирование для гостей, комменты фильтруются посредством Mollom. Есть несколько страниц, в которые постоянно льют спам из-за их высокого ранга по некоторым запросом (1-я страница выдачи). Стабильно mollom отшибает по 200-300 сообщений в сутки с пиками до 1000.
Неделю назад сайт слёг полностью, постоянно висит ошибка о том, что пользователь исчерпал максимальное кол-во подключений к БД. Узнавал у хостера, у них 'max_user_connections' установлено в 10 и менять они не планируют.
По вечерам волна спадает и я могу зайти в админку дабы поковыряться в настройках. Первое что сделал - активировал throttle и настроил его на отключение модуля comments при 10 одновременных гостевых сессиях, но не помогло - с утра снова слёг. Ещё три дня игрался с throttle и cache - ни к чему не привело.
Вчера поставил no_anon и boost - отключил создание сессий для анонимусов и перевёл кеширование для анонимусов на статику мимо БД. Результат - главная страница открывается шустро, явно со статики. По остальным адресам наблюдаю прежнюю картину.
Как быть, что ещё попробовать?
Полное отключение комментов - крайняя мера, и хотелось бы её избежать.
Менять хостера не советуйте. Сайт стабильно держит хабраэффект. После публикации обзора одной железки было 1500 заходов на этот и 7500 на другой - оба живут в одной учётке хостера и с аналогичным конфигом (Drupal 6 + views + ccs + etc...). Причём статика (около 1Мб графики) раздавалась с этого-же сервака и была вставлена в статью на хабре с 20000+ просмотрами. И это всё за первый день после публикации.
Из всего вышеприведённого хочу спросить, неужели mollom виноват?
Другой причины не вижу - кэш справлялся раньше с существенной нагрузкой, даже работая через БД. Сейчас через статику и всё-равно не помогает.
Комментарии
Если справляется с хабраэффектом, а с этим спамом не справляется — возможно роботы по долгу не закрывают соединение с сервером или медленно шлют запрос или еще что-то в этом духе…
Можно покопать и в сторону mollom — времено отключите его и в правах поставьте, чтобы новые комментарии не публиковались анонимами. Посмотрите поможет или нет.
Да, была мысль отключить комментирование вообще. Отключать только mollom нельзя т.к. задолбаюсь потом удалять комменты.
Про атаку медленными сессиями я читал, и вроде как у апача даже есть от этого какая-то защита. Не в курсе, может я могу как-то ограничить время сессии через .htaccess или php.ini? Это всё что мне доступно из серверных настроек.
Для начала попробую пока отключить комментирование.
Нашёл настройки PHP
This sets the maximum time in seconds a script is allowed to run before it is terminated by the parser. This helps prevent poorly written scripts from tying up the server. The default setting is 30. When running PHP from the command line the default setting is 0.
The maximum execution time is not affected by system calls, stream operations etc. Please see the set_time_limit() function for more details.
You can not change this setting with ini_set() when running in safe mode. The only workaround is to turn off safe mode or by changing the time limit in the php.ini.
Your web server can have other timeout configurations that may also interrupt PHP execution. Apache has a Timeout directive and IIS has a CGI timeout function. Both default to 300 seconds. See your web server documentation for specific details.
max_input_time integer
This sets the maximum time in seconds a script is allowed to parse input data, like POST, GET and file uploads.
Буду копать в эту сторону
Если автоматом льют, то попробуйте поставить задержку на кнопку сохранить комментарий секунд на 20.
Была похожая проблема. Решилось - отключением комментирования конкретно для этих статей (т.к. статьи были старые и вообще без "человеческих" комментариев, там просто информация). Вообще, я закрываю темы от комментариев, в крайних случаях конечно, даже если идет осмысленный спам, когда люди троллят, провоцируют и т.д.
От Моллома, я кстати избавилась: меня спасает набор ре_капча + блок_анонимус_линкс (классное средство!) + у меня отключено поле для дом.страницы в комментариях.
Капча какая стоит?
Поддерживаю.
Совершенно верно, с небольшими доработками напильником так вообще средство №1 против анон-спама.
Это просто первый шаг, который надо сделать при запуске своего сайта. Как только убрал это поле, так сразу потом спам-ботов уменьшился.
По медленным сессиям соображение такое.
Изначально сессия в журнале сессий хранится 3 дня. Можно настроить время жизни сессии существенно меньше, ну допустим 45 минут, или можно еще меньше, как пойдет. Конечно для этого нужно будет настроить крон чтобы он запускал удаление просроченных сессий по расписанию.
Моллом я использовать остерегаюсь из-за ограничений бесплатной версии, и как-бы не хочу на него подсаживаться. Погугли.
И еще, вот на хабре недавно хорошая статья была про анти-спам, может наведет на размышления http://habrahabr.ru/blogs/spam/107286/
Медленные, но не настолько же) Выше "медленные сессии" имелись ввиду другие, TCP-соединения имелись ввиду.
Не совсем понятно куда ставить? Если на интерфейс при помощи js, так смысла нет т.к. льют просто дёргая урлу формы отправки. Если на стороне сервера - уже интересно, но не совсем понимаю как.
Очень не хочется отключать комментарии. Тут чисто спортивный интерес - кто кого
Моллом удобен тем, что капчу показывает только подозрительным личностям - так легче писать комменты живым людям. Раньше стоял SPAM, но из-за него отправка комментов была оооочень ресурсоёмким процессом. База раздулась в несколько раз. И при всём при этом я наблюдал 20-50 пропущенных спам-комментов в сутки. С Молломом их 1-2 в месяц. Насчёт блокировки ссылок - это как презумпция виновности: "все по-определению спаммеры", не хотелось бы. Буду пока другие методы пробовать, но в любом случае спасибо за совет.
У Моллома своя. Он её показывает если по каким-либо причинам не понравился текст коммента.
Пока разбираюсь, отключил комментирование гостями - через 2 дня нагрузка плавно сползла и выплыло то, чего и стоило ожидать - постоянно идут запросы к УРЛе, которой в данный момент нет в интерфейсе. Это доказывает предположение что льют чем-то типа хрумера, минуя запросы к самой странице.
Поиграюсь с akismet - посмотрю как заживёт. Если ничего не выйдет, наверное перейду на OpenID авторизацию а гостям комментирование закрою насовсем.
Кто сталкивался, много спама льют с OpenID авторизацией? Понятно что можно натравить бота или индусскую деревню, но это сложнее (читай "дороже") и проще пресекается.
Включите для анонимом комменты, но показывайте капчу всем!
Опять же: ре_капча + блок_анонимус_линкс.
Посмотрите apache mod security - м.б. он поможет!
Akismet не понравился, останусь с Mollom. Помогло полное отключение комментариев и уменьшение acceslog'а до 1 дня (была 1 неделя).
Основной поток схлынул, верну комментирование, но с принудительной капчей - посмотрим на результат.
А никто, случаем, не сталкивался с заменой родных acceslog'а и watchdog'а на что-то более производительное?
лучше их вырубить и статистику гребсти из того же awstats
Ну в awstats я не буду видеть внутренних матюков от разных модулей, а без них теряешь ощущение контроля над происходящим.
Я сам этой темой не заморачивался, но вроде друпал может юзать syslog системы. Хотя на шаред вряд ли что-то получится.
Да, на шареде - без вариантов. В идеале - писать логи в файл с ротацией, забирать на себя и локально изучать. Надо будет покопать в эту сторону, может сподоблюсь модуль накатать.
Виновник был найден, им оказался backup_migrate, который создавал слишком большую нагрузку при создании резервной копии БД по крону. Он в таком режиме проработал месяца три, но при возросшем потоке спама уложил сайт. Отключение данного модуля позволило вернуть назад и комментирование (Mollom реабилитирован) и хранение аксесслога за длительный период.
Я тоже давно забил на этот модуль. Надо настраивать mysqldump по крону.
Удобно было что он делал ежедневные бэкапы БД и слал их почтой на шареде такое сложно автоматизировать. Теперь наверное буду делать Sypex Dumper'ом и забирать по ftp.
У нас на отдельном бэкап-сервере каждую ночь по юниксовому крону делается mysqldump (дампы всех баз хранятся две недели) и rdiff-backup по ssh для бэкапа файлов (/hosts, /etc).
На своём серваке я тоже скриптами бэкаплю, сейчас даже городим ZFS пул для бэкапа.
А вот на шареде уже сложнее, там нет доступа к консоли. Зато с шареда у меня ещё лежат бэкапы 2004г, пока не удалял