home-ftp

большие проблемы маленьких серверов

крис касперски ака мыщъх, a.k.a. nezumi, a,k.a. souriz, a.k.a. elraton, a.k.a chuha, no-email

домашние ftp/http сервера сейчас воздвигают многиехакеры, совершенно не представляя во что они ввязываются. все это безумно затягивает и не отпускает назад, но проблемы остаются проблемами, они растут и накапливаются словно снежный ком, с которым потом уже не справиться, если только заранее не продумать концепцию сервера вплоть до мелочей, исправление которых на ранних стадиях проходит довольно безболезненно, но вот потом… мыщъх делится своим многолетним опытом воздвижения, администрирования и эксплуатации малых ftp/web/smtp/pop3-серверов

Зачем воздвигать свой собственный сервер, когда коммерческий хостинг стоит копейки (costs next no nothing – выражаясь на английский манер), избавляя нас от головой боли и кучи сопутствующей ей проблем? Однако, вопреки всем прогнозам количество «домашних» серверов не только не сокращается, но даже увеличивается, причем лавинообразно. Почему?!

Начнем с того, что рулить собственным сервером это безумно интересно и увлекательно, к тому же всякий начинающий администратор просто обязан попрактиковаться на «кошках», потому как экспериментировать с продакшен машиной ему не дадут, а ошибки конфигурации промышленных серверов обходятся весьма недешево. Так почему бы не получить боевой опыт малой кровью, тренируясь на своей собственной тачке?

Во-вторых, сейчас очень трудно найти коммерческого хостера, «крышующего» хакерский контент или, например, коллекцию электронных книг (музыки, фильмов). Бесплатные же хостеры уничтожают такие аккаунты по первой жалобе, даже если она поступает от Васи Пупкина, а не от правообладателя контента (чье право на собственность еще необходимо доказать, а доказывается оно в суде и никак иначе).

В-третьих, открыть доступ к своему хранилищу дистрибутивов (аудио, видео-файлов) добавив пару строк в конфигурационный файл домашнего сервера, намного проще, чем заливать эти же файлы обменники с низкой скоростью и кучей тупых ограничений. Гораздо практичнее обмениваться файлами не через ненавистную «рапшиду», а через домашние сервера. Вам никуда ничего не придется закачивать! Просто даете человеку линк — пускай скачивает хоть гигабайт, хоть весь образ Server 2008 и ни одна собака из органов об этом и знать не будет.

В-четвертых, глюки у хостеров (даже коммерческих) случаются регулярно и web-мастера вынуждены тратить огромное количество времени на общение со службой поддержки, не желающей признавать очевидное. Опять-таки, где гарантия, что хостер следит за безопасностью: своевременно накладывает заплатки, резервирует данные и делает еще кучу других вещей?!

В-пятых, установка собственного SMTP/POP3 сервера заставляет забыть о письмах, порезанных спам-фильтрами (во всяком случае на нашей стороне), а собственный DNS, напрямую обращающийся к корневым доменным серверам по TCP-протоколу, не только работает быстрее и надежнее глючных DNS-серверов, предоставленных провайдером, но и практически не поддается атакам в отличии от провайдерских DNS по умолчанию работающих на протоколе UDP.

В-шестых, мы получаем _полную_ статистику посещений и все счетчики (работающие по туманным алгоритмам) идут лесом. А статистика посещаемости — великая вещь! Добавим сюда еще возможность «банов» некоторых враждебных пользователей, что тоже немаловажно. Даже если не пытаться определить их паспортные данные по IP, все равно — свой собственный сервер позволяет намного более оперативно реагировать на хакерские атаки и набеги всяких вандалов.

Короче, домашний сервер — совершенно незаменимая в хозяйстве вещь!!!

  1. WAR-FTP:
    1. последняя версия (датированная серединой 2006 года) вместе с обновлением лежит на http://www.warftp.org/ в разделе Download, и хотя некоторые считают ее устаревшей — это хороший выбор для начинающих администраторов, проверенный временем, очень простой в управлении и к тому же, бесплатный;

Рисунок 1 WAR-FTP сервер за работой

  1. SMALL HTTP:
    1. невероятно компактный «швейцарский нож», включающий в себя кучу различных служб с гибкой системой настройки, последняя версия, занимающая чуть больше 100 Кб, вместе с документацией выложена на http://smallsrv.com/ и для жителей СНГ бесплатна. это хороший выбор для тех, кто уже освоил WAR-FTP и теперь хочет почувствовать себя настоящим администратором, курящим RFC с кучей прочей спецификаций;

Рисунок 2 здесь раздают SMALL HTTP сервер

  1. SyGate Personal Firewall:
    1. в настоящее время скуплен корпорацией Symantec и прекратил свое развитие в том виде, в котором он был, однако, мыщъх'а он вполне устраивает, другие брандмауэры он еще не нюхал, поэтому, оставляет их выбор на совести читателя.

Рисунок 3 внешний вид SyGate Personal Firewall

Если мы собираемся распространять варез, то необходимо позаботиться о том, что прикрыть свою задницу. Кто сказал, что варез незаконен?! Вообще-то, с юридической точки зрения такого термина вообще нет. Самолично выкладывая дистрибутив Вислы на домашний сервер, мы, действительно, как бы совершаем противоправное деяние, но вот именно, что «как бы», потому что стоит только создать возможность закачки файлов на сервер другими пользователями, как мы всегда сможем отмазаться, что просто предоставили дисковое пространство для файлового обмена и откуда же нам знать обладало ли лицо, закачавшее данный файл, правами на его распространение или нет.

А что это за лицо такое? Да хвост его знает, мы же логи не храним и даже если на upload'естоит пароль, известный только нам одним, пускай правообладатель попробует доказать, что это не так!!! Логи у нас, закачка была локальной, следовательно в логах провайдера никаких следов преступности нет. А презумпцию невиновности еще никто не отменял. Отсутствие доказательств удаленной закачки вареза мифическим Васей Пупкиным еще не есть доказательство, что закачка была локальной!

Если же контент принадлежит вам, то тут вообще никаких вопросов не возникает. Кстати, очень важный момент: передача эксклюзивных прав на произведение издателю, оставляет за автор право включать это произведение в собственное portfolio и выпускать в составе полных сборников сочинений _без_ согласия лица, которому были переданы _эксклюзивные_ права и без выплаты дополнительных отчислений. Чем является домашний сервер — нашим portfolio или же полным сборником сочинений — пусть каждый решает сам. Закон же не дает четкого определения ни тому, ни другому.

Приобретать дополнительный компьютер для воздвижения сервера совершенно необязательно, вполне сойдет и основная машина, правда, учитывая, что сервер должен (в идеале) работать круглосуточно и как можно реже перезагружаться, имеет смысл остановить свой выбор на маломощном (а, следовательно, малошумном) компьютере, полностью переведенном на пассивное охлаждение и оснащенного тихими дисками типа Seagate Barracuda.

Еще нам понадобиться канал связи с внешним миром и тариф, позволяющий сидеть в сети неограниченное время и не платить за исходящий трафик. В идеале, конечно, это ADSL со статическим IP-адресом, на который можно «навесить» бесплатное доменное имя типа nezumi.org.ru, но мыщъх начинал свои хроники с динамических IP-адресови с простого Dial-Up'а, оплачиваемого безлимитной месячной картой. Это кажется невероятным, но доменные имена могут работать не только со статическими, но и динамическими IP-адресами, о чем написано много статей и книг, так что мыщъх не будет повторяться, тем более, что в наши дни Dial-Up стремительно уходит в прошлое, да и все равно пользы от такого сервера немного.

Рисунок 4 по умолчанию DSL модемы выделяют на исходящий поток 1/4 от пропускной способности канала, но продвинутые модели от ZyXEL и D-Link позволяют этот параметр изменить, что очень важно для серверов, работающих преимущественно на отдачу

Операционная система может быть любой: с точки зрения безопасности предпочтительнее OpenBSD, но вполне сойдет и W2K (XP Home имеет лимит на количество устанавливаемых соединений и прочие вредные ограничения, а потому от ее использования лучше всего сразу же отказаться).

Рисунок 5 многие воздвигают домашние сервера на базе Linux/BSD, но мыщъх предпочитает верную ему W2K

Выбор серверного программного обеспечения — весьма сложная задача, к которой предъявляются следующие, достаточно жесткие требования: бесплатность (в идеале), хорошая родословная (без длинного списка наспех затыкаемых дыр), отсутствие ограничений на количество подключений, гибкие настройки, позволяющие управлять скоростью отдачи (с учетом многопоточных качалок), автоматическая блокировка нарушителей, а так же хрогология подробных логов, полезных не только для сбора статистики, но и «разбора полетов», если сервер работает неправильно или был злостно атакован воинствующими варварами.

При работе под Windows нам еще понадобиться снифер и брандмауэр (в BSD и Linux системы все это входит изначально). Windows Firewall ни на что серьезное неспособен, ну а утилиты типа tcpdump в NT как не было так, и нет, а ведь она очень нужна, чтобы выявить источник необычной сетевой активности (например).

Перепробовав огромное количество продуктов, мыщъх остановился на следующей комбинации WAR-FTP (ftp-сервер), SMALL HTTP (http/ftp/dns/smtp/pop3-сервер в одном флаконе) и SyGate Personal Firewall (брандмауэр плюс сниффер). Все это хозяйство абсолютно бесплатно, за исключением SyGate из последних халявных версий которого вырезали сниффер.

Упомянутое серверное обеспечение может запускаться как обычный прикладной процесс, так и выступать в роли службы. Мыщъх настоятельно рекомендует использовать первый путь. Сервер, запущенный от имени специального пользователя, которому видны только «публичные» файлы, даже будучи атакованным, существенно озадачивает хакера. В противном случае, достаточно просто подобрать пароль администратора, и переконфигурировать сервер, разрешив ему доступ ко всем файлам, какие только есть, причем не только на чтение, но и на запись — плакали наши данные.

Если же сервер запущен как процесс от имени ограниченного пользователя, правами файлового доступа ведает сама система и, если эти права настроены правильно, хакеру придется как минимум атаковать саму ось, что сделать намного сложнее, особенно, если администратор не забывает своевременно обновляться.

Теперь поговорим о важнейших настройках, имеющих отношения как к безопасности, так и к нашему собственному комфорту, иначе юзеры полностью забьют сетевой канал, не оставив нам никакой пропускной способности.

  1. администраторский пароль. должен быть длинным как мыщъхиный хвост. но это еще не все. для надежности настоятельно рекомендуется указать серверу перечень допустимых IP-адресов, с которых им можно рулить, если указать 127.0.0.1, то остается чисто локальный вход, предполагающий физический доступ к машине, так же можно указать IP-адреса остальных компьютеров домашней сети и (при острой необходимости) IP своей конторы, чтобы было можно управлять сервером и с работы. отправляясь в командировку, снимите блокировку на время, если не хотите потерять контроль (впрочем, угроза атаки при этом возрастает);
  2. после создания виртуальных ftp/http директорий (типа /pub/disr/ → F:\BACK-UP\DISTR\) еще раз пройдитесь по _всем_ файлам на предмет поиска конфиденциальных данных, например, мы решили открыть доступ к своей коллекции дистрибутивов, забыв, что там лежит не только варез, но и легально купленные программы вместе с нашими ключами, по ошибке перешедшее в общественное достояние со всеми отсюда вытекающими;
  3. установите предельную длительность на ограничение одной сессии в idle-режиме в 3-6 минут, чтобы толпа клиентов не болталась в воздухе, ведь каждое подключение требует определенных ресурсов и сама распространенная DoS атака — создание огромного количества сессий, при которых ftp сервер назначает клиенту порт для передачи данных, но, поскольку, кол-во портов ограничено 16-битами (за вычетом служебных портов) при целенаправленной атаке они исчерпываются очень быстро. никто не может больше подключиться к нашему серверу, но это еще полбеды!!! мы сами не можем установить ни одного TCP/IP-соединения ни с каким узлом, поскольку, для этого требуется свободный локальный порт, а их-то у нас и нет (в принципе, можно указать серверу диапазон портов, из которого он может их выделять, но при коротком тайм-ауте на сессию и при ограничении максимального количества сессий — в этом нет необходимости);
  4. максимальное количество сессий — зависит главным образом от пропускной способности канала связи, а так же от посещаемости сервера. решайте сами — что лучше: жестоко ограничить кол-во сессий (и тогда все остальные посетители вообще не смогут к нам подключиться) или же установить кол-во сессий из расчета 1 сессия на ~3 килобита пропускной способности, тогда сервер хоть и медленно, но все-таки будет вращаться при пиковой нагрузке. лично мыщъх установил лимит сессий в 69, чего вполне хватает даже в те дни, когда на сервер заходят до 3 тыс. человек и это на 2х мегабитном канале;
  5. очень важно установить максимальное кол-во сессий/соединений с одним узлом, потому как народ активно использует многопоточные качалки, зачастую устанавливающие десятки соединений, от чего сервер реально «проседает», лично мыщъх считает, что 3 соединения на рыло — вполне нормально, для http эту цифру лучше увеличить до 5ти, поскольку большинство браузеров по умолчанию грузят сразу по три картинки (и как минимум одно соединение расходуется на загрузку HTML-страницы), и если сервер «отбивает» браузера, то браузер «отбивает» картинку (не сразу конечно отбивает, там есть свой тайм-аут, но его не всегда хватает);
  6. предельный CPS на подключение и на весь канал в целом. тут нет однозначных решений. если мы установим низкий CPS, то на сервере постоянно будет «пастись» стадо пользователей, съедающих часть пропускной способности нашего канала, что неприятно. увеличив лимит (при небольшой посещаемости) мы разгрузим канал: пользователи приходят, быстро скачивают, что им нужно и отваливают. правда, при достижении определенного уровня популярности сервера эта схема перестает работать;
  7. если в домашней локальной сети используется proxy, стоящей на той же самой машине, что и http/ftp сервер, _обязательно_ укажите в настройках proxy, что проксить он может только интерфейсы локальной сети (и виртуальных машин, если они есть), иначе нас могут кинут на трафик, а это уже бэд. как вариант, можно запаролить proxy и перевести его на нестандартный порт, но не все клиентские программы с этим «дружат».

Рисунок 6 настройка Proxy-сервера на «проксирование» только с одного сетевого интерфейса

Сервер должен вести логи. Это закон. И эти логи нужно читать. Во-первых, чтобы исправлять свои ляпы (например, битые ссылки), а так же профилировать общую пользовательскую активность. Больше всех раздражают дятлы, которые любят настойчиво «долбить», пытаясь скачать несуществующие или уже удаленные файлы в бесконечном цикле с очень короткой задержкой, в результате чего мы имеем большой объем _входящего_ трафика (расходующегося на запросы к серверу), который обычно платный.

Рисунок 7 блокировка IP-адресов средствами самого сервера не самое удачное решение в плане оверхида

WAR-FTP умеет автоматически выставлять временные баны, но некоторые личности и узлы заслуживают пожизненной кары. Если они имеют статический IP (например, принадлежащий шлюзу организации где они работают или это поисковик какой), достаточно занести его адрес в black list. И WAR-FTP,и SMALL HTTP такие листы поддерживают, но пользоваться ими не рекомендуется по той простой причине, что оверхид (т. е. накладные расходы) достаточно велик и лучше вести блокировку непосредственно на брандмауэре (SyGate Firewall это позволяет — да и по удобству управления черными списками превосходит как WAR-FTP, так и SMALL HTTP).

Рисунок 8 блокировка IP на брандмауэре сводит оверхид к минимуму, к тому же препятствует атакам на саму операционную систему и прочие сервисы

В то время как дизайнеры стремятся накрутить рейтинги популярности своих сайтов, попав в первые строки поисковых машин, владельцы домашних серверов борются с ними со страшной силой. Прежде всего, поисковые роботы существенно напрягают канал, поскольку скачивают все, что только можно скачать (нормальные пользователи обычно качают лишь то, что им действительно нужно), причем этих поисковых роботов много, очень много и далеко не все они прислушиваются к файлу robots.txt, который специально для них и был узаконен.

К тому же, как только содержимое домашнего сервера проиндексировано, на него начинают ломиться все кому не лень и, что самое неприятное, он становится виден держателем авторских прав, чего следует избегать любой ценой. Ну никак нельзя допускать, чтобы палить свое privacy простым поисковым запросом.

Что делать?! Очень просто — методично «отстреливать» всех поисковых роботов, занося их IP-адреса, доменные имена (с вилдкардами) и даже целые подсети в black list'ы. О том, что это робот, а не что-то иное можно догадаться по заголовку запроса (большинство роботов не скрывают своей машинной сущности), а так же по доменному имени, принадлежащему известным поисковикам.

Пару слов по поводу заглавной страницы. Мыщъх, перебрав с десяток вариантов, наконец, вывесил сообщение, что HTTP сервер не работает, хотя это не так. HTTP сервер работает, вот только просмотр директорий запрещен, на самом сайте их нет и скачать файлы можно только по прямым линкам, размещаемых мыщъх'ем на форумах или передаваемых адресату через ПМ или письмом. FTP-сервер для «анонимусов» показывает только небольшую часть совершенно легальных файлов, а все остальное богатство раздается только зарегистрированным пользователям (как осуществляется регистрация?! ну… мы знакомимся на форумах, общаемся, etc… специальной регистрационной формы для всех желающих у мыщъха нет и не предвидится).

Рисунок 9 внешний вид одного из первых мыщъх'ных сайтов (дизайн — Олега Морозова)

Рисунок 10 еще один мыщъх'ный сайт с дизайном Олега Морозова

Рисунок 11 эксперименты с дизайном продолжаются

Рисунок 12 окончательный вид мыщъх'ного сайта, выполненного в строгом мыщъхином дизайне

На время обслуживания сервера полезно автоматически редиректить пользователь к какому ни будь бесплатному хостеру, на котором будет висеть объявление, что по техническим причинам сервер временно не работает.

Рисунок 13 если сервер не работает, значит в это время над ним работает администратор

Мыщъх описывал исключительно свой собственный опыт, свои предпочтения и политики, а политика доступа к домашним серверам диктуется исключительно волей их владельцев, очень многие из которых устанавливают драконические ограничения за несоблюдения которых автоматом влепляют бан. Что поделаешь…. домашний сервер — он дохода не приносит и потому всех, кто их воздвигает можно только поприветствовать, а претензии направить в /dev/nul или засунуть куда поглубже.