Из личного опыта администрирования домашнего сервера
Крис Касперски
Домашние ftp/http сервера сейчас воздвигают многие хакеры, совершенно не представляя, во что они ввязываются. Все это безумно затягивает и не отпускает назад, но проблемы остаются проблемами, они растут и накапливаются, словно снежный ком, с которым уже не справиться, если только заранее не продумать концепцию сервера вплоть до мелочей, исправление которых на ранних стадиях проходит довольно безболезненно, но вот потом… Мыщъх делится своим многолетним опытом воздвижения, администрирования и эксплуатации малых ftp/http/dns/smtp/pop3-серверов.
Содержание:
- Введение
- Что нам понадобится
- Закладываем фундамент
- Журнальные свитки
- Борьба с поисковиками
- Заключение
- Боковые выносы
Зачем воздвигать свой собственный сервер, когда коммерческий хостинг стоит копейки (costs next to nothing – выражаясь на английский манер), избавляя нас от головой боли и кучи сопутствующей ей проблем? Однако вопреки всем прогнозам количество "домашних" серверов не только не сокращается, но даже увеличивается, причем лавинообразно. Почему?!
Начнем с того, что рулить собственным сервером – это невероятно интересно и увлекательно, к тому же всякий начинающий администратор просто обязан попрактиковаться на "кошках", потому как экспериментировать с промышленными серверами ему не дадут (ошибки конфигурации обходятся весьма недешево). Так почему бы не получить боевой опыт малой кровью, тренируясь на своей собственной тачке?
Во-вторых, сейчас очень трудно найти коммерческого хостера, "крышующего" хакерский контент или, например, коллекцию электронных книг (музыки, фильмов). Бесплатные же хостеры уничтожают такие аккаунты по первой жалобе, даже если она поступает от Васи Пупкина, а не от правообладателя контента (чье право на собственность еще необходимо доказать, а доказывается оно в суде и никак иначе).
В-третьих, открыть доступ к своему хранилищу дистрибутивов (аудио, видеофайлов), добавив пару строк в конфигурационный файл домашнего сервера, намного проще, чем заливать эти же файлы на обменники с низкой скоростью и кучей тупых ограничений. Гораздо практичнее обмениваться файлами не через ненавистную рапидшару, а через домашние сервера.
В-четвертых, глюки у хостеров (даже коммерческих) случаются регулярно, и web-мастера вынуждены тратить огромное количество времени на общение со службой поддержки, не желающей признавать очевидное. Опять-таки, где гарантия, что хостер следит за безопасностью: своевременно накладывает заплатки, резервирует данные и делает еще кучу сопроводительных вещей?!
В-пятых, установка собственного smtp/pop3-сервера заставляет забыть о письмах, порезанных спам-фильтрами (во всяком случае, на нашей стороне), а собственный DNS, напрямую обращающийся к корневым доменным серверам по TCP-протоколу, не только работает быстрее и надежнее глючных DNS-серверов, предоставленных провайдером, но и практически не поддается атакам, в отличие от провайдерских DNS, по умолчанию работающих по UDP.
В-шестых, мы получаем полную статистику посещений, и все счетчики (работающие по туманным алгоритмам) идут лесом. А статистика посещаемости — великая вещь! Добавим сюда еще возможность "банов" некоторых враждебных пользователей, что тоже немаловажно. Даже если не пытаться определить их паспортные данные по IP, все равно — свой собственный сервер позволяет намного более оперативно реагировать на хакерские атаки и набеги всяких вандалов.
Одним словом, домашний сервер — совершенно незаменимая в хозяйстве вещь!
Приобретать дополнительный компьютер для воздвижения сервера совершенно необязательно, вполне подойдет и основная машина, правда, учитывая, что сервер должен (в идеале) работать круглосуточно и как можно реже перезагружаться, имеет смысл остановить свой выбор на маломощном (а, следовательно, малошумном) компьютере, полностью переведенном на пассивное охлаждение и оснащенном тихими дисками типа Seagate Barracuda.
Еще нам понадобится канал связи с внешним миром и тариф, позволяющий сидеть в Сети неограниченное время и не платить за исходящий трафик. В идеале, конечно, это ADSL со статическим IP-адресом, на который можно "навесить" бесплатное доменное имя типа nezumi.org.ru.
Операционная система может быть любой: с точки зрения безопасности предпочтительнее OpenBSD, но вполне сойдет и Win2k/Win2k3 (к примеру, XP Home имеет лимит на количество устанавливаемых соединений и прочие вредные ограничения, а потому от ее использования лучше всего сразу же отказаться).
Выбор серверного программного обеспечения — весьма сложная задача, к которой предъявляются следующие достаточно жесткие требования: бесплатность (в идеале), хорошая родословная (без длинного списка наспех затыкаемых дыр), отсутствие ограничений на количество подключений, гибкие настройки, позволяющие управлять скоростью отдачи (с учетом многопоточных качалок), автоматическая блокировка нарушителей, а также хронология подробных логов, полезных не только для сбора статистики, но и "разбора полетов", если сервер работает неправильно, или был злостно атакован воинствующими варварами.
При работе под Windows нам еще понадобится сниффер и брандмауэр (в xBSD и Linux все это входит изначально). Windows Firewall ни на что серьезное неспособен, ну, а утилиты типа tcpdump в NT как не было, так и нет, а ведь она очень нужна, чтобы выявить источник необычной сетевой активности (например).
Перепробовав огромное количество продуктов, мыщъх остановился на следующей комбинации: WAR-FTP (ftp-сервер), SMALL HTTP (http/ftp/dns/smtp/pop3-сервер в одном флаконе) и SyGate Personal Firewall (брандмауэр плюс сниффер). Все это хозяйство абсолютно бесплатно, за исключением SyGate, из последних халявных версий которого вырезали сниффер.
Упомянутое серверное обеспечение может запускаться как обычный прикладной процесс, так и выступать в роли службы. Мыщъх настоятельно рекомендует использовать первый путь. Сервер, запущенный от имени специального пользователя, которому видны только "публичные" файлы, даже будучи атакованным существенно озадачивает хакера. В противном случае, достаточно просто подобрать пароль администратора и переконфигурировать сервер, разрешив ему доступ ко всем файлам, какие только есть, причем не только на чтение, но и на запись — плакали наши данные.
Если же сервер запущен как процесс от имени ограниченного пользователя, правами файлового доступа ведает сама система, и, если эти права настроены правильно, хакеру придется как минимум атаковать саму ось, что сделать намного сложнее, особенно, если администратор не забывает своевременно обновляться.
Теперь поговорим о важнейших настройках, имеющих отношение как к безопасности, так и к нашему собственному комфорту, иначе юзеры полностью забьют сетевой канал, не оставив нам никакой пропускной способности.
- Администраторский пароль. Должен быть длинным как мышиный хвост. Но это еще не все. Для надежности настоятельно рекомендуется указать серверу перечень допустимых IP-адресов, с которых им можно рулить, если указать 127.0.0.1, то остается чисто локальный вход, предполагающий физический доступ к машине, также можно указать IP-адреса остальных компьютеров домашней сети и (при острой необходимости) IP своей конторы, чтобы было можно управлять сервером и с работы.
- После создания виртуальных ftp/http директорий (типа /pub/disr/ -> F:\BACK-UP\DISTR\) еще раз пройдись по всем файлам на предмет поиска конфиденциальных данных (мы же не хотим, чтобы они случайно попали в чужие руки).
- Установи предельную длительность на ограничение одной сессии в idle-режиме в 3-6 минут, чтобы толпа клиентов не болталась в воздухе, ведь каждое подключение требует определенных ресурсов. Ftp-сервер назначает клиенту порт для передачи данных, но поскольку количество портов ограничено 16-битами (за вычетом служебных портов), при целенаправленной DoS атаке они исчерпываются очень быстро. Никто не может больше подключиться к нашему серверу, но это еще полбеды! Мы сами не можем установить ни одного TCP/IP-соединения с каким-либо узлом, т.к. для этого требуется свободный локальный порт, а у нас его нет (в принципе, можно указать серверу диапазон портов, из которого он может их выделять, но при коротком тайм-ауте на сессию и при ограничении максимального количества сессий в этом нет необходимости).
- Максимальное количество сессий зависит, главным образом, от пропускной способности канала связи, а также от посещаемости сервера. Решай сам, что лучше: жестко ограничить количество сессий (и тогда все остальные посетители вообще не смогут к нам подключиться) или же установить количество сессий из расчета 1 сессия на ~3 килобита пропускной способности, тогда сервер хоть и медленно, но все-таки будет вращаться при пиковой нагрузке. Лично мыщъх установил лимит сессий в 69, чего вполне хватает даже в те дни, когда на сервер заходят до 3000 человек, и это на двух мегабитном канале.
- Очень важно установить максимальное количество сессий/соединений с одним узлом, потому как народ активно использует многопоточные качалки, зачастую устанавливающие десятки соединений, от чего сервер реально "проседает". Лично мыщъх считает, что 3 соединения на клиента — вполне нормально, для http эту цифру лучше увеличить до 5, поскольку большинство браузеров по умолчанию грузят сразу по три картинки (и как минимум одно соединение расходуется на загрузку HTML-страницы), и если сервер "отбивает" браузер, то браузер "отбивает" картинку (не сразу, конечно, отбивает, там есть свой тайм-аут, но его не всегда хватает).
- Предельный CPS на подключение и на весь канал в целом. Тут нет однозначных решений. Если мы установим низкий CPS, то на сервере постоянно будет "пастись" стадо пользователей, съедающих часть пропускной способности нашего канала, что неприятно. Увеличив лимит (при небольшой посещаемости), мы разгрузим канал: пользователи приходят, быстро скачивают, что им нужно, и отваливают. Правда, при достижении определенного уровня популярности сервера эта схема перестает работать.
- Если в домашней локальной сети используется proxy, стоящий на той же самой машине, что и http/ftp сервер, обязательно укажи в настройках proxy, что проксить он может только интерфейсы локальной сети (и виртуальных машин, если они есть), иначе нас могут кинуть на трафик, а это уже бэд. Как вариант, можно запаролить proxy и перевести его на нестандартный порт, но не все клиентские программы с этим "дружат".
Сервер должен вести логи. Это закон. И эти логи нужно читать. Во-первых, чтобы исправлять свои ляпы (например, битые ссылки), а также профилировать общую пользовательскую активность. Больше всех раздражают дятлы, которые любят настойчиво "долбить", пытаясь скачать несуществующие или уже удаленные файлы в бесконечном цикле с очень короткой задержкой, в результате чего мы имеем большой объем входящего трафика (расходующегося на запросы к серверу), который обычно платный.
WAR-FTP умеет автоматически выставлять временные баны, но некоторые личности и узлы заслуживают пожизненной кары. Если они имеют статический IP (например, принадлежащий шлюзу организации, где они работают, или это поисковик какой), достаточно занести его адрес в black list. И WAR-FTP, и SMALL HTTP такие листы поддерживают, но пользоваться ими не рекомендуется по той простой причине, что оверхэд (т.е. накладные расходы) достаточно велик, и лучше вести блокировку непосредственно на брандмауэре (SyGate Firewall это позволяет — да и по удобству управления черными списками превосходит как WAR-FTP, так и SMALL HTTP).
В то время как дизайнеры стремятся накрутить рейтинги популярности своих сайтов, попав в первые строки поисковых машин, владельцы домашних серверов борются с ними со страшной силой. Прежде всего, поисковые роботы существенно напрягают канал, поскольку скачивают все, что только можно скачать (нормальные пользователи обычно качают лишь то, что им действительно нужно), причем этих поисковых роботов много, очень много, и далеко не все они прислушиваются к файлу robots.txt, который специально для них и был узаконен.
К тому же, как только содержимое домашнего сервера проиндексировано, на него начинают ломиться все, кому не лень, и, что самое неприятное, наш privacy можно запалить простым поисковым запросом.
Что делать?! Очень просто — методично "отстреливать" всех поисковых роботов, занося их IP-адреса, доменные имена (с вилдкардами) и даже целые подсети в black list’ы. О том, что это робот, а не что-то иное, можно догадаться по заголовку запроса (большинство роботов не скрывают своей машинной сущности), а также по доменному имени, принадлежащему известным поисковикам.
Мыщъх описывал исключительно свой собственный опыт и свои предпочтения, а политика доступа к домашним серверам диктуется исключительно волей их владельцев, очень многие из которых устанавливают драконические ограничения, за несоблюдения которых автоматом влепляют бан. Что поделаешь… домашний сервер — он дохода не приносит, и потому всех, кто их воздвигает, можно только поприветствовать.
INFO
-
Последняя версия WAR-FTP, датированная серединой 2006 года, вместе с обновлением лежит на в разделе Download, и хотя некоторые считают ее устаревшей — это хороший выбор для начинающих администраторов, проверенный временем, очень простой в управлении и к тому же бесплатный.
-
SMALL HTTP – невероятно компактный "швейцарский нож", включающий в себя кучу различных служб с гибкой системой настройки, последняя версия, занимающая чуть больше 100 Кб, вместе с документацией выложена на и для жителей СНГ бесплатна. Отлично подойдет для тех, кто уже освоил WAR-FTP и теперь хочет почувствовать себя настоящим администратором.
-
SyGate Personal Firewall в настоящее время скуплен корпорацией Symantec и прекратил свое развитие в том виде, в котором он был, однако, мыщъх’а он вполне устраивает.
Статья опубликована в апрельском номере журнала «Xakep» за 2008 год.





