Как организовать правильный хостинг, который будет приносить деньги
Серверное подполье Андрей «Zloy TapOK»
🕛 28.08.2008, 16:02
В инете есть тысячи сервисов, предоставляющих хостинг для домашних страничек, сайтов знакомств и прочих ресурсов, которые придутся по вкусу любителям вышивать крестиком. Но одновременно находятся и серьезные парни, которые легко соглашаются приютить за денежку хакерские проекты, варезные сайты и ресурсы с порнографическим содержанием. Каким образом им удается сохранить работоспособность серверов и уйти от ответственности? Да и как вообще организовать свой хостинг, надежно защитив его? Обо всем этом пойдет речь в этой статье.Ваши документы, уважаемый!
Для начала неплохо было бы разобраться, как на такой род деятельности, как хостинг, смотрит российское законодательство. Если организация предоставляет клиенту услуги хостинга, значит, она предлагает полный пакет возможностей, в том числе доступ по HTTP- и FTP-протоколам, а также электронную почту POP,IMAP и SMTP. В соответствии с РД 45.129-2000 (РД - руководящий документ отрасли), «служба электронной почты» и «служба доступа к информационным ресурсам» являются телематическими службами, которые, в свою очередь, относятся к услугам связи. Осуществление предпринимательской деятельности без лицензии подпадает под статью 171 УК («Незаконное предпринимательство») и статью 13.9 КоАП («Самовольное строительство или эксплуатация сооружений связи»). Кроме того, важным пунктом легализации деятельность хостера является сдача узла связи. Эта процедура подразумевает под собой получение в Россвязьнадзоре разрешения на эксплуатацию объекта связи, то есть в нашем случае серверов и коммуникационного оборудования. Стоит отметить, что лицензия без узла связи не действительна, и такая деятельность также подпадает под статью 13.9 КоАП.
Без всех этих бумажек хостер - не кто иной, как незаконный предприниматель. Однако не стоит забывать, что мы живем в России, где аппараты исполнительной власти иногда сильно тормозят. Фактически за хостерами никто не следит. За 3 года работы нашей компании с полным отсутствием каких бы то ни было бумажек нас никто по этому поводу не потревожил, в то время как среди клиентов были и крупные коммерческие проекты, и малый бизнес, и, соответственно, те самые «нестандартные проекты», которые на обычных сервисах размещать запрещено. Наибольшую проблему для серверного магната здесь представляет уклон от исполнения его гражданских обязательств. К примеру, от реагирования на подобные заявления:
«В связи с оперативно-служебной необходимостью и на основании пункта 4 статьи 11 Закона Российской Федерации «О милиции» прошу Вас предоставить всю имеющуюся информацию о сайте…, размещенном на ресурсах Вашей компании. В ответе прошу Вас указать информацию о владельцах данного электронного ресурса, о том, когда и с каких IP-адресов производилось его администрирование».
Но кто мешает чуть подкорректировать данные?
Где и как хостить?
Существует 3 варианта начать свой бизнес. Кратко рассмотрим каждый из них.
1. Реселлинг. Это понятие знакомо любому хостеру, потому как в большинстве случаев все начинали именно с реселлинга (в переводе с английского - «перепродавать»). Здесь найдется место даже андеграундному хостеру. Воспользовавшись подобными сервисами, ты сможешь оценить степень абузоусточивости. Кроме того, если у хостера есть лицензия, то можно договориться об ее использовании для осуществления своих услуг. Видели не раз, как небольшие хостинг-компании работают под прикрытием вышестоящих.
2. VPS/VDS. В последнее время этот тип услуг получил огромное распространение среди хостеров. VPS (Virtual Private Server) предполагает разделение одного физического сервера на несколько виртуальных, каждому из которых предоставляется определенная часть ресурсов (например, 15% всех общих) и полный root-доступ. В случае VPS ты можешь делать с сервером все то же самое, что и с реальным сервером, за исключением перестановки ОС или какой-нибудь там модификации ядра. Стандартная цена - около $50, хотя можно найти и за $5-10, но в этом случае едва ли ты сможешь его нормально использовать.
3. Dedicated Server, или аренда настоящего сервера. Ты не покупаешь собственную машину, а лишь берешь ее в пользование, выплачивая ежемесячную абонентскую плату. Выделенные серверы сдают в аренду крупные дата-центры или их представители. Обычно в абонентку включена плата за аренду самого сервера, сетевого порта, места в стойке, при этом средняя стоимость удовольствия составляет $100. Внимание - важный момент! Если ты решил взять сервер в аренду, не связывайся с посредниками, а работай напрямую с дата-центром. Посредники - это дополнительное звено риска в работе; они легко могут исчезнуть в самый неподходящий момент или просто кинуть тебя.
Какой дедик лучше?
Лучше всего, конечно, сразу раскошелиться на выделенный сервер, хотя шустрый VPS также будет неплохим выбором. Но где их взять? В каком дата-центре? Если решишь арендовать сервер в России, ищи предложения с условно неограниченным трафиком. Слово «условно» означает нескольких ограничений, чаще всего следующих:
* отношение общего входящего трафика к исходящему не должно превышать 1/4;
* суммарный объем исходящего зарубежного трафика не должен превышать 40% суммарного объема общего исходящего трафика.
В случае несоблюдения соотношений провайдер может взять с тебя немалую плату. И если первое ограничение элементарно обходится, то со вторым могут быть проблемы.
В западных дата-центрах обычно таких заморочек нет и клиенту просто выдается внушительное количество трафика, обычно по 1000-2000 Гб. Вообще, по ценам и количеству предоплаченного трафика, как, впрочем, и по многим другим параметрам, наиболее дружелюбны американские дата-центры. Для них характерны оперативность решения проблем, оптимальные ширина канала и аптайм (время бесперебойной работы). Если ты владеешь английским на разговорном уровне и сумеешь по Skype попросить техподдержку перезагрузить сервер, проблемы будут минимальны. Правда, в некоторых случаях суппорт все-таки начинает тупить, и, например, после неудачной сборки ядра можно долго ждать, пока озлобившиеся админы все-таки соизволят ребутнуть сервер и прописать несколько строк в конфиге загрузчика. Хотя с появлением технологии KVM over IP (подробнее читай в FAQ’е этого номера) подобные проблемы (или вообще установка новой ОС) не кажутся такими страшными.
Проблем не будет и в случае российских дата-центров. Здесь можно пожаловаться разве что на не частые, но регулярные сбои в системе электропитания и проблемы с маршрутизацией, что, естественно, негативно влияет на доступность сервера. Так или иначе, я все равно рекомендовал бы начинать работать с западными хостерами. Ведь даже лицензии на панели управления (ты же не хочешь, чтобы ты и все твои клиенты настраивали свои сайты и серверы через текстовые конфиги) продаются по льготным партнерским ценам. Например, за cPanel на российском дедике ты заплатишь около $50, а на сервере в западном дата-центре - всего $20-25.
Размещение нестандартных ресурсов
Одним из направлений деятельности иллегал-хостеров является спам. Как всем известно, со спамом борются все. И дата-центры тут не исключение. Вот тебе пример распространенной и очень опасной ситуации. Спамер покупает у тебя аккаунт на 20 Мб за $1, заливает туда немудреный скрипт, написанный на php, и начинает рассылать спам. В адрес дата-центра (организации, за которой по базе числится IP-адрес) тут же летят тысячи писем с жалобами или, на как говорят языке хостеров, абузов (от английского abuse). И уж поверь мне на слово: дата-центр попытается быстро решить проблемы, настучав тебе по голове. Одновременно с этим адреса твоего mail-сервера тут же попадут в черные списки, которые многие серверы юзают для фильтрации спама. Так что проблемы с почтой для добропорядочных клиентов тебе обеспечены. Оперативным спасением может стать быстрая смена IP-адреса для mail-сервера, но из-за абузов дата-центр может незамедлительно отключить твой сервер от порта до выяснения обстоятельств произошедшего. Правда, в последнее время спамеры стали умнее и уже не заморачиваются с тормозными скриптами, а используют в своей работе распределенные сети на ботах, разрабатываемые на заказ профессиональными программистами за большие деньги. Поэтому основной причиной жалоб в дата-центр сейчас являются размещенные на серверах нелегальные проекты: ресурсы для кардеров/хакеров/варезников и особенно fishing-сайты, которые, копируя внешний вид популярных ресурсов (платежных систем, банковских сайтов) и маскируя реальный URL-адрес, заставляют ушастых пользователей отдавать пароли от своих кошельков и банковских счетов.
Для того чтобы избежать внезапных отключений, необходимо знать несколько хинтов, которые значительно увеличат абузоустойчивость твоих серверов. В первую очередь это касается правильного выбора площадки. Некоторые оффшорные политики (Панама, Коста-Рика, Мексика и страны Азии) не рассматривают подобные деяния как нарушения, а значит идеально подходят для размещения подобного рода проектов. Подойдет и любая другая площадка, где будет свой человек, незаметно мухлюющий с базой приходящих абузов.
Помимо этого, следует позаботиться об условном владельце хостинга и всех поддерживаемых ресурсов. Существует масса сервисов, которые анонимно регистрируют домен, при этом твоя реальная инфа нигде не фигурирует. Сразу после того как ты обзаведешься доменом для своей конторы, потребуется привязать его к серверу (осуществить делегирование). Лишь после этого ресурс будет успешно откликаться по имени сайта.
Далее в админке домена, которую в большинстве случаев предоставляет компания, выдающая домены (регистрант), необходимо прописать DNS-серверы. Это несложно, но и тут есть один тонкий момент. В случае линковки к собственным DNS-серверам, возможно определить принадлежность отдельного домена к хостингу, например, заюзав известный сервис domainsdb.net:
domain: CUP.su
type: CORPORATE
nserver: ns13.armhosting.net
nserver: ns17.armhosting.net
Отчетливо видно, что сайт привязан к хостерским DNS, на что напрямую указывают прописанные name-серверы. А значит, есть все основания полагать, что сайт с доменом CUP.su хостится на armhosting.net. Чтобы избежать кляузы по прямому адресу хостера, придется прописать там собственные name-серверы (ns1.cup.su, ns2.cup.su) или же скрыть название после префикса «ns». Первое под силу любому администратору, хоть немного знакомому с основами named и BIND. А второе легко реализуется путем использования специальных Anonymous DNS (dyndns) серверов. В результате вместо обыденной информации будет отображен сторонний именной сервер (например, ns.rapidns.com), а ресурс продолжит функционировать в штатном режиме. Замечу, что большинство из этих сервисов придерживается Domain Name Privacy, что исключает возможность связаться с реальным владельцем. Ни инфа о регистранте, ни тем более данные о владельце домена там указаны не будет - грамотные люди ограничиваются лишь адресом электронной почты для связи с внешним миром. Полный лист таких сервисов ты найдешь на диске, а наиболее известными из них являются geeksanon.ca/projects/gaddnas и www.dyndns.com, www.dhis.org.
Обустраиваем контору - панели администратора
Репутация хостинга зависит не только от того, насколько стабильно работает твой сервер, но еще от тех условий, которые ты создашь для своих клиентов. Комфорт реально обеспечить с помощью хорошей панели для администрирования, которая, во-первых, позволит управлять поддерживаемыми ресурсами тебе, а во-вторых, настраивать хостинг под себя твоим клиентам. Причем все это без каких-либо правок текстовых конфигов - через удобный веб-интерфейс. Едва ли товарищи обойдутся одними лишь FTP и SSH.
cPanel
www.cpanel.net
В этой панели есть все, что может потребоваться новичку для любых манипуляций с минимальными усилиями, причем на Linux/Unix. По сути, cPanel является стандартом де-факто и используется самыми серьезными хостерами. Правда широкая функциональность в случаях, когда не требуется излишних наворотов, может обернуться серьезным минусом. Сильная загроможденность интерфейса и огромное количество настроек могут испугать пользователя. Но зато под cPanel разработано большое количество скриптов, которые помогают автоматизировать большинство рутинных действий администратора.
Например, чтобы перенести большой аккаунт с одного cPanel-сервера на другой с помощью командной строки, достаточно сначала набрать команду:
/scripts/pkgacct useame
После этого перенести созданный бэкап - cpmove-useame.tar.gz - на другой компьютер (в папку /home) и выполнить там команду:
/scripts/restorepkg useame
Для полноценной поддержки русского языка стоит обратить внимание на CPanel с RVskin (www.rvskin.com), который устанавливается элементарным запуском sh-скрипта (аналог bat- или cmd-файла, но под никсы). Точно так же, за пару кликов, можно обновить веб-сервер, настроить suexec, сменить proftpd на pureftpd и т.д. Для начинающего это единственное спасение.
DirectAdmin
www.directadmin.com
Основной конкурент cPanel, отличающийся качественным кодом и высоким уровнем защиты. В панели есть все, что только может понадобиться, в тоже время в ней нет ничего лишнего. DirectAdmin выигрывает у cPanel в плане адаптации к установленному на сервере софту, да и возможностей для более тонкой настройки здесь все-таки больше. К минусам можно отнести отсутствие официальной поддержки русского (существуют лишь самодельные переводы!) и не очень удачную систему бэкапа. Несладкую жизнь во время переезда могут скрасить специальные скрипты, которые ты найдешь в материалах на диске. Кстати говоря, DirectAdmin предоставляет отличный API - интерфейс для программистов, позволяющий эффективно интегрировать панель с любым другим софтом на сервере. Существует даже специальный класс на PHP, упрощающий все до максимума. Исходный код и несколько наглядных примеров - на DVD.
Оптимальное решение на первых порах - купить либо 2 реселлерских аккаунта: один с cPanel, другой с DirectAdmin, и размещать клиентов согласно их предпочтениям, либо 2 VPS-сервера и поставить разные панели на каждый. О других заметно менее популярных панелях (ISPmanager, Plesk, HSPHERE) можешь даже не задумываться. Теперь немного по поводу биллинга.
Bpanel
www.bpanel.ru
Недорогая функциональная система учета пользователей. Встроенные модули автоматической оплаты помогают пользователям быстрее оплачивать счета, а для администратора ускоряют, а зачастую просто автоматизируют процесс открытия учетных записей и продления срока хостинга.
Solidstate
www.solid-state.org
Эта совершенно открытая система позволяет интегрировать сторонние модули, что обеспечивает ей непревзойденную гибкость и функциональность. Из возможностей: проверка активных, неактивных и ожидающих аккаунтов, присоединение памяток к определенным учетным записям, отправка предопределенных e-mail'ов для новых клиентов, установка единоразовых и месячных платежей для каждого сервиса/услуги и т.д.
Mod_security - поставь хакера в тупик
В процессе поднятия своего сервиса тебе придется всерьез задуматься о безопасности сервера. Конкуренты не спят, а ненасытные хакеры ищут себе жертв каждый день. Сервер хостера - это лакомый кусочек, позволяющий разом получить доступ к множеству сайтов. Значительно обезопасить себя можно, установив модуль mod_security (www.modsecurity.org). Эта простая в использовании надстройка над Apache’ем путем фильтрования GET/POST-запросов и непрерывного мониторинга трафика защитит сервер от множества веб-атак, включая SQL-инъекции и php-include. Итак, поехали!
Компилим из исходных текстов:
/apache/bin/apxs -cia mod_security.c
Перезапускаем Apache и начинаем вносить изменения в httpd.conf:
<IfModule mod_security.c>
# Включает или выключает движок фильтра
SecFilterEngine On
# Включает проверку правильности кодирования URL
SecFilterCheckURLEncoding On
# Активирует проверку UNICODE кодирования
SecFilterCheckUnicodeEncoding Off
# Использовать только байты из этого диапазона
SecFilterForceByteRange 0 255
# Будем вести лог только для подозрительных запросов
SecAuditEngine RelevantOnly
# Имя файла лога
SecAuditLog logs/audit_log
# Вывод отладочной информации (установлен минимальный уровень)
SecFilterDebugLog logs/modsec_debug_log SecFilterDebugLevel 0
# Осуществлять проверку POST-запросов
SecFilterScanPOST On
# Для подозрительных запросов по умолчанию писать в лог
# и возвращать http-ответ с кодом 500
SecFilterDefaultAction “deny,log,status:500"
# Подмена версии демона, выдаваемой клиентам. Хаксо офигеет :)!
SecServerSignature “SEGA MEGADRIVE",
</IfModule>
Правила для mod_security самим придумывать не нужно. Все уже сделано за нас, поэтому перед «</IfModule>» добавляем следующие блоки:
# Борьба с sql-иньекциями
SecFilter "delete[[:space:]]+from"
SecFilter "insert[[:space:]]+into"
SecFilter "select.+from"
# Раскрытие конфигов
SecFilter /etc/password
# Чтение выше корня
SecFilter "\.\./"
# Межсайтовый скриптинг
SecFilter "<(.|\n)+>"
SecFilter "<[[:space:]]*script"
# Атаки с использованием cookie
SecFilterSelective COOKIE_sessionid “!^(|[0-9]{1,9})$”
SecFilterSelective ARG_PHPSESSID "!^[0-9a-z]*$"
SecFilterSelective COOKIE_PHPSESSID "!^[0-9a-z]*$"
Безусловно, подобная защита без аппаратного файрвола едва ли сможет обезопасить тебя от всех видов атак, особенно от DDoS (syn, icmp, udp), но уменьшить их огромное количество - запросто. Кстати, спасти от HTTP-flood’a способна система antiddos (http://pinch3.ru/2006/07/13/antiddos.html). Другие не менее эффективные приемы для обеспечения защиты сервера ты найдешь во врезке - прочитай ее в обязательном порядке.
Reboot
Как видишь, все не так просто, как кажется на первый взгляд. Поднакопи знаний в администрировании, обзаведись связями с нужными людьми, собери группу товарищей по общему делу, поэкспериментируй и только тогда приступай к созданию бизнеса. Конкуренция в этом секторе огромная, и если ты надеешься легко срубить на этом денег, то это не так. Тут требуется четкий подход, высочайший уровень технической грамотности и огромное желание. Впрочем, все в твоих руках!
Безопасность конторы - несколько приемов
Я не буду заострять внимание на стандартной настройке брандмауэра и необходимости обновления всего серверного ПО (читай обо всем этом в других статьях на диске). Речь пойдет о нестандартных приемах защиты сервера на базе FreeBSD.
Защита от брута SSH
Службу SSH обычно используют не для создания безопасных туннелей и сохранения анонимности в сети, а для удаленного управления сервером. Сам демон OpenSSH очень стабилен, поэтому доступ к аккаунтам зачастую возможно получить только прямым перебором. Чтобы этого избежать, используй пакет BFD (Brute Force Detection):
wget www.rfxnetworks.com/downloads/bfd-current.tar.gz
tar zxvf bfd-current.tar.gz
./install.sh.
Редактируем /usr/local/bfd/conf.bfd и изменяем «EMAIL_USR="root" TO EMAIL_USR=" you@yoursite.com», чтобы туда приходили уведомления. А в /etc/apf/allow_hosts.rules добавляем список разрешенных на подключение IP-адресов. Запуск приложения - /usr/local/sbin/bfd -s.
Скрытие настоящей ОС
Зачем хакеру знать, какую ОС мы используем? Чтобы исключить возможность fingerprint’а (удаленного определения типа и версии операционки), меняем системные переменные sysctl:
# sysctl net.inet.ip.random_id=1
# sysctl net.inet.tcp.blackhole=2
# sysctl net.inet.udp.blackhole=1
# sysctl -w net.inet.icmp.maskrepl=0
Окончательно упредить fingerprint поможет пакетный фильтр FreeBSD. Для этого в /etc/pf.conf добавляем директивы:
scrub in all fragment reassemble
pass in quick proto tcp from to $my_ip port $ports flags S/SA synproxy state block quick all
Теперь даже самые продвинутые x-toolz’ы, вроде nmap, будут ошибаться!
Скрываем демоны
Для изменения заголовка, отправляемого web-сервером Apache 1.3.x ветки, необходимо отредактировать файл src/include/httpd.h и изменить следующие строки:
#define SERVER_BASEPRODUCT "Apache"
#define SERVER_BASEREVISION "7.7.7" (любые цифры)
Поменяй их, например, на:
#define SERVER_BASEPRODUCT "MS_DOS_2007"
#define SERVER_BASEREVISION "666"
В случае Apache 2.x с модулем mod_headers можно просто добавить в httpd.conf file «(:)
Header set Server "version not listed"
И отключить службу индексации каталогов в /etc/httpd/conf/httpd.conf:
ServerSignature Off
Изменение версии SSH
Для OpenSSH из FreeBSD в /usr/src/crypto/openssh/version.h меняем, например, на это:
#define SSH_VERSION_BASE "OpenSSH"
#define SSH_VERSION_ADDENDUM "Beastie"
Маскируем версию DNS-сервера
Изменяем /etc/named.conf, добавляя строку:
version "version not listed"
Скрытие PHP-модуля
Правим /etc/php.ini, корректируя значение параметра expose_php:
expose_php = Off
Проверить результаты всех этих изменений можно стандартным коннектом через telnet на порт нужного демона или специальной утилитой - Ленивец (trin.cup.su/huyachu/lenivec), позволяющей определить практически все, что только возможно.
С глаз долой, из кеша вон
Современные технологии поисковиков дошли до такого совершенства, что зачастую могут найти даже то, что ты старательно скрываешь. Чтобы этого избежать, потребуется отредактировать robots.txt в корне:
User-agent: *
Disallow: /
Либо просто скрой от его глаз только часть своих дел, например, форум на определенном ресурсе:
# robots.txt for www.cup.su
User-Agent: *
Disallow: /forum/
Tips’n’trics для админа
Кто наспамил?
Самая распространенная конфигурация - запуск php-скриптов от пользователя nobody. Но в этом случае невозможно определить, какой пользователь отправил письмо со спамом. Для разрешения этой ситуации, существует специальный php mail header патч (http://choon.net/php-mail-header.php). После его установки в хедерах каждого письма будет строка типа: «X-PHP-Script: cup.su/mail.php for 213.180.204.8». Вычислить спамера не составит труда, и у тебя будет весомый аргумент перед дата-центром. Можешь смело заявлять, что аккаунт спамера известен и будет немедленно удален, а твоей сервер трогать ни в коем случае не нужно!
Запуск программ из /tmp
Именно из этой папки взломщики обычно пытаются запустить свои зловредные скрипты. Лучше всего вынести /var/tmp в отдельную файловую систему, а /tmp сделать симлинком на /var/tmp. После этого в /etc/fstab нужно найти строчку для /var/tmp и в опциях (options) добавить noexex. Теперь из этой папки ничего не запустишь!
Работа MySQL с кириллицей
MySQL-демон, который считается стандартной СУБД на многих серверах в инете, нужно изначально настроить для работы с кодировкой Windows-1251. Тем самым ты заранее оградишь себя от судорожных метаний по форумам с мольбами подсказать, как исправить «вопросики вместо русских символов». Благо делается это элементарным редактированием конфига /etc/my.cnf:
[mysqld]
default-character-set=cp1251
character-set-server=cp1251
collation-server=cp1251_general_ci
init-connect="SET NAMES cp1251"
skip-character-set-client-handshake
[mysqldump]
default-character-set=cp1251