Когда ничего другого не остаётся

Вчера пришлось очень рано встать из-за SMS от монитора, наблюдающего за сервером: Apache лёг от DDoS-атаки. Как оказалось, DDoS был спровоцирован плагином Time Spent on Blog. Честно говоря, я никогда не понимал смысла в таких плагинах, тем более на очень посещаемых сайтах.

Плагин определяет, сколько времени пробыл пользователь на сайте (с двухсекундной точностью). Такая точность создаёт большие проблемы в тех случаях, когда средний посетитель открывает сразу три-пять страниц. Точность гарантируется конструкцией setTimeout("updateTime()", 2000), где updateTime() — функция, отправляющая асинхронный запрос на сервер.

Обновление текущей информации осуществляется в два запроса: SELECT для получения старых данных и INSERT/UPDATE для их обновления. Что характерно, в таблице нет никаких индексов, поэтому если у сайта обширная аудитория, а на сайте не настроена репликация, то MySQL очень быстро становится слабым звеном (что ни говори, а MyISAM не сильно хорошо работает с большим количеством параллельных записей). А IP-адрес посетителя (по нему делается выборка/обновление) хранится в базе строкой, что тоже далеко от идеала (экономнее хранить его числом).

Несколько сотен посетителей, открывшие по нескольку страниц, умудрились положить сервер.

Что характерно, удаление плагина не помогает, ибо запросы шлются JavaScript’ом из браузеров. А посетители уходить со страниц не торопились (наверное, видео смотрели; 6 человек до сих пор сидят). В результате, пока пользователь пьет чай/принимает душ и т.п., браузер делает чёрное дело и DoSит сервер.

Бороться приходится радикальными мерами: iptables :-)

Если Apache пишет лог в формате vhost_combined ("%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" в Apache) в файл /var/log/apache2/other_vhosts_access.log, то бороться с пользователями можно так:

[-]
View Code Bash
tail -f /var/log/apache2/other_vhosts_access.log | \
egrep "synChro|getSum" | \
awk '{
    print "iptables -A INPUT -s "$2" -j REJECT";
    system("iptables -A INPUT -s "$2" -j REJECT");
}'

В другом окне запускается такой скрипт:

[-]
View Code Bash
watch -n 60 "iptables --flush"

Такой вот крон для бедных :-) В результате за несколько минут удалось снизить нагрузку во много раз.

Мораль сей истории: на очень посещаемые сайты плагины, собирающие статистику в реальном времени, ставить опасно.

Добавить в закладки
  • del.ici.ous
  • Digg
  • Furl
  • Google
  • Simpy
  • Spurl
  • Y! MyWeb
  • БобрДобр
  • Мистер Вонг
  • Yandex.Закладки
  • Текст 2.0
  • News2
  • AddScoop
  • RuSpace
  • RUmarkz
  • Memori
  • Google Bookmarks
  • Писали
  • СМИ 2
  • Моё Место
  • 100 Закладок
  • Ваау!
  • Technorati
  • RuCity
  • LinkStore
  • NewsLand
  • Lopas
  • Закладки - IN.UA
  • Connotea
  • Bibsonomy
  • Trucking Bookmarks
  • Communizm
  • UCA
  • Slashdot
  • Magnolia
  • Blogmarks
  • Current
  • Meneame
  • Oknotizie
  • Diigo
  • Funp
  • Hugg
  • Dealspl.us
  • N4G
  • Mister Wong
  • Faves
  • Yigg
  • Fresqui
  • Care2
  • Kirtsy
  • Sphinn
  • SaveThis.ru

Связанные записи

19
Май
2009

Комментарии к статье «Борьба с плагином Time spent on blog жёсткими методами» (4)  »

  1. Артём Сапегин says:

    Прочитав название плагина, подумал, что он считает, сколько времени сам автор потратил на свой блог вместо того, чтобы работать. Думаю, такой плагин был бы гораздо полезнее :)

  2. Макисим Покровский says:

    >> очень рано встать из-за SMS от монитора, наблюдающего за сервером: Apache лёг от DDoS-атаки.
    Вот это у тебя сервис. Уважаю.
    ===
    У тебя снова капча? Что это так?

    • Vladimir says:

      У тебя снова капча? Что это так?

      “Изящную” еще в октябре сломали, когда я в России был. А довести плагин до ума времени нет, поэтому поставил старую капчу.

  3. de-coder says:

    Ну и дела :) Очень забавная штука. Обычный пользователь в жизни бы не догадался. Я уже молчу о файрволе.

Подписаться на RSS-ленту комментариев к статье «Борьба с плагином Time spent on blog жёсткими методами» Trackback URL: http://blog.sjinks.org.ua/linux/559-fighting-time-spent-on-blog-plugin/trackback/

Оставить комментарий к записи «Борьба с плагином Time spent on blog жёсткими методами»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя