Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #112, АПРЕЛЬ 2008 г.

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

Крис Касперски

Хакер, номер #112, стр. 112-146-1

Из личного опыта администрирования домашнего сервера

Домашние 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-соединения с каким-либо узлом, так как для этого требуется свободный локальный порт, а у нас его нет. В принципе, можно указать серверу диапазон портов, из которого он может их выделять, но при коротком тайм-ауте на сессию и при ограничении максимального количества сессий в этом нет необходимости.
  • Максимальное количество сессий зависит, главным образом, от пропускной способности канала связи, а также от посещаемости сервера. Решай сам, что лучше: жестко ограничить количество сессий (и тогда все остальные посетители вообще не смогут к нам подключиться) или же установить количество сессий из расчета одна сессия на ~3 килобита пропускной способности (тогда сервер хоть и медленно, но все-таки будет вращаться при пиковой нагрузке). Лично мыщъх установил лимит сессий в 69, чего вполне хватает даже в те дни, когда на сервер заходят до 3000 человек, и это на двух мегабитном канале.
  • Очень важно установить максимальное количество сессий/соединений с одним узлом, потому как народ активно использует многопоточные качалки, зачастую устанавливающие десятки соединений, от чего сервер реально «проседает». Лично мыщъх считает, что три соединения на клиента – вполне нормально. Для http эту цифру лучше увеличить до пяти, поскольку большинство браузеров по умолчанию грузят сразу по три картинки (и, как минимум, одно соединение расходуется на загрузку 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 года, вместе с обновлением лежит на www.warftp.org в разделе Download и, хотя некоторые считают ее устаревшей – это хороший выбор для начинающих администраторов, проверенный временем, простой в управлении и к тому же бесплатный.

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

SyGate Personal Firewall скуплен корпорацией Symantec и прекратил свое развитие в том виде, в котором был представлен изначально – однако, мыщъх'а он вполне устраивает.

Содержание