Rose debug info
---------------

Как меня, виндузятника, Linux выручил.

На прошлой неделе на мой интернет-магазин обрушилась дикая DDoS атака.
Несмотря на то, что он сделан у меня на WordPress, хостится он на выделенном сервачке в нидерландах, на Windows Server 2003. IIS загибалась от 600 коннектов в секунду (именно столько столько соединений позволял брэндмауэр).

В первый день мне пришлось просто отключить сайт. Посоветовавшись с другом Сергеем Рульковым (MCP), поднял на этом сервере виртуалку на Ubuntu Server, на нем Nginx. Хостер предоставил мне аж 3 IPшника, так что я присвоил 1 неиспользованный IP виртуальной машине с nginx, а nginx настроил как прокси к IIS. Затем через панель управления доменом изменил ip сайта на ip виртуальной машины.

Обычно используется связка nginx+apache, у меня же вышел вот такой каламбур (nginx+iis): nginx раздавал с себя всю статику (картинки, файлы для скачивания), а IIS отдавал html, генерируемый php =)

После запуска у меня был восторг! Несмотря на продолжающуюся DDoS атаку, этот план сработал, nginx раздавал статику, а iis быстро исполнял php и интернет-магазин заработал. Дело было вечером и я лег спать с чувством удовлетворения — победил недобросовестных конкурентов и отстоял работу своего бизнеса.

Утром следующего дня DDoSеры обозлились и усилили напор ботов. Они увидели, что GET запросами сайт не уложить, и стали забрасывать его POST запросами. Этого IIS не выдержал и снова упал. А Nginx вполне себе работал.

Целый день я курил мануалы и читал хабахабр про nginx и пытался настроить кэширование (оно поддерживается с версии 0.7.хх, а у меня на убунте по умолчанию ставилась более старая — 0.6.хх), но у меня ничего не получилось.

Затем я попробовал Bash-скрипт, который банит IP (записывает правила в iptables), которые открывают одновременно слишком много соединений (я настроил на 10), это была феерия! Скрипт по-умолчанию запускался 1 раз в минуту (через cron), я же запускал его вручную, каждую секунду. Каждую секунду скрипт банил 4000 уникальных IP. Я был в шоке, не думал, что на меня могли натравить такой большой ботнет! но еще больше я был поражен тому, что nginx все равно работал и не падал!

Вечером на прогулке мне пришла в голову просто гениальная мысль: я залез браузером напрямую на IIS, сохранил исходный код html, который генерировал движок интернет-магазина и сделал статичный сайт интернет-магазина. Выложил его на Nginx, вместо корзины и страницы заказа сделал страницу-заглушку, дескать, «извините уважаемые, DDoS-ят интернет-магазин, заказывайте, пожалуйста, по телефону или и-мэйлу».

Все. DDoS был таким же интенсивным, но сайт работал. Яндекс не забыл про сайт, из индексов он не вылетел, и в выдаче не понизился. Отбился. Вот такая success-story, даже прожженому администратору-виндузятнику, линукс товарищ.

Сейчас качаю книжки с сайта линукс для хакера, начал читать про Брандмауэры в Linux. Надо бы опробовать на каком-нибудь боевом сервере, или в сети, когда время будет. Может на виртуалках подниму, попробую!

Да, забыл конец истории описать: DDoS продолжался всю ночь и все следующее утро, а днем, поняв, что все усилия тщетны, атака прекратилась, и я снова настроил nginx в качестве прокси к IIS. Можно конечно весь сайт перенести на виртуалку и посадить его на апач, но я в этом вопросе принимаю закон механиков: работает — не лезь.

2010   Linux   Сервера
4 комментария
helios 2010

Хех, забавная история. Linux — это, конечно, сила, с которой нужно считаться, тем более в сфере серверов.
Ну и пара советов: не называйте html кодом — это всё же вёрстка; все брендмауэры Linux работают через netfilter, а iptables — самый лучший фронтэнд к нему, поэтому стоит учить его команды в первую очередь; wordpress очень тяжёлый, неудивительно, что статика жила при его смерти.

DrFaust 2010

Не знаю, пока через ufw элементарные правила забил, больше не нужно ничего :)

2PiN 2011

Линукс по сути тут был лишним звеном вместе с виртуалкой. Достаточно было энжиникса под винду!

vasya_pup 2012

а вот про bash скрипт который блочит 4к Ip напиши