№8(57) август 2007
№8(57) август 2007 подписной индекс 20780 www.samag.ru
Борьба со спамом как фактор, снижающий надежность почтовой доставки Используем Gmail в качестве внешнего фильтра для корпоративной почты AXIGEN Mail Server – подходящий почтовый сервер для малого офиса Создаем кластер на платформе FalconStor iSCSI Storage Server Строим междугороднюю телефонную сеть на базе АТС Samsung Корпоративное мобильное решение Nokia IMS Оцениваем возможности mod_python и mod_perl
в номере 3 СОБЫТИЯ 4 ФОТОРЕПОРТАЖ 5 ТЕНДЕНЦИИ АДМИНИСТРИРОВАНИЕ 6 Борьба со спамом как фактор, снижающий надежность почтовой доставки
Часто бывает так, что системный администратор, ограничивая прохождение нежелательной корреспонденции, становится причиной нарушения информационного обмена с деловыми партнерами обслуживаемого предприятия. Какой же путь решения проблемы приведет к успеху с минимальными потерями? Алексей Барабанов alekseybb@mail.ru
14 Используем Gmail в качестве внешнего фильтра для корпоративной почты
Уже многие оценили качество фильтрации спама и вирусов такого сервиса, как Gmail. Он позволяет размещать почтовую службу для целого домена на своих серверах, после чего почта становится доступна как через web, так и по протоколу POP3. Такая комбинация возможностей и дает нам способ использовать Gmail как внешний фильтр для почты. Виктор Венявский victor5006@hotmail.com
20 AXIGEN Mail Server – подходящий почтовый сервер для малого офиса
Сегодня почтовый сервер на базе UNIX-подобной ОС неизменно ассоциируется с непонятной новичку комбинацией вроде Postfix + Dovecot + Squirrelmail + ClamAV + SpamAssassin + БД + PostfixAdmin. Далеко не каждый решится на такое. AXIGEN Mail Server – простая и понятная в настройке почтовая система, которую без труда можно установить и использовать. Сергей Яремчук grinder@ua.fm
26 Возможности корпоративного мобильного решения Nokia IMS
Анализ типичных производственных процессов показал, что 90% поездок сотрудников связано с информационными целями – передача опыта, согласование решений, проведение совещаний. Использование современных средств телекоммуникаций способно уменьшить необходимость подобных перемещений. Александр Иванов mifp@bk.ru
32 Организуем кластер на платформе FalconStor iSCSI Storage Server
Нужен кластер, но не хватает денег на внешний дисковый массив? Можно подумать о софтовом решении кластера на базе Falconstor iSCSI Storage Server. Геннадий Дмитриев stranger03@mail.ru
ЧЕЛОВЕК НОМЕРА 38 Общение как стиль жизни
Если ты умеешь вести диалог с другом, то сможешь говорить с миллионами. Дмитрий Гришин делает это с помощью Mail.ru. Оксана Родионова rodion@dol.ru
IP-ТЕЛЕФОНИЯ 42 Развертываем корпоративную телефонную сеть на основе технологии VoIP. Часть 2
Вы уже собрали телефонную станцию и настроили ее на работу в режиме одиночной УАТС. Теперь предстоит объединить существующую и новую УАТС в общую сеть с одним номерным полем. Рашид Ачилов achilov-rn@askd.ru
54 Всё, что вы хотели знать о протоколе SIP. Часть 2
Разбираем примеры вызовов в сети SIP, реализацию расширенных услуг на базе этого протокола, протокол описания сеанса SDP и транспортный протокол реального времени RTP. Андрей Погребенник andrew.p@safe-mail.net
WEB-ПРОГРАММИРОВАНИЕ 62 Оцениваем возможности mod_python и mod_perl
Модули сервера Apache mod_python и mod_perl позволяют встроить интерпретаторы языков Python и Perl непосредственно в сервер и значительно увеличить производительность веб-приложений. Алексей Мичурин alexey@michurin.com.ru
68 Библиотека Prototype – ваш путь в Web 2.0. Часть 2: практика
Описывать все классы и методы библиотеки Prototype – длительное занятие, лучше попробовать освоить их на практике. Кирилл Сухов suckhov@planetashop.ru
WEB 74 Панель управления хостингом SysCP
Как упростить управление хостингом? Даже при тщательно спланированой архитектуре и выборе компонентов будущей системы, без некоторой автоматизации процесса потребуется очень много времени, чтобы решить все возможные задачи. Сергей Яремчук grinder@ua.fm
ПРОГРАММИРОВАНИЕ 80 Создаем COM-компоненты с помощью VBScript
Вы пишете много скриптов и надоело переносить код из одного файла в другой? Есть отличное решение – создать COM-объекты на основе своих сценариев. Иван Коробко ikorobko@prosv.ru
РЕТРОСПЕКТИВА 86 Тяжкий путь первопроходца: история компьютера Foonly F1
Компьютер Foonly F1, создатели которого внесли гигантский вклад в становление и развитие компьютерной графики и цифровых спецэффектов, столь незаслуженно обделён вниманием, и сегодня мало кому известен. Но история должна знать своих героев! Дмитрий Мороз akuji@list.ru
92 КНИЖНАЯ ПОЛКА 67 BUGTRAQ
№8, август 2007
события 4-я Международная выставкаконференция по информационной безопасности Infosecurity Russia 2007 Когда: 26-28 сентября Где: г. Москва, Экспоцентр на Красной Пресне, павильон №8 (Краснопресненская наб., 14)
Подробности: http://www.infosecuritymoscow.com Ведущая в России и странах СНГ выставка по информационной безопасности Infosecurity Russia в этом году соберет на своей площадке известные российские и зарубежные компании, которые специализируются на разработке программных продуктов и решений по ИБ. О своем участии уже заявили более 70 компаний, среди них ведущие игроки рынка, такие как: BitDefender, BSI management Systems, Check Point Software Technologies, Cisco Systems, Digital Security, EMC Russia, Eset, Fortinet, F-Secure, InfoWatch, Microsoft, Juniper Networks, Kerio Technologies, McAfee, PineApp, Positive Technologies, Symantec, SurfControl, Trend Micro, Websense, Аладдин, Антивирусный центр, АМТ-Груп, БИТ, ДиалогНаука, Доктор ВЕБ, Информзащита, Инфосистемы Джет, Лаборатория Касперского, НКК, Открытые технологии, Поликом Про, РНТ, САПР ОКБ, Стел-Компьютерные технологии, С-Терра СиЭсПи, Элвис Плюс, Энвижн Групп и другие. Коллективным стендом выступит Росинформтехнологии совместно с компаниями, входящими в состав Ассоциации защиты информации (АЗИ).
В выставке примут участие зарубежные компании из 4 стран мира – Великобритании, Израиля, США, Франции. В рамках Infosecurity Russia 2007 вас ждет насыщенная деловая программа, включающая в себя трехдневную конференцию «Взаимодействие и взаимопонимание на рынке информационной безопасности». Конференция подготовлена при помощи экспертов отрасли и состоит из более 60 «круглых столов», семинаров и презентаций компаний-участников. Свои семинары проведут компании: Microsoft, Cisco Systems, ПК Делойт и Туш Риджинал Консалтинг Сервисис Лимитед, Открытые Технологии, Лаборатория Касперского. Также в программе: выступления представителей госструктур и ассоциаций, авторов книг и публикаций, практиков, готовых поделиться своим опытом. Ожидается более 250 выступающих и более 2500 участников в конференционной программе. Предварительная программа конференции Infosecurity Russia опубликована на веб-сайте выставки в разделе «Конференция» (www.infosecuritymoscow.com/ conf-topics.ru.html). Посещение выставки, а также любого из мероприятий деловой программы Infosecurity Russia бесплатно. Проход в выставочный комплекс осуществляется только по пригласительным билетам. Получить билет можно заранее, зарегистрировавшись на сайте: www.infosecuritymoscow.com/ ticket.ru.html либо во время выставки, обменяв визитную карточку перед входом на территорию Экспоцентра у стойки организаторов.
ВКШ «Эксперт» – пропуск в компьютерную элиту! Зачем IT-специалисты идут учиться? Цели бывают разные: заполнить пробелы в знаниях; соотнести имеющиеся знания и практику, причем приобрести опыт в «безопасной» обстановке; повысить свою конкурентоспособность на рынке труда; документально подтвердить наличие специальных навыков и знаний. Но главная цель – это возможность реального совершенствования профессиональных навыков. Прошел период обучения на своих ошибках. Сегодня в цене и у работодателей, и у самих IT-специалистов системное обучение, соединяющее хорошее знание теории с опытом работы. Такое уникальное образование в России сегодня можно получить только в Высшей Компьютерной Школе «Эксперт». Это сочетание теоретической (факультет ВМиК МГУ) и прак-
№8, август 2007
тической («Сетевая Академия ЛАНИТ») подготовки по самым высоким международным стандартам. К тому же это дополнительное к высшему образование продолжительностью 2 года, не требующее отрыва от работы (3 вечера в неделю и 1 выходной). Кроме диплома самого престижного российского ВУЗа, МГУ, выпускники получают международные сертификаты, соответствующие одной из трех выбранных специализаций: администрирование информационных систем и сетей, защита информации и сетевая безопасность, разработка корпоративных приложений. Уже состоялись 2 выпуска ВКШ «Эксперт», на подходе третий. Выпускники высоко оценивают уровень обучения и достигнутые результаты: учеба в ВКШ «Эксперт» помогла совершить карьерный прорыв, получить более престижную работу и повышение в зарплате.
Ценным результатом обучения является и профессиональное общение, обмен опытом с одногруппниками, который порой не менее важен, чем само обучение. Но главное – программа помогает в систематизации уже имеющихся знаний и навыков, приобретении новых, понимании новых направлений и тенденций развития информационных технологий. До этого года в ВКШ «Эксперт» могли обучаться жители Москвы, но в ближайшее время филиалы школы появятся еще в нескольких городах России. Если вы хотели бы получить престижное и очень качественное образование в сфере IT, вы можете присоединиться к учащимся ВКШ «Эксперт» – для этого необходимо связаться с менеджером ВКШ «Эксперт» Труханкиной Еленой по тел. (495) 967-66‑70 или электронной почте ETrukhankina@academy.ru. Более подробную информацию о ВКШ «Эксперт» можно получить на сайте www.hcse.ru. На правах рекламы
фоторепортаж с ДСА 2007
Почти 1500 участников собрал II Всероссийский слёт системных администраторов
а Идёт регистрация участников слёт
Настройка инструментов перед выступлением
Палаточный городок сис админов
Ренат Минаждинов, Участников слёта приветствует t представитель компании Microsof
Большой костёр в чес ть Дня системного адм инистратора
нистратор» общается Редакция журнала «Системный адми с читателями
Фотографии: Владимир Лукин, Николай Романов
тенденции Проект MEPIS вернулся к базе Debian В пресс-релизе сообщается, что Lenovo впервые будет Авторы семейства Linux-дистрибутивов MEPIS, ориентиро- напрямую предоставлять техническую поддержку и на апванных на десктопы, отказались от базы Ubuntu в пользу паратное обеспечение, и на операционную систему, а Novell разработок проекта Debian GNU/Linux. Изначально системы обещает выпуск специальных обновлений для пользоватеMEPIS основывались на Debian, но в начале этого года бы- лей Linux-ноутбуков от Lenovo. ло решено перейти на платформу, предоставляемую Ubuntu, которая в свою очередь также базируется на Debian, но, как ОС Mac OS X «Leopard» и MEPIS, ориентирована на пользователей настольных ПК. сертифицирована как UNIX-система Ожидалось, что использование базы Ubuntu 6.06 «Dapper Консорциум The Open Group, владеющий торговым знаком Drake» LTS обеспечит пользователям MEPIS 6-месячный UNIX, выдал компании Apple сертификат, подтверждающий, цикл релизов и более стабильную системную основу. что ее операционная система Mac OS X соответствует спеНо между разработчиками и пользователями, как это пе- цификации UNIX 03. риодически бывает, возникло недопонимание. Последние Спецификация UNIX 03 затрагивает библиотеки, системполагали, что в таком случае с Ubuntu будут появляться но- ные вызовы, терминальные интерфейсы, команды и утиливые версии программ, в то время как в действительности та- ты, а также интернационализацию. Пройдя эту сертификой подход гарантировал лишь незначительные обновления кацию, операционная система Mac OS X 10.5, выход коток пакетам, исправляющие проблемы в их безопасности. рой запланирован на октябрь этого года, пополнила скромПосле попыток самостоятельной сборки новых вер- ный ряд из признанных гигантов UNIX-мира. В качестве сосий некоторых пакетов и анализа перспектив такой ини- ответствующих «UNIX 03», то есть последнему стандарту циативы разработчики решили, что стоит вернуться к ба- Single UNIX Specification (SUS) на UNIX-системы от The Open зе Debian, которая после некоторых размышлений показа- Group, зарегистрированы еще лишь три ОС (на различных лась им все-таки более стабильной и подходящей для дис- аппаратных платформах): Solaris 10 от Sun Microsystems, трибутивов MEPIS. AIX 5L от IBM и HP-UX 11i V3 от Hewlett-Packard. Среди прочих UNIX-систем, сертифицированных по друOpenProj задается целью гим версиям спецификаций SUS от The Open Group, также стать альтернативой MS Project UnixWare и SCO OpenServer, Tru64 UNIX, z/OS, NCR UNIX, На конференции LinuxWorld в Сан-Франциско был представ- NEC UX/4800 и IRIX. лен OpenProj, проект по созданию Open Source-альтернатиСоставил Дмитрий Шурупов вы Microsoft Project, ПО для управления проектами. по материалам www.nixp.ru Авторы проекта из компании OpenProj установили контакт с разработчиками популярного офисного пакета с открытым кодом OpenOffice.org с тем, чтобы обеспечить необходимый уровень интеграции OpenProj с OOo (на данный момент OpenProj поддерживает чтение файлов в формате MS Project). Также высказываются надежды, что Open Source-сообщество поможет связать OpenProj с популярными CRM- и ERP-системами с открытым кодом. Пока неизвестно, под какой лицензией будет распространяться OpenProj, за исключением того, что она будет относиться к одобренным организацией OSI (Open Source Initiative). Высказывалось мнение, что разработчики хотят воспользоваться лицензией Common Public Attribution License (CPAL), однако это может помешать процессу интеграции с OOo, распространяемым под GNU LGPL. Помимо Linux-версии OpenProj ожидаются пакеты этого программного обеспечения для Macintosh и Windows. Более подробная информация по OpenProj доступна на веб-сайте http://www.openproj.com. Lenovo будет выпускать ноутбуки с SUSE Linux Компании Lenovo и Novell объявили о заключении договора, по которому в ближайшее время начнется поставка ноутбуков с предустановленной ОС GNU/Linux. На популярные лаптопы линейки ThinkPad T Series будет предварительно устанавливаться SUSE Linux Enterprise Desktop 10 – корпоративный Linux-дистрибутив Novell, ориентированный на настольные ПК. Продажа ноутбуков начнется уже в четвертом квартале 2007 года.
№8, август 2007
администрирование
Борьба со спамом как фактор, снижающий надежность почтовой доставки
Алексей Барабанов Часто бывает так, что системный администратор, ограничивая прохождение нежелательной корреспонденции, становится причиной нарушения информационного обмена с деловыми партнерами обслуживаемого предприятия. Какой же путь решения проблемы приведет к успеху с минимальными потерями?
администрирование
Э
лектронная почта является не- том виде возвратом инвестиций в инзаменимым и очень важным формационные ресурсы. информационным каналом, исКазалось бы, что трудного – изъпользуемым в бизнес-процедурах сов- ять спам из входящей почты компаременного офиса. Будучи однажды на- нии? Почему бы не поступить так же, строенной и включенной в практичес- как с бумажной почтой и факсимилькое использование, она постепенно ным спамом – перебрать все и удавовлекает в свою сферу все возмож- лить лишнее. Очень простая проценые деловые контакты, в силу следу- дура – взять, оценить, поступить соющих присущих ей свойств: гласно вердикту. Эта формула униn изначальная интеграция в компью- версальна! Все системы противодейстерный офисный документооборот; твия спаму работают по такому принn низкая стоимость и отсутствие от- ципу. Но есть ряд существенных отлиходов от применения; чий от ручной сортировки сообщений n высокая скорость и возможность ортодоксальных каналов, основанных информационного и без предвари- на ранее перечисленных свойствах тельных договоренностей обмена, именно электронной почты: и вне зависимости от расстояния n из-за низкой стоимости электрони государственных границ. ной почты соотношение спама к полезной почте может быть сколь Но в силу этих же причин таким пуугодно высоким, а значит, затратем удобно пользоваться для несанкты на сортировку могут значительционированного внедрения в системы но превосходить объем полезного документооборота компаний инфор«выхлопа»; мационных материалов самого разно- n из-за естественного встраивания образного содержания и с очень низэлектронной почты в офисный доким соотношением затрат на единицу кументооборот фильтрация спапередаваемой информации. Как изма приводит к созданию подсисвестно... тем, игнорирующих как приватный, так и служебный статус электронЕсли какая-нибудь ных посланий, или даже произвонеприятность может дящих обратное перераспределепроизойти, она случается. ние почтовых сообщений от пользователей к серверным службам Закон Мерфи И находится очень много лиц и да(общий почтовый архив, карантиже специальных организаций, котоны и прочее); рые, используя указанную возмож- n информационный обмен без перность, внедряют в офисные систевоначальных договоренностей не позволяет построить эффекмы, подключенные к почтовым каналам Интернета, всякого рода рекламтивный и простой автоматический ные материалы, вирусные коды и трофильтр, поскольку не дает возможянские программы. Объем нежеланости заранее оценить число нужтельной корреспонденции, называеных в процессе работы контактов и соответственно обеспечить бесмой спамом, растет лавинообразно, отвлекая внимание операторов комперебойное прохождение только пьютеров, расходуя ресурсы сервеполезной почты. ров и сужая полосу пропускания соединительных каналов. Все это делаИначе говоря... ет задачу противодействия спаму одной из важнейших не только в техно- Все не так легко, логическом плане, но и с точки зрения как кажется. Следствие 1 экономической эффективности функ- из закона Мерфи ционирования офисных систем. Мож- Рассмотрим подробнее, какие почтоно даже сказать, что борьба со спа- вые обмены предусматриваются в бизмом является чуть ли не единствен- нес-процедурах и составляют очевидной деятельностью системного адми- ный информационный поток: нистратора, которая может быть оце- n отправление рег улярной поч ты из офиса удаленным деловым нена как составляющая положительного баланса, то есть является в чиспартнерам;
№8, август 2007
n получение регулярной почты от удаленных деловых партнеров;
n отправление почты новым респондентам;
n получение деловой почты от новых респондентов. Из перечисленного оставим только то, что относится к входящим потокам. Далее, поток получения почты от деловых партнеров можно легко формализовать очевидным образом – по адресам отправителей. Получается, что единственная неизвестная составляющая – почта от новых респондентов! А теперь, точно так же попробуем охарактеризовать спам: n получение нежелательной почты от неизвестного респондента, или внешний спам; n неавторизованное отправление почты некоторому респонденту, или внутренний спам (троянская рассылка). Опять же, внутренний спам, устраняемый путем внедрения антивирусных систем и запретом прямой рассылки из офисной сети, далее рассматривать не будем и обратим внимание на спам внешний. Характер данного потока полностью совпадает с ранее описанным как «получение деловой почты от неизвестного респондента». И именно в этом заключается конфликт. Запретить получение почты от новых отправителей невозможно, и, таким образом, создается возможность удаленному отправителю внедрять свой неавторизованный информационный поток, подмешивая его к очевидному информационному потоку офиса. Оборотная сторона данной проблемы заключается в том, что даже малейшее вмешательство в процесс получения писем такого рода создает вероятность ошибки, которая в деловой практике может привести к потере выгодного заказчика или к недоставке важной информации иного рода. Рассмотрим два этих схожих потока подробнее.
Процедура получения деловой почты от нового респондента Отправитель такой почты – сотрудник офиса другой компании, который, воспользовавшись известным ему поч-
администрирование товым адресом, произвел отправку с клиентской рабочей станции (далее компьютер, участвующий в сетевом обмене, будет именоваться хостом) через почтовый сервер офиса или почтовый сервер провайдера Интернета. Опишем характеристики такой почты: n в списке отправителей как минимум 2 хоста (станция и почтовый сервер); n непосредственно передача производится с почтового сервера, настройка которого обязана удовлетворять сетевым стандартам; n результаты процедуры отправки почты оцениваются оператором-человеком, который при неудаче имеет возможность изменить параметры почтового запроса; n получатель такой почты полностью определен в соответствии с деловым назначением, то есть совмещение сеансов передачи подобных сообщений разным получателям маловероятно. С точки зрения бизнес-процедур такая почта делится на два типа: n тип 1 – контакт с новым партнером, когда результатов ожидают и в случае неудачи используют альтернативные каналы связи; n тип 2 – деловая рассылка по диапазону адресов, когда отправитель, скорее всего, не будет заинтересован в повторении сеанса передачи сообщения в случае первоначальной неудачи, так как оценивает успех статистически (например, извещение о планируемой выставке или другом публичном событии). Последний случай чрезвычайно схож с процедурами рассылки спама, что делает этот тип деловой почты очень уязвимым при применении мер противодействия спаму.
Процедура получения нежелательной почты от неизвестного респондента Эта почта очень редко отправляется вручную оператором. Рассылка спама является экономически целесообразным действием, то есть оценивается в зависимости от объема, скорости доставки и её успешности. Поэтому используются всевозможные сред-
ства автоматизации, что как следствие ренний абонент получает данное соприводит к неизбежности возникнове- общение в свой почтовый ящик на стония общих схожих черт в информаци- роне сервера. онном потоке такой почты: На этом этапе почта уже принята, n используются как транзитные поч- но еще не прочтена оператором, котовые серверы, так и хосты с пря- торому предназначена. Будем считать, мым подключением к Сети, то есть что возможны только два способа поне всегда присутствуют 2 отправи- лучения почты на стороне клиента – теля в списке пересылок; POP3 и IMAP, то есть всякие проприеn используется автомат отправки тарные почтовые протоколы рассматпочты, который в силу большо- риваться не будут. го объема адресов не имеет возПервое, POP3 – протокол по котоможности рассматривать ответ от рому все сообщения забираются почкаждого сервера и часто допуска- товым клиентом и далее обрабатывает несоответствия сетевым стан- ется в автономном режиме. дартам; Второе, IMAP – протокол, с помоn с одного хоста может отправлять- щью которого клиентская программа ся почта, принадлежащая разным работает с сообщениями на стороне адресам отправителей; сервера, что позволяет отслеживать n с одного хоста может отправлять- характер и последовательность манися почта на разные и очень часто пуляций человека-оператора с почтоне объединенные общими бизнес- вым контентом. процедурами внутренние адреса; Таким образом, завершение пути n объем почты от хоста-спамера за- почтового сообщения производится частую превышает типичный ин- или по протоколу POP3, или по протоформационный поток от хоста, уп- колу IMAP, после чего можно утвержравляемого оператором-челове- дать, что сообщение доставлено. ком. Здесь самое время вспомнить выше заявленную формулу – «взять, оцеИтак, оба рассматриваемых пото- нить, поступить согласно вердикту». ка поступают на вход почтовой систе- В пути доставки почтового сообщения мы. Изначально не известно, какому из можно указать только три места, в коних принадлежит входящее сообще- торых возможно употребление этого ние. В этом вся интрига и заключена. славного и простого алгоритма приПотому настало время обсудить, как знания почты нежелательной: конкретно производятся прием и об- n на этапе обращения удаленного работка почты. отправителя к офисному серверу – отказ в приеме; Процедура приема почты n удаление на пути до почтового на стороне офиса ящика пользователя – контентная Напоминаю, что обсуждается только фильтрация; почта от ранее неизвестных отправи- n путем ручной сортировки на клителей. То есть некоторое сообщение, ентской машине. характер которого еще не определен, поступает на вход почтовой системы Последнее означает, что спам был (далее сервера). принят пользователем к прочтению. На этапе соединения сервер обя- Поэтому рассматривать как возможзан выработать решение – принимать ные альтернативы следует лишь перданное сообщение или отвергнуть его. вые два. Даже с этой поправкой... Здесь сервер имеет сведения лишь о сетевом адресе хоста-отправителя, Всякая работа требует почтовом адресе предполагаемого больше времени, чем вы отправителя и почтовом адресе внут- думаете. Следствие 2 реннего получателя. Если сервер при- из закона Мерфи нимает решение о получении сообще- Итак, выше были определены две точния, то запускается процедура приема, ки по пути следования почты от отпраи сообщение поступает внутрь почто- вителя к получателю, в которых целевой очереди сервера. Затем произво- сообразна фильтрация спама. Расдится сортировка, и некоторый внут- смотрим их в порядке применения.
администрирование Отказ в приеме нежелательной почты На этом этапе сервер может получить очень немного сведений о предполагаемом почтовом сообщении: n сетевой адрес и доменное имя хоста-отправителя; n почтовый адрес отправителя; n почтовый адрес получателя. Решение о принадлежности почты к категории нежелательной должно быть принято лишь по перечисленным критериям. Достаточно ли этого для получения абсолютно правильной резолюции? Скорее всего, нет. Но этого полностью достаточно для определения той почты, которую не нужно фильтровать на спам! Как правило, именно по адресу отправителя или по хосту-отправителю производится построение «белых» списков в почтовых системах. Но перехват спама на данном этапе вместе с тем имеет очень много положительных сторон: n отказ в приеме почтового сообщения оформляется в соответствии с сетевыми стандартами, и отправитель получает стандартное уведомление с указанием причины; n почтовое сообщение, причис ленное к спаму, не принимается, то есть не использует ресурсы сервера и не расходует трафик, что не позволяет хосту-спамеру блокировать сервер частыми или крупноразмерными посылками. Учитывая вышесказанное, именно в этом способе противодействия спаму предпринималось наибольшее число инициатив разных компаний и общественных организаций. Это всем известный SPF (sender policy framework) [1], затем Sender ID от Microsoft [2], и, наконец, недавнее предложение от IETF почтовой аутентификации на основе DKIM [3]. Все перечисленные сетевые стандарты создавались с целью более полного представления полномочий хоста-отправителя, чтобы сервер мог квалифицированно решать вопрос о приеме или отказе в отношении конкретного почтового сообщения. Если такой фильтр вынес неверную резолюцию, то для сообщений типа 1, которые отправляются оператором и ответ на которые также ожида-
№8, август 2007
ется конкретной персоной, не проис- ем почтовом ящике. Поэтому все сисходит ничего фатального, так как сер- темы контентной фильтрации не изывер отправителя сформирует служеб- мают почтовые сообщения из потока, ное письмо с указанием причины отка- а лишь помечают их соответствующим за. А вот для сообщений типа 2, рассы- образом. Иначе говоря, контентная лаемых автоматически или через спис- фильтрация на уровне сервера рабоки рассылки, все складывается гораз- тает лишь при соответствующим обрадо хуже, если результаты рассылки зом настроенной фильтрации на уровоцениваются лишь по совокупности, не клиентских компьютеров. а не каждая доставка в отдельности. Таким образом, контентная фильИначе говоря, даже если предпо- трация является платформенно-завиложить, что фильтрация на входе из- симой, во-первых. Более трудоемкой – начально была включена в состояние настройка сервера и программы-клизапрета всех доставок, то в самые ко- ента, во-вторых. И в-третьих, возрасроткие сроки связь с постоянными кон- тает вероятность потери почтового трагентами можно восстановить путем сообщения в результате ошибочной настройки исключений ( «белый» спи- фильтрации, так как отправитель уже сок ). И все новые респонденты также не извещается о резолюции фильтрубудут в самые короткие сроки полу- ющей системы. чать доступ к каналу доставки электИ если фильтр срабатывает на соронной почты. общениях из категории потока от ноЕдинственной проблемой остают- вых отправителей, то практически со ся неавторизованные рассылки. Но эту 100% вероятностью в такой системе проблему можно частично преодолеть недоставка будет обнаружена горазпутем изучения типичного входного до позже, чем в фильтрации на этапе трафика данного сервера. Тогда бу- получения. Более того, получатель будут отсекаться лишь рассылки, пред- дет вынужден вручную пересмотреть принимаемые вновь. все сообщения, помеченные как спам, Особо надо заметить, что, как пра- в поисках потерянного. вило, подобный фильтр не включаетС другой стороны, можно утвержся на тотальное подавление почтово- дать, что при контентной фильтрации го трафика. Априорно отказывается почтовые сообщения не теряются вовв приеме лишь тем хостам, чьи регис- се, так как все они оказываются у полутрационные данные в доменных сер- чателя тем или иным образом. верах не соответствуют стандартам. Итак, оба подхода к фильтрации То есть запретительная часть такого не исключают ошибок. Оба подхода фильтра строится на основе статисти- не идеальны, но каждый имеет свои ки полученного спама, или, говоря ина- специфические преимущества. Попроче, по требованию пользователей. буем сделать выбор между ними, исходя из риска потери важной деловой Контентная фильтрация почты, поскольку ... На этом этапе сервер имеет полный набор сведений об отправителе, по- Из всех неприятностей лучателе и характере самого почто- произойдет именно та, вого сообщения, что позволяет с мак- ущерб от которой больше. симально возможной точностью оп- Следствие 3 из закона ределить, является ли данное почто- Мерфи вое сообщение нежелательной рас- Предположим, сотрудник компании обсылкой. Но вместе с тем для отправи- ратился к системному администратору теля почтовое сообщение уже выгля- с жалобой на то, что некоторое очень дит как полученное, поскольку сервер важное для него письмо было «съепринял его к доставке. И если на этапе дено» почтовым сервером. Причем доставки спам-фильтрами будет при- он даже, как правило, не знает обстонято решение о том, что сообщение ятельств произошедшего, максимум – воспринимается как спам, то при изъ- ему известен адрес отправителя. ятии его из почтового трафика складывается конфликт ожиданий: отпра- Отказ в приеме витель считает, что сообщение полу- Нам известно, что отправитель должен чено, а получатель не видит его в сво- был получить уведомление и самосто-
администрирование ятельно предпринять очень простые правителем, так как ему не прихо- дает основания считать применение меры к исправлению ошибочной филь- дится просить о повторной отправке. методов «отказа в приеме» более эфтрации – сообщить получателю по аль- Но на самом деле, если учесть фак- фективными по сравнению с методатернативным каналам связи или на- тор времени, то получается, что поте- ми «контентной фильтрации». править письмо системному админис- ря письма в случае контентной фильТеперь проанализируем возможтратору. Поэтому данная ситуация вы- трации будет обнаружена существен- ность ложного срабатывания вопреки звана скорее не техническими пробле- но позднее. действующим настройкам. Применимами, а сложностью отношений между Если почтовому сообщению отка- тельно к «отказу в приеме», который отправителем и получателем. Напри- зано в приеме, то отправитель полу- построен на списке заблокированных мер, получатель не может вторично об- чает служебную резолюцию в течение и/или разрешенных хостов, это звучит ратиться к отправителю и попросить нескольких минут. А вот если письмо как – а может ли хост из участвующееще раз послать нужное письмо, а от- затерялось в недрах спамного каран- го в деловой переписке превратиться правитель не считает нужным разби- тина, то узнать о пропаже можно лишь в спамерский, и наоборот. В первом раться в тонкостях «письмохождения». после того, как истечет разумное вре- случае – да, так как это равносильно Часто такое происходит из‑за чрезмер- мя ожидания, обусловленное темпа- тому, что в офисе удаленного респонной заинтересованности получателя, ми тех бизнес-процедур, которые бу- дента заведется затрояненный комчто характерно для коммерческих ком- дут нарушены из-за недоставки дан- пьютер, включенный в сеть спамерпаний, в которых маркетинговые отде- ного сообщения. ской рассылки. Будет ли это основалы играют определяющую роль в отноИначе говоря, письмо, потерянное нием для изменения статуса данношениях с системными администрато- в результате ошибки контентной филь- го отправителя? Вряд ли! Скорее всерами. В тех компаниях, где основным трации, в силу особенностей данно- го, надо будет своевременно инфор«заказчиком» информационных служб го метода может быть восстановлено мировать администрацию удаленного являются финансовые отделы, более только после нанесения максимально- офиса о проблемах. Во втором случае склонны мириться с такими неудобс- го вреда от его недоставки. сложнее, так как это значит, что ктотвами ради сокращения потока нежеСледующим критерием сравнения то из заблокированной сети пытается лательной почты. выберем эффективность применения вступить в деловую переписку и получает в ответ обидное послание о блокаждого из методов, так как... Контентная фильтрация кировке как спамера. Вероятность таТак как в данном методе фильтра- Если четыре кого события не исключена. И практика показывает, что именно с такиции письма не изымаются из потока, причины возможных а лишь только метятся, то теперь нам неприятностей заранее ми проблемами приходится чаще всеуже точно известно, что к получателю устранимы, то всегда го сталкиваться при обслуживании инпришло данное письмо. Значит, он его найдется пятая. формационной системы коммерческоне смог найти по каким-то причинам. Следствие 4 из закона го предприятия. Если же подобное случается в проЭто дает основания сразу «завернуть» Мерфи подобную жалобу. Если цель систем- Попробуем предположить модель рас- цессе контентной фильтрации, то ошибного администратора в сокращении сылки спама. Пусть разнородный спам, ка подобного рода может вызываться своих забот любой ценой, то здесь представленный некоторым множест- двумя причинами: ему представляется прекрасный слу- вом сообщений, рассылается с опреде- n получен спам от делового респончай переложить труды по поиску про- ленного множества хостов. В такой сидента; павшего сообщения на озабоченного туации, «отказ в приеме» будет филь- n получено письмо, ошибочно присотрудника. тровать хосты спамерской сети, а вот нятое за спам по совокупности его В том же случае, когда системный «контентная фильтрация» будет напараметров. администратор в самом деле попыта- полнять фильтровую базу дайджестается решить данную проблему, не за- ми всех сообщений. Задумаемся, наЗдесь подразумевается, что источставляя несчастного менеджера пере- сколько эффективно противодействие ник обсуждаемого сообщения не вхочитывать все спамовые письма в поис- спаму в каждой из точек фильтрации. дит в «белый список», то есть инфорках случайно помеченного, то действо- Для этого зададимся вопросом, мо- мационный поток от него подвергается вать ему придется точно теми же мето- жет ли один спамерский хост рассы- обычной процедуре фильтрации. Тогда дами, что и в первом варианте. То есть лать спам разного типа. Безусловно, ситуация с сообщениями первого рода сначала узнать адрес отправителя, за- да! Далее, задумаемся, какой процесс полностью аналогична выше описантем найти в протоколах путь обработ- протекает более динамично – измене- ному случаю с затрояненным компьюки данного сообщения и так выйти ние числа спамерских хостов или мо- тером в сети отправителя. А вот письна то место, где оно хранится. дификация набора нежелательной ма, совпавшие по сигнатуре со спамом, В чем же разница? Кажется, что корреспонденции. Опять ответом бу- составят статистику риска «by design» вторая ситуация гораздо легче. Во‑пер- дет, что, скорее всего, спамерская сеть для данного метода фильтрации. Привых, поиск происходит «в две руки». является более устойчивым множест- чем этот риск не устраним способами, Во‑вторых, получатель, потерявший вом, чем совокупность нежелательной положенными в основу контентных меписьмо, «сохраняет лицо» перед от- электронной корреспонденции. Все это тодов фильтрации. Для преодоления
10
администрирование данной проблемы и защиты деловой почты важных контрагентов используются не специальным образом вычисленные сигнатуры «правильных» писем, а все те же «белые» списки, состоящие из адресов отправителей – почтовых и сетевых. Еще хуже будет результат сравнения двух этих способов противодействия спаму по ресурсоемкости реализации. Что неудивительно, поскольку...
Предоставленные самим себе события имеют тенденцию развиваться от плохого к худшему. Следствие 5 из закона Мерфи В реальном почтовом сервере всегда существуют правила ограничения приема, то есть стандартно настроенный сервер уже имеет некоторый фильтр на входе, принимающий от определенной категории хостов всю почту и отказывающий остальным в определенной части своего сервиса. Это неизбежно. Почтовый сервер, не отказывающий никому, называется открытым релеем. Кроме того, на практике всегда встречаются контрагенты, ошибающиеся адресом. Иначе говоря, штатные уведомления о трудностях доставки обязательно должны обрабатываться на стороне отправителя и аналогично принимаются по альтернативным каналам на стороне получателя для устранения причины недоставки сообщений электронной почты. Подобное поведение почтовых систем закреплено стандартами. Значит, внедрение любой системы фильтрации, работающей по принципу «отказ в приеме» не потребует никаких переделок и доработок как на стороне отправителя, так и на стороне получателя сообщений, но заставит более внимательно и оперативно отрабатывать информацию, поступающую по альтернативным каналам для устранения коллизий ошибочной фильтрации. Внедрение контентной фильтрации потребует увеличения мощностей почтового сервера в расчете на работу фильтрующих программ и создания дополнительной емкости средств хранения данных для спам-карантина. Если стоимость памяти падает, то вот первый нагрузочный параметр явно не
№8, август 2007
поспевает за темпами роста пересылаТогда зачем заниматься контентной емых объемов данных, вызванных уве- фильтрацией? Может, выкинуть ее вовличением пропускной полосы каналов се? В сущности сама идея, что можно связи. Почтовое сообщение, включаю- априорно составить такую базу сигнащее многомегабайтный архив, может тур почтовых сообщений или такой наобрабатываться в системе контентной бор эвристических методов, которые исчерпывающе дадут ответ на вопфильтрации десятки минут. Но и это не все! Кроме того, пона- рос принадлежности некоторой кододобится соответствующая настрой- вой последовательности, называемой ка клиентских компьютеров. Если все электронным письмом, к категории неписьма после контентной фильтрации желательной корреспонденции чрезбудут смешаны в одной папке «Вхо- вычайно близка к теме создания вечдящие сообщения», тогда оператору ных двигателей, философских камней придется самостоятельно принимать и прочих почти магических предметов. решение о чтении или игнорировании Можно даже утверждать, что все (все, каждого сообщения на основании ре- я не шучу!) коммерческие продукты, комендации фильтра. Значит, или поч- основанные на контентной фильтратовый клиент на компьютере получа- ции спама, являются в чем-то мошентеля должен поддерживать сортиров- ническими. ку по некоторому ключевому признаИ окончательно контентная фильку на спам и рациональную почту, или трация проигрывает по показатетакая сортировка должна произво- лю трудоемкости внедрения, потодиться на стороне почтового серве- му что... ра, а клиентская программа должна использовать протоколы для удален- Как только вы ной работы с сообщениями, хранящи- принимаетесь делать мися на стороне сервера, например какую-то работу, IMAP. Хотя в тексте используется со- находится другая, юз «или», но на практике сортировка которую надо сделать на стороне клиента не имеет смысла, еще раньше. Следствие 6 так как серверные компоненты сис- из закона Мерфи темы контентной фильтрации лиша- Рассмотрим процедуру внедрения пеются простой возможности получе- речисленных методов фильтрации ния от пользователя подтверждения спама. или опровержения правильности применяемых политик исходя из переме- Отказ в приеме щений опротестованных сообщений Есть два пути настройки подобной блопо почтовым папкам. Например, если кировки. Первый заключается в том, некоторое нежелательное сообщение чтобы воспользоваться публичными спам-фильтром пропущено, то будучи службами, коллекционирующими адпомещенным в специально выделен- реса хостов, замеченных в рассылке ную папку, оно сканируется повторно, спама, так называемые RBL (realtime и его дайджест включается в поиско- blackhole list). Это самый простой и невую базу. И наоборот, изъятое из пап- эффективный способ. Но именно с неки со спамом деловое сообщение ска- го, как правило, начинают все. Нанируется, и адрес его отправителя по- стройка занимает 15 минут, затем долмещается в «белый список». Конечно, го обрабатываются жалобы получатеподобный функционал можно решить лей на отказ в приеме деловой почты, за счет внутренних пересылок (фор- что выливается в составление корповардов) на служебные адреса, но такое ративного «белого списка». Самое плодействие будет удачным лишь в слу- хое, что «белый список» составляется чае корректной пересылки самим поч- не методично, а лишь в той степени, товым клиентом. И все равно таким как используемые провайдеры RBL пепутем не решается главный вопрос – рекрывают деловую корреспонденцию. статистический анализ спама после А так как RBL пополняются динамичесего нахождения в клиентском каран- ки, то «борьба» за доступ деловой почтине после изъятия ошибочных сооб- ты рискует затянуться до полного исщений и размещения в нем пропущен- тощения сил одной из противодействуных и прочее. ющих сторон «сисадмин vs заказчики
11
администрирование его работодателя». Не надо быть очень прозорливым, чтобы предсказать исход – среди используемых поставщиков RBL останутся только самые консервативные, вроде тех, что описывают сети dial-up, что сведет эффективность данной фильтрации к нулю! Второй способ заключается в составлении как «белого», так и «черного» списка фильтрации с учетом особенностей информационных связей конкретной компании. Здесь просто раздолье для всяких стратегий, основанных на изучении почтовых протоколов. В качестве примера можно привести решение, предложенное Максимом Чирковым [4] для почтовых серверов с большим числом пользователей. В основу этого метода положено предположение о том, что спам поступает сразу многим пользователям одного сервера, не связанным никакой общей бизнес-схемой. Это позволяет блокировать распространителей спама сразу после первой рассылки. Возможен и другой подход к составлению списков фильтрации. Главное в этом методе то, что изначально блокировка отключена. Затем в течение некоторого периода происходит автоматическое накопление информации, на основе которой составляются списки блокировки. Собственно тем все и сказано – автоматически! Хотя над самим скриптом сбора данных, возможно, и придется предварительно потрудиться. Отрицательным свойством можно считать постепенность внедрения – эффект фильтрации проявляется лишь со временем, в темпе пополнения «белых» и «черных» списков, и то, что такую систему надо постоянно поддерживать в работоспособном состоянии – предоставленные самим себе фильтрующие списки постепенно теряют актуальность.
Контентная фильтрация Данный метод подобен волшебной пилюле – эффект проявляется практически моментально! Но вот внедрение требует значительных переделок как почтовой системы, так и клиентских рабочих мест. Сам фильтр придется встроить в путь доставки почты. Причем это не пассивная таблица со списком фильтрации, а программная компонента, требующая собственных ресурсов, а значит, ее внед-
12
рение нужно учесть в характеристи- ния ряда совершенно открытых и пубках серверного оборудования. Если лично доступных адресов. Очень часмасштабирование табличной фильтра- то это info@, или даже mail@. Почта ции заключается в изменении разме- по таким адресам должна проходить ров рабочих устройств памяти, то мас- во что бы то ни стало! штабирование активных программных А может быть и наоборот. Многие компонентов (а в процессе внедрения руководители очень не любят, когда может появиться такая необходимость) в приходящих к ним спамовых письэто уже вопрос иной ценовой катего- мах они именуются полной уважирии. Затем надо предусмотреть проце- тельной формой (ФИО) в рекламной дуру сортировки на основании резолю- листовке предметов интимного досуции фильтра. И если такую сортиров- га. И поскольку никакое объяснение, ку не получится выполнить в пределах что информация о руководителях предIMAP-директорий на сервере, то при- приятий публично доступна, а значит, дется перенастраивать все клиентские с легкостью может попасть в спамеррабочие места! скую базу, не помогает, то единственИтак, на одной чаше весов большие ный выход – максимально избавить тахлопоты сисадмина, а на другой – обе- кие почтовые учетные записи от нежещания одним махом избавить от спама! лательных посланий. А уж если такую систему предлагают Таким образом, реальное примекак коммерческий продукт, то у руко- нение фильтрующей системы невозводства компании создается иллюзор- можно без использования набора поная уверенность в том, что проблема, литик, оговаривающих требуемый урокоторая их так раздражает, решается вень защиты от спама. На самом прии быстро, и недорого! Причем если по- митивном уровне это все те же «белые» зитивные результаты работы фильтра- списки, но уже не отправителей, а поции на входе никак не видны, а нега- лучателей, например, для Postfix [6]. тивные сразу заметны, то в контентной Но для построения разветвленной фильтрации все с точностью до наобо- и согласованной системы политик, рот. Здесь позитивные качества сразу управляющих фильтрацией и достузаметны по наполнению директорий пом к электронной почте, конечно же, со спамом, а вот негативные и обнару- требуются специальные програмживаются не так быстро, да и количес- мные компоненты. Для того же Postfix твенно тонут, тонут буквально, внутри их можно найти на странице [7]. тех же спамовых карантинов. Использование таких систем делаНо, как уже было заявлено, ни од- ет модель фильтрации не столь прямона из систем противодействия спаму линейной. Например, если применять не гарантирует безошибочной и пра- policy-демоны на входе smtpd сервера вильной фильтрации. Иначе говоря... Postfix, то можно проверять не только минимальный набор признаков smtpВсякое решение плодит соединения (хост, отправитель, полуновые проблемы. чатель), но и SPF-тэги отправителя. Следствие 7 из закона Кроме того, такая компонента может Мерфи отслеживать статистику соединений, Предположим, все хлопоты позади. что используется для построения поФильтрация спама настроена и рабо- литик greylist, т.е. разрешения доступа тает. И тут выясняется, что необхо- к почте только с определенного числа димо настроить дифференциальное попыток отправителя. применение. То есть единообразное Вот, теперь задумаемся, как можно применение фильтра ко всему вход- совместить политики с выбранным меному потоку неэффективно! Напри- тодом размещения спам-фильтра. мер, почтовыми стандартами требуется без всяких ограничений прини- Отказ в приеме мать почту на служебные адреса, та- Политика строится на основе всего кие как postmaster@ [5]. Далее, обыч- лишь трех упомянутых признаков соно так же «открываются» адреса общения – хост, отправитель, получаabuse@, webmaster@ и подобные. Кро- тель. Например, для greylist, триада, ме того, характер деятельности мно- характеризующая отдельную отправгих предприятий требует установле- ку, записывается в базу, что и позво-
администрирование ляет строить историю взаимодействия с хостом, отправляющим сообщения. В проекте apolicy [8] на основании полей триады строятся традиционные для межсетевых экранов правила управления доступом. Обращаю внимание, в политиках используется вся информация, которой располагает почтовый сервер в данной точке.
Контентная фильтрация А вот тут получаем парадокс! Механизм самой контентной фильтрации в policy никак не задействуется. Политики применяются до исполнения процедуры фильтрации. Собственно, они ей чужды, поскольку в самом простом случае политики реализуются как исключения, построенные на все тех же «белых» или «черных» списках. В таких списках используются те же характеристики сообщения, что и выше – хост, отправитель, получатель. Но ведь резолюция контентного фильтра строится на основе сигнатуры, и если нельзя использовать такую сигнатуру в системе построения политики, то и получается, что политика в контентной фильтрации является внешней искусственной надстройкой. Да и как можно заранее указать сигнатуру уникального сообщения, если его прием еще только предполагается. Иначе говоря, построение политики фильтрации спама для систем, использующих «отказ в приеме», является гармоничным и логически обоснованным, что не скажешь о системах контентной фильтрации.
Выводы Вот и пришло время сделать выводы, как построить фильтрацию спама и не создать проблем для компаниинанимателя. Поскольку «фильтрация на входе», так или иначе, присутствует в любом почтовом сервере, то целесообразно использовать именно этот механизм. Даже более, его просто невозможно не использовать! Следует изучить структуру входящих почтовых потоков и выделить ряд «белых» коммерческих адресов, для которых гарантировать доставку до почтового ящика. Обычно такие адреса публикуются на веб-сайте компании как контактные. Все остальные контакты должны подвергаться фильтрации. Очень хорошие результаты дает применение
№8, август 2007
greylist. Фактически без всяких специ- щих проблемах. И в-четвертых, очень альных запретов нежелательная кор- полезно предоставить пользователям респонденция сокращается на 90% возможность управления процедурой минимум! Использование контентной фильтрации – вносить собственные фильтрации как дополнительной ме- «белые» адреса или, наоборот, блоры тоже не помешает, так как в усло- кировать нежелательные. Последнее виях минимального срабатывания она надо сделать максимально корректдаст нужный эффект – даже если не- но в иерархии применения фильтров, который спам прорвется, он будет по- чтобы не позволить менять глобальмещен в локальный карантин пользо- ные параметры системы. вательского ящика (например, папка Все это сделает сотрудников пред.Spam в IMAP) и не создаст проблем приятия максимально информированв поиске нужного письма в случае лож- ными о процессах внутри почтовой ного срабатывания. А вот применение системы и частично перенесет на них такой фильтрации для группы откры- ответственность за возможную недотых публичных адресов просто необ- ставку почты. Например, очень часто ходимо. Опять же, поскольку данных проблемы возникают из-за «на слух» адресов немного, то и работы по на- надиктованных адресов или ошибочстройке клиентских систем на сра- но «забитых» в почтовую програмбатывание по признакам контентной му, как адрес ответа. Система отсыфильтрации будет немного. Если ис- лает отправителю сообщение: «Такопользовать контентную фильтрацию го пользователя нет», а он раздражатолько для «открытых» адресов, то её ется: «Я не могу вам отправить письприменение может носить не глобаль- мо из-за того, что ваш сервер его отный характер (не server-wide, а, напри- клоняет». Надо сделать все возможное, мер, через procmail), а значит, исполь- чтобы у сотрудников предприятия бызование программ фильтрации не со- ла информация для принятия мотивиздаст большой нагрузки на оборудо- рованных решений в отношении почвание сервера. товых проблем. Только так можно преТак как ни одно из технических ре- вратить их из капризных и недалеких шений, даже самое безупречное, не из- ламеров в тех клиентов, которые цебавит от возможных проблем, то сле- нят работу своих системных админисдует позаботиться о снижении негатив- траторов. Ценят буквально... ных последствий от их возникновения. Во-первых, надо довести специально 1. С а й т п р о е к т а S P F – h t t p : / / или сделать доступной для интересуwww.openspf.org. ющихся политику фильтрации, исполь- 2. Страница проекта Sender ID – http:// зуемую на сервере предприятия. Инаw w w.microsof t.com /mscorp/safet y/ че возможно бесконечное число жалоб, technologies/senderid/default.mspx. вызванных элементарным непонима- 3. С а й т п р о е к т а D K I M – h t t p : / / нием происходящего. Во-вторых, неwww.dkim.org. обходимо создать средство, позволя- 4. Максим Чирков. Система адаптивноющее пользователям выяснить, как усго блокирования спама после первого пешно была отправлена их почта (тафакта рассылки – http://www.opennet.ru/ кой же фильтр может быть и на удаленdev/spam_check/readme.txt. ной стороне!). В противном случае они 5. Обоснование необходимости безуне смогут уверенно общаться с контрасловного приема почты по служебным гентами, скрывающими факт получеадресам – http://rfc-ignorant.org/rfcs/ ния корреспонденции. В‑третьих, польrfc2821.php. зователи должны иметь возможность 6. Владимир Камарзин. Реализация бессамостоятельно проверить, что удапрепятственного доступа к адресу ленная сторона (например, важный postmaster@ – http://www.freesource.info/ контактер, отправивший очень важwiki/Dokumentacija/Postfix/antispam/ ную почту) предпринимала попытки отpostmaster&. правки, и узнать их результат (достав- 7. Дополнительное программное обеска, отказ и прочее). Если это не сдепечение к почтовому серверу Postfix – лать, то на системного администратоhttp://www.postfix.org/addon.html. ра будут сыпаться бесконечные пре- 8. ACL Policy Daemon for Postfix (apolicy) – тензии о, вероятно, и несуществуюhttp://home.gna.org/apolicy.
13
администрирование
Используем Gmail в качестве внешнего фильтра для корпоративной почты
Виктор Венявский Уже многие оценили качество фильтрации спама и вирусов такого сервиса, как Gmail. Он позволяет размещать почтовую службу для целого домена на своих серверах, после чего почта становится доступна как через Web, так и по протоколу POP3. Такая комбинация возможностей и дает нам способ использовать Gmail как внешний фильтр для почты.
Структура и этапы настройки почты В статье не описывается настройка почтовой системы на серверах, предполагаем, что почта на корпоративном сервере уже настроена и работает. Из статьи вы узнаете, как разместить почтовые ящики на Gmail и как получать с них почту по протоколу POP3 для дальнейшего раскладывания в ящики на корпоративном почтовом сервере. Итак, шаги настройки будут включать: n С о з д а н и е у ч е т н о й з а п и с и на Gmail. n Пр о в е р ка в л а д ел ьц а до м е н а на Gmail. n Создание пользователей на Gmail. n Установка и настройка fetchmail. n Изменение MX-записей. n Тестирование. n Дополнительные возможности.
Создание учетной записи на Gmail Gmail предоставляет два уровня сервиса – коммерческий и бесплатный. В таблице 1 показаны наиболее значимые различия между ними.
14
Я оставлю выбор версии на ваше усмотрение. Исходя из личного опыта могу сказать, что бесплатная версия очень стабильная, и если нет необходимости коммерческой поддержки почты (например, почтовая служба предоставлена компании-владельцу домена на коммерческой основе), то, как правило, бесплатной версии более чем достаточно. В этой статье я расскажу об использовании бесплатной версии. Итак, начинаем создавать учетную запись на Gmail. Для этого идем по адресу http://www.google.com/a, нажимаем на кнопку «Get Started», затем выбираем один из уровней пакета «Standard Edition», «Premier Edition» или «Education Edition». Далее проходим стандартную процедуру регистрации. После завершения регистрации вы попадете на стартовую страницу (см. рис. 1).
ти по ссылке «Verify domain ownership» на стартовой странице. Процедура проверки может происходить по одному из двух сценариев: n Создание CNAME в DNS. n Загрузку специального файла на сайт домена. Автор выбрал загрузку файла на сайт домена. Для этого необходимо создать файл http://ваш-домен/ googlehostedservice.html и положить в этот файл содержимое, которое вы получите на странице проверки владельца домена (cм. рис. 2).
Создание пользователей на Gmail
На этом этапе нам необходимо создать на Gmail все существующие почтовые ящики. Панель администратора на Gmail предоставляет возможность загрузки списка пользователей. Для перехода на страницу загрузки списПроверка владельца ка пользователей идем по ссылкам домена на Gmail «Users accounts», затем «Upload many Слу жба Gmail требует прохож де - users at once». В результате попадаем ния этапа проверки владельца до- на страницу, которая предлагает замена. Для этого необходимо перей- грузку списка пользователей в фор-
администрирование мате csv (comma-separated values, данные, разделенные запятыми). Создаем простой текстовый файл, где каждая строка представляет информацию о каждом пользователе в формате: «Имя почтового ящика, имя, фамилия, пароль». Например: info, Алексей, Федоров, password1 dns, Константин, Сергеев, password2
Таблица 1. Различия в уровнях сервиса Платная версия
Бесплатная версия
Стоимость
$50 US в год на каждого пользователя
–
Гарантия 99.9% стабильности
Да
Нет
Дисковое пространство
10 Гб на пользователя
2 Гб на пользователя
Программный интерфейс (API)
Да
Нет
Круглосуточная поддержка
Да
Нет
Название пакета
Premier Edition
Standard Edition, Education Edition
После создания файла загружаем его на страницу создания пользователей, и на этом этапе процесс создания почтовых ящиков на Gmail завершен. Примечание: опцию «Require a password change when new or updated users sign in» (требовать от пользователя сменить пароль при следующем входе в систему) необходимо оставить выключенной.
Установка и настройка fetchmail Fetchmail – программа, позволяющая получать почту по протоколам POP3, IMAP или SMTP для дальнейшей отправки по протоколу SMTP (локальРисунок 1. Стартовая страница ная доставка тоже поддерживается). n password – незашифрованный пароль для доступа Мы будем получать почту с помощью протокола POP3 к POP3-ящику. со всех почтовых ящиков на Gmail и отправлять ее на лоn local_username – имя почтового ящика на локальном кальный SMTP-сервер. почтовом ящике.
Установка fetchmail
Я использую в работе дистрибутив CentOS версии 4.4 (один из дистрибутивов GNU/Linux). Для других платформ процедура не должна сильно отличаться. Скачиваем архив программы с домашней страницы проекта, расположенной на http://fetchmail.berlios.de. Раскрываем и устанавливаем: tar -xzvf fetchmail-xx.tgz cd fetchmail-xx ./configure make make install
Конфигурация fetchmail Работа fetchmail контролируется файлом, в котором описаны адреса POP-серверов, имена пользователей, а также куда отправлять почту после получения ее по протоколу POP3. Синтаксис для нашего случая приведен ниже: poll pop3-servername proto protocol: user "pop username" password "password" ↵ options ssl to local_username here nokeep
где: n pop3-servername – адрес POP3-сервера. Для службы Gmail имя сервера – pop.gmail.com. n protocol – протокол, используемый для получения почты по POP3. Для Gmail протокол – POP3.
№8, август 2007
И таких записей должно быть столько, сколько у нас пользователей. Для наших двух пользователей файл настройки может выглядеть следующим образом: set syslog poll pop.gmail.com proto pop3: user "info@domain.tld" password "password1" ↵ options ssl to info here poll pop.gmail.com proto pop3: user "dns@domain.tld" password "password2" ↵ options ssl to dns here
Первая строка указывает fetchmail на вывод отладочных сообщений в syslog. Создаем файл fetcmailrc и выкладываем его на наш почтовый сервер в безопасное место. Помните, что этот файл содержит незашифрованные пароли пользователей, поэтому владелец файла должен быть root и права доступа должны быть 600. Автор расположил этот файл в /etc/ fetchmail/fetchmailrc.
Запуск fetchmail Одним из достоинств fetchmail является его способность работать в режиме демона. Для запуска fetchmail в этом режиме при перезагрузке сервера создаем скрипт запуска в /etc/init.d/fetchmail:
15
администрирование #!/bin/sh # chkconfig: 2345 55 25 # description: fetchmail daemon case "$1" in start) echo -n "Starting: fetchmail" /usr/bin/fetchmail -f /etc/fetchmailrc ↵ -D domain_name -d interval -v echo "." ;; stop) echo -n "Stopping service: fetchmail" killall fetchmail echo "." ;; restart) $0 stop sleep 2 $0 start ;; *) ;;
echo "Usage: /etc/init.d/fetchmail ↵ {start|stop|restart}" >&2 exit 1
esac
exit 0
где: n domain_name – имя нашего домена; n interval – время ожидания после каждого получения почты с Gmail. Далее необходимо запустить демон и включить его в процесс загрузки при старте сервера: /etc/init.d/fetchmail start chkconfig fetchmail on
Процедура включения демона в процесс загрузки указано для RedHat-подобных систем.
Предварительное тестирование Если все процедуры прошли удачно (включая процедуру проверки владельца домена и загрузки пользователей), то в сообщениях syslog (обычно это файл maillog) мы должны увидеть события: 6.2.5 POP3< POP3> POP3< POP3> POP3< POP3> POP3< POP3>
querying pop.gmail.com (protocol POP3) +OK Gpop ready for requests from xx.xx.xx.xx 2pf796759nfv USER info@domain.tld +OK send PASS PASS * +OK Welcome. DELE 1 +OK marked for deletion QUIT
Часть сообщений удалена ввиду их ненужности.
Переключение MX-записей Это наиболее важный момент, поэтому для переключения MX-записей нужно выбрать время использования с минимальным уровнем активности. Рекомендуется выставить минимальное время TTL (time to live) в DNS и выждать 2‑3 дня. Я выставил 5 минут на время процедуры изменения MX-записей, чтобы в случае проблем можно переключить обратно.
16
Заходим на Gmail как администратор и идем на страницу получения списка MX-записей. Для этого необходимо перейти по ссылкам «Service settings → Email → Instructions on how to activate email → Change MX records». В результате попадаем на страницу, где приведен список MX-записей, которые нужно внести в настройки DNS, обслуживающих вашу зону (см. рис. 3). Вам необходимо удалить все MX-записи из настроек DNS-cервера, который обслуживает вашу зону, и добавить MX-записи, как указано на этой странице. Для DNS-сервера BIND это может выглядеть следующим образом: IN IN IN IN IN IN IN
MX MX MX MX MX MX MX
1 5 5 10 10 10 10
ASPMX.L.GOOGLE.COM. ALT1.ASPMX.L.GOOGLE.COM. ALT2.ASPMX.L.GOOGLE.COM. ASPMX2.GOOGLEMAIL.COM. ASPMX3.GOOGLEMAIL.COM. ASPMX4.GOOGLEMAIL.COM. ASPMX5.GOOGLEMAIL.COM.
Опциально можно оставить адрес корпоративного сервера в списке MX с минимальным приоритетом на тот случай, если все почтовые серверы Gmail недоступны. Хотя в этом случае есть вероятность получения спама или вирусов. Об этом подробнее объяснено в последнем разделе.
Полное тестирование и завершение настроек На данном этапе нужно протестировать все почтовые адреса для исключения ошибок. Для этого можно воспользоваться двумя простыми скриптами, один – для отправки, второй – для проверки факта получения тестового сообщения на локальном POP3-сервере после отработки fetchmail. Входными параметрами для обоих скриптов является список пользователей в формате CSV, который мы создали ранее для загрузки на Gmail. Внимание! Скрипт, который отправляет почту, необходимо запускать на компьютере, отличном от почтового сервера, иначе почта будет доставлена напрямую локально, без участия Gmail. Итак, первый скрипт для отправки тестового сообщения, скрипт send.pl: #!/usr/bin/perl use strict; my $local_domain = 'domain.tld'; my @emails; open(F, "users.csv") || die "can not open users.csv"; my @emails=<F>; chomp(@emails); close(F); foreach my $i(@emails) { my ($email,$fname,$lname,$password) = split(/\,/,$i); open(M, "| mail -s gmail-test ↵ $email\@$local_domain"); print M "gmail-test\n"; close(M); }
Вместо домена «domain.tld» в 3-й строке необходимо поставить имя вашего домена. Второй скрипт подключается к локальному POP3-серверу, получает сообщения для каждого почтового ящика и ищет сигнатуру «gmail-test» в содержимом сообщений.
администрирование Скрипт receive.pl: 01. 02. 03. 04. 05. 06.
#!/usr/bin/perl use Net::POP3; use strict; my $pop3_host = 'pop3.domain.tld'; my $local_domain = 'domain.tld'; my @emails;
07. 08. 09. 10.
open(F, "users-list.csv") || die "can not open ↵ users-list.csv"; my @emails=<F>; chomp(@emails); close(F);
11. foreach my $i(@emails) 12. { 13. my ($email,$fname,$lname,$password) = ↵ split(/\,/,$i); 14. my $pop_username=$email; 15. $pop_username .= '@' . $local_domain; 16. print "testing $email with $password\n"; 17. my $pop = Net::POP3->new($pop3_host, ↵ Timeout => 60); 18. if ($pop->login($pop_username, $password) > 0) 19. { 20. my $msgnums = $pop->list; 21. foreach my $msgnum (keys %$msgnums) 22. { 23. my $msg = $pop->get($msgnum); 24. if(grep /test/, @$msg){ 25. print "email $email is fine\n"; 26. } 27. else{ 28. print "email $email is bad\n"; 29. } 30. } 31. } 32. else{ 33. print "failed to login to pop3 using ↵ $pop_username with password $password\n"; 34. } 35. $pop->quit; 36. }
Рисунок 2. Проверка владельца домена
Рисунок 3. Список MX-настроек
№8, август 2007
Несколько замечаний:
n В строке 4 необходимо прописать адрес вашего POP3сервера в переменной $pop3_host.
n В строке 5 в переменной $local_domain нужно прописать имя вашего домена.
n Если для авторизации на вашем почтовом сервере используются длинные имена в формате «username@domain.tld», то строку 15 нужно раскомментировать. Сам процесс тестирования очень прост и включает в себя четыре шага: n Отправляем тестовые сообщения на Gmail с помощью send.pl. n Ждем несколько минут, пока сообщения не будут доставлены на Gmail. n Запускаем демон fetchmail и ждем, пока он не отработает (процесс можно увидеть в системных сообщениях). n Запускаем скрипт receive.pl и наблюдаем процесс сканирования сообщений уже на локальном POP3-сервере. В зависимости от результата этот скрипт распечатает «email email@domain.tld is fine» или «email email@domain.tld is bad». Если в момент проверки какого-либо почтового ящика получаем сообщение об ошибке, необходимо проверить настройки этого почтового ящика на всех компонентах системы.
Gmail на Web Если на вашем сервере отсутствует такая служба, как webmail, то можно опять воспользоваться возможностями Gmail, которая позволяет пользователям заходить на почтовую службу под вашим доменным именем, например http://webmail.domain.tld. В этом разделе я расскажу, как активировать эту возможность. Для этого нам надо предпринять следующие шаги: n Настройка адреса webmail на службе Gmail. n Написание скрипта для проверки действительности паролей. n Настройка SPF. n Тестирование SPF (опционально).
Настройка адреса webmail на службе Gmail Для начала необходимо сообщить Gmail, что у нас есть собственный адрес для webmail. Для этого входим на Gmail по адресу https://www.google. com/a/cpanel/domain.tld/EmailSettings как администратор домена, далее идем по ссылкам «Service Settings», «Email». Находим пункт «Web address» и нажимаем на ссылку «Change URL». Далее выбираем «Custom http» и вводим адрес, на котором мы хотим видеть нашу веб-почту. На следующей странице, после нажатия на кнопку
17
администрирование «Continue», вы обнаружите инструкции по настройке вашего DNS для создания адреса веб-почты. Эти инструкции сводятся к добавлению записи CNAME, указывающей на ghs. google.com, как приведено для программы BIND (Berkeley Internet Name Domain): webmail IN CNAME dhs.google.com
Первый шаг для доступа к почте через Web выполнен.
Написание скрипта для проверки валидности паролей Некоторые пользователи после получения доступа к почте Gmail через webmail захотят поменять пароль учетной записи на cерверах Gmail. Тогда демон fetchmail, который забирает почту с Gmail и раскладывает по почтовым ящикам, не сможет забрать почту для этого пользователя. Есть два варианта для решения этой проблемы: n Использование Google API, который позволяет управлять учетными записями автоматически. n Периодическое тестирование всех POP3-учетных записей на Gmail с помощью специально разработанного скрипта. Этот скрипт, если не может подключиться к какому-нибудь POP3-ящику, будет отсылать предупреждение системному администратору. Я пошел по второму пути и создал этот скрипт, который работает по следующему алгоритму: n Загружает список пользователей из нашего файла users‑list.csv. Подключается к Gmail по протоколу POP3 и пытается аутентифироваться, используя имя пользоваля и пароль. n Если аутентификация прошла успешно, то осуществляется переход к проверке следующего адреса. Если произошла ошибка, то через один час (как в данной конфигурации) делается еще одна попытка подключиться. Если после 3 попыток удачного соединения так и не произошло, то скрипт посылает сообщение системному администратору. Несколько попыток необходимы во избежание ложных срабатываний в случае неполадок на Gmail. Кроме этого, на случай глобального отсутствия соединения с Gmail (например, не работает подключение к Интернету), этот скрипт проверяет доступность сервера Gmail с помощью диагностического средства ping. Скрипт проверки учетных записей POP3: #!/usr/bin/perl use use use use my my my my my my
Net::Ping; IO::Socket::SSL; Mail::POP3Client; strict; $gmail_host='pop.gmail.com'; $gmail_port=995; $attempts=3; $sleep_between_attempts=60*60; $domain='domain.tld'; $admin_email = 'admin@domain.tld';
my $p = Net::Ping->new('icmp');
18
if(!$p->ping($gmail_host)) { print "Failed to ping $gmail_host\n"; print "Exiting\n"; exit; } my @emails; open(F, "users-list.csv") || die "can not open ↵ users-list.csv"; my @emails=<F>; chomp(@emails); close(F); foreach my $i(@emails) { my ($email,$fname,$lname,$password) = split(/\,/,$i); my $succesful=1; foreach(my $j=0;$j<$attempts;$j++) { if(test_pop3account("$email\@$domain",$password)) { $succesful=1; #successful, lets test next last; } else # failed for now, lets do it again a bit later { print "failed to connect to gmail ↵ for $email\@$domain.\n"; print "Sleeping for ↵ $sleep_between_attempts seconds\n"; sleep($sleep_between_attempts); } } # sending alert to admin if the test has failed # completelly if(!$succesful) { print "Completelly failed for $email\@$domain\n"; open (MAIL, '|/usr/sbin/sendmail -t ') || die ↵ "Can't open sendmail service"; print MAIL "To: $admin_email\n"; print MAIL "From: $admin_email\n"; print MAIL "Alert! gmail pop3 is bad ↵ for $email\@$domain\n"; print MAIL "\n\nAlert! gmail pop3 is bad ↵ for $email\@$domain\n\n"; print MAIL "Please verify\n\n"; close MAIL; } else{ print "Testing for $email\@$domain was successful\n"; } } sub test_pop3account { my ($email, $password) = @_; my $socket = IO::Socket::SSL->new( PeerAddr => ↵ $gmail_host, PeerPort => $gmail_port, Proto => 'tcp') || ↵ die "No socket!"; my $pop = Mail::POP3Client->new();
}
$pop->User($email); $pop->Pass($password); $pop->Socket($socket); return $pop->Connect();
В начале скрипта прописаны переменные, которые необходимо установить в соответствии с параметрами вашего домена. Описание переменных приведено в таблице 2. Теперь можно настроить запуск этого скрипта через CRON с необходимым интервалом. Интервал может сильно разниться, например, если у вашей компании нестабильное или непостоянное подключение к Интернету, то для предотвращения ложных срабатываний скрипт можно запускать с интервалом 2-3 дня.
администрирование Настройка SPF SPF (Sender Policy Framework) известно как средство, которое служит для борьбы с таким явлением, как спам. Подробности о работе этого инструмента можно прочитать на http://www.openspf.org. Суть этой технологии сводится к размещению в DNS-зоны специальной записи TXT, которая описывает серверы, с которых позволена отправка почты от имени вашего домена. Все остальные источники почты от имени вашего домена рассматриваются как отправители спама на серверах-получателях, где есть поддержка проверки SPF. Итак, у нас может быть две ситуации с SPF: 1. Отсутствует в записях DNS для вашего домена. Тогда вы можете решить, нужно ли это вам, хотя настройка SPF рекомендуется, потому что в этом случае спамфильтры на серверах-получателях будут рассматривать письма с вашего домена как посланные из доверенного источника. Если вы решили, что SPF не нужен, тогда оставшуюся часть раздела можно пропустить. 2. Если у вас уже настроена SPF-запись для вашего домена, то, кроме описания вашего почтового сервера, необходимо внести серверы Gmail в записи, описывающей ваше SPF-правило. Для создания или обновления SPF необходимо прописать следующую TXT-запись, которая описывает все серверы, отправляющие почту от вашего домена:
Таблица 2. Описание переменных скрипта проверки учетных записей POP3 Переменная
Назначение
$attempts
Количество попыток подключиться к серверу Gmail
$sleep_between_attempts
Время выжидания между попытками неудачного подключения, в секундах
$domain
Адрес нашего домена
$admin_email
E-mail-адрес, куда должны отсылаться сообщения о полной невозможности подключения к почте
Таблица 3. Описание элементов записи для SPF Элемент
Описание
v=spf1
Версия SPF
a:10.10.10.15
Указывает, что сервер с IP-адресом 10.10.10.15 тоже может отправлять почту с нашего домена. Здесь надо указать ваш собственный почтовый сервер, с которого отправляется почта во внешний мир
include:aspmx.googlemail.com
Включить записи SPF службы Gmail в процедуру проверки. Таким образом, если пользователь почты вашего домена отсылает сообщение с webmail службы Gmail, то сервер-получатель сообщения обнаружит, что серверы Gmail также разрешены для отправки почты от имени вашего домена
~all
Если предыдущие элементы не совпали с характеристиками сервера-отправителя, то тогда для этого отправителя применяется шаблон «all». Модификатор «~» перед шаблоном «all» означает SoftFail, и эта оценка может учитываться спам-фильтрами для оценки вероятности, что сообщение – спам
n Запретить входящие соединения на портах 25 и 465.
«v=spf1 a:10.10.10.15 include:aspmx.googlemail.com ~all»
Разумеется, эта дополнительная защита от спама может быть осуществлена, если все домены на вашем почтоИнструкция по созданию записей для SPF в DNS вом сервере обслуживаются Gmail. Та к ж е р е к о м е н д у е т с я с о з д а т ь п о л ь з о в а т е л я взята с адреса http://www.google.com/support /a /bin/ abuse@domain.com на Gmail. Этот адрес используется, answer.py?hl=en&answer=33786. как правило, для получения жалоб, если ваш домен вовлеВ таблице 3 смотрите описание каждого элемента. чен в нелегальные действия, такие как спам или размещение нелегального содержимого на корпоративном сайте. ЕсТестирование SPF-настроек Для тестирования нужно отправить сообщение самому себе ли вы вовремя не отреагируете на жалобы, то Gmail может с сервера, который разрешен для отправки почты от име- прекратить обслуживать ваш домен (с возможным перемени нашего домена. Почтовая служба Gmail при прохожде- щением в черный список). Пользователь abuse@domain.com нии через нее писем вносит в заголовок результаты работы зарезервирован на Gmail, поэтому создать эту запись SPF, поэтому нужно, чтобы наше сообщение прошло через как обычного пользователя не получится. Для перенаправления почты с адреса abuse@ в адуказанную службу. После получения тестового сообщения нужно проверить заголовки. Если все нормально настрое- министративной панели Gmail нужно перейти по ссылкам «Users accounts → Create mailing list» и на этой странино, то должен присутствовать такой элемент: це создать mailing list abuse@domain.com и в качестве подReceived-SPF: pass (google.com: domain of info@domain.tld писчика добавить адрес пользователя, который обрабаdesignates 10.10.10.15 as permitted sender) тывает жалобы.
Дополнительные возможности
Заключение
В этом разделе будут упомянуты две вещи, на которые я настоятельно рекомендую обратить внимание. Моя практика показала, что многие спамеры создают базы данных с IP‑адресами MX-записей, и эти базы хранятся в течение длительного времени, что приводит к получению спама напрямую. Для решения этой проблемы можно немного поменять наше решение и выполнить два взаимосвязанных шага: n Удалить MX-запись, которая указывает на наш почтовый сервер (описание MX-записей было приведено в разделе «Переключение MX-записей».
Эта статья дает основные понятия и шаги по использованию Gmail как внешний почтовый фильтр. За рамками статьи остались такие вопросы как: n Поддержка множественных доменов в fetchmail. n Создание скрипта для автоматической проверки правильности настроек.
№8, август 2007
Последователям этого метода следует ознакомиться с правилами Gmail перед началом использования данного сервиса.
19
администрирование
AXIGEN Mail Server – подходящий почтовый сервер для малого офиса
Сергей Яремчук Сегодня почтовый сервер на базе UNIX-подобной ОС непременно ассоциируется с непонятной новичку комбинацией вроде Postfix + Dovecot + Squirrelmail + ClamAV + SpamAssassin + БД + PostfixAdmin. Далеко не каждый решится строить такую систему. 20
администрирование
С
редняя или большая компания может себе позволить нанять администратора, пусть даже внештатного, который сможет установить, настроить любую почтовую систему, базирующуюся на коммерческом или свободном ПО и поддерживать ее в рабочем состоянии. Для небольшой компании это весьма ощутимая строка в бюджете, да и к тому часто же неоправданная. Ведь подчас такие компании лишь отмечают свое присутствие в Интернете: простенький веб-сайт, рассказывающий о деятельности фирмы, и пара-тройка почтовых адресов для контакта. Использование Windows – это опять же затраты на закупку операционной системы. Это должна быть как минимум Windows XP Professional, в состав которой входит IIS, хотя можно использовать и Apache. Выбор почтовых серверов также велик: от платных решений вроде MDaemon и Kerio MailServer до бесплатных EzMTS и hMailServer. Но главное, это постоянная борьба за выживание своего сервера. С Linux несколько проще. В состав любого дистрибутива включен веб-сервер, часто достаточно положить в его корневой каталог нужные файлы и запустить его, безопасность таких систем выше. А в качестве почтового сервера можно использовать простой в настройке AXIGEN Mail Server.
Проект AXIGEN Mail Server
Рисунок 1. Установка порта для WebMail
возможных графиков, всего подготовлено около 100 шаблонов. Работает AXIGEN в основных дистрибутивах Linux, на сайте имеются пакеты для Gentoo, Redhat/Fedora Core, Slackware, Debian, Ubuntu, Mandrake/Mandriva, SUSE, Yellow Dog PPC, а также FreeBSD, OpenBSD, NetBSD и Solaris разных версий. В настоящее время предлагается три решения: ISP Program, Business Edition и Office Edition. Они отличаются количеством почтовых ящиков, доменов и серверов, наличием дополнительных функций – интеграция с LDAP, наличием календаря, модулей резервирования и восстановления информации, списков рассылки, возможностью работы в кластере, MAPI (Messaging Application Programming
Румынская компания GeCAD Technologies LTD предлагает свое решение вопроса – быстрый, защищенный почтовый сервер AXIGEN Mail Server [1] с открытой архитектурой. Поддерживаются основные почтовые протоколы ESMTP, IMAP, POP3, есть и локализованный веб-интерфейс для работы с электронной почтой. Для защиты информации может использоваться TLS/ SSL, поддерживаются следующие механизмы аутентификации: plain, login, cram-md5 и digest-md5. Все настройки администратором производятся через понятный, хотя и нелокализованный веб-интерфейс WebAdmin. Возможно использование консоли, но она применяется в основном для пакетной обработки с помощью скриптов. Конечно, никто не запрещает вносить изменения напрямую в конфигурационный файл axigen.cfg. На странице Tools можно найти ряд готовых скриптов на Python, предназначенных для самых разнообразных задач. П о д д е рж и в а е т с я и н т е г р а ц и я 15 решений для борьбы с вирусами (Kaspersky, BitDefender, Sophos, F-Prot, DrWeb, Symantec, F-Secure, Avast, eTrust, Norman, Panda, McAfee, TrendMicro, Nod32 и ClamAV) и спамом (SpamAssasin). Кроме этого, AXIGEN имеет развитую систему отчетов с выводом всеРисунок 2. Создаем новую учетную запись
№8, август 2007
21
администрирование Interface)-интерфейс, наличием РOP3- и IMAP-прокси, круглосуточной поддержкой и т. д. Для версии Business и ISP Editions дополнительно доступен AXIGEN Outlook Connector, обеспечивающий лучшую интеграцию Outlook с севером AXIGEN. Сравнить возможности можно в таблице [6]. Минимальная стоимость варианта Office Edition 85 у.е., цена ISP Program переваливает за 845 у.е. Для образовательных учреждений предоставляется скидка 20%. Условия распространения содержаться в нескольких лицензиях: Standard, Evaluation и Educational. Тестовая версия, которую можно скачать с сайта проекта, будет полностью работоспособна в течение 30 дней. Вариант Office Edition имеет еще один вид лицензии Annual License, который превращает ее в вариант Free. Он нас собственно и интересует. Хотя, естественно, вариант Free имеет ограничения: 5 почтовых ящиков и один сервер, срок действия лицензии ограничен одним годом, после этого ее необходимо снова обновлять. Интересно, что компания не делает особых различий между клиентами и потенциальными клиентами, которыми собственно и являются владельцы лицензии Free. Ведь по мере расширения компании очень легко Free превратить в полноценный Office Business, все настройки будут сохранены. В течение 1 года для владельцев Free будет доступен круглосуточный FIRsT Support. Этот вариант и будем рассматривать далее, хотя все сказанное действительно и для других вариантов.
Установка AXIGEN Установка производилась на Ubuntu 7.04, но практически все сказанное, за исключением особенностей системы установки пакетов, будет актуально и для других дистрибутивов или поддерживаемых операционных систем. Минимальными системными требованиями для установки AXIGEN является процессор x86 с частотой 300 МГц, 128 Мб ОЗУ и 50 Мб свободного места на жестком диске, не считая места под почтовые ящики. Для 5 пользователей этого вполне достаточно.
Итак, скачиваем на странице Downloads пакет под используемый дистрибутив. Кроме этого, необходимо зарегистрироваться, нажав на ссылку Registration, расположенную над таблицей. После регистрации на указанный почтовый адрес придет ключевой файл axigen_lk.bin размером ровно 512 байт и код активации. Последний следует сохранить в укромном месте, так как он понадобится при обновлении лицензии. Распаковываем архив и запускаем находящийся внутри файл: $ tar xzvf axigen-4.0.1.i386.ubuntu.tar.gz $ sudo dpkg -i axigen-4.0.1/axigen_4.0.1-1ubuntu1_i386.deb (Чтение базы данных... на данный момент установлено 132526 файлов и каталогов.) Распаковывается пакет axigen (из файла .../axigen_4.0.1-1ubuntu1_i386.deb)... Настраивается пакет axigen (4.0.1-1ubuntu1) ... * Generating self-signed SSL certificate... [ OK ] Thank you for installing AXIGEN Mail Server In order to configure AXIGEN for the first time, please run: /opt/axigen/bin/axigen-cfg-wizard
В процессе установки будет сгенерирован самоподписанный сертификат, необходимый для работы TLS/SSL. Кстати, обновляется продукт аналогично, необходимо просто выполнить команду: $ dpkg –iG axigen_4.0.1-1ubuntu1_i386.deb
Естественно, в системе не должно быть установлено других МТА-, POP3- и IMAP-серверов, иначе это вызовет конфликт. Так как в версии 4.0 почтовый интерфейс WebMail по умолчанию использует 80 порт, то во время настройки не должно быть и работающего на этом порту http-сервера. Затем для WebMail можно указать другой порт, например 8000, который использовался в ранних версиях AXIGEN. Список конфликтных приложений и команд для их удаления для разных дистрибутивов можно посмотреть в файле /opt/axigen/share/doc/REMOVE-OTHERS.txt. После установки исполняемые файлы можно найти в каталоге /opt/axigen/bin, в подкаталоге share/examples лежат примеры конфигурационных файлов. Конфигурационные файлы размещены в /etc/opt/axigen, что несколько необычно. Далее, следуя подсказке, командой: $ sudo /opt/axigen/bin/ ↵ axigen-cfg-wizard
Рисунок 3. Интерфейс WebMail
22
вызываем мастера настройки AXIGEN Configuration Wizard. Пройдя 11 шагов с помощью мастера, указываем пароль администратора и пользователя postmaster, интерфейс и порт для WebAdmin (по умолчанию 9000 порт) и WebMail (см. рис. 1), интерфейс, на котором будут слушаться соединения SMTP и POP3, домен, каталог для хранения писем, и отмечаем запускаемые при старте AXIGEN сервисы. Так-
администрирование же указываем сети, для которых будет разрешен релей, по умолчанию в этот список попадут сети всех активных сетевых интерфейсов. При задании псевдонимов можно разрешить перенаправление почты пользователя root postmaster, добавление localhost и localhost.localdomain к названию домена. В процессе работы мастера также поступит запрос на активацию Sendmail Wrapper, то есть создание символической ссылки /usr/sbin/sendmail на файл /opt/axigen/bin/ sendmail. Старый файл будет переименован в /usr/sbin/ sendmail.beforeaxigen. По окончании настройки в консоль будет выведено короткое резюме. Теперь можно запускать демон: $ sudo /etc/init.d/axigen start
Для дальнейших настроек, используя веб-браузер, заходим на 9000 порт, например http://127.0.0.1:9000, где регистрируемся как пользователь «admin» с паролем, указанным при работе мастера. Вот только теперь начинаешь понимать, насколько функциональный и удобный попал в руки инструмент. По умолчанию запущены не все компоненты AXIGEN, например, отключен Reporting, отвечающий за создание отчетов, FTP Backup, POP3 и IMAP-прокси. Включить или отключить их можно на главной странице Server, отметив флажком и нажав кнопку «Update». Но пока сервер работает в trial-режиме, в котором эти возможности активны, поэтому сначала следует установить лицензию. Это можно сделать как используя веб-интерфейс или вручную. Переходим во вкладку «Commands» и в поле «License file Upload», указываем на файл лицензии и нажимаем кнопку «Apply license key». После этого будет выведена информация о лицензии, в которой можно узнать о доступных возможностях сервера. Нажатием «Accept License» перезапускаем сервер. Теперь поля FTP Backup, POP3 и IMAP Proxy неактивны, зато можно смело включать RPOP и Reporting, если, конечно, в них есть необходимость. После установки флажков следует нажать кнопку «Commit», а затем сохранить настройки, выбрав «Commands → Save config». Если какие-либо настройки будут не сохранены, то вверху окна будет выведена подсказка.
Установка поддержки ClamAV и SpamAssasin Теперь добавим нашему серверу возможность проверки почты антивирусом и антиспам. Для описания любых фильтров используется специальный язык, в комплекте уже есть описания для ClamAV, SpamAssasin и некоторых других. Устанавливаем ClamAV:
В других дистрибутивах этот пакет может называться clamav-server. Если ClamAV будет использоваться только для проверки почты, то можно несколько упростить дальнейшую настройку, но лучше выделить отдельный процесс. Копируем шаблон конфигурационного файла: $ sudo cp /usr/share/doc/clamav-base/examples/clamd.conf ↵ /etc/clamav/axigen.conf
И редактируем его, не забыв убрать строку Example в начале файла: LogFile /var/log/clamd.axigen PidFile /var/run/clamd.axigen/clamd.pid LocalSocket /var/run/clamd.axigen/clamd.sock User axigen
Создаем символическую ссылку на исполняемый файл: $ sudo ln -s /usr/sbin/clamd /usr/sbin/clamd.axigen
И создаем каталоги, указанные в конфигурационном файле: $ sudo mkdir -p /var/run/clamd.axigen $ sudo chown axigen:axigen /var/run/clamd.axigen
Теперь создадим скрипт для запуска и обеспечим его выполнение на требуемом уровне загрузки: $ sudo cp /etc/init.d/clamav-daemon ↵ /etc/init.d/clamd.axigen $ sudo ln -s /etc/init.d/clamd.axigen ↵ /etc/rc3.d/S20clamd.axigen
Далее редактируем этот скрипт, весь файл трогать не нужно, нас интересуют только следующие строки: # Комментируем строку #. /etc/clamav/clamav-base.init CLAMD_SERVICE=axigen [ ! -d /var/run/clamd.axigen ] && mkdir ↵ /var/run/clamd.axigen || true DAEMON=/usr/sbin/clamd.axigen NAME="clamd.axigen" DESC="ClamAV daemon" CLAMAVCONF=/etc/clamav/axigen.conf SUPERVISOR=/usr/bin/daemon SUPERVISORNAME=daemon SUPERVISORPIDFILE="/var/run/clamav/daemon-clamd.pid"
И запускаем демон: $ sudo /etc/init.d/clamd.axigen start * Starting ClamAV daemon clamd Running as user clamav (UID 118, GID 126)
Теперь подключаем новый фильтр в WebAdmin. Для этого переходим во вкладку «Server», нажимаем кнопку «Add new filter», появляется окно «Active Filter list», и заполняем параНе знаю почему, но чтобы ClamAV установился пра- метры. В Priority указываем приоритет от 0 до 500, в расвильно, после его установки понадобилось выполнить ко- крывающемся списке filterName выбираем clamav и в поле манду: «Apply on» отмечаем оба значения local и relay. В этом случае на вирусы будут проверяться как входящие, так и ис$ sudo apt-get -f install ходящие сообщения. $ sudo apt-get install clamav-daemon
№8, август 2007
23
администрирование
Рисунок 4. Графики AXIGEN
После этого нажимаем «Add», за- чаев можно оставить параметры по тем в следующем окне «Commit». Все – умолчанию. Но несколько пунктов пофильтр готов к работе. Если вас сму- сетить все же придется. Так, имя домена можно изменить, щает малое количество настроек, то можно заглянуть во вкладку «AV/AS выбрав пункт Domains. Здесь просто Filter», где размещены описания филь- нажимаем кнопку «Edit» напротив дотров. Желательно, конечно, убедиться, мена, указанного при установке, и ввочто файлы, указанные в «Filter name: дим новое значение. В этом же окне отclamav» в полях «Address» и «Protocol мечаем псевдонимы, сервисы и адреFile», существуют, хотя, учитывая инди- са, для которых действительно имя. видуальный подход к сборке пакетов, Чтобы добавить новый домен, нужвсе параметры указаны исходя из осо- но дополнительно в неприметное побенностей конкретной системы. Поэто- ле «Postmaster password» ввести паму проблем здесь быть не должно. роль пользователя Postmaster, котоТеперь очередь SpamAssasin, уста- рый был указан во время работы маснавливаем его: тера настройки. Интересно, что несмотря на огра$ sudo apt-get install spamassassin ничения, можно создать любое количество доменов и даже завести в них В остальном настройки практи- пользователей, только работать будет чески аналогичны ClamAV. Но чтобы домен, обозначенный как primary. проверка на спам происходила посПо умолчанию в списке пользовале проверки на вирусы, в поле priority телей присутствует только postmaster, для SpamAssasin следует указать чтобы добавить еще одну учетную большее число, чем для ClamAV. запись, необходимо выбрать пункт «Accounts», затем в списке «Domain list» напротив своего домена (он у нас пока Настройка домена и учетных записей один, но кто знает) нажимаем кнопку Все параметры и возможности опи- «View». Появится список пользоватесать в пределах одной статьи просто лей домена. Теперь в полях «Account невозможно. В режиме Free доступен name» и «Password» вводим имя поль21 пункт меню, каждый из них имеет зователя и пароль и нажимаем кнопку от 1 до 4 вкладок. В большинстве слу- «Add new account» (см. рис. 2).
24
Чтобы отредактировать параметры созданной учетной записи, нажимаем напротив нее кнопку «Edit». Здесь несколько вкладок, в которых указываются персональная информация, псевдонимы, разрешенные сервисы, количесвтво и максимальный размер сообщений хранимых в почтовом ящике (в Mboxes этот параметр можно выставить индивидуально для каждой папки), индивидуальные фильтры и информация об активности пользователя. В «Limits» указывается количество писем и их размер которые может отправить пользователь за определеный интервал времени, количество вложений в одном письме при отправке через веб-интерфейс. Здесь же во вкладке «Info» можно получить некоторую информацию об активности пользователя (время последней регистрации, адрес и прочее). Некоторые параметры может изменить и сам пользователь (например, тему оформления или создать каталоги), чтобы он не испытывал трудностей с интерфейсом, лучше сразу указать во вкладке «Webmail data» в поле «Language» значение «ru». Теперь к новому почтовому серверу можно подключаться как с помощью браузера (см. рис. 3), так и используя почтовый клиент. Журналы работы сервера лежат в /var/opt/axigen/log, через веб-интерфейс их можно просмотреть, зайдя в меню «Log» и «Queue», уровень уведомлений настравивается с помощью флажков «Log Level» в меню «Reporting», графики найдете в «Graphics» (см. рис. 4). Как видите, AXIGEN – это очень простая и понятная в настройке почтовая система, которую легко установить и легко использовать. 1. Домашняя страница проекта AXIGEN – http://www.axigen.com/mail-server. 2. Домашняя страница проекта Mdaemon – http://www.ccsoftware.ca/mdaemon. 3. Домашняя страница проекта Kerio MailSer ver – http://www.kerio.com/ kms_home.html. 4. Домашняя страница проекта EzMTS – http://www.ezmts.org. 5. Домашняя страница проекта hMailServer – http://www.hmailserver.com. 6. Сравнение возможностей различных вариатов AXIGEN – http://www.axigen.com/ mail-server/compare-editions.php.
администрирование
Возможности корпоративного мобильного решения Nokia IMS
Александр Иванов Анализ типичных производственных процессов показал, что 90% поездок сотрудников связаны с информационными целями – передача опыта, согласование решений, проведение совещаний. Использование современных средств телекоммуникаций способно уменьшить необходимость подобных перемещений.
О
перативность получения информации, возможность пользования корпоративными ресурсами вне зависимости от географического положения позволяют делать
26
незаметными грани между офисом и иным местом пребывания сотрудника, поскольку информация лежит в основе процесса принятия управленческого решения.
Сегодня речь пойдет о решении, основанном на пакете Nokia Intellisync Mobile Suite 8.0, который обеспечивает доступ к информационным системам организации и средствам совместной
администрирование работы. IMS состоит из четырех независимых модулей, которые могут быть использованы как каждый сам по себе, так и все вместе, образуя при этом единое полнофункциональное мобильное решение: n Wireless Email – для беспроводного доступа к электронной почте. n Device Management – для управления устройствами. n File Sync – для файловой синхронизации. n Application Sync – для синхронизации приложений. Все модули используют единую платформу синхронизации, отслеживания изменений, сжатия и безопасной доставки данных. Охватывают широкий круг корпоративных приложений и большой ассортимент мобильных устройств и платформ, представленных на рынке. Кроме того, унифицированная архитектура сокращает временные и материальные затраты на организацию мобильного доступа к корпоративным данным с новых платформ. Решение работает в сетях передачи данных CDMA, GSM (GPRS/EDGE), LAN (Wi-Fi и Ethernet), по коммутируемому удаленному доступу (Dial-up). Возможности интеллектуального роуминга позволяют осуществлять выбор применяемого для каждой синхронизации данных канала. При использовании на сервере GSM-модема возможно осуществлять push-доставку сообщений через сервис SMS для уведомления клиента об обновлении данных и активации процесса синхронизации. IMS имеет расширенные функции администрирования, позволяя осуществлять удаленное управление устройствами по каналам, защищенным промышленными стандартами шифрования end-to-end (AES 128, 3DES, SSL). Для обновления сессионных ключей используется алгоритм Diffie‑Hellman со стойкостью до 1024 бит RSA. При этом шифруются все передаваемые данные, а не только логин и пароль. Для криптования файлов, размещенных на самом устройстве, пакет IMS может работать с продуктами третьих фирм-производителей, например, Certicom's movianCrypt. Intellisync Mobile Suite находится в стадии сертификации на соответствие федеральному стандарту США FIPS 140‑2 «Требования безопасности для криптографических модулей», являющимся базовым элементом для спецификаций в области информационной безопасности. Поддерживается аутентификация клиентов через LDAP, созданный на его основе Microsoft Active Directory, NTLM. Кроме этого, IMS имеет свою встроенную систему аутентификации. Можно изменять тип аутентификации в зависимости от принадлежности пользователя определенным группам.
Общее решение Модули IMS располагаются на сервере в корпоративной сети, с которым клиент синхронизируется и получает необходимую информацию по доступному в данный момент времени и наиболее удовлетворяющему по скорости каналу – как через оператора сотовой связи или Интернет, так и по офисным беспроводным (WLAN) и LAN-коммуникациям. Процесс синхронизации предельно прозрачен, что избавляет конечного пользователя от многих хлопот, а внед-
№8, август 2007
Рисунок 1. Единая консоль управления модулями и типы клиентов
рение пакета в действующую IT-инфраструктуру не требует ее корректировки (см. рис. 1). В инфраструктуре предприятия данное решение будет выглядеть, как показано на рис. 2. Пакет IMS установлен на Nokia Intellisync Server и располагается в зоне корпоративной сети наряду с остальными серверами. C целью повышения безопасности система может быть дополнена прокси-компонентом, создающим зону наименьшей чувствительности к внешним вторжениям – De-Militarized Zone. Это позволит передвинуть точку доступа к серверу Nokia Intellisync на безопасное расстояние, передав на компонент Secure Gateway полномочия создания соединений с сервером в корпоративной сети и клиентами IMS. Security Gateway функционирует как отдельный сервер на основе Microsoft ISA server, Netegrity Siteminder, Apache. Мобильное устройство через доступный канал связи осуществляет соединение с сервером Secure Gateway. На нем происходит авторизация, после чего компонент Secure Gateway устанавливает соединение с сервером Nokia Intellisync. Соединение клиента напрямую с сервером IMS в корпоративной сети не осуществляется. Все данные между клиентом и сервером защищены 128‑битным ключом AES, а соединение с веб-порталом происходит через SSL.
Nokia Intellisync Wireless Email По исследованиям Gartner, к 2008 году более 80% мобильных специалистов будут использовать решения беспроводного доступа к электронной почте и PIM (Personal Information Management). Платформа IMS поддерживает несколько моделей распределения данных, осуществляя их доставку методом «выталкивания» событийно-инициируемую push-доставку, запланированное автоматическое обновление через определенный временной промежуток, либо совместное использование этих алгоритмов. В мобильных торговых приложениях это позволяет «сбрасывать» наиболее важную информацию пользователям, как только она изменяется, тогда как другие данные в тех же приложениях могут обновляться не столь часто. До удаленного сотрудника будет донесена актуальная ин-
27
администрирование формация о предложениях компании, Дания. В своей деятельности решение свежие прейскуранты и акции, деталь- применяют компании Novell, Elisa (опеные сведения о клиенте. А применя- ратор телефонной связи Финляндии), емый модуль зависит от технологии, Lumenis (производитель медицинсс которой предприятие осуществля- кого лазерного оборудования), Credit ет работу. Agricole (банк во Франции, испольУправление личной информацией зует модули Wireless Email и Device (PIM) позволяет иметь оперативный Management на 100 PocketPC и 200 нодоступ к календарю/дневнику с пол- утбуках). В России следует отметить ноценной возможностью редактирова- Министерство топлива и энергетики ния, управлению встречами (создать/ РФ, Совморфлот, Магнитогорский мепринять/отклонить/под вопросом), кон- таллургический комбинат. тактам глобальной и личной адресных Методология IMS покрывает все книг и задачам. компоненты предприятия по часПоддерживается фото в контак- ти IT‑инфраструктуры. Рассматриватах, возможность перезвонить адреса- емый модуль синхронизации e‑mail ту (Call sender), скачать вложения, за- и PIM, обеспечивающий управледействовать почтовые фильтры. ние личной информацией, поддеМодуль позволяет применять ти- рживает платформы IBM Lotus Notes пичные для мобильных почтовых кли- Domino R5/R6/R7, Microsoft Exchange ентов правила синхронизации – полу- Server 5.5/2000/2003, Novell GroupWise, чать только адрес отправителя с те- Internet mail (IMAP4, POP3). мой письма, ограничить его размер. Сертифицированные мобильные усПри последующей синхронизации, тройства для установки клиента вклюв случае необходимости, письмо бу- чают в себя марки AudioVox, HP iPAQ, дет загружено полностью. Motorola, Nokia, Palm Treo, Samsung, В меню IMS доступна услуга авто- Sharp, Sony Ericsson, Vodafone и ваматического составления маршрута рьируются в зависимости от модуля путешествия, бронирования билетов. IMS. На долю фирмы-производителя Сотруднику приходит расписание и ин- пакета IMS приходится более половиформация о том, когда и каким рейсом ны поддерживаемых аппаратов, и осон должен вылететь, электронные би- тается надеяться, что остальные устлеты. Эта информация также посту- ройства на базе указанных ниже платпает руководящим и контролирующим форм смогут обеспечить функционилицам. Услугу уже применяют компа- рование модулей. нии, имеющие возможность пользоПод держиваемые платформы и имеющиеся ограничения: ваться решением не первый день. Большинство проектов IMS реали- n Nokia S40: 3rd edition 2+ MB of java зовано за рубежом: США, Финляндия, heap memory required, ограничения: Франция, Голландия, Германия, Италия, Nokia 6280, 6288.
Рисунок 2. Функционирование системы и реализация DMZ
28
n Palm OS: 5.2 and higher, известных ограничений нет.
n Sony Ericsson JP7 только K610i & K800i.
n Symbian S60 2nd только с клиентом 7.0.
n Symbian S60 3rd 3+ MB of java heap memory required.
n Symbian S80: 2nd edition только с клиентом 7.0.
n Symbian UIQ: 2 & 3 только с клиентом 7.0.
n Windows Mobile 2003 только с клиентом 7.0.
n Windows Mobile 5.0, известных ограничений нет.
n Windows 2000, XP, известных ограничений нет.
Nokia Intellisync Device Management Средствами администрирования выступают консоли управления Intellisync Administration Console и Microsoft Management Console. Их функционал дополняет друг друга, в частности, через MMC можно сменить пароль вебадминистратора. Управление возможно также через веб-портал и для пользователя, где он имеет возможность самостоятельно выбирать характер синхронизируемых данных и менять ряд настроек. Это сводит труд администратора к изначальной настройке системы и дальнейшему добавлению новых устройств. Чтобы зарегистрироваться на сервере, устройству необходимо хотя бы раз подключиться к системе. Каждый клиент выдает о себе информацию
администрирование в том объеме, который позволяет дать ния только на английском и японском его операционная система. языках. В случае перемещения пользователя и требования доступа к различ- Nokia Intellisync File Sync ной информации в зависимости от ис- Обеспечивает автоматическую допользуемого устройства он может за- ставку клиенту фото-, видеоизобравести несколько профилей. Например, жений, бланков и форм, office-докуесли в компании несколько адресных ментов, сведений, не имеющих четкой книг (АК), а существует необходимость структуры, веб-ссылок. работать только с АК определенного Для оптимизации трафика между филиала и соответствующими доку- клиентом и сервером происходит синментами на файловом сервере, – будет хронизация только в части изменениспользоваться другой профиль. ных данных. А получая «публикации» В целях безопасности есть возмож- с сервера, пользователь видит ссылность установить пароль на определен- ки, по которым может скачать требуный срок либо настроить удаление ин- емые данные: появившиеся объекты формации на устройстве (без удаления на файловом сервере, содержащие на сервере) после 5 неудачных вводов брошюры компании, презентации, изпароля. А при утере устройства через менения цен, оперативный отчет, фиконсоль управления можно заблокиро- нансовую информацию, согласование вать его дальнейший доступ к серве- контрактов. ру либо указать, что при первой автоЕсли клиентом были произведены ризации с устройства будет стерта вся изменения, то они синхронизируютe-mail-корреспонденция и личные дан- ся с корпоративным файловым серные, удалены приложения, файлы. вером. И наоборот, все измененные Администратор может через безо- данные в корпоративной сети автомапасное SSL-соединение независимо от тически обновляются на мобильных местонахождения подключиться к кор- устройствах. поративному сайту и отключить/вклюПрактическая эксплуатация мочить устройство. дуля позволила выявить следуюDevice Management позволяет осу- щий недостаток: при использовании ществлять установку ПО на мобиль- трехключевого метода шифрования ные устройства удаленно, независи- 3DES со 112‑битным ключом (Triple мо от географического местоположе- Encryption with Minimum Key) мобильния клиента. ное устройство показало низкую скоФормируется установочный файл рость обмена данными и крайне выс учетом требуемой операционной сокий уровень загрузки процессора, системы и указывается, в какую пап- что говорит о необходимости индивику на устройстве пользователя произ- дуального подхода к уровню безопасведется установка. Далее выбирают- ности для каждого клиента с учетом ся устройства, и задача помещается его производительности. в очередь запланированных. СистеВ поставке IMS с Apache Tomcat ма при первом подключении указан- 5.0.25 найдена уязвимость, позволяных устройств предложит пользова- ющая злоумышленнику получить дотелю установить программный про- ступ к конфиденциальной информадукт либо осуществит инсталляцию ции, осуществить DoS-атаку и обойти принудительно. ограничения безопасности. НеавториРасширенные средства админист- зованный атакующий может изменить рирования позволяют отключать синх- логин учетной записи, имя и фамилию ронизацию с клиентом, если заряд ак- пользователя, установки временной кумулятора опустился ниже указанно- зоны, а также деактивировать учетные го предела. Встроенные средства ре- записи. Это приведет к невозможносзервного копирования и восстановле- ти входа в систему зарегистрированния повышают надежность эксплуата- ным пользователям. ции системы. Клиентская часть локализована Nokia Intellisync для 21 языка, но русский язык поддер- Application Sync живается на данный момент не пол- Синхронизация по выбору пользованостью. Модуль администрирова- теля с базами AppForge, IBM DB2/UDB/
№8, август 2007
Everyplace, Microsoft Access, MSDE, Oracle, Palm .PDB, Satellite Forms, SQL Server/SQL Server CE, Sybase ASA позволяет охватить большинство корпоративных приложений, а соответственно и бизнес-процессов и обеспечивает удаленный мобильный доступ к ERP и CRM-системам – SAP, Oracle. В зависимости от типа коммуникаций между клиентом и сервером можно применять соответствующие политики, в которых указываются тип соединения и приложения, допущенные или запрещенные к синхронизации. Данный модуль не функционирует на устройствах под управлением Symbian, Windows Mobile Smartphone, Blackberry и ограничивается использованием настольных компьютеров на базе Windows, устройств PocketPC с Windows Mobile и Palm OS версии 5.2 и выше. Для синхронизации с БД SQL администратору необходимо настроить на клиенте стандартные ODBC-драйверы. Intellisync Application Sync играет существенную роль прежде всего для сотрудника в полевых условиях: смена приоритетов в логистике, увеличение количества доставок из-за своевременного обновления маршрутов, товара на складе, исключение дублирования маршрутов. I MS и с поль зует базу д анных MS SQL для хранения информации о зарегистрированных пользователях. Возможности конкретной системы и поддержка требуемого количества клиентов опираются лишь на производительность сервера. Наиболее крупное внедрение пакета произведено в США, где число пользователей компании составило 400000. Повысить отказоустойчивость помогает создание IMS-кластера с максимальным размером до 3 узлов. Если же напротив, требуется снижение затрат, то систему можно реализовать на VMware, учитывая ее производственные мощности. Проводя сравнение с возможными конкурентами, следует отметить Microsoft Activesync. Для эксплуатации последнего необходимо приобрести клиентские лицензии пакета MS Exchange Server 2003/7 (Outlook Web Access для доступа к почтовым папкам через Интернет). Работает
29
администрирование только функционал MS Outlook – почта/контакты/календарь/задачи. IBM Lotus Domino и другие продукты поддерживаться не будут. Если требуется комплексное решение, применимое в масштабах предприятия с его разносторонней инфраструктурой, принудительное применение политик, поддержка, гарантии, гибкость, удобство и централизованное администрирование системы, синхронизация файлов и приложений, то данное решение призвано это обеспечить, создавая универсальное решение для синхронизации любых данных с большинством устройств. Компания Nokia уже работает над Linux-версией пакета программ для синхронизации Intellisync, но о точной дате релиза говорить пока рано. «Правда, мы можем пообещать, что справимся до конца календарного года. Linux – это ключевая технология, над которой мы будем работать», – сообщил весной 2007 года Ханну Эронен, директор управления корпоративных устройств и решений Nokia. Основную аудиторию пользователей составляют топ-менеджеры, менеджеры проектов, менеджеры по продажам. Замысел вместить все офисное информационное окружение сотрудника в его мобильном устройстве и позволить иметь доступ к свежим данным из любого места, где есть сетевые коммуникации, который компания Intellisync начала реализовывать еще до слияния с Nokia, удался. Согласно исследованию Gartner от 4 июня 2007 года «A democratization process will bring wireless email to the masses» (ID G00149207) в настоящее время только 2% учетных записей электронной почты приходится на мобильных бизнес-пользователей. К 2010 году их число вырастет до 20%, а количество пользователей увеличится более чем в 17 раз (с 20 млн. до 350 млн. человек). К 2012 году ожидается увеличение числа решений для доступа с мобильных устройств не только к почте, но и корпоративным приложениям. Отмечая тенденцию интеграции персональных мобильных устройств в корпоративную инфраструктуру, Gartner предвидит возникновение ряда уязвимостей, которые наряду с возрастающими требованиями бизнес-пользователей, рекомендаци-
30
ями и советами компаниям отобразил в исследовании «Toolkit best practices: plan for convergence of mobile security and device management» (ID G00150177) от 31 июля 2007 года. Делая предположения о возможных причинах выбора данного решения отечественными компаниями, можно сказать, что решения других производителей либо не сертифицированы в соответствующих российских ведомствах, либо не имеют нужного функционала, навязывая клиентам применение определенных устройств для синхронизации. Услугу на базе модуля беспроводной почты во второй половине 2007 года планирует запустить портал Rambler. ru. Более чем 20 миллионам пользователей почтового сервиса в качестве стандартного предложения будут оказаны услуги мобильной электронной почты, а также синхронизации календаря, контактов и списков дел.
Лицензирование
n Software License Support – обязательная позиция на каждую приобретенную лицензию. Включает в себя техническую поддержку и обновления. Ежегодный платеж. Модуль Nokia Intellisync Wireless Email – $2350. Складывается из: n Nokia Intellisync Wireless Email (HH) – $1522 (10 лицензий минимум). n Essential Annual Suite Support Fee Per Customer – $580 (разовый годовой платеж при первом заказе). n Essential Software License Support – $248. Сервер Nokia Intellisync Base Email – $4826. Складывается из: n Intellisync Base Email server (1 лицензия) – $3538. n Essential Annual Suite Support Fee Per Customer – $580 (разовый годовой платеж при первом заказе). n Essential Software License Support – $708.
Схема лицензирования позволяет приСтоимость модуля повышается обретать как комплекс модулей, так и на треть, если требуется подключение отдельные элементы, необходимые пользователя как с мобильного устконкретному пользователю. Обяза- ройства, так и персонального компьютельным условием является приобре- тера (HH+PC). тение технической поддержки и возможности обновления приобретенно- Заключение го модуля IMS. Учитывая озвученные Gartner тенден1. Приобретение лицензий. ции повышения спроса на решения По типам устройств: беспроводного доступа с мобильных n только Handheld (НН) – КПК и смар- устройств к корпоративной информационной инфраструктуре и отсутствие тфоны; n только PC – лаптопы/десктопы; комплексных решений подобного рода, n HH+PC. данный продукт способен продвигаться на рынке успешно. Нужды компаний Помодульно в разрезе типа уст- в подобных решениях создадут конкуройства: ренцию среди разработчиков, столь неn Nokia Intellisync Wireless Email Pro. обходимую для снижения стоимости реn N o k i a I n t e l l i s y n c D e v i c e шений по данному направлению, расManagement. ширению предоставляемых сервисов и поддерживаемых платформ. n Nokia Intellisync File Sync. n Nokia Intellisync Application Sync. n Все модули. 1. http://www.nokia-knowledgecenter.com. Предусмотрено уменьшение стоимости лицензии в зависимости от приобретаемого количества. 2. Приобретение поддержки складывается из 2 частей: n Annual Support Plan – приобретается «на заказчика» при заказе любого из продуктов IMS. Разовый платеж.
2. http://europe.nokia.com. 3. http://www.nokia.ru. 4. http://www.cisco.com. 5. Карминский А.М., Черников Б.В «Информационные системы в экономике». Часть 1. Методология создания, М. «Финансы и статистика» 2006 г. 6. Попов А., «Новое оружие для пехоты», «Эксперт Сибирь», №12 (154), 26 марта 2007 г.
администрирование
Создаем кластер на платформе FalconStor iSCSI Storage Server
Геннадий Дмитриев Нужен кластер, но не хватает денег на внешний дисковый массив? Можно подумать о софтовом решении кластера на базе Falconstor iSCSI Storage Server. 32
администрирование
Р
ечь пойдет об одной из технологий, которая позволяет создать интеллектуальную открытую инфраструктуру сетевых систем хранения данных на базе продукта FalconStor iSCSI Storage Server, который является частью программного решения FalconStor IPStor Enterprise Edition и предоставляет сервисы по управлению хранения данных, упрощению системы резервного копирования, а также созданию зеркальных копий данных поверх обычной сети IP. Иными словами, FalconStor iSCSI Storage Server позволяет создать простую в управлении, доступную по цене и полнофункциональную систему хранения данных SAN (Storage Area Network). Продукт коммерческий, стоимость базовой лицензии с годовой поддержкой не превышает 2500$.
Преимущества и недостатки При проектировании центра обработки данных одни из немаловажных вопросов, которые приходится решать, – время простоя оборудования и время восстановления доступности сервиса после сбоя. Классическое отказоустойчивое решение по обеспечению круглосуточной доступности сервиса представляет собой два узла обработки данных с общим дисковым массивом, подключенным по Fibre Channel или SCSI. Такое решение применяется при обработке баз данных объемом от нескольких десятков гигабайт и позволяет решать вопросы производительности и доступности данных для пользователей. В небольших сетях, где объемы баз данных не превышают нескольких гигабайт, а число пользователей – двух десятков, данное решение может быть избыточно. В основном из-за большой начальной стоимости вложения. Альтернативное бюджетное решение на основе FalconStor iSCSI Storage Server позволяет решить несколько вопросов. Во-первых, можно использовать имеющееся дисковое пространство одного из серверов в качестве разделяемого ресурса кластера. Во-вторых, доступ к разделяемому дисковому пространству организуется поверх протокола TCP/IP. Тем самым дисковый ресурс может быть рас-
№8, август 2007
Рисунок 1. Схема кластера
пределен между несколькими серверКроме того, FalconStor iSCSI Storage ными помещениями. Server не решает потенциальных пробВ-третьих, при наличии нескольких лем, возникающих при сбоях на серсетевых адаптеров можно объединить вере iSCSI. Для того чтобы обеспеих в транк и тем самым увеличить про- чить высокую отказоустойчивость, пускную способность канала к диско- необходимо кластеризовать сам сервому ресурсу. вис FalconStor iSCSI, что потребует Данная технология позволяет соз- наличия второго сервера, лицензий давать бюджетные кластерные реше- на кластер и внешнего дискового масния. Классический отказоустойчивый сива. Все это несколько противоречит кластер для Microsoft Windows состо- требованиям, предъявляемым к «бюдит минимум из двух серверов и вне- жетному» решению. шнего дискового массива, подключенного через Fibre Channel или SCSI, Некоторые особенности стоимость которого достаточно вели- Перечислю некоторые возможноска. Но, как было отмечено, FalconStor ти, предоставляемые FalconStor iSCSI iSCSI Storage Server может исполь- Storage Server. зовать вну треннее дисковое проОпция Snapshot Service позволяет странство уже имеющихся серверов, создавать мгновенные копии (клоны) что позволяет «сэкономить» на одной томов, которые можно использовать, из дорогостоящих составляющих. Ми- например, для уменьшения окна резернусом, на мой взгляд, являются доста- вного копирования, а также для защиточно большие задержки, присущие ты данных от программных и пользовасамому протоколу TCP/IP, что не поз- тельских ошибок. воляет применять данную технологию Сокращение окна резервного копри работе с большими базами дан- пирования достигается за счет тоных. Связано это с тем, что при работе го, что копирование осуществляетс базами данных каждый запрос кли- ся не с «рабочего» тома с остановкой ента формирует до нескольких десят- всех работающих приложений, а со ков небольших запросов к базе данных. сделанного снимка, что не требует осВ случае с классическим кластером тановки сервисов на время, большее, задержки при работе по Fibre Channel чем требуется для создания этого сасоставляют микросекунды. В случае мого снимка. запросов к базе данных поверх проКроме того, возможность создатокола TCP/IP задержки составляют вать несколько мгновенных снимков миллисекунды, что в случае множест- позволяет при возникновении ошибок венных запросов может дать большое (в том числе и ошибок пользователя) время отклика. осуществить «откат» на более раннее
33
администрирование
Рисунок 2. Управляющая консоль FalconStor iSCSI Storage Server
Рисунок 3. Логические диски
Рисунок 4. Определение адресов доступа к порталу
состояние. И именно это, а не какая-то мифическая «верификация», позволяет существенно снизить время восстановления после программных и пользовательских ошибок. Можно создавать до 32 снимков с каждого тома. Получить доступ к данным из снимка можно, смонтировав его на том же или на другом сервере. Кроме того, iSCSI Storage Server поддерживает запрос снимков через интерфейс Microsoft Volume Shadow Copy Service и умеет автоматически снимать мгновенные копии с серверов приложений с целью сокращения потенциальных потерь данных. Для этого используют-
34
ся специализированные агенты, которые должны устанавливаться на эти серверы. Опция Backup Enabler способствует выполнению централизованного резервного копирования непосредственно на iSCSI Storage Server. При этом в данной технологии могут применяться системы резервного копирования от третьих фирм. Опция Mirror Service позволяет создавать зеркальные копии данных, что уменьшает время простоя и ущерб, связанные с отказом диска или контроллера. Еще две весьма полезные опции –
DiskSafe и FileSafe – предназначены для постоянной поблочной или пофайловой репликации данных с локальных дисков серверов на дисковые ресурсы сервера iSCSI. Такой подход позволяет эффективно защищать информацию на локальных дисках серверов и рабочих станций от сбоя при минимальной нагрузке на сетевые интерфейсы. Интеграция с мгновенными снимками обеспечивает надежное сохранение нескольких копий данных и дает пользователям возможность самостоятельно восстанавливать утерянные (например, случайно удаленные) сведения. Так как имеется возможность делать мгновенные снимки с дискового тома iSCSI Storage Server, на который производится пофайловая или поблочная репликация с локальных дисков посредством опций DiskSafe и FileSafe (точно так же, как можно делать и с обычными дисковыми томами), это позволяет нам защищать данные не только консолидированные на сервере хранения, но и те, работа с которыми фактически ведется на локальных дисках серверов. В случае, когда происходит какое-либо повреждение данных на локальных дисках, администратор имеет возможность быстро восстановить данные с сервера iSCSI Storage Server, кроме того, можно просто загрузиться с расположенного на iSCSI-сервере образе локального диска. Возможно как полное, так и пофайловое восстановление локальных данных. Данный подход позволяет также сократить окно резервного копирования, копируя данные со сделанного на iSCSI Storage Server мгновенного снимка. Это снижает как время простоя сервисов на время копирования, так и непосредственную нагрузку на дисковую подсистему в серверах. Еще одна опция, предназначенная для увеличения отказоустойчивости, – зеркалирование (Mirror). Она позволяет не допустить отказ в обслуживании в случае выхода из строя внешней дисковой подсистемы, подключенной к серверу iSCSI Storage Server. Это требует наличия второй дисковой подсистемы. Разумеется, есть возможность использовать и одну дисковую систему, осуществляя зеркалирование меж-
администрирование ду двумя расположенными на ней томами, но, очевидно, такой вариант подходит скорее для тестовых сред, нежели для повышения отказоустойчивости эксплуатируемой системы. Кроме того, если у нас есть второй сервер iSCSI Storage Server, который расположен на удаленной площадке, то мы можем реплицировать данные между серверами, используя соответствующую опцию (Replication). Репликация осуществляется по IP-каналу и не требует высокой пропускной способности. Это дает возможность обеспечивать защиту данных и быстрое восстановление работоспособности сервисов после глобальных аварий в ЦОД (построение катастрофоустойчивых решений). Итак, для тех, кто запутался, приведу краткий список опций: n Snapshot – создание мгновенных снимков; защита от ошибок ПО и пользователей, снижение окна резервного копирования. n DiskSafe/FileSafe – защита локальных дисков серверов путем их репликации на сервер iSCSI Storage Server. n Mirror – зеркалирование данных между дисковыми подсистемами, подключенными к iSCSI Storage Server; защита от отказа дисковой системы. n Replication – репликация данных (по IP-каналу) на удаленный iSCSI Storage Server; защита от выхода из строя сервера iSCSI Storage Server (в том числе и вместе с подключенными системами хранения); построение катастрофоустойчивых решений. Обо всех особенностях данной технологии подробную информацию вы сможете найти на сайте [1].
Описание стенда Для построения кластера на платформе FalconStor iSCSI Storage Server нам понадобятся три сервера. Первый будет выполнять роль контроллера домена и разделяемого дискового ресурса. Два других сервера будут выступать в роли участников домена, и на них мы развернем отказоустойчивый кластер. Схему смотрите на рис. 1. На всех узлах стенда установлена операционная система Microsoft Windows 2003 Enterprise Edition SP1 (сервер Falconstor может работать и на Microsoft Windows 2003 Standard Edition). На сервере iscsi-serv.icluster.local запущены службы Active Directory и DNS, а также установлено программное обеспечение iSCSI Storage Server FalconStor Software Version: 2.01-417. На этом сервере должно быть неразмеченное дисковое пространство, которое будет использоваться программным обеспечением iSCSI Storage Server для создания разделяемых дисковых ресурсов. Расмотрим настройки сетевых интерфейсов (все адреса статические, пустые настройки удалены). iscsi-serv.icluster.local: Windows IP Configuration Host Name . . . . . . . . . . . . : iscsi-serv Primary Dns Suffix . . . . . . . . : icluster.local DNS Suffix Search List . . . . . . : icluster.local Ethernet adapter Description . IP Address. . Subnet Mask .
Node2 . . . . . . . . .
№8, август 2007
iscsi . . . . . . . . .
connection: . . . . : Intel(R) PRO/1000 MT Dual Port Network Connection #3 . . . . : 192.168.130.10 . . . . : 255.255.255.0
Ethernet adapter Description . IP Address. . Subnet Mask .
Node1 . . . . . . . . .
iscsi . . . . . . . . .
connection: . . . . : Intel(R) PRO/1000 MT Dual Port Network Connection #2 . . . . : 192.168.129.10 . . . . : 255.255.255.0
Ethernet adapter Description . IP Address. . Subnet Mask . DNS Servers .
Public Connection: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
: : : :
Intel(R) PRO/1000 MT Dual Port Network Connection 192.168.128.10 255.255.255.0 127.0.0.1
node1.icluster.local: Windows IP Configuration Host Name . . . . . . . . . . . . : node1 Primary Dns Suffix . . . . . . . . : icluster.local DNS Suffix Search List . . . . . . : icluster.local Ethernet adapter Description . IP Address. . Subnet Mask . DNS Servers .
iSCSI . . . . . . . . . . . .
Server Connection: . . . . . . . : Intel(R) PRO/1000 MT Dual Port Network Connection . . . . . . . : 192.168.129.11 . . . . . . . : 255.255.255.0 . . . . . . . : 192.168.128.10
Ethernet adapter Description . IP Address. . Subnet Mask . IP Address. . Subnet Mask . DNS Servers .
Public Cluster Connection: . . . . . . . . . . : Intel(R) PRO/1000 MT Dual Port Network Connection #2 . . . . . . . . . . : 192.168.128.50 . . . . . . . . . . : 255.255.255.0 . . . . . . . . . . : 192.168.128.11 . . . . . . . . . . : 255.255.255.0 . . . . . . . . . . : 192.168.128.10
Ethernet adapter Description . IP Address. . Subnet Mask . DNS Servers .
Private . . . . . . . . . . . . . . . .
Cluster . . . . . . . . . . . . . . . .
Connection: . . : Intel(R) PRO/1000 MT Dual Port Network Connection #3 . . : 192.168.127.11 . . : 255.255.255.0 . . : 192.168.128.10
node2.icluster.local: Windows IP Configuration Host Name . . . . . . . . . . . . : node2 Primary Dns Suffix . . . . . . . . : icluster.local DNS Suffix Search List . . . . . . : icluster.local Ethernet adapter Description . IP Address. . Subnet Mask . DNS Servers .
Private . . . . . . . . . . . . . . . .
Cluster . . . . . . . . . . . . . . . .
Connection: . . : Intel(R) PRO/1000 MT Dual Port Network Connection #3 . . : 192.168.127.13 . . : 255.255.255.0 . . : 192.168.128.10
Ethernet adapter Description . IP Address. . Subnet Mask . DNS Servers .
iSCSI . . . . . . . . . . . .
Ethernet adapter Description . IP Address. . Subnet Mask . DNS Servers .
Public Cluster Connection: . . . . . . . . . . : Intel(R) PRO/1000 MT Dual Port Network Connection #2 . . . . . . . . . . : 192.168.128.13 . . . . . . . . . . : 255.255.255.0 . . . . . . . . . . : 192.168.128.10
Server Connection(1): . . . . . . . : Intel(R) PRO/1000 MT Dual Port Network Connection . . . . . . . : 192.168.130.13 . . . . . . . : 255.255.255.0 . . . . . . . : 192.168.128.10
Установка и настройка ПО FalconStor iSCSI Storage Server В процессе установки данного ПО запускается мастер. Для завершения процедуры инсталляции достаточно ответить на несколько простых вопросов. Взаимодействие с сервером происходит через управляющую консоль FalconStor iSCSI Storage Server (см. рис. 2). Первое, что нужно сделать, – это ввести лицензии в меню «iSCSI Storage Server → License». Далее нам потребуется создать два разделяемых ресурса. Первый дисковый ресурс под кворумный раздел должен иметь размер 200 Мб (требования к размеру кворумного раздела можно найти на сайте Microsoft). Второй дисковый ресурс размером 10 Гб будет содержать данные. Названия ресурсов – Quorum и Data соответственно. Создание логических дисков выполняется через контекстное меню «iSCSI Storage Server → Logical Units and Groups → New Logical Unit». Результаты создания логических дисков можно увидеть Таблица 1. Адреса порталов на рис. 3. Имя узла IP-адрес портала При создании двухузnode1.icluster.local 192.168.129.10 лового кластера настройnode2.icluster.local 192.168.130.10 ка дисковых устройств, пу-
35
администрирование
Рисунок 6. Определение адреса портала Рисунок 5. Определение узлов в управляющей консоли
Рисунок 7. Авторизация доступа к порталу Рисунок 8. Задание дополнительных параметров инициатора
Рисунок 10. Указание восстановления доступа к дисковым ресурсам портала
Рисунок 9. Определение уровня доступа к дисковым ресурсам портала
Рисунок 11. Управляющая консоль кластера
36
Рисунок 12. Определение дополнительных параметров инициатора
администрирование лов и групп не требуется, так что здесь можно оставить настройки по умолчанию. Но нам потребуется определить узлы и параметры доступа дисковых ресурсов – это делается через контекстное меню «iSCSI Storage Server → Hosts → New Host». Определение узлов достаточно простое, единственный момент, на который хотелось бы обратить внимание, – это задание адресов портала. Он проиллюстрирован на рис. 4. Адреса порталов определяем согласно таблице 1. В итоге мы должны получить в управляющей консоли два узла, определить адреса доступа к порталу iSCSI Storage Server, настроить авторизацию и уровни доступа к дисковым ресурсам, как показано на рис. 5. На тестовом стенде я не стал настраивать авторизацию и указал «анонимный» уровень доступа к порталу (см. рис. 7). В разделе определения логических дисков на вкладке «Logical Unit» можно определить уровни доступа к дисковым ресурсам портала. Их всего четыре: No Access, Read, Read/Write Exclusive, Read/Write Non-Exclusive. Для создания кластера нам понадобится доступ к дисковым ресурсам на запись и чтение с двух узлов, поэтому здесь следует выбрать неэксклюзивный режим (см. рис. 9).
Таблица 2. Настройки узлов Имя параметра
Node1
Node2
Target Portal (IP address)
192.168.129.10/3260
192.168.130.10/3260
Local Adapter
Microsoft iSCSI Initiator
Microsoft iSCSI Initiator
Source IP
192.168.129.11
192.168.130.13
n Второе: сетевые адаптеры, используемые для доступа к дисковым ресурсам сервисом iSCSI Storage Server, желательно исключить из обслуживания Cluster Service, как показано на рис. 11.
Настройка резервных путей
Как уже говорилось ранее, ПО FalconStor iSCSI Storage Server поддерживает настройку резервных путей к дисковым ресурсам. Это позволяет избежать потери доступа к дисковому ресурсу в случае обрыва одного из каналов связи либо увеличить пропускную способность канала в случае корректной работы всех его составляющих. Установите на дисковом сервере новый сетевой адаптер и настройте его IP-адрес. Через управляющую консоль FalconStor iSCSI Storage Server в свойствах узла на вкладке «Portals» добавьте сетевой ресурс, как было показано на рис. 4. На узле необходимо сделать следующие изменения: Установка и настройка ПО Microsoft «iSCSI Initiator Properties → Targets → Details → Connections». iSCSI Initiator Настройка узлов системы происходит немного сложнее, по- Здесь надо добавить вторую запись для «Source Portal → Target Portal → Add → Advanced»: тому остановлюсь на ней более подробно. Скачайте файл Initiator-2.03-build3099-x86fre.exe (или боSource = 192.168.131.11 лее новую версию) с сайта www.microsoft.com и установите Target = 192.168.131.10 продукт на каждый узел. Если вы не собираетесь использоПосле этого проверьте доступность дискового ресурса. вать несколько каналов для доступа к дисковым ресурсам, то опцию multipath можно отключить. В противном случае При желании можно даже протестировать отказоустойчиоставьте настройки по умолчанию. После установки пере- вость, выдернув сетевой кабель. ходите к свойствам iSCSI Initiator. На вкладке «iSCSI Initiator Properties → Discovery» добавьте IP-адрес iSCSI Storage Выводы Процедура создания кластера на базе продукта FalconStor Server, как показано на рис. 6. Нажмите кнопку «Advanced» и определите параметры iSCSI Storage Server достаточно проста. Мастера установки помогают определить большое количество параметров. локального адаптера и источника (см. рис. 8). На вкладке «Targets» нажмите кнопку «Log on», отметьте «Ручная доводка» требуется лишь при создании резервных опцию «Automatically restore this connection when the system путей, определении прав доступа и авторизации. Я попробовал оценить производительность дисковой boots» для восстановления доступа к дисковым ресурсам подсистемы на получившемся тестовом стенда с помопосле перезагрузки системы (см. рис. 10). Затем нажмите кнопку «Advanced…» и определите три щью программного обеспечения IOmeter. В рамках провепараметра: Local Adapter, Source IP и Target Portal, как по- денного теста производительность на операциях линейного чтения была ограничена пропускной способностью каказано на рис. 12. В итоге получаем настройки, которые отображены нала, как в случае использования одного, так и в случае двух каналов. в таблице 2. Прирост скорости операции записи и чтения при испольНастройки для второго узла аналогичны и отличаются зовании двух каналов связи с дисковыми ресурсами iSCSI только в адресах. После настройки ПО следует проверить доступность Storage Server составил порядка 70-80%. Хочется выразить огромную благодарность Андрею дисковых ресурсов на каждом из узлов кластера. Затем можно приступать к установке Microsoft Cluster Service. Иванову за его комментарии к статье и полезные советы Этот процесс не сложен и описан во многих статьях, поэ- по настройке стенда. тому я не буду останавливаться на нем подробно, но отме1. Русскоязычный сайт, посвященный ПО Falconstor – http:// чу два момента: www.falconstor.ru. n Первое: для корректного функционирования приложе2. ПО для тестирования производительности дисковой систений в Cluster Service желательно создать кластерный мы – http://www.iometer.org. ресурс Microsoft Distributed Transaction Coordinator.
№8, август 2007
37
человек номера
Общение как стиль жизни
Если ты умеешь вести диалог с другом, то сможешь говорить с миллионами. Дмитрий Гришин делает это с помощью Mail.ru
Ч
истый, не обремененный без- Тазики и ботаники делушками и тяжелыми папка- Есть такой стереотип: если человек зами стол в кабинете генерально- нимается наукой, то он обязательно каго директора национальной почто- бинетный ученый, одиночка с мрачным вой службы Mail.ru сразу притягивает блеском в глазах. Вступление на научвзгляд. Я не могу оценить увиденное ную стезю, которое началось для Дис точки зрения психологии – не специ- мы Гришина, обычного саратовского алист, я не знаю, каковы правила соз- школьника, с перехода в физико-мадания бизнес-имиджа компании. Мо- тематическую гимназию №4, вовсе жет, так теперь модно? Я расцениваю не означало вступления в монашесэтот факт с иной точки зрения. Бума- кий орден. Совсем наоборот. Таланги на столе Дмитрию Гришину не нуж- тливому подростку понравилось, что ны. Нужен ли ему стол, тоже не увере- «вокруг много умных ребят, лучшие на. Я бы на его месте превратила ра- друзья у меня появились именно там». бочий кабинет в гостиную или обосно- Вторым плюсом стало наличие в гимвалась бы в уютном садике… Насколь- назии компьютерного класса. Третьим, ко я поняла, человека, крепко держа- трепещите, школьные учителя русскощего в руках крупнейший в России ин- го языка и литературы, – уменьшение тернет-портал, главное в его жизни – удельного веса гуманитарных предобщение. А для общения нужен собе- метов в программе спецшколы. Замеседник, пара чашек кофе… вот, пожа- чу, что сегодняшний Дмитрий Гришин луй, и все. сожалеет о былом перекосе и нелюб-
38
ви к филологии. В новом звании гимназиста были и минусы: – До седьмого класса у меня было классическое детство – игры, проделки, футбол … Я очень много занимался самбо и дзюдо – в лагеря ездил, в соревнованиях участвовал. А с поступлением в физико-математическую гимназию на это совсем времени перестало хватать. И еще. Если до своей обычной школы я шел пять минут, то теперь только десять минут добирался до автобусной остановки и минут сорок ехал до гимназии… Однако школа ли, гимназия, но детство, как метко характеризует его сам Гришин, – это «состояние расслабления и отсутствие точек выбора». В Московском государственном техническом университете имени Баумана, куда Дмитрий поступил после 11 класса, от детства не осталось и следа. Ро-
человек номера дители далеко, пришлось самому на- довольно тяжелые. Просто человек так штат Флорида. Начал выполнять закаучиться готовить, вокруг большой чу- устроен, что негативные моменты ред- зы, а потом и работать на постоянной жой город, на повестке дня – нелегкая ко вспоминает. основе программистом, затем руковоучеба и финансовые проблемы. А что вспоминается?... Конечно, об- дителем группы, не покидая при этом – Начал ценить деньги, – вспоми- щение! В общежитии, как известно, ни Россию, ни родную общагу, не встренает Дмитрий. есть не только веселые соседи, кото- чаясь ни разу лицом к лицу с заокеансОценил он и вуз, в котором при- рые учебой пренебрегают. Есть «пар- ким руководством. шлось учиться. тия», которая старается учиться, хотя Оказалось, что с американцами об– Когда я попал в Бауманку, здесь бы в моменты тех самых «ключевых то- щаться полезно, можно кое-чему наеще были преподаватели старой закал- чек». Вот к этой «партии» Дмитрий Гри- учиться: ки. В тот момент ломалась экономика, шин и примкнул: – Там другой менталитет, другой и многих профессоров было трудно – Если честно, общежитие стиму- подход к работе. Например, американудержать, они уходили из высшей шко- лирует учебу. Если у тебя есть жела- цы считали, что начальство среднелы, уезжали из страны. Но мне повез- ние учиться, легко найти людей, с ко- го, высокого уровня – это только месло поучиться у «зубров». Главное, чему торыми можно посоветоваться, как ре- тные, американцы, и они должны сиони меня научили – умению самостоя- шать трудную задачу, обсудить пробле- деть в офисе. Мы сейчас делаем похотельно добывать знания. Плюс жизнь му, задать вопрос, которые, в конце кон- жую систему. Можно использовать удав общежитии дала мне ценное качест- цов, разбудят утром, чтобы на лекцию ленные ресурсы, но менеджеры обязаво – умение в короткие сроки сосредо- не опоздать! Это такой своеобразный тельно должны сидеть в офисе. С точточиться перед сессией. Причем если барометр. Если заходишь в комнату, ки зрения управления и взаимодейств других вузах, я знаю, студенты могут и все сидят, «ботанят», это сигнал – се- вия с другими подразделениями, это весь семестр не учиться и в конце по- рьезное дело, надо заниматься, зачет реально повышает эффективность лугодия за две недели попытаться все или экзамен предстоит. компании. наверстать, в Бауманском это было неИ на Mail.ru Дмитрий Гришин, по сувозможно. Круглый год у нас были ла- Пейджер – чудо техники ти дела, попал по знакомству. Вернее, бораторные работы, контрольные, за- Еще учась в Бауманке, Дмитрий Гришин тогда, в 2001 году, такого портала еще четы. Такие ключевые «точки», кото- стал все глубже и глубже «тонуть» в ин- не было. Друг по общежитию позвал рые обязательно надо пройти. Эта сис- формационных технологиях. Правда, в компанию «netBridge Servises» протема ко многому обязывает. этому «мешала» учеба и работа. Сту- граммистом. – Я решил: схожу посмотрю, что и Как бы ни было тяжело в общежи- дент Гришин вкалывал сразу в четырех тии, Дмитрию нравилось, что здесь он местах. Это были проектные организа- как. Устроился на полный рабочий день. встретил множество интересного наро- ции, где чертили от руки, где покупали Параллельно продолжал работать да. Люди приезжали учиться из других один компьютер и не знали, что с ним на американцев по вечерам и учился городов и стран. Кто-то вел бурную сту- делать. Конечно, звали студентов – мо- на дневном. денческую жизнь, и надо было хоть не- лодых, дерзких и «продвинутых». Видя ужас на моем лице, Дмитрий много поучаствовать в ней. Чего стоят – Я уже в то время программиро- уточняет: знаменитые «дипломные тазики» – ба- вал. В основном нас брали на непол– Все было не так страшно. У меуманская традиция спускать студента, ный рабочий день, плюс, как студен- ня был лояльный начальник, отпускал, защитившего диплом, с верхнего эта- там дневного отделения, делали скид- когда надо было, на учебу. Уже хважа до самого нижнего в тазу, подложив ку – разрешали брать работу на дом. тало денег на такси, мы с товарищем под седалище диплом. Чем диплом тол- Зарплаты были небольшие, тем не ме- вместе ездили из общежития на ранее на одну из первых я умудрился ку- боту, скидывались. В такси или поздще, тем скатываться комфортнее… Дмитрий ярко помнит первоапрель- пить пейджер. Это было время, ког- но вечером на работе читал ксерокоские шутки: да пейджер был модным технологи- пированные лекции. Да и курс уже был – Две двери напротив друг друга ческим устройством. Появилась опе- пятый, началась специализация, у меоткрываются вовнутрь, их связывали ративная связь с родителями… В чем ня какой-то вес на кафедре появилдруг с другом… Или, например, в обще- еще для меня был интерес: можно бы- ся. Экзамены по предметам, связанжитиях умывальники находятся на эта- ло, зайдя в Интернет, послать себе со- ным с информационными технологияже. Утром человек просыпается, выхо- общение. Как вы знаете, пейджеры у ми, я мог сдавать экстерном, так хородит чистить зубы и… видит перед со- нас в России просуществовали недол- шо их знал на практике. Тем не менее бой кирпичную стену. Представляете, го. Года два, наверное. объем работы на американцев я посчто при этом думает полусонный стуВыяснилось, что общение – это тепенно стал сокращать – интереснее дент? Крыша «поехала». А это его не- не только болтовня и научные споры, было трудиться в «netBridge Servises». дремлющие товарищи встали часиков помощь другу перед экзаменом, но еще Почему? Первое – мне уже тогда был в пять утра, взяли обои «под кирпич» и способ найти хорошо оплачиваемую интересен Интернет. Второе – хотелось и оклеили дверь. Было весело. Толь- работу. Через университетского пре- заниматься программированием. Треко не подумайте, что у нас там весе- подавателя Дмитрий вышел на амери- тье – мне было любопытно понять, как лились с утра и до вечера… Изредка. канскую компанию Axiom Int., головной функционируют российские компании. Остальное время – это суровые будни, офис которой располагается в США, И главное – работать удаленно надо-
№8, август 2007
39
человек номера ело. Нужно было общение. Мне хоте– Вы придумали способ выжить лать какие-то базовые операции, люили заимствовали? лось расти, развиваться дальше. ди понимают. Так что, если бы не общение, неиз– Все вместе. Любой бизнес – это В этом самом светлом будущем вестно, стал бы Дмитрий Гришин топ- изучение чужого опыта, плюс собс- «общение» – ключевое слово. Причем менеджером крупнейшей российской твенная энергия, энтузиазм. Эконо- я, как человек традиционного склада, компании. И, кстати, неизвестно, была мически и финансово ситуация бы- поинтересовалась у Дмитрия, не боитбы жива сама компания Mail.ru… ла очень сложная. Во многом мы вы- ся ли он, что виртуальное общение ско– Когда Mail.ru только начинался, ехали за счет энтузиазма, сотрудники ро вытеснит реальное и что это не пойбыло понятно, к чему это приведет, что были искреннее уверены, что Mail.ru – дет на пользу человечеству. Дмитрий это классная компания. Формула на- не разделяет моих опасений, более топроект станет таким масштабным? – Нет, не было понятно. К тому же шего успеха: горящие глаза, вера в то, го, у него есть убеждение, почти научMail.ru возник до интернет-кризиса, что все получится, плюс навыки в об- ная теория, согласно которой современкогда было много денег, людей, но при ласти технологии и Интернета. ное общение – это двуликий Янус. Разэтом четкого понимания, на чем заговор с другом в «Агенте» легко перетекает в дружескую вечеринку, где можрабатывать деньги, не существовало. Двуликий Янус Следовали американским тенденциям. Теперь, когда с настоящим у Mail.ru но поздороваться за руку с приятелем И когда лопнул «интернет-пузырь», все и ее генерального директора все даже и вспомнить, какого цвета у знакомой обрушилось. Наша компания «netBridge очень неплохо и перспективы переста- девушки глаза. А наутро после вечеринServises» объединилась с «Port.ru». ли быть туманными, будущее Интерне- ки вся компания дружно рассматриваНа момент объединения в обеих ком- та кажется Дмитрию Гришину вполне ет фотографии, выложенные на Mail.ru, не выходя из дома, и в блоге живо компаниях работало где-то 400 человек, оптимистичным а после осталось около 40. Как раз – У Mail.ru 30 миллионов пользова- ментирует увиденное, планируя новую в это время я стал руководителем ра- телей в месяц, это две Москвы по на- встречу в реальности, выбирая место бочей группы, потом сервис-центра, по- селению. Мы уже некоторые телевизи- по карте столицы… – Люди стали больше общаться с потом техническим директором, затем ге- онные каналы второго эшелона обгонеральным. Я попал к рулю компании няем по популярности. Cтараемся де- мощью Интернета. Но с другой стороны, в 2003 году, когда на уме было одно – лать технологии проще. Нам помогает Интернет, электронная почта дают возвыжить. В этот момент обанкротилось то, что сейчас бурными темпами народ можность говорить с теми, с кем нельогромное количество интернет-компа- подключается в Интернету, все боль- зя пообщаться живьем. Или человек ний, 80% закрылось. Непонятно, что де- ше квартир в Москве, сдавая в экс- далеко живет, или из-за жуткой занялать, где брать деньги. Западные сред- плуатацию, сразу подсоединяют к Се- тости ему некогда вырваться на встрества улетучились, в Америке ведь то же ти. И простые, не продвинутые поль- чу с друзьями, или нужно очень быстсамое происходило. Я сосредоточился зователи без проблем выходят в Ин- ро обменяться новостями, а режим рана том, чтобы сократить всевозможные тернет. А продвинутые уже там… На- боты не позволяет отъехать из офиса издержки, выжить. Потом, когда пошла чинается приход массового пользова- в течение дня. При этом, мне кажетприбыль, вздохнули облегченно. Стали теля. Интернет нынче как мобильник. ся, количество офф-лайновых встреч развиваться. И сейчас превратились Никто не знает, как устроен внутри мо- не сокращается. Например, я не счив крупную компанию. бильный телефон, но как звонить и де- таю, что стал реже встречаться со своими друзьями. – Для вас лично каково соотношение живого и интернет-общения? – У меня очень много интернет-общения, при этом количество неинтернет-общения не сократилось. То есть у меня нет зависимости от Интернета. Выходные стараюсь больше уделять друзьям, семье и так далее. – Как проводите свободное время в реальном пространстве? – У меня его очень мало, – вздыхает Дмитрий. – Но если есть, это кино, теннис, шашлыки. Люблю на машине погонять. Хожу на гонки. Плюс пытаюсь отдыхать от Интернета. У меня он вообще везде – дома, в машине, на работе, в телефоне… Большая семья, в которой сегодня живет Дмитрий, – мама, папа, старший брат, гражданская жена – изредка пы-
40
человек номера тается «вытащить» его из Интернета, но обычно эти попытки выливаются в оживленную дискуссию. И заканчиваются в тот момент, когда генеральный директор Mail.ru видит, что у него в почте очередное сообщение и нажимает на кнопку… Что делать, пришлось родителям Дмитрия самим оказаться в Сети, изучить возможности интернеткоммуникаций. – У меня постоянное интернет-общение с родителями. В этом плане особенно папа продвинутый. Маме тяжелее. Но все равно потихоньку движемся. – А вы сами пользуетесь сервисами, которые предлагает Mail.ru? – Я один из главных пользователей. Разве что раздел Леди.Mail.ru не для меня, – улыбается Гришин. – Другими сервисами я пользуюсь, только если изучаю конкурентов. Стараюсь смотреть, то город, просто ходить по нему мне ше всего понравился из всех виденных чем пользуются мои друзья, знакомые, скучно. Я стараюсь действовать в ре- американских городов. Я не прошу Дмитрия поделиться окружение, чтобы понимать, анализи- жиме Бауманского университета – наровать, чего им не хватает, что нужно, ходить «ключевые точки». Приезжаешь планами, как принято в финале интерчто мешает. Мы создаем массовый про- в город, обходишь самые интересные вью. Спрашиваю о философии развидукт, очень важно делать не то, что те- места, о которых узнал заранее, фото- тия Mail.ru. Хотя и так понятно, что клюбе нравится, а понимать, что нравится графируешь. Если ты не фанат искус- чевым останется общение, как в личмиллионам людей. Это очень сложно, ства, не ходишь по музеям, три-четы- ной жизни, так и в бизнесе, который потому что массы иногда мыслят со- ре дня на любой европейский город до- возглавляет Гришин. статочно. Мне важно «почувствовать» – Хочется сделать общение максивершенно по-другому. – А после путешествий фотографии город. А для этого надо подготовить- мально удобным, простым. И самое ся и попасть в нужный район, на нуж- главное, сделать так, чтобы человек на портале выкладываете? – Да, выкладываю. Практически все ную улицу. Ведь оказавшись в Москве, мог все, что у него есть в офф‑лаймои друзья в Mail.ru.Агенте, и я выкла- можно очутиться в Строгино… А мож- новом мире, перенести в Интернет но в правильных местах – на Поклонке, и без хлопот пользоваться. Чтобы дываю, чтобы они могли посмотреть. – Кстати, какая из последних по- Красной площади, Воробьевых горах. наш портал был максимально удобной ездок запомнилась? Вы ездили отды- Мне интересны уникальные вещи, то, и близкой обычному человеку средой чем этот город отличается от других. для общения. хать летом? – Что было самого уникального В этой среде пока обитает больше – У меня практически все путешесмолодых, но возрастная планка потвия связаны с работой. Отпуска очень в ЮАР? – Много уникального. Там два океа- вышается. И есть такой фокус: попав давно не было. Обычно только на Новый год стараюсь уехать куда-нибудь. на сливаются вместе. Есть полуостров, в Интернет, человек начинает чувствоХотя прошлый год встречал в Москве, с одной стороны теплый океан, с дру- вать себя моложе, словно приняв живительный эликсир. Может быть, секрет захотелось елочку, выступление пре- гой уже холодный. Недавно был в Пекине, посмотрел в том, что Интернет – среда для общезидента… Из последних командировок самая впечатляющая – ЮАР. Бы- заброшенный город, где император жил ния, именно оно омолаживает? Наверло очень много впечатлений. Я был со своими наложницами. Шанхай пон- ное… Во всяком случае когда я спров Кейптауне, Йоханнесбурге. Нас вози- равился. А вот Нью-Йорк не очень. Ур- сила Дмитрия, правда ли, что ему в були в саванну. Страшно жарко. Вы са- банистический город. Манхеттен – это дущем году стукнет тридцать, он как-то дитесь в джип вместе с вооруженными стриты, и поперек авеню. Единственная искренне удивился и посчитал в уме… – Ощущаете себя на 30 лет? людьми и совсем близко разглядывае- улица, которая выбивается из обще– Наверное, нет. На 25 плюс, нате диких животных. Там безумно краси- го порядка, идет наискосок – Бродвей. Все остальное идет ровно. Ощущение верное. вое небо, ночью все в звездах. Вот такое получается средство – Успеваете и дела сделать, и до- бетона, хотя красиво, интересно. Очень стопримечательности посмотреть в де- понравился Сан-Франциско, тоже вы- Макрополуса… сотный город, но при этом не настольловых поездках? Текст: Оксана Родионова, – Не всегда… В принципе я продви- ко небоскребный, тяжелый. Там набефото: Владимир Лукин нутый турист. Если приезжаю в какой- режная очень красивая. Он мне боль-
№8, август 2007
41
IP-телефония
Развертываем корпоративную телефонную сеть на основе технологии VoIP Часть 2
Рашид Ачилов Прочитав первую часть статьи (в №6 за 2007 г.), вы уже смогли собрать станцию и настроить её на работу в режиме одиночной УАТС. Но цель еще не достигнута. Осталось самое главное – объединить существующую и новую УАТС в общую сеть с одним номерным полем.
Нелирическое отступление Фактически все настройки станции – это таблицы, в которых хранятся те или иные значения. Когда станция решает, как ей поступить в той или иной ситуации, она просто открывает соответствующую таблицу, ищет по заданному ключу данные, на основании которых выполняет то или иное действие, и выполняет его.
42
На практике это означает чаще всего обращение к другой таблице, потом к третьей и т. д. Поначалу обилие этих таблиц, а также крайняя недружественность интерфейса OSM весьма сбивает с толку. И документация тут не помогает, разве что [7] содержит некоторые общие приемы программирования. В процессе программирования и диагностики постоянно исполь-
зуются СТА. Поскольку сообщения об ошибках на СТА, независимо от заданных региональных настроек, отображаются на английском языке, они будут приводиться именно так, как отображаются. Поэтому для удобства изложения, а также чтобы было на чем приводить примеры, я буду постоянно обращаться к рис. 1 – схеме придуманной мной сети из трех УАТС, одна из которых
IP-телефония (станция А) является существующей Сетевой (удаленный) номер – ностанцией модели OS500, а две других Терминология мер телефона из единого номерного по(станция В и станция С) – новые стан- Сегодня нам пригодятся термины: Значность номера – количество в нем ля, который физически находится на друции модели OS7200. Различие между станциями В и С в том, что станция цифр. В УАТС Samsung серии OfficeServ гой станции. Арендатор (tenant) – в УАТС Samsung В находится в одной локальной сети используются трехзначные либо четырехсерии OfficeServ используется концепсо станцией А и представляет прос- значные номера. Номерное поле – пространство теле- ция «арендаторов», позволяющая иметь то ее расширение, вынесенное за несколько километров, а станция С на- фонных номеров заданной значности, уни- два различных, совершенно независимых ходится в другом городе. Соответс- кальное в пределах данной станции или друг от друга набора настроек. Первый натвенно, у станции В нет своих тран- сети. Единое номерное поле обозначает, бор настроек считается принадлежащим ков, для выхода в город используются что две или более станций имеют общие «арендатору 1», второй «арендатору 2». транки станции А, а у станции С есть друг с другом телефонные номера, уни- Мы будем рассматривать только настройсвои транки, которые и используются кальные в пределах всех объединенных ки для «арендатора 1», для «арендатора 2» они совершенно идентичны. в сеть станций. для выхода в город. На рис. 1 приведены три наиболее Здесь надо заметить, что блоков щенных офисным АТС, все советы назначимые для настройки связи между УАТС MMC – 710, 820 и 824, а так- MGI может быть много. В OS7200 они чинаются с «обнови прошивки до посже небольшой фрагмент номерного расширяемые, на 4 платы по 4 кана- ледних версий». Для начала неплохо было бы узплана (MMC 724). Эти ММС приведе- ла. А в OS500 они нерасширяемые, ны для каждой станции для того, что- на 8 каналов каждый. Поэтому пе- нать, какие версии прошивок в данный бы можно было проследить их вза- ред тем как открыть голосовой тракт, момент установлены (напомню, что имосвязь. Поскольк у ни одна из- блок MCP вызывающей станции отда- в станции как минимум две независивестная мне документация по УАТС ет блоку MCP вызываемой станции ад- мые прошивки – в блоках MCP и MGI). Samsung OS не дает описания алго- рес блока MGI, в котором в данный мо- Проверить это можно в MMC 805 (см. рис. 4), в котором отображаются ритма обработки набора номера, я при- мент имеется свободный канал. Итак, настраиваем сетевой ин- версии прошивок всех блоков, уставожу собственную схему. Возможно, она не совсем точна, но она послужит терфейс MGI, для чего используем новленных в системе). При этом значение имеет не только нам для иллюстрации процесса обра- MMC 831 (см. рис. 3). Вот теперь можно подсоединить версия прошивки, указываемая в посботки набранного номера. Схема припатчкорд к разъему LAN блока MGI. леднем столбце, но и дата выпуска ведена на рис. 2. Следующим важным шагом в ра- прошивки, поскольку зачастую бываИтак, приступаем. боте с MGI будет проверка версии ет, что существует несколько прошиего прошивки и обновление, если она вок с одним номером версии, но с разОсновные настройки не самая последняя. ными датами выпуска. блока MGI и обновление Разумеется, это можно не делать, В станции на рис. 4 установлепрошивoк Начнем мы с настройки сетевого ин- но почему-то на всех форумах, посвя- ны версии прошивок – MCP – 2.66 терфейса блока MGI. Как я уже упоминал, блок MGI имеет собствен26 26 ный порт Ethernet. Поначалу это здо0&3 0&3 0*, 0*, рово сбивает с толку, но что касает6\V,' 6\V,' ɇɨɦɟɪɚ ɇɨɦɟɪɚ ся этого порта, нужно только запом нить, что все, что вам придется с ним 6(/) 6(/) 6<6 35,9$7( 6<6 35,9$7( делать, – это настроить ему IP-адрес, 6<6 35,9$7( 6<6 35,9$7( 1 /&5
маску подсети и шлюз. Остальное 1 /&5
1 /&5 1 /&5 1 /&5 станция сделает сама. ,QWHUQHW 12 <(6 1 /&5 12 <(6 На рис. 1 показан только один про 12 <(6 вод от каждой станции. На самом деле 12 <(6 ɋɬɚɧɰɢɹ Ⱥ это не так. Все блоки MCP и MGI всех 26 станций, находящихся в сети с единым ɋɬɚɧɰɢɹ & 0&3 0*, номерным полем, должны также нахо6\V,' ɇɨɦɟɪɚ диться в одной маршрутизируемой се ти, то есть пакеты с IP‑адресами любо6(/) 6<6 35,9$7( го из блоков должны достигать любо6<6 35,9$7( 1 /&5
го другого блока, поэтому каждая стан1 /&5 1 /&5 ция должна быть подключена к сети 12 <(6 12 <(6 ɋɬɚɧɰɢɹ % как минимум в двух точках – на блоке MCP и на блоке MGI (на всех блоках MGI, если их несколько). Рисунок 1. Схема имитационной модели корпоративной сети УАТС
№8, август 2007
43
IP-телефония
Рисунок 2. Алгоритм обработки набранного номера
44
от 20.07.2006 и MGI – 1.06 от 28.03.2005. На момент написания статьи это не последние версии прошивок, поэтому необходимо будет их обновить. Для обновления прошивки блока MCP можно воспользоваться как OSM, так и DFU, правда следует помнить, что файл загрузчика STARTUP.PRE можно обновить только через OSM. Каким способом воспользоваться, не имеет значения. Обновление прошивки с помощью OSM приводит к закрытию текущей сессии со станцией (см. рис. 5). При этом программа выдает соответствующий запрос. После закрытия сессии OSM считывает содержимое карты MMC, вставленной в блок MCP, и выдает ее оглавление (см. рис. 6). В данном случае на карте записаны три файла – прошивка блока LCP (LPP51212.PGM), прошивка блока MCP (MPPSV266.ZPG) и загрузчик прошивки (STARTUP.PRE). Файлов прошивок блоков может быть несколько, станция при загрузке выберет последнюю версию файла, файл STARTUP.PRE всегда один, при обновлении переписывается. Никогда не удаляйте файл STARTUP.PRE! Загрузить станцию в его отсутствие невозможно, единственное, что можно сделать, – взять другой носитель. Для замены прошивки блока MCP выбираем файл с расширением .ZPG, нажав на кнопку «Open». После выбора файла через стандартный диалог OSM определяет тип файла, подсвечивая его голубым цветом, а также выводит информацию о версии и дате изменения прошивки. После чего нажимаем кнопку «Upload» и выбранный нами файл сначала сгружается в память станции, а потом записывается на MMC (см. рис. 7). Если необходимо заменить файл STARTUP.PRE, поступают точно таким же образом, выбирая соответствующий файл. После этого станцию необходимо перегрузить. Замена прошивки блока MCP через программу DeviceFileUploader (DFU) требует начальной однократной настройки программы DFU. Если предполагается для обновления прошивки блока MGI использовать команды ручного режима в Telnet-интерфейсе (а такое возможно), то программу DFU можно не настраивать. В противном случае ее необходимо настроить, потому что прошить блок MGI с помощью программы OSM невозможно. DeviceFileUploader (DFU) – это программа, специально разработанная для автоматизации нудного процесса обновления прошивок. Ее интерфейс довольно понятен – в левой верхней части содержатся настроенные станции, расположенные в виде раскрывающегося дерева, в левой нижней – две закладки для сообщений о процессе обновления и информации о системе, в правой – поля для добавления систем и блоков систем, а также поля для указания путей к файлам прошивок. Общий вид окна DFU приведен на рис. 8. Единицей, которой оперирует программа, является device (устройство). Устройства объединяются в системы. Система соответствует станции, а устройство – блоку. Для прошивки с использованием DFU сначала необ-
IP-телефония ходимо настроить DFU. Настройка заключается в том, что нужно создать новую систему, задать ей IP‑адрес, а потом поочередно добавлять все требующие прошивки блоки – как правило это MCP и MGI. Настроенная программа DFU должна выглядеть так, как показано на рис. 9. При создании новой системы нужно задать ее IP‑адрес, в качестве которого обычно указывается адрес блока MCP. При добавлении блока MCP следует указать его IP-адрес и выбрать тип блока «MCP». При добавлении блока MGI следует указать его адрес и выбрать тип блока «MGI_7200», при этом автоматически подставляются имя и пароль по умолчанию для прошивки блока. После того как все устройства добавлены, для выполнения прошивки переходим к пункту меню «Transfer». Здесь мы видим все созданные нами устройства в виде списка. Выбираем блок MCP, выбираем исходный файл с прошивкой, для чего нажимаем на малозаметную кнопку с тремя точками справа от Program Dir/Files (см. рис. 10). После выбора следует нажать кнопку «Add», и процесс прошивки начинается немедленно, (см. рис. 11), хотя можно задать его выполнение в заранее выбранное время. Процесс прошивки блока MGI внешне ничем не отличается – точно так же выбирается файл и нажимается кнопка «Add» (см. рис. 12). На самом деле, конечно же, ничего таинственного в прошивке блока MGI нет. DFU загружает в определенном порядке файлы в блок MGI, используя FTP, а потом, используя Telnet, выполняет (опять же в определенном порядке) команды сохранения загруженных файлов в энергонезависимой памяти. Некоторые прошивки сопровождаются файлами документации, в которых расписывается процесс с указанием команд, которые исполняются. Но DFU делает это самостоятельно, избавляя от необходимости выполнять большое количество рутинной работы.
Рисунок 3. Установка параметров карты MGI
Рисунок 4. Просмотр версий прошивок программного обеспечения станции
Время вязать сети Ну вот, все готово для того, чтобы настроить объединение станций в сеть.
№8, август 2007
Рисунок 5. Запрос на закрытие сессии при обновлении прошивки через OSM
45
IP-телефония
Рисунок 6. Содержимое MMC-карты в станции
Рисунок 7. Запись новой прошивки на карту MMC в станцию
Рисунок 8. Общий вид окна программы DeviceFileUploader
46
Начнём с маршрутизации исходящих звонков как с более сложной части. Первым действием необходимо настроить номерной план (MMC 724), указав там первые цифры номеров, которые являются удаленными по отношению к данной станции. В конце плана нумерации есть специальный раздел N-LCR, в который заносятся первые цифры таких номеров. Младшие разряды номеров подразумеваются. Например, для станции А при занесении в N-LCR 43 подразумевается диапазон 4300-4399 (номера станции В). Пример раздела N-CLR MMC 724 приведен на рис. 13. Заполняем раздел N-LCR, как показано на схеме (см. рис. 1). Следует обратить внимание на то, что первоначальным источником информации о том, что было набрано на телефоне – номер, сервисная команда или еще что, является именно номерной план (MMC 724). Если номер не занесен в раздел N‑LCR – он никогда не будет обрабатываться как удаленный. Далее заполняем MMC 820. Эта таблица задает системные идентификаторы. Системный идентификатор – это группа из двух-трех цифр (значность определяется из возможного числа станций в сети, при двухзначном идентификаторе можно будет объединить в сеть максимум 99 станций, при трехзначном – 999), причем первая цифра не должна совпадать с используемыми в данном городе номерами телефонов (в противном случае их будет невозможно набрать). Если используются все номера, можно использовать цифру 0 (ноль), но тогда придется донастраивать станцию для набора номеров экстренного вызова. Мною была выбрана цифра «1». По умолчанию данная таблица не заполнена, в ней нужно прописать собственный идентификатор, который выбирается произвольно, исходя из упомянутого выше, а также идентификаторы и IP-адреса всех станций, на которые будут совершаться звонки по VoIP. Пример заполненной таблицы MMC 820 приведен на рис. 14. Отмечу также то, что указывать нужно в том числе и собственный адрес. Заполняем MMC 820, как показано на схеме (см. рис. 1). Далее заполняем MMC 824. Эта таблица устанавливает взаимосвязь меж-
IP-телефония ду номерным блоком из N-LCR и системным идентификатором из MMC 820, а также задает длину в разрядах номера телефона и максимальную (вместе с идентификатором) длину номера. Данная таблица служит исходной для поиска маршрута, по которому будет направлен вызов c помощью перехода от номера N-LCR к системному идентификатору. Пример заполненной таблицы MMC 824 приведен на рис. 15. Заполняем таблицу MMC 824, как показано на схеме на рис. 1. MMC 710, по которой производится выбор маршрута, содержит только идентификаторы других систем. Кроме того, в ней отмечена максимальная длина номера вместе с системным идентификатором и самая главная информация – номер таблицы маршрутизации LCR (MMC 712), на основании которой будет направлен вызов. Пример заполнения MMC 710 приведен на рис. 16. Данная таблица служит для перехода к номеру таблицы маршрутов от системного идентификатора. Для станций А и С заполняем MMC 710, как показано на рис. 16. Поскольку при включении LCR номера, которые не описаны в MMC 710, попросту игнорируются, здесь должны быть описаны все возможные комбинации (а их будет как минимум 10, потому что 10 цифр). Подробное описание таблицы в MMC 710 на рис. 16 приведено ниже. Строки 1-9 предназначены для звонков по коротким номерам аварийных служб. Вызовы направляются через таблицу маршрутов 2 (в которой будет прописана группа транков 800). Строка 10 направляет все вызовы с идентификатором 112 через группу транков 803 (таблица маршрутов 1). Для станции А эту строку заменить на первую строку из схемы, изображенной на рис. 1. Строки 11-16 направляют все вызовы на городские номера через таблицу маршрутов 2. Замечу, что здесь описаны городские номера длиной 6 знаков. Для городов, имеющих иную длину номеров, следует указать ее в столбце Length. Строка 17 описывает междугородние вызовы. Она аналогична предыдущим строкам, но задает максимальную длину номера 11 знаков.
№8, август 2007
Рисунок 9. Добавление MGI в DFU
Рисунок 10. Выбор файла для прошивки блока
Рисунок 11. Процесс обновления прошивки блока MCP
47
IP-телефония
Рисунок 12. Процесс обновления прошивки блока MGI
Рисунок 13. Раздел N-LCR плана нумерации системы
Рисунок 14. Пример заполненной таблицы MMC 820
48
Строка 18 описывает международные вызовы. Она аналогична предыдущим строкам, но задает максимальную длину номера 9 знаков. Строка 19 описывает обычные городские номера, начинающиеся на «9». Так же, как и в строках 11-16, при длине нумерации, большей или меньшей 6 знаков, задать соответствующее число в столбце Length. Для станции В, которая имеет такую особенность, как направление всех вызовов в город через транки станции А, заполняем MMC 710 так же, как показано на рис. 17. Дополнительно: Для станции В добавить последней строкой следующую запись: «114 7 1». Для станций А и С добавить следующую запись в MMC 710: «115 7 1». Далее необходимо заполнить другие таблицы из группы LCR, которые не имеют непосредственного отношения к доставке вызова – MMC 711 (таблица временных зон) и MMC 713 (таблица модификации номеров). MMC 713 необходимо заполнять только для станции В. MMC 711 реализует возможность направления в разные дни и/или в разное время суток вызовов по разным маршрутам. Поскольку мы не будем пользоваться такой возможностью, то создаем только одну временную зону, остальное стираем. Итого, таблица MMC 711 должна выглядеть так, как показано на рис. 18. Последнее, что необходимо сделать, – создать записи маршрутизации в MMC 712. MMC 712 – это даже не таблица в привычном представлении (двумерная), это трехмерная таблица, в которой по абсциссе – классы маршрутизации, по ординате – временные зоны, а по аппликате – номера таблиц. Нам из всей этой сложности нужно запомнить, что в MMC 710 записывается номер таблицы маршрутизации, где для первого класса маршрутизации для первой временной зоны указывается группа транков, через которую будет направлен вызов, остальные поля в таблице не заполняются. В итоге таблица маршрутов для направления вызова через каналы VoIP должна выглядеть так, как показано на рис. 19.
IP-телефония Изначально все внешние группы объединяются по следующему принципу: Все внешние линии (из блока 8TRK) – в группу 800. Все номера для связи по VoIP каналам (8301 – 8380) – в группу 803. Взаимосвязь между реальными каналами VoIP (3801-3899) и номерами для связи устанавливается автоматически, об этом совершенно не нужно думать, нужно просто считать, что для связи по VoIP используются номера 8301‑8380. Для направления вызова по VoIP каналам в MMC 712 вписывается группа 803. Для направления вызова через местные внешние линии (на станции С) создается таблица маршрутов номер 2, и в нее вместо группы 803 на то же место вписывается номер группы 800. Для станции В необходимо создать запись в таблице модификации номеров. Модификация номера нужна для того, чтобы пометить вызовы, идущие со станции В на станцию А, которые должны быть направлены на внешние линии станции А некоторым уникальным кодом, по которому они могли бы быть распознаны. Для этого создается запись в таблице MMC 713, как показано на рис. 20, и еще одна таблица маршрутов, показанная на рис. 21. На рис. 22 приведена схема передачи информации от одной MMC к другой при обработке набранного номера, если он был отнесен к N-LCR. Маршрутизация входящих звонков гораздо проще – все определяется MMC 724 и MMC 714, причем MMC 714 уже предварительно заполнена почти полностью (есть строки, определяющие прием вызовов на номера 2***, 3***, 5***, 8*** (здесь символ «звездочка» – не произвольный символ, а принятый в данном MMC способ обозначения состояния «любая цифра», то есть например 2*** обозначает 2000-2999). При своей кажущейся простоте эта MMC имеет чрезвычайно важное значение – комбинации номеров, отсутствующих в ней, просто отвергаются, абонент, набравший данный номер, получает «Занято». Поскольку по умолчанию большинство сервисных команд начинается на 4, записи о номерах 4000-4999 нет, и ее следует добавить. Буквы «В» в столбцах назначений означают направление вызова в соответствии
№8, август 2007
Рисунок 15. Пример заполненной таблицы MMC 710
Рисунок 16. Пример заполненной таблицы MMC 710
Рисунок 17. Пример заполнения таблицы MMC 710 для направления внешних вызовов через транки другой системы
49
IP-телефония с MMC 724. Кроме этого, здесь можно вписать любой номер, группу номеров и даже сервисную команду. Для станции А таблица MMC 714 дол ж н а и м ет ь в и д , п о ка з ан н ы й на рис. 23. Для станций В и С – такой же, но без последней строки.
Ключ на старт
Рисунок 18. Таблица временных зон
Рисунок 19. Таблица маршрутов для направления вызовов через каналы VoIP
Рисунок 20. Таблица MMC 713 для модификации номера для направления вызова через транки другой станции
50
Последнее, что нам осталось сделать, – это включить механизм маршрутизации LCR. Для этого нужно: n Включить собственно LCR. Это делается в MMC 210 (см. рис. 24). В отсутствии этой настройки станция игнорирует все MMC, связанные с маршрутизацией звонков, на СТА при наборе номера, который должен быть доставлен по маршруту может отображаться «invalid data» даже при полностью правильно заполненных таблицах. n Удалить цифру 9 из списка транковых групп в MMC 724 (раздел TRUNK GROUP) и назначить ее на команду LCR в разделе FEATURES. Это делается для того, чтобы пользователи, как и раньше, для звонка по городским линиям набирали «9 номер», но при этом использовались бы исключительно средства LCR (в отсутствие этой настройки при наборе цифры 9 происходил безусловный выход на первый свободный транк, настройки маршрутизации игнорировались). MMC 724, в котором цифра 9 удалена из групп транков, показана на рис. 25. n Отключить непосредственный доступ к транкам. В станции, кроме привычного «кругового» выхода на номера городских линий, когда при наборе цифры 9 подключается первая свободная доступная линия, есть еще возможность непосредственного подключения к порту той или иной городской линии путем непосредстенного набора ее номера. Для того чтобы заблокировать такую возможность и разрешить выход на городские линии только через LCR, необходимо отключить ее в MMC 300. Здесь надо отметить то, что заблокировать прямой доступ к транкам можно индивидуально для каждого АК. Пример настройки показан на рис. 26.
IP-телефония Последние два пункта вообщето не являются обязательными, если станция не имеет маршрутизации звонков по городским номерам с помощью двух или более маршрутов, но инженеры сервисных служб, профессионально занимающиеся настройкой АТС Samsung OfficeServ, не рекомендуют оставлять эти настройки в значении по умолчанию или использовать в одной сети станции, использующие LCR и станции, в которых «9» является транковой группой.
Возможные ошибки Здесь для возникновения ошибок невероятный простор. Проблема усложняется еще и тем, что хоть скольконибудь сносные средства диагностики напрочь отсутствуют, хотя в некоторой степени диагностику можно получить, используя СТА с обеих сторон. При анализе ситуации следует помнить, что на самом деле проблемы в соединении могут возникать на любом из четырех этапов установления соединения с абонентом: n установление соединения при приеме вызова; n с о з д а н и е гол о с о в о го к а н а л а при приеме вызова; n установление соединения при посылке вызова; n создание голосового канала при посылке вызова.
Рисунок 21. Таблица маршрутов для направления вызовов через транки другой станции
00& 00&
00&
00&
00& Рисунок 22. Последовательность передачи информации
Все ошибки, разумеется, перечислить невозможно. Я опишу только те, с которыми сталкивался сам.
Установление соединения при посылке вызова При наборе номера сразу слышен повторяющийся частый сигнал «ошибка станции». Как правило, причина – грубая ошибка в настройках – не включен LCR на приемной станции, не заполнена какая-либо из необходимых таблиц (все описанные выше MMC необходимо полностью заполнить). На СТА в таком случае может отображаться «invalid data» («неверные данные»). При наборе номера станция на некоторое время замолкает, потом подает сигнал «Занято», на СТА может отображаться «out of order» («не-
№8, август 2007
Рисунок 23. Пример заполнения таблицы MMC 714
51
IP-телефония TCP/UDP-порты, используемые АТС Samsung OfficeServ Сервис
Номер порта
Протокол
Примечание
SPnet (Сеть VoIP)
6100 1024 ~ 4999
TCP TCP
Для установления соединения Для управления соединением
Интерфейс IP-телефона (системная часть)
6000 1024 ~ 4999
TCP/UDP UDP
Для установления соединения Сигнализация IP-телефона (приемник) Сигнализация IP-телефона (источник)
Шлюз H.323
1719 1720 1024 ~ 4999
UDP TCP TCP
Для соединения с привратником VOIP Для установления соединения Для управления соединением
Шлюз SIP
5060
UDP
Для установления соединения
Блок MGI 2,3, SMGI3
30000~30030 30000~30031
RTP RTCP (также UDP)
Четный порт: RTP для каждого канала MGI Нечетный порт: RTCP для каждого канала MGI
IP-телефон (часть телефона)
6000 9000, 9001
UDP RTP,RTCP
Сигнализация для MCP Голосовые данные для MGI или ITP
LAN: PCMMC/OSM
5000, 5003, 5200
TCP
PCMMC/OSM-соединение
OfficeServ SM
5001
TCP
OfficeServ 7200 SM-соединение
CTI
5002
TCP
CTI-соединение
Обновление программ
5003
TCP
Обновление программ на носителе SM/MMC
Аварийная M&A
5010
TCP
Аварийные состояния на удаленный M&A
Новости OfficeServ
5012
TCP
Сервер новостей OfficeServ
SMDR-печать
5100
TCP
SMDR-вывод на печать
UCD-печать
5101
TCP
UCD-вывод на печать
Отчет о трафике
5102
TCP
Отчет от трафике
Аварийные сообщения
5103
TCP
Системные аварийные сообщения
Просмотр UCD
5104
TCP
Вывод просмотра UCD
Периодический UCD
5105
TCP
Периодический вывод UCD
Гостиничный отчет
5106
TCP
Вывод гостиничного отчета
Централизованный M&A
5110
TCP
M&A отчет на централизованный M&A
echo. Если она не получает ответ icmp echo (как раз на это время она замолкает) – считается, что станция назначения недоступна. При наборе номера посылка вызова начинается через 5 – 10 секунд после набора последней цифры. Характерный признак того, что в MMC 710 для данного направления указано неверное (слишком большое) количество цифр. Станция ждет еще одну цифру определенное время, потом считает, что набор закончен, и отправляет в выбранную линию набранный номер. Наоборот, если посылка вызова уже начинается, хотя вы еще набираете номер – верный признак того, что в MMC 710 указана слишком малая длина номера. При наборе городского номера отсутствует посылка вызова, при наборе того же номера с кодом города (то есть полного 10-значного номера) посылка вызова идет нормально. Такое может происходить, если внешний транк предоставляется не ГТС, а сторонним провайдером. Такие провайдеры привлекают клиентов низкими ценами, которые они держат за счет VoIP и предоставления местным клиентам номеров другого города. А поскольку это противоречит закону «О связи», то исходящий наружу звонок, как правило, отображается номером, который не имеет никакого отношения к тому, который выделяется провайдером.
Создание голосового канала при посылке вызова
Рисунок 24. Включение LCR
работоспособно») – станция назначения, на которую направляется вызов, в настоящий момент выключена, либо доступ к портам, используемым VoIP (или icmp) перекрыт пра-
52
вилами брандмауэра. Icmp необходимо разрешать, потому что перед тем как установить соединение по порту 6000, вызывающая станция посылает на станцию назначения запрос icmp
Если вызываемый абонент получает звонок на свой телефон, но при подъеме трубки ничего не слышно – скорее всего ошибка в сетевых настройках блока MGI. Как я уже говорил ранее, все блоки MCP и MGI должны находиться в одной сети. Когда вызванный абонент поднимает трубку, вызывающая станция сообщает вызываемой, по какому адресу у нее находится блок MGI, в котором есть свободный канал для связи, и вызванная станция своим блоком MGI устанавливает соединение. Для работы голосового канала используются стандартные порты протокола RTP/RTCP – 30000‑30030.
IP-телефония Следует проверить правильность настроек, несмотря на банальность данного совета, а также правила брандмауэров.
Установление соединения при приеме вызова Одна из самых нелепых ошибок, приводивших к тому, что принимаемые вызовы отвергались – это отсутствие записи о данной группе номеров (4***) в MMC 714. Поскольку по умолчанию в группе 4*** размещаются сервисные команды, то он и не заносится по умолчанию. Поэтому нужно внимательно проверить MMC 714 на предмет правильности прописания всех блоков номеров, которые могу поступить на вход станции.
Создание голосового канала при приеме вызова При ответе на входящий звонок ничего не слышно, на СТА может отображаться «out of order» («неработоспособно»). В дополнение к упомянутому при создании голосового канала при посылке вызова следует проверить одинаковость системных идентификаторов и правильность соответствия IP‑адресов в MMC 710, 820 и 824. Идентификатор SELF каждой станции должен совпадать с заданным для него значением в MMC 820 на других станциях. При ошибке станция может попытаться установить канал с другой станцией, которая этого вовсе не запрашивала.
Рисунок 25. Удаление цифры «9» из транковых групп
Заключение На самом деле все изложенное здесь кажется сложным только в первый раз. После включения в общую сеть Рисунок 26. Блокировка прямого доступа к транкам третьей-четвертой станции вам уже 2. GANA-000012, ред. 001 Officeserv 7200. Эти вопросы решаются по большей не понадобятся никакие руководства, Руководство по установке – http:// пожалуй, за исключением [3], кото- части изучением одной-двух MMC, коwww.samsungdocs.com. рая еще долго будет вашей настоль- торые уже описаны и достаточно хорошо в [3]. Но данная статья, я наде- 3. GABD-000131, ред. 001 OfficeServ 7200. ной книгой. Руководство по программированию – Мы обошли множество вещей – юсь, помогла вам для решения конкhttp://www.samsungdocs.com. ограничение звонка по длительнос- ретной задачи обьединения станций 4. http://www.samsung.ru. ти, использование групп перехвата в одну сеть. 5. http://www.miacom.ru. и приоритетов вторжения в разговор, 6. http://forum.officeats.ru. программирование передачи звон- 1. GABD-000038, ред. 001 OfficeServ 7 2 0 0 . О б щ е е о п и с а н и е – ht t p: // 7. h t t p : / / c i t y c a t 4 . l a n d . r u / ка при поступлении внешнего вызова, iDCS500_miakom.pdf. www.samsungdocs.com. программирование СТА...
№8, август 2007
53
IP-телефония
Всё, что вы хотели знать о протоколе SIP Часть 2
Андрей Погребенник Повышение уровня интеллекта устройств, образующих сеть, означает разработку для них ряда специализированных протоколов. Это, а также необходимость реализации логики новых услуг, повышает входной барьер для не знакомого с предметной областью инженера. 54
IP-телефония Протокол описания сеанса SDP Как вы уже знаете, протокол SIP не используется для описания параметров сеанса, таких как вид информации (речь, видео и т. д.), кодек или частота дискретизации. Вместо этого тело сообщения SIP содержит характеристики сеанса, описанные с помощью специального протокола описания сеанса SDP (Session Description Protocol) или (теоретически) другого протокола, выполняющего те же функции. Роль протокола SDP в сети SIP аналогична роли протокола H.245 в сетях H.323. Возможность отделения функций управления установлением сеанса от процесса согласования характеристик сеанса – очень важное свойство протокола SIP, позволяющее использовать для установления сеанса вспомогательный протокол любого типа. SDP – это протокол описания параметров сеанса для передачи потоковых данных. Своё первое применение он нашёл в качестве средства анонсирования информации о мультимедийных конференциях в экспериментальной академической сети Mbone (Multicast backbone). Первое описание протокола было опубликовано Инженерной проблемной группой Интернета (IETF) как RFC 2327 в апреле 1998 года, а на сегодняшний день актуален RFC 4566. Любая реализация протокола SIP обязана поддерживать и SDP. Для договора о характере сеанса SIP использует модель предложения и ответа (offer/answer model). Один агент пользователя (UA) посылает описание сеанса, в котором предлагает желаемый способ коммуникации (аудио, видео, игра) и соответствующие типы кодека (кодер/декодер), а также адреса для принятия определённого вида основной информации (медиа). Другой UA в ответе перечисляет, какие из предложенных средств коммуникации приемлемы, и приводит адреса, на которых будут приниматься эти приемлемые виды информации. В процессе сеанса, используя ту же модель, UA может менять договорённые параметры. Как и в SIP, в протоколе SDP применяется текстовое кодирование информации. Сообщение описания сеанса состоит из набора строк, которые следуют в определённом порядке (в отличие от SIP, порядок здесь имеет значение). Правила, указывающие порядок следования строк, достаточно строгие, но для обеспечения расширяемости протокола неизвестные атрибуты должны игнорироваться. Описание сеанса состоит из описаний уровня сеанса (детали, относящиеся к сеансу в целом и ко всем медиа-потокам) и нескольких необязательных описаний уровня медиа-носителя (детали, относящиеся к отдельному медиа-потоку). Рассмотрим типичный пример SDP-сообщения: v=0 0=CiscoSystemsSIP-GWUserAgent 762 3453 IN IP4 10.15.1.6 s=SIP Call c=IN IP4 10.15.1.6 t=0 0 m=audio 16952 RTP/AVP 18 100 a=rtmap:18 G729/8000 a=rtmap:100 X-NSE/8000 a=ptime:10
В таблице 1 дано пояснение каждой строки. Каждая строка является обязательной, если не указано обратное. Описание сеанса для одновременной передачи голоса и видео может выглядеть следующим образом:
№8, август 2007
v=0 o=alice 2890844526 2890844526 IN IP4 10.1.3.33 c=IN IP4 10.1.3.33 t=0 0 m=audio 49172 RTP/AVP 0 a=rtpmap:0 PCMU/8000 m=video 51172 RTP/AVP 31 34 a=rtpmap:31 H.261/90000 a=rtpmap:34 H.263/90000
Обратите внимание: первые четыре строки являются описанием уровня сеанса, а строки a= – описаниями уровня медиа-носителя. При этом каждая новая m-строка обозначает начало нового медиа-потока.
Использование SDP в SIP Основным документом, нормирующим использование SDP в SIP, является RFC 3264. Упомянем его основные положения: n Вызывающий абонент включает SDP-описание в запросы INVITE или ACK. Вызываемый абонент обязан включить SDP-описание в тело отклика «200 OK» или промежуточных откликов 180/183. В общем случае SDP-описания могут содержаться также и в запросах UPDATE (RFC 3311) и надёжных промежуточных ответах PRACK (RFC 3262). Модель взаимодействия (описываемая как offer/answer-модель) предусматривает возможности как подтверждения SDP-описания, предложенного другой стороной, так и отказа от него, что не нарушает целостность сеанса. n Модель взаимодействия налагает жёсткие ограничения на использование и изменение потоков. В частности, новые потоки могут порождаться в новых запросах, но потоки не могут удаляться. Это вызвано тем, что нет средства определения потоков по их наименованию, а их однозначная идентификация возможна только порядковым номером в пределах описания. С другой стороны, поток может замещаться другим потоком с тем же порядковым номером. RFC явно рекомендует связывать потоки с их применением, а не с форматом данных или другими параметрами. n Принимающая сторона, если она приняла описание потоков в виде SDP, должна использовать тот же состав потоков. Есть и другие ограничения.
Протоколы RTP (Real-time Transport Protocol) и RTCP (RTP Control Protocol) В приложениях реального времени отправитель генерирует поток данных с постоянной скоростью, и получатель(-и) должен предоставлять эти данные приложению с той же самой скоростью. Такие приложения включают аудио- и видеоконференции, распространение живого видео (для немедленного воспроизведения), разделяемые рабочие области, удалённую диагностику в медицине, компьютерную телефонию, распределенное интерактивное моделирование, игры и мониторинг в реальном времени. Протокол TCP в таких приложениях не приемлем ввиду своих свойств. TCP не гарантирует время доставки, а повторно переданные пакеты, которые в приложениях реального времени уже не несут актуальной информации, ещё и сужают полосу актуальной передачи, что увеличивает нерав-
55
IP-телефония
Рисунок 1. Место RTP в стеке протоколов TCP/IP
номерность передачи потока. Другой широко используемый протокол транспортного уровня, UDP, не имеет этих двух ограничений, но и он не предоставляет критически необходимой для приложений реального времени информации о синхронизации. UDP сам по себе не предоставляет каких-либо инструментов общего назначения для создания приложений реального времени. Несмотря на то что каждое приложение реального времени может иметь свои собственные механизмы для поддержки передачи в реальном времени, они имеют много общих черт, а это делает определение единого протокола весьма желательным. Потому в 1996 году в RFC 1889 были представлены протоколы RTP и RTCP. Актуальные на сегодняшний день версии описаны в RFC 3550.
Протокол RTP Это протокол транспортного уровня, который работает поверх UDP (cм. рис. 1) и гарантирует доставку данных одному или более адресатам с задержкой в заданных пределах. Это означает, что данные могут быть воспроизведены в реальном времени.
Функции RTP Протокол RTP предусматривает такие функции: n Идентификация отправителя – каждый RTP-пакет содержит идентификатор отправителя, указывающий, кто из участников генерирует данные. n Идентификация типа полезной нагрузки – специальное поле идентифицирует формат трафика RTP и определяет его интерпретацию приложением. Типы полезной нагрузки RTP приведены в таблице 2.
56
n Определение порядка и момента декодирования каждого пакета. На стороне-отправителе каждому исходящему пакету присваивается временная метка и порядковый номер. На принимающей стороне эти данные указывают на то, в какой последовательности и с какими задержками их необходимо воспроизводить, а также позволяют интерполировать потерянные пакеты. n Обнаружение потерянных пакетов – порядковые номера делают возможным и это. n Синхронизация – использование временных меток делает возможным синхронное воспроизведение мультимедийных данных. Замечу, что RTP сам по себе не обеспечивает качества услуг (QoS) и не гарантирует корректную доставку данных. Пакет RTP включает в свой состав фиксированный заголовок, необязательное расширение заголовка переменной длины и поле данных. Забегая вперёд, скажу, что пакет RTCP имеет следующую структуру: начи-
нается с фиксированной части (подобной фиксированной части информационных пакетов RTP), за которой следуют структурные элементы, имеющие переменную длину согласно типу пакета. В соответствии с протоколом RTP трафик различных типов должен передаваться отдельно, в разных сеансах связи RTP. Сеанс определяется конкретной парой транспортных адресов назначения (один сетевой адрес плюс пара портов для RTP и RTCP). Например, в телеконференции, составленной из звукового и видеосигнала, кодированных отдельно, трафик каждого типа нужно передавать в отдельном сеансе RTP со своим собственным транспортным адресом назначения. Не всегда все участники конференции имеют возможность получать мультимедийные данные в одинаковом формате. Если новая система хочет принять участие в сеансе, но её канал не обладает достаточной пропускной способностью, помочь может специальное устройство, реализующее механизм трансляции RTP и называемое микшером. Микшер повторно синхронизирует входящие звуковые пакеты от одного или более источников для восстановления исходных интервалов голосового потока (см. врезку «Качество голосовой связи в среде IP»), микширует эти восстановленные звуковые потоки в один поток, производит кодирование звукового сигнала для узкой полосы пропускания и передает поток пакетов через низкоскоростную линию связи одному или более получателям. Чтобы в приёмных узлах можно было иметь правильную индикацию источника сообщений, заголовок RTP включа-
Таблица 1. Список типичных полей SDP в их правильном порядке Атрибут
Назначение атрибута
v=0
Используемая версия протокола SDP
0=CiscoSystemsSIP-GWUserAgent 762 3453 IN IP4 10.15.1.6
Информация об инициаторе вызова, включая тип агента UA, тип сети и контактное имя
s=SIP Call
Имя сеанса
c=IN IP4 10.15.1.6
Информация о типе среды – используемом типе протокола и адресе соединения. Под адресом соединения понимается адрес отправляющего агента UA
t=0 0
Время начала и остановки сеанса
m=audio 16952 RTP/AVP 18 100
Описание медиа-потока: тип среды и транспортный порт (16952), которые будут использоваться для вызова. Всё, что следует ниже, касается только этого медиа-потока
a=rtmap:18 G729/8000 a=rtmap:100 X-NSE/8000 a=ptime:10
Необязательные атрибуты медиа-потока. В данном случае одним из таких атрибутов является кодек (G729)
IP-телефония ет средства опознавания источников, участвовавших в формировании сме- Качество голосовой связи шанного пакета. Также микшер может в среде IP На качество аудиотракта оказывают влиизменять формат данных. Более простое устройство создает яние следующие факторы: выбор кодека, один исходящий пакет RTP для каждо- выбор параметров пакетизации голосого поступающего пакета RTP. Этот ме- вой информации и качественные показаханизм, называемый транслятором, тели каналов передачи данных. В таблице 3 представлены типы кодеможет изменить формат данных в пакете или использовать иной комплект ков и их параметры. Естественно, что больнизкоуровневых протоколов для пере- шое значение имеет экономия полосы, дачи данных из одного домена в дру- но кроме этого необходимо помнить о кагой. Например, потенциальный получа- честве голоса. В таблице также представтель может оказаться не в состоянии лен параметр средней экспертной оценки обрабатывать высокоскоростной виде- (Mean Opinion Score, MOS), который опреосигнал, используемый другими учас- деляет среднюю оценку качества голоса, тниками сеанса. Транслятор конверти- полученную экспертным путем. Наивысрует видео в формат пониженного ка- ший балл – 5, низший балл – 1, при этом: баллы 4-5 показывают эталон качестчества, требующий не такой высокой ва, так называемое, toll-quality; скорости передачи данных. баллы 3-4 – уровень приемлемого комДля того чтобы протокол RTP муникационного качества; был более гибким и мог применяться для различных приложений, неко- баллы ниже 3 – это синтетическое качество. торые его параметры сделаны преднамеренно недостаточно строго опПараметр MOS дает субъективную ределёнными, но зато в нём предусмотрено понятие профиля. Профиль – оценку, но эта методика является офиэто набор параметров протоколов RTP циальной, она описывается в докумени RTCP для конкретного класса при- тах ITU. В IP-телефонии чаще других испольложений, определяющий особенности их функционирования. В профи- зуются кодеки G.711 (64 Кбит/с), G.729 ле определяется использование отде- (8 Кбит/с) и G.723 (5,3 Кбит/с). В лабораторных условиях G.711 обесльных полей заголовков пакетов, типы трафика, дополнения к заголов- печивает наилучшее качество голоса, кам и расширения заголовков, типы но в IP-среде занимает с учётом накладпакетов, услуги обеспечения безопас- ных расходов RTP/UDP/IPv4 полосу проности связи, особенности использова- пускания 80-120 Кбит/с. Кодек G.729 делает возможным бония протокола нижележащего уровня и т. д. Каждое приложение обычно ра- лее эффективное цифровое представботает только с одним профилем, сле- ление речи, передавая в цифровом видовательно, полная спецификация RTP де не сам сигнал, а его параметры (колидля конкретного приложения должна чество переходов через ноль, спектральвключать дополнительные документы, ные характеристики и др.), чтобы затем к которым относятся описание профи- по этим параметрам выбирать модель голя, а также описание формата трафи- лосового тракта и синтезировать исходка, определяющее, как трафик конк- ный сигнал. Кодер оперирует с кадрами ретного типа, такой как аудио или ви- речевого сигнала длиной 10 мс, дискредео, будет обрабатываться. При этом тизованными с частотой 8 КГц. Восстаодин и тот же формат трафика может новленная речь достаточно хорошо соотиспользоваться для множества профи- ветствует оригиналу. По методу MOS при лей и может быть определён незави- существенном сжатии его качество воспроизводимого голоса оценивается лишь симо от профиля. Протоколу RTP не требуется стан- на 0,2 балла ниже, чем G.711. G.729 сегоддартный или статический TCP- или ня является доминирующим в использоваUDP-порт для связи. RFC 3551 ука- нии типом кодека. Значительное влияние на используезывает, что RTP-подключения осуществляются через UDP-порт с чет- мую полосу оказывает параметр пакетиным номером, а порт с нечётным но- зации, или временной интервал речевого мером, следующим в порядке возрас- сигнала, который будет передаваться в од-
№8, август 2007
ном IP-пакете. При меньшем значении параметра увеличиваются устойчивость качества восстановления речи при пропадании пакетов и уменьшаются задержки, но значительно увеличивается полоса. При использовании большего значения потребляемая полоса уменьшается, но ухудшается качество речи после восстановления от потери пакетов. Оптимальные значения интервала пакетизации находятся в пределах 20-30 мс. Для ликвидации вариации задержки на приёмной стороне организуется деджитер-буфер. В результате IP-пакеты, пришедшие с задержкой, в рамках величины деджитер-буфера (например, 80 мс), занимают своё место и, таким образом, не теряются. Этот способ используется практически всеми производителями VoIP-оборудования, а многие из них предлагают динамически изменяемый деджитер-буфер. Пожалуй, самым важным фактором, влияющим на качество передачи голоса через IP, является качество каналов передачи. Достичь хороших показателей качества обслуживания (QoS) позволяют маркировка трафика (IP precedence, DSCP), классификация пакетов, механизмы: очередей с низкой задержкой (Low Latency Queuing, LLQ), фрагментации и чередования пакетов (Link Fragmentation and Interleaving, LFI), сглаживания трафика (traffic shaping), обнаружения речевой активности (Voice Activity Detection, VAD), сжатия RTP-заголовков. О сжатии RTP-заголовков следует сказать следующее. Цепочка инкапсуляций RTP/UDP/IPv4 приводит к существенным накладным расходам. Кодек G.729 генерирует пакеты размером в 10 байт (80 битов каждые 10 мс). Один RTP-заголовок, размером в 12 байтов, больше, чем весь этот пакет. К нему, кроме того, должен быть добавлен 8-байтовый UDP-заголовок и 20-байтовый IPv4‑заголовок, что создает заголовок, в четыре раза превосходящий по размеру передаваемые данные. Только 20% фактически переданных битов – данные пользователя. Предложенный IETF-алгоритм сжатия заголовков cRTP (compressed RTP) при передаче речи по IP способен сжимать 40‑байтовые заголовки RTP/UDP/IPv4 до 2 или 4 байт. Его принцип действия основывается на том факте, что многие поля заголовков в передаваемых пакетах повторяются от пакета к пакету.
57
IP-телефония Таблица 2. Типы полезной нагрузки аудио и видео в RTP
ременные. Односторонняя задержка в диапазоне 0‑150 миллисекунд, согласно рекомендации ITU-T G.114, является допустимой для большинства приложений. Задержка величиной 150‑400 мс ещё не оказывает сильного влияния на качество воспроизведения речи и приемлема для большинства приложений. Что касается количества потерянных пакетов, то для голосовых звонков этот показатель не должен превышать 1%, но при передаче факсимильных сообщений потеря пакетов не допустима вообще. Наконец, допустимые значения вариации задержки – до 30 мс.
Идентификатор типа
Кодек
Частота дискретизации, Гц
Описание
0
PCMU
8000
ITU G.711 PCM µ-Law Audio 64 Kbps
1
1016
8000
CELP Audio 4.8 Kbps
2
G721
8000
ITU G721 ADPCM Audio 32 Kbps
3
GSM
8000
European GSM Audio 13 Kbps
5
DVI4
8000
DVI ADPCM Audio 32 Kbps
6
DVI4
16000
DVI ADPCM 64 Kbps
7
LPC
8000
Experimental LPC Audio
8
PCMA
8000
ITU G.711 PCM A-Law Audio 64 Kbps
9
G722
8000
ITU G.722 Audio
10
L16
44100
Linear 16-bit Audio 705.6 Kbps
11
L16
44100
Linear 16-bit Stereo Audio 1411.2 Kbps
14
MPA
90000
MPEG-I or MPEG-II Audio Only
15
G728
8000
ITU G.728 Audio 16 Kbps
25
CELB
90000
CelB Video
Функции RTCP
26
JBEG
90000
JBEG Video
28
NV
90000
nv Video
31
H261
90000
ITU H.261 Video
32
MPV
90000
MPEG-I and MPEG-II Video
33
MP2T
90000
MPEG-II transport stream Video
Можно выделить три функции протокола RTCP: n Обеспечение мониторинга качества услуг и управления перегрузками канала. Это то, о чём мы говорили вначале: сообщения RTCP содержат информацию о проблемах, включая потери пакетов и избыточную неравномерность передачи. n Идентификация источника. Пакеты RTCP содержат стандартное текстовое описание отправителя. Это даёт пользователю возможность идентифицировать потоки, относящиеся к различным сеансам. n Оценка размеров сеанса. Для обеспечения обратной связи все участники конференции периодически посылают пакеты RTCP. Частота передачи этих пакетов снижается с ростом числа участников. При небольшом числе участников один пакет RTCP посылается максимум каждые 5 секунд.
Таблица 3. Типы кодеков и их параметры Методы компрессии
Стандарт ITU
Полоса, Кбит/с
Оценка MOS
Величина кадра, мс
PCM
G.711
64 (DS0)
4.1
0.75
ADPCM
G.726
32
3.85
1
LD-CELP
G.728
16
3.61
3-5
CS-ACELP
G.729
8
3.9
10
CS-ACELP
G.729a
8
3.85
10
MP-MLQ / ACELP
G.723.1
6.3/5.3
3.8/3.75
10
тания, используется протоколом RTCP. RTCP несёт такую информацию, как Хотя не существует стандартных на- число переданных и полученных пакезначений диапазона портов для RTP/ тов, число потерянных пакетов, велиRTCP, обычно используется диапазон чины задержки и вариации задержки 16384-32767. (джитера). Последний термин нуждается в дополнительном разъяснении. Вариация задержки – это величина, Протокол RTCP Это протокол, предоставляющий при- характеризующая неравномерность ложениям, работающим по протоколу передачи, выражающуюся в наличии RTP, механизмы обмена управляющей переменной задержки между прибыинформацией, подтверждения достав- тием и иногда – в нарушении порядка Чтобы обеспечить выполнение всех ки RTP-пакетов, мониторинга состоя- доставки пакетов. этих функций, участники сеанса обмения сети и реагирования на изменения Одностороннюю же задержку об- ниваются специальными управляюв ней. Например, получив информацию разуют такие составляющие, как: за- щими сообщениями протокола RTCP. о повышении интенсивности трафика держки, вносимые процессами коди- Кратко опишу кратко пять их типов. в сети и уменьшении выделенной при- рования и декодирования, задержки Пакеты отчёта RTCP, обеспечиложению полосы пропускания, прило- пакетизации, формирования очере- вающие обратную связь – оценку кажение может отреагировать и умерить ди, задержки при передаче в канал, чества приёма, могут принимать одну свои требования к полосе пропуска- задержки распространения по кана- из двух форм в зависимости от того, ния за счёт некоторой потери качес- лу и латентность буфера сглажива- является получатель также и отправитва. После снижения нагрузки в сети ния вариации задержки (деджитер- телем или нет: Report (RR) или Sender приложение может восстановить ис- буфер, этот механизм описан во врез- Report (SR). ходную полосу пропускания и продол- ке «Качество голосовой связи в среОтчёт отправителя – Receiver жить работу с тем качеством, какое оно де IP»). При этом некоторые составля- Report (RR). Эти пакеты создаются предоставляло вначале. Сообщение ющие постоянные, а некоторые – пе- участниками сеанса, не являющими-
58
IP-телефония ся активными отправителями. Они содержат такую информацию, как подтверждение получения пакетов, данные о рассинхронизации входящих пакетов и задержку, связанную с подтверждением приёма. Отчёт получателя – Sender Report (SR). SR передаётся, если участник сеанса посылал любые пакеты данных в течение интервала, начиная с передачи последнего или предыдущего отчёта, в противном случае передается RR. Единственное отличие между формами отчёта отправителя и отчёта получателя, помимо кода типа пакета, – это то, что отчёт отправителя включает 20‑байтовый раздел информации отправителя для использования активными отправителями. Этот раздел вклюРисунок 2. Трёхсторонняя конференция через агента Bob чает данные о внутренней аудиовизуальной синхронизации и количестве отправленных пакетов и байтов. Пакет описания источника – Source Description Items (SDES). Пакеты этого типа содержат информацию об участниках сеанса. Пакет завершения связи – BYE. Это «прощальный» пакет, с помощью которого пользователь отключается от сеанса. Пакет, определяемый приложением – APP. Пакет APP предназначен для экспериментального использования при разработке новых приложений Рисунок 3. Параллельный вызов и программных средств без регистрации новой величины типа пакета. Па- и коммуникаций, протокол SIP вобрал ма одновременной отправки и прикеты APP с нераспознанными именами в себя множество расширений, дела- ёма «sendrecv» на режим отправки должны игнорироваться. После испы- ющих возможным предоставление бо- «sendonly». В «200 OK» от второй стотания, если оправдано более широкое лее сложных услуг. В оставшейся части роны будет соответственно «recvonly» использование, рекомендуется, чтобы статьи мы кратко рассмотрим базовые (только приём). После установления сессии #2 каждый пакет APP был переопределён свойства и расширения SIP, делающие без полей подтипа и имени и зарегист- возможным предоставление как при- первые два пользовательских агенрирован в IANA с выделением для него вычных для традиционной телефонии, та проводят ещё один цикл пересогласования для перехода в режим нового типа пакета RTCP. В пакет вхо- так и мультимедийных услуг. «sendrecv». дят сведения о специфических функС этого момента конференцию Удержание вызова циях приложения. можно считать установленной. Заметим, что и здесь есть новые и трёхсторонняя конференция разработки: так, в RFC 3611 описан На рис. 2 показаны сразу две важные тип пакетов Extended Report (XR), ко- услуги: удержание вызова и трёхсто- Параллельный вызов Следующей расширенной услугой SIPторый предусматривает сбор статис- ронняя конференция. П е р е в од н а уд е рж а н и е в ы з о - телефонии, на которой мы остановимтической информации по двадцати параметрам сетей передачи данных и ка- ва осуществляется отправкой удер- ся, является «параллельный вызов» живающим пользовательским аген- (Call Forking). Суть заключается в том, честву голоса. том сообщения re-INVITE (напомню, что прокси-сервер «размножает» вхочто от простого INVITE его отличает дящий INVITE на несколько пользоваРеализация наличие тега в поле To и возросший тельских агентов (см. рис. 3). расширенных услуг Например пользователь может запорядковый номер в CSeq), запрашина базе протокола SIP Будучи протоколом эпохи конверген- вающего в SDP переключение режи- хотеть, чтобы входящий вызов посыции онлайновой работы, развлечений ма передачи медиа-потока из режи- лался на его домашний, а затем мо-
№8, август 2007
59
IP-телефония REFER sip:alice@atlanta.com SIP/2.0 Via: SIP/2.0/UDP swp34.biloxi.com;branch=z9hG4bKna9 Max-Forwards: 70 To: <sip:alice@atlanta.com>;tag=a6c85cf From: <sip:bob@biloxi.com>;tag=1928301774 Call-ID: a84b4c76e66710@pc33.atlanta.com CSeq: 10187 REFER Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, UPDATE Supported: replaces Refer-To: <sip:carol@chicago.com> Contact: <sip:bob@swp34.biloxi.com> Content-Length: 0 INVITE sip:carol@chicago.com SIP/2.0 Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9VHJ23J41 Max-Forwards: 70 To: <sip:carol@chicago.com> From: <sip:alice@atlanta.com>;tag=0616052ue Call-ID: a84b4c76p0lk234@pc33.atlanta.com CSeq: 6187 INVITE Contact: <sip:bob@swp34.biloxi.com> Content-Length: 147
Информация о присутствии Рисунок 4. Перевод вызова
бильный телефон. Разветвление может быть как последовательным, так и параллельным. Значения параметра branch поля заголовка Via уникальны для каждого исходящего INVITE. В ответ может прийти несколько «200 OK»-ответов на один и тот же INVITE, которые имеют один и тот же Call-ID, один и тот же параметр tag в заголовке From, но отличаются параметром tag в заголовке To. Все эти диалоги будут соответствовать одному и тому же звонку. Сеанс устанавливается с первым агентом, ответившим «200 OK», а остальным агентам для завершения диалога отправляется запрос CANCEL (если диалог находится в ранней стадии установления), или же ACK и BYE, если диалог уже установлен. Эта услуга может предоставляться прокси-сервером с хранением состояния транзакции или состояния диалога, но не прокси-сервером без хранения состояния, поскольку сервер должен «следить» за состоянием запросов, которые он разослал по нескольким пунктам назначения, и направить пользовательскому агенту, который инициировал запрос, только один окончательный ответ.
Перевод вызова Для осуществления перевода вызова используется метод REFER (RFC 3515) – запрос от одного UA для приглашения к сеансу другого пользовательского агента. Обязательный заголовок Refer-To указывает цель запроса – UA, с которым необходимо установить связь. Запрос REFER может содержать также опциональный заголовок Referred-By, указывающий на инициатора запроса. Адресат запроса (обычно после осуществления аутентификации и авторизации) решает, принимать ли REFER, и в случае успеха немедленно отвечает «202 Accepted». Промежуточные ответы в REFER-транзакции не допустимы. На рис. 4 показан поток сообщений для случая перевода вызова. Ниже показано содержимое сообщений REFER и следующего за ним INVITE (здесь и далее заголовки с интересующей нас информацией выделены красным цветом):
60
Одной из примечательных особенностей SIP является его способность определить присутствие, т.е. найти не только место, где физически находится пользователь, но и возможность коммуникаций с ним и тип последних, например голосовая связь или мгновенные сообщения. SIP определяет статус присутствия посредством мониторинга и уведомления о событиях. Это позволяет устройству подписаться на пакет событий, который поддерживается другим устройством, и получать от него уведомление об изменениях состояния. Данный механизм реализуется с помощью сервера присутствия (Presence Server). Физически он обычно совмещён с сервером регистрации или одним из других элементов сети SIP. Служба присутствия включает два различных набора клиентов. Один набор клиентов, называемых presentities (например, производители информации), предоставляет информацию о присутствии, которая распределяется и сохраняется. Другой набор клиентов, именуемых watchers (например, потребители информации), получает данные о присутствии от соответствующей службы. При реализации эти клиенты обычно объединяются, однако обсуждаются отдельно. Метод SUBSCRIBE (RFC 3265) используется для того, чтобы запросить асинхронное уведомление о наступлении события или группы событий на удалённом узле. В запросе присутствует заголовок Expires, обозначающий длительность подписки на уведомления. Запросы должны иметь только одно значение в заголовке Event, т.е. подписку запрашивать можно только на одно событие за один раз. Собственно уведомление подписчика об изменениях в состоянии, на которые тот подписан, происходит при помощи запроса NOTIFY (также RFC 3265). На рис. 5 показан процесс подписки на информацию о регистрации. Рассмотрим вид запросов SUBSCRIBE и NOTIFY: SUBSCRIBE sip:alice@atlanta.com SIP/2.0 Via: SIP/2.0/TCP app_IM.atlanta.com;branch=z9hG4bKnashds7 From: sip:app_IM.atlanta.com ;tag=123aa9 To: sip:alice@atlanta.com Call-ID: 9987@app_IM.atlanta.com CSeq: 9887 SUBSCRIBE
IP-телефония Contact: sip:app_IM.atlanta.com Event: reg Max-Forwards: 70 Expires: 21600 Accept: application/reginfo+xml
Ответы 2xx на запрос SUBSCRIBE показывают, что подписка принята и что запрос NOTIFY будет отправлен немедленно при наступлении события. Заголовок же Event запроса NOTIFY должен совпадать с заголовком Event из SUBSCRIBE. NOTIFY sip:app_IM.atlanta.com SIP/2.0 Via: SIP/2.0/TCP server1.atlanta.com;branch=z9hG4bKnasaii From: sip:alice@atlanta.com ;tag=xyzygg To: sip:app_IM.atlanta.com ;tag=123aa9 Max-Forwards: 70 Call-ID: 9987@app_IM.atlanta.com CSeq: 1288 NOTIFY Contact: sip:server19.atlanta.com Event: reg Subscription-State: active Content-Type: application/reginfo+xml Content-Length: 223 <?xml version="1.0"?> <reginfo xmlns="urn:ietf:params:xml:ns:reginfo" version="0" state="full"> <registration aor="sip:alice@atlanta.com" id="a7" state="init" /> </reginfo>
В базовой для SIP рекомендации RFC 3261 определено 6 типов запросов: REGISTER, INVITE, ACK, CANCEL, BYE и OPTIONS. Ниже мы рассмотрим OPTIONS и остановимся на некоторых других методах SIP, применяемых при реализации дополнительных услуг.
Другие методы SIP Метод OPTIONS даёт возможность узнать у UA, какие кодеки, методы, типы контента, расширения им поддерживаются, а также известные агенту контакты, ещё до попытки установления диалога. Рассмотрим пример такого взаимодействия. OPTIONS sip:bob@192.168.10.20 SIP/2.0 Via: SIP/2.0/TCP pc33.atlanta.com;branch=z9hG4bK77i832k9 ;received=10.1.3.33 Max-Forwards: 70 To: Bob <sip:bob@biloxi.com> From: Alice <sip:alice@atlanta.com>;tag=1928301774 Call-ID: a84b4c76e6Kr456@pc33.atlanta.com CSeq: 22756 OPTIONS Contact: <sip:alice@pc33.atlanta.com> Allow: INVITE, ACK, OPTIONS, BYE, CANCEL, REFER, SUBSCRIBE, NOTIFY, MESSAGE, UPDATE Accept: application/sdp, application/pidf-xml Content-Length: 0
Целевой UA отвечает на запрос OPTIONS так, как бы он ответил на INVITE (откликом класса 2хх), но с включением вышеупомянутой информации в заголовки Allow, Accept, Accept-Encoding, Accept-Language, Supported и (когда речь идёт о списке кодеков) SDP-часть. Тело SDP здесь не показано для экономии места: SIP/2.0 200 OK Via: SIP/2.0/TCP sip:alice@atlanta.com;branch=z9hG4bK77i832k9;received=10.1.3.33 To: Bob <sip:bob@biloxi.com>; tag=a6c85e3 From: Alice <sip:alice@atlanta.com>;tag=1928301774 Call-ID: a84b4c76e6Kr456@pc33.atlanta.com CSeq: 22756 OPTIONS Contact: <sip:bob@biloxi.com> Contact: <sip:bob_home@biloxi.com> Allow: INVITE, ACK, OPTIONS, BYE, CANCEL, REFER, NOTIFY, MESSAGE Accept: application/sdp, text/plain, image/jpeg Accept-language: en, fr Content-Type: application/sdp Content-Length: 274
Метод MESSAGE(RFC 3428) используется для передачи мгновенных сообщений между пользователями. Содержи-
№8, август 2007
Рисунок 5. Услуга присутствия
мое сообщения помещается в тело приложения MIME. Размер тела сообщения не должен превышать 1300 байт. Метод MESSAGE примечателен тем, что он не образует диалоги. Ответ «200 OK» на MESSAGE означает, что сообщение было доставлено. Ответы 4xx и 5xx показывают, что сообщение не могло быть успешно доставлено, а ответы группы 6xx – что сообщение было успешно доставлено, но отвергнуто. Метод INFO (RFC 2976) применяется для передачи управляющей информации, относящейся к сеансу и генерируемой в процессе сеанса, как то: сигнальных сообщений ТфОП между шлюзами в течение вызова, цифр тонового набора (DTMF), информации об уровне сигнала в беспроводной сети, состоянии баланса, изображений и т. д. Если INFO не может быть принят, UA шлёт в ответ «487 Request Terminated». Наконец, метод UPDATE (RFC 3311) позволяет агенту изменять параметры сеанса, например, используемый кодек. UPDATE может быть использован после того, как принят окончательный ответ на INVITE, однако использование re-INVITE предпочтительно.
Заключение Итак, наш экскурс в протокольную часть завершен. Изложенных в этой и предыдущей статье цикла сведений достаточно для того, чтобы пуститься в самостоятельные поиски или задуматься о применении полученных базовых знаний, но нас ждёт заключительная часть, в которой мы поговорим о сугубо практических проблемах: обходе NAT и обеспечении безопасности в сетях на основе протокола SIP. 1. RFC 4566 – SDP: Session Description Protocol. 2. RFC 3264 – An Offer/Answer Model with SDP. 3. RFC 3 550 – RTP: A Transpor t Protocol for Real-Time Applications. 4. RFC 3551 – RTP Profile for Audio and Video Conferences with Minimal Control. 5. RFC 3611 – RTP Control Protocol Extended Reports (RTCP XR). 6. RFC 3311 – SIP UPDATE Method. 7. RFC 3515 – SIP Refer Method. 8. RFC 2976 – The SIP INFO Method. 9. RFC 3265 – SIP-Specific Event Notification. 10. RFC 3428 – SIP Extension for Instant Messaging. 11. Погребенник А. «Всё, что вы хотели знать о протоколе SIP. Часть 1». //Системный администратор, №5, 2007 г. – С. 78-86.
61
web-программирование
Оцениваем возможности mod_python и mod_perl
Алексей Мичурин Модули сервера Apache mod_python и mod_perl позволяют встроить интерпретаторы языков Python и Perl непосредственно в сервер и значительно увеличить производительность веб‑приложений. Perl – старый и хорошо зарекомендовавший себя игрок на этом рынке. Но в последние годы Python занял уверенные позиции в области веб-разработок и привлекает всё большее внимание.
Что это такое и о чём статья Прежде всего я хотел бы оговориться. Во-первых, статья не является руководством по mod_perl или mod_python. Пожалуйста, не рассматривайте её с этой точки зрения. Статья является обзором возможностей этих средств, причём обзором с высоты птичьего полёта. Я буду всячески избегать углубления в детали (хотя полностью избежать деталей, конечно, не удастся). И во-вторых, я ни в коем случае не хочу разжигать религиозные войны поклонников тех или иных языков. Полагаю, что культурные люди используют во время еды и ложку, и вилку в зависимости от поданного блюда, а не спорят, какой из этих приборов лучше подходит для ковыряния в ухе.
62
Эта статья будет особо информативна для читателей, которые пользовались хотя бы одним из обсуждаемых средств или по крайней мере представляют, что такое mod_perl или mod_python, но я всё же скажу пару вводных слов об этих технологиях. Веб-программирование служит одной цели: формированию HTMLили XML-документов и обмену ими по протоколу HTTP. Чаще всего речь идёт о формировании HTML-страниц, но не следует забывать о RSS, SOAP и других способах обмена данными по HTTP. Чтобы сформировать динамический контент, сервер запускает некую программу, результат работы которой отдаётся посетителю веб-ресурса.
Эта программа может быть полноценной, самостоятельной программой, которая запускается по требованию сервера и «умеет» принимать данные от него и отдавать ему результат работы. Протокол этого обмена называется Common Gateway Interface, а такую программу называют cgi-приложением. Такой подход очень прост в реализации, но крайне неэффективен (по сравнению с другими), так как при каждом запросе выполняется множество действий: загрузка программы в память, её интерпретация и так далее. Полной противоположностью этого подхода (есть и промежуточные) является встраивание языка программирования непосредственно в сервер в виде модуля сервера. Тогда программа загружается и интерпретируется один
web-программирование раз при запуске сервера. На этом же этапе можно произвести подключение к базе данных (чтобы не выполнять подключения/отключения при каждом запросе), открыть необходимые файлы и выполнить другие предварительные действия. Таким образом, теперь запрос обрабатывается внутри сервера, что позволяет получить выигрыш в производительности в десятки и сотни раз. Модули mod_python и mod_perl, как вы уже, наверное, догадались, и являются модулями сервера Apache для встраивания в сервер интерпретаторов Python и Perl соответственно.
Стабильность Проект mod_perl стартовал в 1996 году, mod_python стартовал годом позже, и вначале разрабатывался как универсальное средство для встраивания интерпретатора Python в любой сервер. В 2000 году mod_python приобрёл современные очертания и полностью ориентировался на сервер Apache. В настоящее время mod_perl получил большее распространение. Однако mod_python также официально признан разработчиками Apache (Apache Software Foundation) и является не менее зрелым средством разработки.
Производительность Как таковые mod_perl и mod_python обеспечивают очень высокую скорость запуска кода. Поэтому производительность того или иного решения зависит от производительности самих языков и таланта программистов. Для оценки производительности самих языков можно провести тест с выдачей «статического» документа. То есть документа, для формирования которого не используются никакие внешние источники данных (базы данных, файлы, параметры конфигурации сервера). По моим тестам выдача такого документа средствами mod_perl и mod_python требует одинакового времени, которое вдвое больше времени, необходимого для выдачи простого статического html-файла. В «боевых условиях» производительность сервера начинает практически полностью лимитироваться производительностью базы данных или других средств, к которым сервер
№8, август 2007
Замечания о производительности Хотя разработчики Perl делают очень много для повышения производительности, но приходится признать, что во многих аспектах Python обходит Perl. В Python есть множество механизмов, дающих преимущество, начиная с предварительной компиляции модулей в байт-код и заканчивая последовательным проведением идеи copy-on-write. Когда вы пишете на Python a=b, значение не копируется, даже если это скаляр. Приведу один выразительный пример. Большинство веб-приложений интенсивно работают со строками. Python поддерживает регулярные выражения в той же мере, что Perl. Но по результатам тестов Фридла (Дж. Фридл «Регулярные выра-
обращается. Поэтому выбор mod_perl или mod_python не так уж важен в погоне за производительностью.
Документация Python и Perl имеют совершенно разную идеологию, что не могло не отразиться на характере документации. Документация на Perl более похожа на рассказы, её можно читать как книгу. Документация на Python – это классическая техническая документация, пунктуальная и сухая, увлекательной её никак не назовёшь. Документация на mod_python выдержана в лучших традициях Python – исчерпывающая, последовательная, небогатая примерами и трюками. Документацию на mod_perl можно смело разбить на две части. Первая – это документация на первую версию mod_perl (предназначенную для Apache 1.3). Она выдержана в традициях Perl, из неё можно узнать много о самом языке, в ней содержится много примеров, советов, комментариев, попадаются и витиеватые и остроумные фразы, способные вызывать улыбку. Вторая часть – документация на второй mod_perl (Apache 2.x). Она производит впечатление совершенно сырой, читать её, не прочитав первую часть, бесполезно.
Для администратора Для администратора серверов на первом месте стоят вопросы безопасности и совместимости версий. Процесс установки mod_perl и mod_python оди-
жения»; имеется русский перевод первого и второго издания книги) обнаруживает десятикратное(!) превосходство в производительности. Это происходит потому, что Python не использует переменных типа $1 и начисто лишён $&-чумы. На заметку Perl-программисту: если хотя бы один модуль вашей программы использует переменные типа $&, то все регулярные выражения во всех модулях значительно замедляются. Например, элементарное выражение m/a/ начинает работать в десятки раз медленнее (точная цифра зависит от длины строки). Надо заметить, что переменная $& используется во многих модулях самого общего назначения и даже в прагме diagnostics.
наково прост и стандартен – configure/ make/make install. Пакеты с ПО в Perl и Python имеют стандартный способ установки (оба языка имеют средства управления пакетами). Perl давно имеет CPAN, Python недавно обзавёлся архивом PyPI и средством EasyInstall.
Безопасность Подходы к обеспечению безопасности в mod_perl и mod_python различны. Следует отметить, что весь код mod_perl исполняется одним и тем же интерпретатором. Поэтому mod_perlмодули, отвечающие за абсолютно разные ресурсы (даже если они обслуживают разные виртуальные хосты), в пределах одного сервера имеют полный доступ к данным друг друга. Вопросы их бесконфликтной работы остаются на совести программиста, а результаты конфликтов могут быть самыми неожиданными (учитывая, что в Perl существует ряд глобальных переменных, таких как $SIG). Устанавливая новые mod_perl-компоненты, следует иметь это в виду и всегда проводить тщательное предварительное тестирование. Во второй версии mod_perl появилась возможность разделения интерпретаторов, но использовать её проблематично. Она основана на использовании нитей, но многие Perl-модули не рекомендуется использовать в этом режиме. К числу таких модулей относится, например, DBI, обеспечивающий доступ к базам данных.
63
web-программирование О циклических ссылках и сборке мусора Циклическая ссылка возникает, когда объект ссылается сам на себя или входит в цепь взаимноссылающихся объектов. (Простейший пример на Perl «$x=\$x».) В этом случае, даже если переменная, содержащая ссылку на объект, уничтожена, и объект стал недоступен, счётчик ссылок остаётся не равным нулю и сборщик мусора не может освободить память, что приводит к утечкам. В Perl любая конструкция, ссылающаяся на себя, будь то замыкание и сложная
Путь mod_python другой, он состоит в том, что при запуске сервера запускается main_interpreter-интерпретатор, который порождает новые интерпретаторы по мере поступления запросов (единожды рождённый интерпретатор функционирует до завершения работы сервера и обслуживает все запросы, адресованные именно этому интерпретатору). Этот процесс полностью управляем. Можно его запретить и работать в режиме mod_perl, можно порождать отдельный интерпретатор на каждый виртуальный хост (поведение по умолчанию), можно добиваться самых экзотических эффектов: на разные директории разные интерпретаторы, на разные расширения разные интерпретаторы и так далее. Поэтому разные mod_python-модули можно устанавливать без всяких опасений, а если обнаружатся конфликты, то просто разделить интерпретаторы. Этот великолепный механизм встроен в архитектуру mod_python изначально.
Стабильность работы и требования к ресурсам В настоящее время не известны нестабильности ни в mod_python, ни в mod_perl. Хотя следует отметить, что в mod_perl удалось полностью избавиться от утечек памяти только начиная со второй версии. Что касается общей «прожорливости», она во многом зависит от программистов. Языки Perl и Python, обладая равноширокими возможностями, оба дают программистам возможность создавать циклические ссылки и вызывать утечки памяти. Стоит, однако, отметить, что сборщик мусора
64
Различия языков структура данных, вызывает подобные утечки и программист обязан сам разрывать циклы ссылок в деструкторах. Любая неосторожность влечёт неприятности. В Python (начиная с версии 2.0) имеется асинхронный сборщик мусора, распознающий циклические ссылки и корректно уничтожающий недоступные переменные. Поэтому создать утечку памяти в Python очень не просто. Кроме того, в Python имеются штатные средства взаимодействия со сборщиком мусора (модуль gc), которые позволяют легко обнаруживать и уничтожать циклические ссылки.
в Python выгодно отличается от аналогичного механизма в Perl.
Версии Оба средства поддерживают и Apache 1.3 и Apache 2.x. Версии mod_perl так и нумеруются: первая (уже очень давно не развивается) – для первого Apache, вторая – для второго. В mod_python дела обстоят так же: после версии 2.7 был осуществлён переход на Apache 2.0.
Для программиста Конечно, для программиста лучше тот язык, который он лучше знает, но возможно вы полиглот?.. или стремитесь таковым стать, что безусловно откроет перед вами новые горизонты.
Если вы знаете и Perl, и Python По функциональности mod_perl и mod_python одинаковы. Даже структура классов и методов очень сходна (неудивительно, и тот и другой просто предоставляет интерфейс к одному и тому же серверу). Если вы знаете одно средство, то освоение другого займёт у вас пару дней. Од н а ко, п р и в с ё м с х о д с т в е, mod_python более «дружелюбен». Он предоставляет некоторое количество удобных, достаточно высокоуровневых инструментов, что безусловно облегчает работу. Модуль имеет добротную документацию. Компактную, но исчерпывающую. Кроме того, mod_python предоставляет набор средств, которые я вынес в раздел дополнительных функций. Здесь только добавлю, что mod_python имеет очень удобный и гибкий встроенный механизм поддержки сессий.
Если вы не знаете Perl и/или Python, то уверяю вас, они оба заслуживают изучения. Оба языка поддерживают и процедурный и объектно-ориентированный стиль программирования (в Python имеются элементы и функционального программирования). Причём философия объектов в языках очень сходна (например, все методы виртуальны). Python-программы обладают структурой, более близкой к C++. Так что, если вы планируете быстро сделать пилотный проект на скриптовом языке, а потом аккуратно переписать его на C++, то Python – оптимальный выбор. Кроме того, Python поддерживает развитый механизм исключений, чего очень не хватает в Perl. Однако в Python и не пахнет Perlскороговоркой. Работа с регулярными выражениями в Python такая же громоздкая и неповоротливая, как в PHP и других языках (хотя такой подход позволяет получить существенный выигрыш в производительности, как было упомянуто выше). В Python нет даже операторов инкремента и декремента («++» и «--»). Многих отталкивает в Python то, что блоки выделяются отступами (то есть выравнивания важны!), но это как раз не самое большое зло Python. Во-первых, это правило не такое строгое, как кажется на первый взгляд и из него есть много исключений, а во-вторых, это позволяет забыть про фигурные скобки и точки с запятой. На мой взгляд, гораздо большим недостатком Python является отсутствие некоторых кратких операторов: упомянутых инкремента и декремента, тернарного оператора (cond?exp1:exp2), появившегося только в версии 2.5. Но это компенсируется возможностью переопределить любой оператор и гибко настроить механизм преобразования типов, создавать итераторы, классы-помощники, использовать декораторы. Кроме того, в Python есть изюминки, которых нет в Perl. Например, множественные сравнения (1 < a < 2). Есть и своя скороговорка. Например, Perl-конструкция: if (grep {$_ eq 'z'} @a) {
web-программирование в Python реализуется на много элегантней: if 'z' in a:
Библиотеки Всем известен девиз Perl: «всегда есть не одно решение» («There is more than one way to do it»). Видимо этим (и давней историей) вызвано большое разнообразие библиотек, обладающих разными возможностями. В Python принцип противоположен: «Должен быть один, а лучше только один, очевидный путь решения» («There should be oneand preferably only oneobvious way to do it»). Поэтому функциональность библиотек не пересекается, но по возможностям Python не уступает Perl. Для обработки запросов в Python имеется библиотека cgi (в mod_python её функциональность продулибрована в более производительной библиотеке util). Она изящно обрабатывает и POST-, и GET-запросы, принимает файлы, одним словом, делает всё необходимое. Для работы с почтой есть прекрасные пакеты email, smtplib, mimetools, multifile, rfc822 (под держивается не только RFC 822, но и более «продвинутый» формат RFC 2822). Оба языка имеют собственные API для работы с базами данных: DBI в Perl и набор модулей в Python (например, MySQLdb), имеющих единый интерфейс DBAPI 2.0. В среде «гуру» есть мнение, что Python работает с базами данных быстрее, чем Perl, но мне не удалось выявить различия; видимо, и там, и там скорость лимитируется производительностью самой базы данных. Следует отметить, что в Python тип параметров, подставляемых в SQL‑запрос, определяется жёстко, что позволяет избежать многих недоразумений. (В Perl/DBI тип также можно задать принудительно, но это намного более громоздко.)
Отладка и диагностика Для отладки веб-приложений наиболее ценны следующие возможности: n Возможность получения дампов данных, имеющих сложную структуру. Для этого в Perl и в Python есть стандартные модули Data::Dumper и pprint, соответс-
№8, август 2007
Философия mod_perl и mod_python Мне всегда представлялась странной философия mod_perl, где функция-хендлер (обработчик запроса) вызывается как метод класса. По своему устройству и способу вызова она является конструктором, но от этого «конструктора» не требуется ничего конструировать(!), он должен обработать запрос (параметры запроса передаются в объекте-аргументе) сгенерировать ответ и вернуть статус (фактически число, а не объект). На мой взгляд, такое устройство не логично и идёт в разрез с ОО‑моделью программирования. Конечно, при желании можно извлечь некоторую пользу из возможности наследовать обработчик из единого базового класса, но это не устраняет противоречие, а лишь запутывает код, который имея ОО-вид должен выполнять процедурные задачи, причём теперь где-то в глубине, в базовом классе. Такой подход был бы оправдан, если бы хендлер возвращал бы не статус, а объект с заданным интерфейсом. Скажем, тело ответа доступно как $replay->body, статус как $replay->status и так далее.
твенно (кроме того, в Python «правильно» спроектированные объекты сами «знают», как вывести себя в виде строки). Следует отметить, что в Python есть ещё и возможность интроспекции, позволяющая получать списки атрибутов объекта, зависимости классов и прочую информацию о структуре программы, библиотек, модулей. Этот механизм тесно интегрирован с механизмом исключений, что придаёт всему конгломерату дополнительную мощь. Perl поддерживает некое подобие этой функциональности в классе UNIVERSAL. n Возможность получения стека вызовов. И в Perl и в Python для этого имеются инструменты, кроме того, Python выдаёт эту информацию по умолчанию, а mod_python отображает эти сообщения непосредственно в окне браузера, при включённой диагностике (включается в настройках сервера). Имеются и более «продвинутые» средства визуализации информации об ошибках (cgitb), а также развитые средства протоколирования (модуль logging поддерживает уров-
Другой вариант: метод-хендлер вызывается, как инициализатор объекта запроса. То есть класс хендлера наследуется от класса запроса и переопределяет некоторые виртуальные методы. Это было бы очень удобное и красивое использование преимуществ ОО-подхода. Кроме того, хендлеру не пришлось бы явно передавать аргументы, объект запроса был бы просто доступен как self. Что ж, возможно разработчики mod_perl планировали реализовать что-то подобное, но почему-то этого не сделали. В mod_python обработчик (хендлер) – это просто функция (внутри которой, конечно, можно сконструировать объект и работать с этим объектом). Она тоже принимает объект запроса (по своему устройству, брата-близнеца объекта из mod_perl), тоже генерирует ответ и тоже возвращает статус. Мне это представляется более логичным. Но другого решения в mod_python и не могло быть, в Python конструктор может вернуть только объект. Никаких undef или статусов конструктор вернуть не может (что логично). Ошибки же отслеживаются механизмом исключений. Это Python-way.
ни значимости сообщений, способен направлять сообщения не только в файл, но и по электронной почте и другим протоколам, способен сам осуществлять ротацию файловпротоколов и многое другое). n Возможность отслеживания и анализа исключений. В Python встроен развитый механизм обработки исключений, в Perl практически то же самое можно получить при умелом использовании eval и die с аргументом-объектом, но это довольно искусственный приём, который всё равно не позволяет достичь возможностей Python. Кроме того, и mod_perl и mod_python имеют модули для анализа настроек сервера и интерпретатора. Необходимо просто подключить в качестве обработчика запросов готовый модуль, и при запросе вы будет получать вебстраницу с полным описанием настроек сервера, интерпретатора и загруженных модулей. Здесь mod_python тоже приготовил приятные сюрпризы. Например, вы сразу же (тут же, в окне браузера) можете посмотреть error_log, причём
65
web-программирование именно того виртуального хоста, на котором работаете.
Дополнительные функции И mod_perl, и mod_python может предоставлять программисту более высокоуровневые интерфейсы, позволяя ему не задумываться о внутреннем устройстве сервера Apache. В m o d _ p e r l э т о д в а м о д ул я Apache::Registry и Apache::PerlRun. Они позволяют «легко» запускать обычные CGI-скрипты под управлением mod_perl. Таким образом, вы можете с минимальными усилиями увеличить производительность уже существующей системы в десятки раз. (Строго говоря, не всякий cgi-скрипт можно запустить таким образом без модификации.) Разработчики mod_python реализовали такую же возможность в модуле mod_python.cgihandler, но на этом они не остановились, добавив ещё две возможности. Модуль mod_python.publisher автоматически вызывает функцию-обработчик с тем же именем, что запрошено в URL, и берёт на себя часть работы по обработке запроса и выдаче ответа, что уменьшает нагрузку на разработчика. Модуль mod_python.psp позволяет вести разработку в PHP-стиле, встраивая Python-код в тело страниц. К сожалению, за удобство приходится платить производительностью. В документации на mod_python приведены следующие цифры: Standard CGI: Mod_python cgihandler: Mod_python publisher: Mod_python handler:
23 385 476 1203
requests/s requests/s requests/s requests/s
Надо сказать, что подобная PHP‑образная функциональность доступна и при использовании mod_perl в сочетании с дополнительными средствами типа HTML::Mason, HTML::Embperl и другими, однако они не так глубоко интегрированы в mod_perl и дают более существенное снижение производительности.
Перспективы Как видите, возможности mod_python и mod_perl весьма схожи. Ситуация классическая: более старое средство – mod_perl – привлекает к себе тем, что уже хорошо себя зарекомендовало,
66
более новое средство – mod_python – камерой, приёма/отправки/парсинга развивалось с учётом ошибок пред- сообщений и многие другие. Всё это шественников и обнаруживает боль- снабжено превосходной документашую гибкость и защищённость. Пос- цией. Таким образом, Python уже сейледние годы стало трудно сказать, ка- час даёт возможность создавать полкой из подходов лучше, что осложни- ноценные приложения для мобильных ло выбор. Остроту моменту добавля- устройств. Всё это подогревает интеет тот факт, что оба языка сейчас сто- рес к Python и способствует его расят на распутье. пространению и популяризации. Грядёт выход следующих вер Возвращаясь к веб-разработкам, сий – Perl6 и Python3000. Обе обеща- нельзя не сказать об очень молодой, ют кардинальную переработку язы- но многообещающей технологии WSGI ка и не стремятся поддерживать сов- (Web Server Gateway Interface), которая местимость с предыдущими верси- уже несколько лет вызревает в сообями. Однако планы разработчиков ществе Python-разработчиков. Это поPython не так амбициозны, речь идёт пытка стандартизации протокола взаиоб исправлениях промахов в дизайне. модействия сервера и приложения. РазPerl6 – это, скорее, новый язык. работчик, использующий WSGI, не тольРазработка обоих языков старто- ко получает в своё распоряжение мновала в 2000 году, хотя это достаточ- жество удобных и мощных инструменно условная дата. Правильнее было тов, но и полностью избавляется от вопбы сказать, что где-то на изломе ве- росов интеграции приложения с серка у разработчиков начали появлять- вером. Используется ли mod-подход, ся и выкристаллизовываться мысли или CGI, или FastCGI, или SCGI (Simple и планы по полной переработке сво- Common Gateway Interface). Естественно, упрощается и жизнь администратора, их творений. Релиз Python3000 планируется ему больше не надо адаптировать вебна август этого года, сейчас идут пос- сервер под конкретное приложение, иследние приготовления. пользующее некий протокол. Работы над Perl6 пока продолжаСкорее всего, пока Perl6 формиются. Есть действующая модель вир- руется, Python3000 стабилизируеттуальной машины Parrot. Есть компи- ся, а Python-сообщество предложит лятор в код виртуальной машины, на- ряд очень привлекательных решений писанный на языке Haskell. Разработка для веб-разработчиков, что заметно компилятора ведётся только с 2005 го- потеснит Perl на этом поле. У Python да, причём синтаксис будущего язы- есть на то все шансы. ка Perl6 изменяется и додумывается в процессе этой разработки. Пока кон- 1. О ф и ц и а л ь н ы й с а й т п р о е к т а ца этому процессу не видно. mod_python – http://www.modpython.org. Поэтому, с одной стороны, боль- 2. Официальный сайт проекта mod_perl – шинство разработчиков по традиции http://perl.apache.org. используют Perl. С другой стороны, на- 3. Официальный сайт Python – http:// иболее передовые организации, таwww.python.org. кие как Google, NASA, IBM, начина- 4. О ф и ц и а л ь н ы й с а й т P e r l – ют отдавать всё большее предпочтеhttp://www.perl.org. ние Python. 5. Архив модулей Python PyPI – http:// Кроме того, Python начинает приwww.python.org/pypi. влекать всё больше молодых людей 6. Архив модулей Perl CPAN – http:// и приобретать популярность и универcpan.org. сальность Java. Позволю себе неболь- 7. Страница с mod_python на сервешое отступление от темы веб-разраборе разработчиков Apache – http:// ток: ещё в 2004 году Nokia начала подhttpd.apache.org/modules. держку Python-приложений на плат- 8. Официальный сайт проекта Jython – форме Symbian Series 60, а в начале http://www.jython.org. прошлого года эти разработки стали 9. P y t h o n д л я N o k i a S 6 0 – h t t p: // доступны OpenSource-сообществу (лиopensource.nokia.com/projects/ цензии «Apache Version 2» и «Python pythonfors60. License»). В дистрибутив входят моду- 10. План развития WSGI (PEP-333) – http:// ли для управления графикой, звуком, www.python.org/dev/peps/pep-0333.
bugtraq Переполнение буфера в Panda Antivirus Программа: Panda AntiVirus Enterprise Suite, Panda AntiVirus Platinum 6.x, Panda AntiVirus Platinum 7.x, Panda AntiVirus Small Business Edition, Panda AntiVirus Titanium. Опасность: Высокая. Описание: Уязвимость существует из-за ошибки проверки границ данных при обработке .EXE-файлов. Удаленный пользователь может с помощью специально сформированного .EXE-файла вызвать переполнение буфера и выполнить произвольный код на целевой системе. URL производителя: www.pandasoftware.com. Решение: Установите исправление с помощью механизма обновления.
Выполнение произвольного кода в CA eTrust Intrusion Detection CallCode ActiveX-компоненте Программа: CA eTrust Intrusion Detection 3.0, 3.0 SP1. Опасность: Высокая. Описание: Уязвимость существует из-за того, что CallCode (caller.dll) ActiveX компонент использует небезопасные методы, которые позволяют подключить произвольные DLL‑файлы и выполнить экспортируемые функции с произвольными параметрами. Удаленный пользователь может с помощью специально сформированной веб-страницы выполнить произвольный код на целевой системе. URL производителя: www.ca.com. Решение: Установите исправление с сайта производителя.
Выполнение произвольного кода в VMware Программа: VMware 6.0.0, возможно, более ранние версии. Опасность: Средняя. Описание: Уязвимость существует из-за недостаточной проверки входных данных в vielib.dll ActiveX-компоненте перед вызовом методов CreateProcess() и CreateProcessEx(). Удаленный пользователь может с помощью специально сформированного веб-сайта выполнить произвольный код на целевой системе. URL производителя: www.vmware.com. Решение: В настоящее время способов устранения уязвимости не существует.
Уязвимость в Cisco Wide Area Application Services Программа: Cisco Wide Area Application Services (WAAS) 4.0.7 и 4.0.9. Опасность: Низкая. Описание: Уязвимость существует из-за ошибки в Edge Services, который использует оптимизацию CIFS при обработке пакетов, отправленных на порты 139/TCP и 445/ TCP. Удаленный пользователь может послать большое количество TCP SYN-пакетов на порты 139/TCP или 445/TCP и вызвать отказ в обслуживании устройства. URL производителя: www.cisco.com. Решение: Установите последнюю версию 4.0.11 с сайта производителя.
№8, август 2007
Несколько уязвимостей в NOD32 Antivirus Программа: NOD32 for Domino 2.x, NOD32 for DOS 1.x, NOD32 for FreeBSD 1.x, NOD32 for Linux 1.x, NOD32 for MS Exchange Server 0.x, NOD32 for NetBSD 1.x, NOD32 for Novell Netware Server 1.x, NOD32 for OpenBSD 1.x, NOD32 for Windows 95/98/ ME 2.x, NOD32 for Windows NT/2000/XP/2003 2.x. Опасность: Высокая. Описание: 1. Уязвимость обнаружена при обработке CABфайлов. Удаленный пользователь может с помощью специально сформированного CAB-архива вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе. 2. Ошибка деления на ноль обнаружена при обработке Aspack- и FSG-файлов. Удаленный пользователь может с помощью специально сформированного Aspackили FSG‑файла аварийно завершить работу приложения. 3. Целочисленное переполнение обнаружено при обработке Aspack-файлов. Удаленный пользователь может с помощью специально сформированного Aspack-файла вызвать зацикливание приложения и потребить все доступные ресурсы на системе. URL производителя: www.nod32.com. Решение: Установите последнюю версию v.2.2289 или выше с сайта производителя.
Множественные уязвимости в Norman Antivirus Программа: Norman Virus Control 5.x (Windows), Norman Virus Control 5.x for Domino, Norman Virus Control 5.x for Exchange 2000, Norman Virus Control 5.x for Exchange 5.5, Norman Virus Control 5.x for Firewall-1, Norman Virus Control 5.x for IIS, Norman Virus Control 5.x for Linux, Norman Virus Control 5.x for MimeSweeper. Опасность: Высокая. Описание: 1. Уязвимость существует из-за ошибки проверки границ данных при обработке ACE-архивов. Удаленный пользователь может с помощью специально сформированного ACE-архива вызвать переполнение буфера и выполнить произвольный код на целевой системе. 2. Уязвимость существует из-за ошибки при обработке LZH-архивов. Удаленный пользователь может с помощью специально сформированного LZH-архива вызвать переполнение буфера и выполнить произвольный код на целевой системе. 3. Ошибка деления на ноль обнаружена при обработке DOC-файлов. Удаленный пользователь может с помощью специально сформированного DOC-файла аварийно завершить работу приложения. 4. Уязвимость существует из-за ошибки при обработке DOC-файлов. Удаленный пользователь может с помощью специально сформированного DOC-файла скрыть от сканера наличие в файле злонамеренного кода. URL производителя: www.norman.com Решение: Установите исправление для уязвимостей 3 и 4 с сайта производителя.
Составил Александр Антипов
67
web-программирование
Библиотека Prototype – ваш путь в Web 2.0 Часть 2: практика
Кирилл Сухов Библиотека Prototype предоставляет огромные возможности веб-разработчику. Описывать все её классы и методы довольно длительное занятие, лучше попробовать освоить их на практике.
В
первой части статьи (см. №7 за 2007 г.) я провел краткий обзор основных функций библиотеки Prototype, к сожалению, недостаточно полный. Во второй части я уже собирался наверстать упущенное, но первые же читатели обратили внимание на тот факт, что в статье не было
68
приведено ни одного внятного примера работы библиотеки. Так что сейчас мы будем рассматривать конкретную программу, созданную на её основе. Для иллюстрации я выбрал Window Prototype – библиотеку, уже упомянутую в первой части. Конечно, можно было попробовать написать собс-
твенное приложение, но боюсь, что его объём значительно увеличит статью. В данном случае я могу не приводить полные варианты кода – читатель всегда может ознакомиться с первоисточником. Те функции Prototype, которые остались за рамками обзора, будут освещаться по мере развития событий.
web-программирование Итак, наше приложение должно создавать окна, причём окна полноценные – со всеми элементами управления, с заданным контентом, которым может служить как произвольный URL, так и какое-либо сгенерированное сообщение. Кроме того, мы будем писать библиотеку, с понятным и расширяемым интерфейсом (какой и является Window Prototype).
Теперь начнём Сначала главная HTML-страница нашего Prototype-приложения: <html> <head> <title>Окошки</title> <script type="text/javascript" ↵ src="/javascripts/prototype.js"> </script> <script type="text/javascript" ↵ src="/javascripts/win.js"> </script> <link <link
href="/themes/default.css" rel="stylesheet" ↵ type="text/css"> href="/themes/alphacube.css" rel="stylesheet" ↵ type="text/css">
</head> <body> <script type="text/javascript"> function open_window(id){ win1 = new Window(id, {className: "alphacube", ↵ title: "Window1", width:200, height:150, top:200, ↵ left:100}); } </script> <center><a href="#" onclick="win1.show();">open ↵ window</a></center> </body> </html>
Сначала подключается JavaScript-файл с самой библиотеки Prototype (prototype.js), затем файл с нашим сценарием, который ещё предстоит написать. При клике по ссылке «open window» будет вызван сценарий, открывающий желаемое окно. Он создаёт объект Window со свойствами, заложенными в аргументах нового объекта. Первый из них это идентификатор создаваемого объекта, второй – записанный в формате JSON массив его свойств. Подключаемые файлы каскадных таблиц стилей (default.css и spread.css) были взяты также из Window Prototype и имеют смысл только для наглядности, визуализации создаваемых объектов. Их код я здесь приводить не буду. Теперь осталась сущая ерунда – создать класс, на основе которого создаётся объект, и описать его поведение. Вперёд, препарируем библиотеку и создаём сценарий в файле win.js. Начнём с создания нашего объекта: var Window = Class.create();
Тут необходимы пояснения. Объект Class используется для объявления пользовательских классов библиотеки. По аналогии с Java он имеет метод initailize(), используемый как конструктор, cамо объявление класса осуществляется методом create(), также знакомым по высокоуровневым ООП языкам программирования.
№8, август 2007
Рисунок 1. Окошко появилось
Теперь определим реализацию класса: Window.prototype = {initialize: function() { var optionIndex = 0; if (arguments.length > 0) { if (typeof arguments[0] == "string" ) { id = arguments[0]; optionIndex = 1; } else id = arguments[0] ? arguments[0].id : null; } ...............
Тут, мне кажется, всё должно быть понятно – мы просто оставляем возможность опустить первый аргумент (идентификатор). Это понадобится для того, чтобы создавать произвольное количество объектов. Впрочем, без id всё равно не обойтись, и он будет сгенерирован: if (!id) id = "window_" + new Date().getTime();
Далее перечисляем желаемые свойства объекта: this.options = Object.extend({ className: "dialog", blurClassName: null, minWidth: 100, minHeight: 20, resizable: true, closable: true, minimizable: true, maximizable: true, draggable: true, userData: null, showEffect: (Window.hasEffectLib ? Effect.Appear : ↵ Element.show), hideEffect: (Window.hasEffectLib ? Effect.Fade : ↵ Element.hide), showEffectOptions: {}, hideEffectOptions: {}, effectOptions: null, parent: document.body, title: "&nbsp;", url: null, onload: Prototype.emptyFunction, width: 200, height: 300, opacity: 1, recenterAuto: true, wiredDrag: false, closeCallback: null, destroyOnClose: false, gridX: 1, gridY: 1 }, arguments[optionIndex] || {});
69
web-программирование На этом конструктор пока закончим:
Windows.register(this);
},
Смысл последней строчки будет ясен позже, объект Windows мы ещё опишем. Теперь очередь метода _createWindow(). Тут всё довольно просто. Создаётся объект, представляющий собой HTMLкод (три таблицы), каждому элементу которого присвоено стандартное имя класса (производное от базового): _createWindow: function(id) { var className = this.options.className; var win = document.createElement("div"); win.setAttribute('id', id); win.className = "dialog"; Рисунок 2. Hellow Word
var content; if (this.options.url) content= "<iframe frameborder=\"0\" name=\"" + ↵ id + "_content\" id=\"" + id + ↵ "_content\" src=\"" + this.options.url + ↵ "\"> </iframe>"; else content ="<div id=\"" + id + "_content\" ↵ class=\"" +className + "_content\"> </div>";
Рисунок 3. Меняем стиль, прозрачность
Мы сразу задали все свойства окна, некоторые из них в нашей конкретной задаче точно не понадобятся, но давайте не забывать, мы пишем не приложение, а библиотеку. Надо заметить, что JavaScript, довольно демократичный язык, допускающий многие «вольности». В числе таковых неопределённое количество аргументов функции. Использовав объект options, мы создали массив свойств нашего окна, которые используются, если явно не указаны при его иницмализации. Далее задаём область, в которой будет создаваться окно (по умолчанию это document.body):
if (this.options.parent != document.body) this.options.parent = $(this.options.parent);
Теперь создаём окно:
this.element = this._createWindow(id); this.element.win = this;
Далее в конструкторе стоит задать некоторые методы, но это отложим, пока установим только размеры и заголовок: if (this.width && this.height) this.setSize(this.options.width, ↵ this.options.height); this.setTitle(this.options.title)
70
var closeDiv = this.options.closable ? ↵ "<div class='"+ className +"_close' id='"+ id ↵ +"_close' onclick='Windows.close(\""+ id ↵ +"\", event)'> </div>" : ""; var minDiv = this.options.minimizable ? ↵ "<div class='"+ className + "_minimize' id='"+ ↵ id +"_minimize' onclick='Windows.minimize(\""+ ↵ id +"\", event)'> </div>" : ""; var maxDiv = this.options.maximizable ? ↵ "<div class='"+ className + "_maximize' id='"+ ↵ id +"_maximize' onclick='Windows.maximize(\""+ ↵ id +"\", event)'> </div>" : ""; var seAttributes = this.options.resizable ? ↵ "class='" + className + "_sizer' id='" + id + ↵ "_sizer'" : "class='" + className + "_se'"; var blank = "../themes/default/blank.gif";
win.innerHTML = closeDiv + minDiv + maxDiv + "\ <table id='"+ id +"_row1' class=\"top ↵ table_window\">\ <tr>\ <td class='"+ className +"_nw'></td>\ <td class='"+ className +"_n'><div id='"+ ↵ id +"_top' class='"+ className +"_title ↵ title_window'>"+ this.options.title ↵ +"</div></td>\ <td class='"+ className +"_ne'></td>\ </tr>\ </table>\ <table id='"+ id +"_row2' class=\"mid ↵ table_window\">\ <tr>\ <td class='"+ className +"_w'></td>\ <td id='"+ id +"_table_content' class='"+ ↵ className +"_content' valign='top'>" + ↵ content + "</td>\ <td class='"+ className +"_e'></td>\ </tr>\ </table>\ <table id='"+ id +"_row3' class=\"bot ↵ table_window\">\ <tr>\ <td class='"+ className +"_sw'></td>\ <td class='"+ className +"_s'><div id='"+ ↵ id +"_bottom' class='status_bar'><span ↵ style='float:left; width:1px; ↵ height:1px'></span></div></td>\ <td " + seAttributes + "></td>\ </tr>\ </table>\ "; Event.observe($(id + "_content"), "load", ↵ this.options.onload); return win;
},
web-программирование Структура окна, конечно, может быть другой, но я хочу обратить внимание на ключевые моменты: n все элементы окна помещены в один (родительский) элемент div, снабженный уникальным идентификатором; n ко всем элементам управления (стандартные «свернуть», «развернуть», «закрыть», «перетащить») добавлены обработчики событий (да, да их ещё предстоит создать); n окно может отображать, как заданный URL, так и сгенерированный контент. Результат мы можем уже наблюдать (см. рис. 1), но он пока не очень впечатляет. В самом деле, зачем было писать столько строк кода, когда то же самое можно получить простейшими DHTML-приёмами? На самом деле все нормально. Кода придется написать ещё втрое больше, но в прототипе мы сразу же заложили возможности для любых манипуляций с объектом-окном. Правда, окно мы не собираемся создавать в одном экземпляре (а какой смысл?). Для работы с множеством окон мы создадим ещё один объект, который разработчики Windows Prototipe назвали не слишком оригинально. Итак, объект Windows:
Рисунок 4. Размножаемся
var Windows = { windows: [], observers: [], focusedWindow: null, maxZIndex: 0, overlayShowEffectOptions: {duration: 0.5}, overlayHideEffectOptions: {duration: 0.5}, addObserver: function(observer) { this.removeObserver(observer); this.observers.push(observer); }, removeObserver: function(observer) { this.observers = this.observers.reject( function(o) ↵ { return o==observer }); }, ... }
Рисунок 5. Трансформация окон
Последний метод, как вы помните, вызывается конструктором при создании окна, реализация getId() и других вспомогательных манипуляций в данном случае принципиально не важна. Осталось задать поведение создаваемых объектов, проЗадача данного объекта хранить сведения о коллекции объектов Window и переадресовывать события к обработ- писав все необходимые методы в объекте Windows и их речику для заданного окна. Как вполне ясно из кода, в мас- ализацию в объекте Window. Естественно, мы это не бусиве windows сохраняются все созданные объекты-окошки, дем делать в полном объёме (тем более что разработчики Windows Prototipe давно обо всём позаботились), но коев массиве observers – заданные обработчики. Методы addObserver и removeObserver оперируют с обра- что попробуем. ботчиками событий, добавляя или убирая их у объектов. Сюда же добавляем два необходимых для манипуляций Оживляем объект Прежде всего нужно связать составляющие созданнос объектами метода: го объекта с событиями (наведением мыши, перетаскиnotify: function(eventName, win) { ванием, кликами). Опять-таки это будет несколько сложthis.observers.each( function(o) ↵ нее, чем в традиционном DHTML, но зато и возможнос {if(o[eventName]) o[eventName](eventName, win);}); }, тей будет больше. Сначала добавим в конструктор следуgetWindow: function(id) { ющие строки: return this.windows.detect(function(d) ↵
{ return d.getId() ==id }); },notify: function(eventName, win) { this.observers.each( function(o) ↵ {if(o[eventName]) o[eventName](eventName, win);}); }, getWindow: function(id) { return this.windows.detect(function(d) ↵ { return d.getId() ==id }); },
№8, август 2007
this.eventMouseDown = ↵ this._initDrag.bindAsEventListener(this); this.eventMouseUp = ↵ this._endDrag.bindAsEventListener(this); this.eventMouseMove = ↵ this._updateDrag.bindAsEventListener(this); this.eventOnLoad = ↵ this._getWindowBorderSize.bindAsEventListener(this); this.eventMouseDownContent = ↵
71
web-программирование this.toFront.bindAsEventListener(this); this.eventResize = ↵ this._recenter.bindAsEventListener(this); this.topbar = $(this.element.id + "_top"); this.bottombar = $(this.element.id + "_bottom"); this.content = $(this.element.id + "_content"); Event.observe(this.topbar, "mousedown", ↵ this.eventMouseDown); Event.observe(this.bottombar, "mousedown", ↵ this.eventMouseDown); Event.observe(this.content, "mousedown", ↵ this.eventMouseDownContent); Event.observe(window, "load", this.eventOnLoad); Event.observe(window, "resize", this.eventResize); Event.observe(window, "scroll", this.eventResize); Event.observe(this.options.parent, "scroll", ↵ this.eventResize);
Всё, теперь можно описывать поведение объектов. Для примера возьмём «сворачивание» окна при нажатии мышкой на соответствующую кнопку. Для достижения этого эффекта сначала пропишем соответствующий метод объекта Windows: minimize: function(id, event) { var win = this.getWindow(id) if (win && win.visible) win.minimize(); Event.stop(event); },
Затем его реализацию в объекте Window: minimize: function() { if (this.resizing) return; var r2 = $(this.getId() + "_row2");
Рисунок 6. Связь и иерархия объектов библиотеки Prototype
72
if (!this.minimized) { this.minimized = true; var dh = r2.getDimensions().height; this.r2Height = dh; var h = this.element.getHeight() - dh; if (! this.useTop) { var bottom = ↵ parseFloat(this.element.getStyle('bottom')); this.element.setStyle({bottom: ↵ (bottom + dh) + 'px'}); } } else { this.minimized = false; var dh = this.r2Height; this.r2Height = null; if (this.useLeft && this.useTop && ↵ Window.hasEffectLib && ↵ Effect.ResizeWindow) { new Effect.ResizeWindow(this, null, null, null, ↵ this.height + dh, ↵ {duration: Window.resizeEffectDuration}); } else { var h = this.element.getHeight() + dh; this.height += dh; this.element.setStyle({height: h + "px"}) r2.show(); } if (! this.useTop) { var bottom = ↵ parseFloat(this.element.getStyle('bottom')); this.element.setStyle({bottom: ↵ (bottom - dh) + 'px'}); } this.toFront(); } },
Я понимаю, что выглядит всё не очень прозрачно, но тем не менее описывать методы вроде show(), getHeight()
web-программирование или toFront() не буду (их реализацию читатель всегда может посмотреть в исходниках). Объект Effect и метод ResizeWindow являются специфичными для Windows prototype, я бы с удовольствием разобрал их работу, но объём статьи при этом возрастёт в несколько раз. Чтобы воспользоваться нашим объектом, нужно только всего ничего – прописать все остальные методы, задающие его поведение.
Работаем с библиотекой Теперь представим, что мы прописали все методы и свойства и можем пожинать плоды нудной работы (пусть и не нашей, но всё же). Сначала чуть модифицируем вызов нашего окошка: function open_window(id){ win1 = new Window(id, {className: "alphacube", title: ↵ "Window1", width:200, height:150, top:200, left:100}); win1.getContent().innerHTML = "<h1>Preved</h1>"; win1.show(); }
Рисунок 7. Загрузка правильного URL
Теперь окно живёт – его можно свернуть, развернуть на весь экран, перетащить, наконец, закрыть. Все свойства окна можно установить посредством вызова методов, что и делаем, наполняя окно чрезвычайно полезным контентом (см. рис. 2). Теперь создадим окно на основе другого класса (см. рис. 3): function next_window(){ win2 = new Window( {className: "spread", title: ↵ "Window2",opacity:0.5, width:200, height:150, ↵ top:200, left:100}); win2.getContent().innerHTML = "<h1>Preved</h1>"; win2.show(); }
Поскольку мы не задали жёстко идентификатор объекта, создать таких окон можно сколько угодно и сколько угодно издеваться над ними (см. рис. 4, 5). В конце концов создадим самое правильное окно: win2 = new Window( {className: "spread", title: ↵ "samag",opacity:0.5, width:200, height:150, ↵ top:200, left:100, url=”http://samag.ru”});
Результат представлен на рис. 7.
Документация Несмотря на то, что библиотека Prototype создана и активно используется довольно давно, до самого последнего времени она не имела ни официальной документации, ни даже полноценной домашней страницы. К счастью, сейчас эти проблемы решены – на сайте библиотеки http://www.prototypejs.org/api доступно описание классов и методов. Джонатан Снук (Jonathan Snook, http://www.snook.ca) проделал колоссальную работу, собрав элементы библиотеки в единую диаграмму, отражающую связь и иерархию объектов Prototype. Рекомендую использовать её для изучения структуры библиотеки (см. рис. 6).
Приложения на JavaScript? В первой части этого опуса я упомянул о нескольких библиотеках, созданных на основе prototype. Они впечатля-
№8, август 2007
Рисунок 8. Работа сервиса Cumulate Draw
ют своими возможностями, но всё же это библиотеки – инструменты разработчика, до которых нет дела конечному пользователю. В качестве иллюстрации готового JavaScript-приложения я собирался привести несколько примеров, но в процессе подготовки наткнулся на один, самый эффектный на настоящее время, которым решил и ограничиться. Знакомьтесь – Cumulate Draw (см. рис. 8). Честно говоря, будь я разработчиком этого сервиса, я непременно брал бы деньги за его использование. Это вполне достойная замена среды MSVisio прямо в окне браузера. Конечно, сказать, что данное приложение целиком сделано на основе Prototype, нельзя, скорее всего, оно создано с использованием этой библиотеки. Тем не менее серверная часть составляет в ней явно не так много, основная задача по реализации функционала приходится на интерфейс, в чём можно убедиться, посмотрев исходники на JavaScript, которые вполне доступны для изучения. Я думаю, наличие таких приложений не оставляет сомнения в возможностях и библиотеки Pritotype. 1. Б и б л и о т е к а W i n d o w P r o t o t y p e – h t t p : / / p r o t o t y p e window.xilinus.com/index.html. 2. Сервис Cumulate Draw – http://www.cumulatelabs.com/draw/ draw.html?release=0.4.7.
73
web
Панель управления хостингом SysCP
Сергей Яремчук Как упростить управление хостингом? Даже при тщательно спланированной архитектуре и выборе компонентов будущей системы без некоторой автоматизации процесса потребуется очень много времени, чтобы решить все возможные задачи.
Т
олько на первый взгляд распреде- чу. Но каждое изменение конфигура- рощенная панель, в которой он уже ление места на сервере может по- ции, например добавление еще одно- сам определяет нужные имена, логиказаться стандартной и решаемой го почтового адреса для субдомена, ны и прочее. с помощью скриптов или ручной прав- потребует вмешательства специалисИмеются коммерческие решекой файлов. По мере увеличения чис- та. Неподготовленный пользователь ния вроде CPanel, DirectAdmin, Plesk ла виртуальных пользователей сле- вряд ли сможет разобраться с ситуаци- и прочие. Поиск по ключевому слодить за всеми параметрами будет все ей. Поискав в Интернете, можно найти ву hosting на freshmeat.net выдает 155 труднее, а на администрирование бу- ряд инструментов, задача которых уп- ссылок, не все из их соответствуют исдет затрачиваться все большее коли- ростить управление виртуальным хос- комому, но, просмотрев возможносчество времени. Ведь придется соз- тингом. Такие программы ориентиро- ти некоторых проектов, в большинсдавать и управлять почтовыми учет- ваны на неспециалиста. Администра- тве случаев можно найти приемлемое ными записями, субдоменами, база- тор (или человек с некоторой подготов- решение. Единственное, о чем следуми данных, прописывать необходи- кой, например менеджер) лишь созда- ет помнить, – универсального решемые записи в DNS, выделять и квоти- ет новых пользователей и настраива- ния на все случаи жизни не сущестровать место на FTP и веб-серверах, ет ресурсы, которые он может исполь- вует. Всегда следует присматриватьа еще следить за трафиком и объемом зовать: объем места под сайт, наличие ся к сервисам, на обслуживание котоместа на дисках, чтобы эти парамет- и количество поддоменов, количест- рых ориентировано конкретное решеры не превысили лимит. Плюс не сто- во почтовых адресов, работа с СУБД ние. Например, в требованиях Domain ит забывать о резервном копировании, и FTP. Остальные параметры может Technologie Control (DTC) [1] указаборьбе со спамом и прочими задача- устанавливать уже сам пользователь, ны такие сервисы: Bind 8/9 (или совми. Конечно, шаблоны и скрипты мо- в том числе и не обладающий специ- местимый), MySQL, Apache 1.3, php4, гут частично помочь решить эту зада- альной подготовкой, ему доступна уп- Qmail, Postfix, Courier, Dovecot, ProFTPd,
74
web Webalizer. В том случае, если условия внедрения иные, следует подыскать другой вариант, подходящий по функциональности. Многие проекты предлагают демоверсию, что позволяет оценить удобство интерфейса и некоторые возможности по администрированию без установки.
Возможности SysCP
Модуль Webmin Всем, кто пользуется Webmin, можно пред ложить модуль Virtualmin (http:// www.webmin.com/index8.html), который позволяет, используя единый интерфейс, управлять множеством виртуальных узлов module Apache, BIND, баз MySQL и почтовыми ящиками Sendmail или Postfix. Для каждого виртуального сервера создается новый пользователь, который может в дальнейшем самостоятельно админист-
Началом проекта можно считать ноябрь 2003 года, когда Флориан Липперт (Florian Lippert) стал администрировать почтовый сервер. Скоро он заметил, что добавлять новых пользователей, субдомены не совсем удобно, некоторые изменения заносились в конфигурационный файл, и требовался перезапуск сервера. Осенью 2004 года были сформулированы требования к будущей системе: n по возможности она не должна создавать локальных (системных) пользователей; n позволять управлять почтовыми адресами и пересылкой писем; n создавать новые базы в MySQL; n управлять субдоменами для клиентов. И впоследствии было добавлено еще одно требование – создание новых зон в BIND. Результат System Control Panel (SysCP) под лицензией GNU GPL был представлен общественности 15 июня 2004 года. Сама система написана на PHP, для хранения информации использован MySQL. Поддерживаются следующие сервисы: n веб-сервер – Apache 1.3 и 2.x с поддержкой PHP 4/5 (ранее рекомендовался только 1.3 и PHP 4, PHP должен поддерживать командный интерфейс CLI); n MTA Postfix; n POP3/IMAP – Courier (возможно использование Dovecot, хотя этот вариант полностью не оттестирован); n ftp-сервер – ProFTPd (может быть заменен на Pureftp); n аутентификация – Cyrus-sasl; n статистика – Webalizer. Опционально могут быть установлены BIND (может быть заменен на PowerDNS), Maildrop, ClamAV и Spamassassin, PHPmyAdmin и веб-интерфейс к почте вроде SquirrelMail. Используя клиентскую часть ПО, можно: управлять почтовыми учетными записями с возможностью Catch-all (то есть ловить все письма, идущие в домен), управлять перенаправлением почты, субдоменами, паролями, базой данных, установкой паролей на каталоги, а также доступом к webmail и PHPmyAdmin.
№8, август 2007
рировать свой участок. Для настройки используются имеющиеся для этих серверов стандартные модули, в которые добавляются новые возможности, поэтому Virtualmin будет работать в большинстве конфигураций. Доступны две версии – GPL и коммерческая Pro (http://www.virtualmin.com). В последней дополнительно доступны HTML-редактор, настройка антиспамовой и вирусной проверки, поддержка реселлеров и некоторые другие возможности.
Административный интерфейс позволяет создавать новых пользователей, задавать доступные ресурсы и лимиты, поддерживается работа с реселлерами с заданием зоны видимости каждого. Перед установкой можно ознакомиться с полнофункциональной демоверсией SysCP [3].
Установка SysCP Изначально SysCP работает в кооперации с Debian GNU/ Linux, поэтому на сайте проекта, кроме исходных текстов, представлены и пакеты для Debian. Тестовая установка производилась на Ubuntu 7.04, к которому пакеты для Debian Etch подходят без проблем. В составе группы разработчиков есть мантайнер пакетов FreeBSD, поэтому в систему портов включен порт syscp, который можно найти в sysutil/ syscp. Причем имеется и патч, упрощающий настройку связки с Dovecot. Патча для Linux нет, как, впрочем, и необходимости в нем. Актуальной на момент написания статьи была версия 1.2.16, поэтому все сказанное относится к ней. В нестабильной версии 1.3 установка несколько отличается, хотя процесс установки SysCP, как вы увидите, не самый тяжелый. Cкачиваем файл: $ wget –c http://debian.syscp.de/etch/syscp_1.2.16_all.deb
Рисунок 1. Настройки параметров доступа
75
web Смотрим зависимости:
запись, отличную от admin. И в «Server settings» указываем FQDN сервера и версию Apache. После нажатия на «ОК» $ sudo dpkg-deb --info ./syscp_1.2.16_all.deb будут проверены введенные данные и созданы все необходимые для работы таблицы, введенная информация будет сохранена в файле /var/www/syscp/lib/userdata.inc.php. Устанавливаем все необходимое: В случае ошибки некорректное поле будет отмечено крас$ sudo apt-get apache2-mpm-prefork libapache2-mod-php5 ↵ ным цветом. По окончании установки можно зарегистри mysql-server postfix-mysql proftpd-mysql libsasl2 ↵ роваться в системе с администраторскими правами, здесь courier-authlib courier-authlib-mysql courier-base ↵ courier-pop-ssl bind9 php5 php5-mysql php5-cli ↵ уже можно выбрать русский язык интерфейса. webalizer Хотя делать это еще рано. Сначала необходимо указать Создаем символическую ссылку с каталога /etc/apache2/ Postfix, Courier и ProFTPd, чтобы они получали настройки mods-available в mods-enabled, чтобы активировать подде- из MySQL и настроить Apache для работы с виртуальныржку PHP в веб-сервере: ми серверами. Во вкладке «Сервер → Настройки служб» даны под$ a2enmod php5 сказки команд для Debian 3.1/4.0 и SUSE Linux 10.0, причем в них уже выставлены все необходимые имена примеThis module is already enabled! нительно к установленной системе, поэтому часто их можУстановка с исходных текстов: но просто скопировать (см. рис. 2). Некоторые пути, предлагаемые скриптом, можно изме$ cd /var/www нить зайдя в «Настройки сервера» (см. рис. 3). $ sudo tar -xzvf syscp-1.2.16.tar.gz По умолчанию считается, что все сервисы размещены $ chown www-data:www-data syscp/lib/userdata.inc.php $ chmod 777 syscp/lib/userdata.inc.php на одном компьютере, но ничего не мешает перенести почтовый сервер на другую машину, забирая данные из базы Теперь заходим по адресу http://server_name/syscp и на- под управлением MySQL по сети. жимаем ссылку в строке «You have to configure SysCP first!». В появившемся окне выбираем язык интерфейса, которым Настройки серверов будут выводиться подсказки при инсталляции, в раскрыва- Все указанные настройки не догма, можно добавить и друющемся списке присутствует только английский, француз- гие параметры, не нарушающие общий принцип настроек. кий и немецкий (см. рис. 1). Комментировать их не буду, в журнале уже были статьи Ниже вводим параметры для доступа к MySQL: узел, имя по этим серверам. базы данных, пользователя для доступа к БД. Строку MYSQL_PASSWORD необходимо заменить В поле «Administrator Account» указываем пароль адми- на пароль пользователя syscp, который является владельнистратора, в целях безопасности можно указать учетную цем базы данных.
Рисунок 2. Подсказка в настройке
76
web Начнем с Apache. Создаем и подключаем файл, в который будет заноситься информация о виртуальных узлах:
IN IN IN
NS NS NS
ns ns1.provider.com. ns2.provider.com.
IN IN IN
MX A MX
10 mail 127.0.0.1 10 mail
И каталог для виртуальных узлов:
*
IN IN
A MX
127.0.0.1 10 mail
$ sudo mkdir -p /var/kunden/webs/
ns IN mail IN IN
A A MX
127.0.0.1 127.0.0.1 10 mail
$ sudo echo -e "\nInclude /etc/apache2/sites-available/ ↵ 99_syscp_vhosts.conf" >> /etc/apache2/httpd.conf $ sudo touch /etc/apache2/sites-available/99_syscp_vhosts.conf
Перезапускаем веб-сервер:
И перезапускаем BIND: $ sudo /etc/init.d/apache2 restart $ sudo /etc/init.d/bind9 restart
Теперь настроим BIND, чтобы он добавлял необходимые записи автоматически. Создаем файл для записи виртуальных зон:
Настройки ProFTPd вообщем то стандартны. Сначала в /etc/proftpd/modules.conf указываем необходимые для работы модули:
$ sudo touch /etc/bind/syscp_bind.conf
Подключаем его в основном файле: $ sudo echo "include \"/etc/bind/syscp_bind.conf\";" >> ↵ /etc/bind/named.conf
Добавляем в файл /etc/bind/default.zone информацию о своем компьютере (вместо 127.0.0.1 указываем рабочий адрес): $TTL @ IN
1W SOA ns root ( 2004060501 ; serial 8H ; refresh 2H ; retry 1W ; expiry 11h) ; minimum
ModulePath /usr/lib/proftpd ModuleControlsACLs insmod,rmmod allow user root ModuleControlsACLs lsmod allow user * #LoadModule mod_ctrls_admin.c LoadModule mod_tls.c LoadModule mod_sql.c LoadModule mod_ldap.c LoadModule mod_sql_mysql.c LoadModule mod_quotatab.c LoadModule mod_quotatab_file.c LoadModule mod_quotatab_ldap.c LoadModule mod_quotatab_sql.c LoadModule mod_radius.c LoadModule mod_wrap.c LoadModule mod_rewrite.c LoadModule mod_ifsession.c <IfModule mod_delay.c> DelayEngine off </IfModule>
Рисунок 3. Установки сервера
№8, август 2007
77
web И в основном конфигурационном файле /etc/proftpd/ proftpd.conf особое внимание обращаем на параметры доступа к MySQL, остальные параметры стандартны: Include /etc/proftpd/modules.conf ServerName ServerType DeferWelcome
"grinder.com FTP Server" standalone off
MultilineRFC2228 DefaultServer ShowSymlinks AllowOverwrite
on on on on
TimeoutNoTransfer TimeoutStalled TimeoutIdle
600 600 1200
DisplayLogin DisplayFirstChdir ListOptions
welcome.msg .message "-l"
DenyFilter
\*.*/
Port MaxInstances
21 30
User Group
nobody nogroup
<Directory /*> Umask AllowOverwrite </Directory>
022 022 on
DefaultRoot ~ RequireValidShell off SQLAuthTypes Crypt Plaintext SQLAuthenticate users* groups* # здесь меняем MYSQL_PASSWORD на пароль SQLConnectInfo syscp@127.0.0.1 syscp MYSQL_PASSWORD SQLUserInfo ftp_users username password uid gid homedir shell SQLGroupInfo ftp_groups groupname gid members SQLUserWhereClause "login_enabled = 'y'" SQLLog PASS login SQLNamedQuery login UPDATE "last_login=now(), ↵ login_count=login_count+1 WHERE username='%u'" ↵ ftp_users SQLLog RETR download SQLNamedQuery download UPDATE "down_count=down_count+1, ↵ down_bytes=down_bytes+%b WHERE username='%u'" ↵ ftp_users SQLLog STOR upload SQLNamedQuery upload UPDATE "up_count=up_count+1, ↵ up_bytes=up_bytes+%b WHERE username='%u'" ftp_users
И перезапускаем сервер: $ sudo /etc/init.d/proftpd restart
Теперь приступаем к настройке почтовой подсистемы. Создадим необходимые для работы Postfix каталоги и новую учетную запись: $ $ $ $ $ $ $
sudo sudo sudo sudo sudo sudo sudo
mkdir -p /etc/postfix/sasl mkdir -p /var/spool/postfix/etc/pam.d mkdir -p /var/spool/postfix/var/run/mysqld groupadd -g 2000 vmail useradd -u 2000 -g vmail vmail mkdir -p /var/kunden/mail/ chown -R vmail:vmail /var/kunden/mail/
В главный конфигурационный файл /etc/postfix/main.cf вносим информацию о подключении виртуальных почтовых ящиков:
78
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) biff = no append_dot_mydomain = no myhostname = grinder.com mydomain = grinder.com myorigin = $myhostname mydestination = $myhostname $mydomain localhost ↵ localhost.$mydomain mynetworks = 127.0.0.0/8 alias_maps = $alias_database smtpd_recipient_restrictions = permit_mynetworks ↵ permit_sasl_authenticated reject_unauth_destination virtual_mailbox_base = /var/kunden/mail/ virtual_mailbox_maps = ↵ mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf virtual_mailbox_domains = ↵ mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf virtual_alias_domains = virtual_alias_maps = ↵ mysql:/etc/postfix/mysql-virtual_alias_maps.cf virtual_uid_maps = static:2000 virtual_gid_maps = static:2000 smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes
Остальные параметры оставлены в значении по умолчанию, напомню, что просмотреть все настройки можно, использовав команду postconf. Ничто не мешает добавить TLS и прочие возможности. И далее создаем конфигурационные файлы, на которые есть ссылки в main.cf: $ sudo cat > /etc/postfix/mysql-virtual_alias_maps.cf user = syscp # меняем MYSQL_PASSWORD на пароль password = MYSQL_PASSWORD dbname = syscp table = mail_virtual select_field = destination where_field = email additional_conditions = and destination <> '' ↵ and destination <> ' ' hosts = 127.0.0.1
Следующий: $ sudo cat > /etc/postfix/mysql-virtual_mailbox_domains.cf user = syscp # меняем MYSQL_PASSWORD на пароль password = MYSQL_PASSWORD dbname = syscp table = panel_domains select_field = domain where_field = domain additional_conditions = and isemaildomain = '1' hosts = 127.0.0.1 $ sudo cat > /etc/postfix/mysql-virtual_mailbox_maps.cf user = syscp # меняем MYSQL_PASSWORD на пароль password = MYSQL_PASSWORD dbname = syscp table = mail_users select_field = maildir where_field = email hosts = 127.0.0.1
Настройка связки с Cyrus SASL: $ sudo cat > /etc/postfix/sasl/smtpd.conf pwcheck_method: auxprop auxprop_plugin: sql mech_list: plain login cram-md5 digest-md5 sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: syscp # меняем MYSQL_PASSWORD на пароль sql_passwd: MYSQL_PASSWORD sql_database: syscp sql_select: select password from mail_users ↵ where username='%u@%r'
web И перезапускаем Postfix: $ sudo /etc/init.d/postfix restart
Для настройки Courier в каталоге /etc/courier/ необходимо отредактировать два файла. Основные настройки работы демона указываются в файле authdaemonrc:
лей используется скрипт cronscript.php, запускаемый с помощью сrond: $ sudo echo "*/5 * * * * root /usr/bin/php ↵ –q /var/www/syscp/scripts/cronscript.php " >> ↵ /etc/crontab $ sudo /etc/init.d/cron restart
Создаем нового пользователя
Теперь можно воспользоваться веб-интерфейсом. На первой странице показана статистика по использованным ресурсам, информация по системе. Выбрав ссылку внизу «Запросить через веб-сервис», можно уточнить наличие новой версии на сайте проекта. Прежде чем начинать создавать новых пользователей, следует указать IP-адреса сервера, И создаем файл /etc/courier/authmysqlrc, в котором опи- с которых будут приниматься запросы, для этого выбираем сываются параметры подключения к MySQL: «Сервер → IP-адреса и порты» и, нажав «Добавить комбинацию IP/порт», вводим данные в доступные поля. MYSQL_SERVER 127.0.0.1 Перейдя по ссылке «Клиенты», можно раздавать проMYSQL_USERNAME syscp странство на виртуальном сервере. В появившемся поле # меняем MYSQL_PASSWORD на пароль MYSQL_PASSWORD MYSQL_PASSWORD следует заполнить персональную информацию о клиенMYSQL_PORT 0 те и указать доступные ресурсы, создание поддомена, паMYSQL_DATABASE syscp MYSQL_USER_TABLE mail_users роль и прочее (см. рис. 4). К сожалению, если ввести имя MYSQL_CRYPT_PWFIELD password_enc на русском, при последующем просмотре в основном окMYSQL_UID_FIELD uid MYSQL_GID_FIELD gid не разобрать что-либо будет невозможно, поэтому лучше MYSQL_LOGIN_FIELD username использовать транслит. После нажатия на кнопку «СохраMYSQL_HOME_FIELD homedir MYSQL_MAILDIR_FIELD maildir нить» через некоторое время будут созданы все необходимые подкаталоги для FTP, HTTP-серверов и добавлены неПерезапускаем демоны Courier: обходимые записи в конфигурационные файлы. Все имеющиеся поддомены можно просмотреть и при необходимос$ sudo /etc/init.d/courier-authdaemon restart ти отредактировать/добавить, перейдя по ссылке «Доме$ sudo /etc/init.d/courier-pop restart ны». Как уже говорилось, раздачу места можно разрешить Последним шагом необходимо обеспечить периоди- другим администраторам или реселлерам, для этого слеческое обновление конфигурации серверов. Для этих це- дует зайти по ссылке «Админы» и установить разрешения и объем/количество ресурсов, которыми он может распоряжаться. Доступные настройки не очень отличаются от пользовательских, но «Админы» сами могут распределять ресурсы. authmodulelist="authmysql" authmodulelistorig="authcustom authcram authuserdb ↵ authldap authmysql authpam" daemons=5 version="" authdaemonvar=/var/run/courier/authdaemon # и на всякий случай? Потом можно будет перевести в 0 DEBUG_LOGIN=1
Вывод Несмотря на кажущуюся трудность, настройка SysCP незначительно отличается от установки стандартной связки серверов. Но если необходимо часто создавать виртуальные серверы и почтовые аккаунты с установкой различных ограничений и работой с DNS, решения вроде SysCP на порядок упростят вам жизнь.
Рисунок 4. Создаем нового клиента
№8, август 2007
1. Сайт проек та Domain Technologie C o n t r o l – h t t p: // w w w.g p l h o s t .c o m / software-dtc.html. 2. С а й т п р о е к т а S y s C P – h t t p s : / / www.syscp.org/wiki, http://www.syscp.de. 3. Д е м о в е р с и я S y s C P – h t t p : / / demo.syscp.org.
79
программирование
Создаём COM-компоненты с помощью VBScript
Иван Коробко Вы пишете много скриптов, и надоело переносить код из одного файла в другой? Есть отличное решение – создать COM-объекты на основе своих сценариев.
В
1993 году компанией Microsoft был разработан стандарт COM (Component Object Model – объектная модель компонентов), предназначенный для создания программного обеспечения на основе взаимодействия различных компонентов. Основным понятием, которым оперирует технология COM, является COM-компонент, имеющий уникальный идентификатор (GUID). Взаимодействие компонентов осуществляется с помощью COM-интер-
80
фейса – набора абстрактных свойств и функций (COM-объекты). Доступ к COM-объектам осуществляется с помощью функций Windows API. Основное преимущество заключается в возможности использовать одни и те же COM-объекты в различных языках программирования, ускорить создание приложений. Основная за дача разработчиков COM-объектов – создание компонентной архитектуры, совместимой со скриптовыми языками. Это да-
ет возможность использовать функции COM-компонентов, написанных на различных языках программирования (VB.NET, C++, C#), в том числе и на скриптовых (VBScript, JScript, PerlScript). Использование Windows Script Components (WSC) позволяет создавать сценарии на базе cкриптовых языков, которые можно использовать в качестве COM-объектов. В качестве примера создадим COM-объек т Detect.Domain, который содержит несколько методов.
программирование Используя их, можно определить длинное имя домена (DC=Microsoft,DC=Com), короткое имя домена (Microsoft) и DNS-имя домена (Microsoft.Com). Поставленная задача решается в два этапа. На первом этапе создают WSC-файл, который на втором этапе внедряется в систему.
WSC-файлы WSC-файл – это XML-файл, созданный по определенным правилам и содержащий скриптовые вставки. XML (eXtensible Markup Language) – расширяемый язык разметки, предназначенный для хранения структурированных данных. В большинстве случаев WSC-файл запускается из командной строки с параметром:
Рисунок 1. WSC Wizard. Шаг 1
restart.wsc /action:restart
Windows Script Component Wizard Создать WSC-файл можно вручную, с помощью любого редактора сценариев или мастера, созданного компанией Microsoft – Windows Script Component Winzard (http://www. microsoft.com/downloads/details.aspx?familyid=408024EDFAAD-4835-8E68-773CCC951A6B&displaylang=en). После завершения процесса установки мастера в меню «Пуск → Программы → Microsoft Windows Script» запустите Windows Script Component Winzard. Этот мастер предложит создать WSC-файл за 6 шагов.
Шаг 1. Define Windows Script Component Object На первом шаге работы мастера пользователь определяет параметры создаваемого объекта. Первый параметр (Name) – имя объекта, которое является составной частью ID и автоматически добавится в качестве префикса в значении поля Prog ID (см. рис. 1). Сформированное значение Prog ID – имя объекта, которое участвует при вызове COM-объекта:
Рисунок 2. WSC Wizard. Шаг 2
Замечание: если WSC-файл создается вручную, то понадобится уникальный GUID, который можно сгенерировать на сайте http://www.famkruithof.net/uuid/uuidgen. После того как все поля заполнены, кнопка «Next» станет активна, и можно будет перейти к шагу 2.
Set obj=CreateObject("Detect.Domain")
Шаг 2. Specify characteristics Значения второго (FileName) и пятого (Location) параметров задают точное местоположение и имя создаваемого файла. Четвертым параметром (Version) описывается используемая версия XML в WSC-файле: <?xml version="1.0" encoding="UTF-8"?>
На основе указанной информации в WSF-файл формируется раздел <registration>: <?xml version="1.0"?> <component> <registration description="Detect" progid="Detect.Domain" version="1.00" classid="{fda8dd3e-b1b2-4871-aec5-1fa530dc8f6a}" > </registration> … </component>
№8, август 2007
На этом этапе задаются специфические параметры (см. рис. 2), касающиеся используемого языка, осуществляется настройка обработчика ошибок. С помощью первого параметра (What language do you want to use?) определяется скриптовый язык, используемый в разделе <script> WSC-файла. Им может быть VBScript, JScript или другой, например PerlScript: <?xml version="1.0" encoding="UTF-8"?> <component> <script language="VBScript"> … <script> </component>
Вторым параметром определяется внутренний формат создаваемого файла. Будет ли он совместим с DHTML или с ASP. По умолчанию включена настройка совместимости с DHTML. С помощью оставшихся параметров осуществляют настройку обработчика ошибок. При включенном пер-
81
программирование
Рисунок 3. WSC Wizard. Шаг 3
вом параметре (Error checking) осуществляется проверка на наличие ошибок, при включенном втором параметре (Debugging) – обработка и отладка ошибок. В листинге WSC-файла настройки обработчика ошибок находятся в теге <?component?>: <?xml version="1.0" encoding="UTF-8"?> <component> <?component error ="true" debug="false" ?> … </component>
Если необходимо создать несколько компонентов в одном файле, то теги <component> идентифицируют с помощью уникального идентификатора – ID и помещают в тег <package>. Эта необходимость обусловлена синтаксисом формата XML-файлов, на основе которого создан WSC‑файл: <?xml version="1.0" encoding="UTF-8"?> <package> <component id="Part1"> … </component> <component id="Part2"> … </component> … </package>
К сожалению, с помощью WSC Wizard невозможно создать многокомпонентный файл.
Шаг 3. Add Windows Script Component Properties На третьем шаге задаются свойства компонентов (см. рис. 3), объявляются переменные и константы, которые будут использоваться на следующем шаге при описании методов. Каждая переменная имеет один из трех статусов: чтение, запись и чтение-запись. Например, необходимо преобразовать заданное имя домена (DC=Microsoft,DC=Com) в короткое имя (Micsrosoft.Com). Листинг WSC-файла будет выглядеть примерно так: <?xml version="1.0" encoding="UTF-8"?> <component> <registration>
82
Рисунок 4. WSC Wizard. Шаг 4 <property domain> <get/> <put/> </property> <script> dim domain function get_() get_domain = domain end function function put_domain(newValue) domain = newValue end function </script> … </component>
Соответствующий ему листинг на VBScript следующий: Set obj=CreateObject("Detect.Domain") Obj.Domain = InputBox("Введите имя домена \n ↵ (LDAP://DC=Micrisoft.COM)")
Шаг 4. Add Windows Script Component methods На четвертом шаге декларируются имена функций и названия параметров, которые будут вызываться в качестве методов объекта. Создадим метод LongToDNS, который при заданном значении длинного имени домена (DC=Microsoft,DC=Ru), возвращает его DNS-имя (Microsoft.Ru). Задаваемый параметр (domain) – длинное имя домена (см. рис. 4). В WSC-файле метод описывается внутри обязательного тега <public> с помощью тега <method>: <method>: <public> <method name="LongToDNS"> <PARAMETER name="domain"/> </method> </public>
После декларации метода, в теге <script> нужно объявить одноименную функцию, аргументом которой будет указанный параметр: <script language="VBScript"> <![CDATA[ Function LongToDNS(domain) DomainArray=Split(domain,",") temp="" For Each element In DomainArray
программирование temp=temp+right(element, ↵ Len(element)-3)+"." Next LongToDNS=Left(temp,Len(temp)-1) End Function ]]> </script>
Остальные функции не имеют никаких параметров: определяют имя текущего домена. Полная версия листинга WSC-файла размещена на сайте журнала www.samag.ru в разделе «Исходный код». Замечание: методы, свойства и события приписывают в WSC-файле вручную в разделе <script> после окончания работы мастера. Листинг VBS-файла, использующего создаваемый COMобъект, будет следующим: Set obj=CreateObject("Detect.Domain") Wscript.Echo obj.LongToDNS("DC=Microsoft,DC=RU")
Шаг 5. Add Windows Script Component events На этом шаге описывается третий тип параметров – events (см. рис. 5). Этот шаг обычно пропускается, поскольку события не востребованы в сценариях. Достаточно часто используется при создании HTML- и ASP-страниц.
Шаг 6. That’s all we need! На заключительном этапе приводится информация о характеристиках создаваемого WSC-файла на основе введенных параметров (см. рис. 6).
Модернизация WSC-шаблона После того как WSC-файл создан, необходимо снабдить его комментариями, добавить необходимые функции и процедуры.
Комментарий Комментарий помещают внутрь тега <comment>, расположенного в элементе <package> на одном уровне с <component>, или в элементе <component>, если он родительский. Местоположение комментария внутри оговоренных элементов не имеет значения.
Рисунок 5. WSC Wizard. Шаг 5
№8, август 2007
Вариант А: <?xml version="1.0" encoding="UTF-8"?> <package> <comment> Это комментарий файла </comment> <component id="Part1"> … </component> <component id="Part2"> … </component> … </package>
Вариант Б: <?xml version="1.0" encoding="UTF-8"?> <component> <comment> Это комментарий файла </comment> … </component>
Функции в WSC-файл С помощью WSC Wizard невозможно добавить в файл каких-либо функций. Предлагаемый Microsoft мастер создает шаблон, в котором декларированы переменные и объявляются функции. После работы мастера нужно добавить функции в файл в раздел <script>: <?xml version="1.0"?> <component> … <public> <method name="LongToDNS"> <PARAMETER name="Domain"/> </method> </public> <implements type="Behavior" id="Behavior"/> <script language="VBScript"> <![CDATA[ function LongToDNS(Domain) DomainArray=Split(domain,",") For Each a In DomainArray temp=temp+right(a, Len(a)-3)+"." Next
Рисунок 6. WSC Wizard. Шаг 6
83
программирование LongToDNS=Left(temp,Len(temp)-1) end function ]]> </script> </component>
Импорт пространств имен WSC-файлы, как и XML, конечно же, не знают о других объектах. Чтобы сделать их доступными, необходимо осуществить импорт пространства имен с помощью раздела <reference>, расположенного перед разделом <registration>: <?xml version="1.0"?> <component> … <reference object="Scripting.FileSystemObject" <registration> … </component>
WSC‑файла «Register», или «Подключить», в зависимости от версии Windows (см. рис. 7). После успешной регистрации выдается соответствующее сообщение. В реесте Windows в кусте HKEY_ CLASSES_ROOT\CLSID Рисунок 9. Создание TLB-файла появляется папка, имя которой совпадает с GUID, указанном в разделе <register> (cм. рис. 8).
Второй способ
Второй способ предпочтительнее, однако он более сложный. Суть заключается в том, что на основе WSC-файла создают TLB-файл, который затем преобразовывают в DLL‑библиотеку, которая является полноценным COM‑объектом. В разделе <script>, как в традиционном VBScript, осуДля регистрации TLB-файла выберите в контекстном меществляется вызов функции: ню WSC-файла опцию «Generate Type Library». В результате вызова этой команды будет сгенерирован файл scriptlet.tlb. <script> Если в файле присутствует тег <implements>, будет выведеFunction Save(PathToFile, WriteData) но сообщение с синтаксисом команды (см. рис. 9). set obj = CreateObject("Scripting.FileSystemObject") set fso = obj.CreateTextFile(PathToFile, True, TRUE) После того как создана библиотека, необходимо преоб fso.WriteLine(WriteData) разовать ее в DLL-файл с помощью команды: fso.Close </script>
Регистрация COM-объекта Зарегистрировать созданный компонент в качестве COMобъекта можно несколькими способами.
Первый способ Самый часто используемый способ – зарегистрировать его как псевдо-Com-объект, выбрав в контекстном меню
Tlbimp.exe scriptlet.tlb
Синтаксис утилиты Type Library Exporter (Tlbimp.exe) можно найти на сайте Microsoft: http://msdn2.microsoft.com/ en-us/library/tt0cf3sx(VS.80).aspx. После создания библиотеки ScriptletTypeLib.dll ее необходимо переименовать и зарегистрировать с помощью утилиты regsvr32.exe: regsvr32.exe /s
Третий способ Самый простой: с WSC-файлами можно работать без регистрации. Необходимо знать только имя и местоположение файла. Вызов функций осуществляется с помощью функции GetObject(): Set obj = GetObject("script:C:\Example\DDN.wsc") Wscript.Echo obj.LongToDNS("DN=Microsoft,DN=Com"
Вызов COM-объекта Рисунок 7. Регистрация WSC-файла как COM-компонента
Созданный COM-объект вызывают с помощью функции CreateObject(): Set obj=createobject("Detect.Domain") Wscript.Echo obj.LongToDNS("DN=Microsoft,DN=Com")
Заключение
Рисунок 8. Регистрация COM-объекта в реестре
84
Научившись создавать и регистрировать COM-компоненты из WSC-сценариев различными способами, вы откроете себе новые горизонты в программировании сценариев, которые позволят быстро создавать качественные программы, обладающие значительным функционалом.
ретроспектива
Тяжкий путь первопроходца: история компьютера Foonly F1 Если бы этот компьютер получил малейшую неисправность, мы бы никогда не закончили фильм. Ричард Тейлор, продюсер спецэффектов к фильму «Трон»
Дмитрий Мороз Судьба первопроходцев терниста и зачастую печальна. Компьютер Foonly F1, создатели которого внёсли гигантский вклад в становление и развитие компьютерной графики и цифровых спецэффектов, столь незаслуженно обделён вниманием и сегодня, к сожалению, мало кому известен. Однако история обязательно должна знать своих героев!
Пределу совершенства нет лей, PDP‑10 применялись и в сектоВ 1968 году компания Digital Equipment ре образования, став «стартовой плоCorporation (DEC) выпустила компью- щадкой» для многих известных деятетер KA10, являвшийся первым пред- лей компьютерной индустрии. ставителем нового семейства 16-разСтэнфордский университет был рядных мини-компьютеров PDP-10 одним из таких заведений. Первона(Programmed Data Processor model 10 – чально Лаборатория Искусственного программируемый обработчик данных, Интеллекта при Стэнфорде (Stanford модель 10). Эти системы получили ши- Artificial Intelligence Laboratory – SAIL), рокую распространённость и стали ле- финансируемая DARPA (Defense гендами компьютерной истории. Кро- Advanced Research Projects Agency – ме систем автоматизированного про- агентство передовых оборонных исектирования, контроля производс- следовательских проектов), испольтвенных процессов, научно-исследо- зовала компьютеры PDP-10 для свовательских расчётов и других отрас- их исследований. Однако позже из-за 86
ограничений, которые накладывал устаревший механизм разделения машинного времени (появившийся ещё в 1959 году в PDP-1), было принято решение создать клон KA10, устранив критические для SAIL недостатки архитектуры компьютера. Так стартовал проект Super Foonly. Название произошло от выдаваемого ассемблером PDP-10 сообщения об ошибке «FOO is Not a Legal Identifier», которое в SAIL называли сокращённо FOO NLI. Ядром группы, занимавшейся проектированием системы, были три че-
ретроспектива ловека – Дейв Пул (Dave Poole), Фил Петти (Phil Pettit) и Джек Холоуэй (Jack Holloway). В 1974 году DARPA прекратила финансирование проекта Super Foonly, в результате чего большинство разработчиков ушли в DEC, где их наработки были воплощены в новой модели компьютера – KL10. Пул и компания решили развивать идеи проекта по клонированию PDP-10 самостоятельно, для чего была основана Foonly Inc. Однако из-за отсутствия стартового капитала им пришлось лично обращаться к различным компаниям и крупным исследовательским организациям, предлагая свои услуги.
Родственные души Кроме Foonly Inc., ещё две компании, Systems Concepts и XKL, занимались разработкой клонов PDP-10. Однако наибольших успехов в этом деле достигли инженеры исследовательского центра Xerox в Пало-Альто (PARC). Для своих разработок они попросили руководство купить PDP-10, однако получили отказ. В 1969 году Xerox купила компанию Scientific Data Systems (SDS), занимавшуюся производством компьютеров для научных расчётов, и в принудительном порядке снабжала свои подразделения этими системами. Не желая мириться с ситуацией, в течение 1972 года сотрудники PARC самостоятельно спроектировали и сконструировали два клона KA10, истратив всего один миллион долларов. Эти системы, получившие название MAXC (Multiple Access Xerox Computer – компьютер Xerox с множественным доступом), были построены в честь основателя SDS Макса Палевски (Max Palevsky). От оригинала MAXC отличался, главным образом, поддержкой до 1 Мб памяти (KA10 имел 256 Кб ОЗУ), а также работой под управлением операционной системы TENEX, усовершенствованную версию которой DEC позже выпустила под названием TOPS-20.
Первые шаги Information International Inc. (III, или Triple-I (Тройное-И)) была основана в 1962 году. Основной бизнес компании в то время заключался в производстве электронно-лучевых трубок высокого разрешения для нужд газетной промышленности. Позже Triple‑I
№8, август 2007
использовала свои ЭЛТ для создания цифровых сканеров и принтеров, использовавшихся в теле- и киноиндустрии. В 1974 году в компанию пришли основатели Foonly Inc. и представили проект разработки клона KA10, намного превосходящего его в производительности. Данное предложение оказалось как нельзя кстати, поскольку в это время Triple-I занималась разработкой новой системы оптического распознавания текста по заказу правительства, которая требовала больших вычислительных мощностей. Работа стартовала. Трое основателей Foonly Inc. потратили год на разработку, конструирование и отладку нового компьютера, названного F-1. Основную работу выполнял Пул, которому периодически помогал Петти. ХоКорпус с одной из пяти плат, лоуэй же приходил на помощь к своиз которых состоял Foonly F1 им товарищам лишь в наиболее кри«робкие попытки» оказания услуг китических ситуациях. К сожалению, правительствен- ношникам: инженеры компании посный контракт, для которого Triple-I из- редством двухмерной анимации соначально планировала использовать здали «зрение андроидов» для фильF‑1, был отменён, и компания оста- ма «Западный мир» (Westworld). Компания понимала, что предложелась на руках с очень производительным компьютером, для которого не бы- ние Демоса и Уитни Младшего будет ло никакой работы. Правда, подобная прекрасной возможностью задействовать мощь F1, и ответила согласием. ситуация длилась недолго. Первой «пробой пера» MPPG стаВ 1975 году, ко времени окончания работ над F-1, в Triple-I обратились Га- ла работа над продолжением «Зари Демос (Gary Demos) и Джон Уитни падного мира» – «Миром будущего» Младший (John Whitney, Jr.) с предло- (Futureworld), вышедшем на экраны жением организовать производствен- в 1976 году. Для этой картины в MPPG ную группу по кинофильмам (Motion была отсканирована голова актёра ПиPictures Product Group – MPPG), кото- тера Фонды (Peter Fonda), которая зарая бы занималась созданием компью- тем появилась в фильме в виде трёхтерной графики для нужд теле- и ки- мерной модели. Кроме того, Triple-I создала несколько рекламных роликов ноиндустрии. До этого Демос работал в Evans для компании Mercedes-Benz, а так& Sutherland. Однажды он завёл бе- же американских телеканалов ABC седу с Айвэном Сазерлендом (Ivan и KCET. Для демонстрации возможносSutherland), одним из основателей компании, о перспективах использования тей компании MPPG был создан декомпьютеров при производстве кино- монстрационный ролик под назвафильмов, итогом которого стало осно- нием «Адам Пауэрс, жонглёр» (Adam вание Picture/Design Group. Здесь Де- Powers, The Juggler), режиссёром комос и познакомился с Уитни Младшим, торого стал Ричард Тейлор (Richard одним из пионеров компьютерной гра- Taylor), ранее работавший арт-дифики. К ним присоединился Джим ректором в компании Robert Abel & Блинн (Jim Blinn), ранее трудивший- Associates (специализировалась на ся в национальном аэрокосмическом создании компьютерной графики для агентстве США над трёхмерной ани- телеиндустрии). Он демонстрировал человека в костюме, жонглирующемацией космических полётов. Стоит отметить, что до этого мо- го геометрическими фигурами: красмента Triple-I уже предпринимала ным конусом, зелёным шаром и си-
87
ретроспектива ним кубом, которые являлись симво- В недрах компьютера граммное обеспечение, необходимое лами Triple-I. Для создания ролика со- Во многом об архитектуре F1 известно для работы, тогда как остальные диструдники Triple-I использовали прими- благодаря Дэйву Диеру (Dave Dyer), ра- ки, объединённые вместе, были предтивную форму технологии «захвата нее работавшему с компьютером. Ин- назначены для хранения двух изобрадвижения» (motion capture): они кадр формация о системе, расположенная жений в высоком разрешении. за кадром фиксировали движения на- на его страничке в Интернете, а также Поскольку родного мегабайта опестоящего жонглёра, а затем оцифро- немногие крохи информации, разбро- ративной памяти системе едва хвавали полученные данные и на их осно- санные на просторах Сети – вот и всё, тало для работы со сложной графиве анимировали трёхмерную модель что осталось от F1. Однако даже этих кой, для вывода изображения на экчеловека в костюме. данных достаточно, чтобы приоткрыть ран был изготовлен специальный буфер кадра с собственной памятью Демос и Уитни не собирались до- завесу тайны. вольствоваться мелкими контрактаГлавное отличие F1 от оригинально- объёмом 2 Мб, построенный на базе ми на постоянной основе. Их основ- го дизайна Super Foonly заключалось нескольких сотен чипов статического ной целью было создание компьютер- в использовании электронных компо- ОЗУ ёмкостью 4 Кб. Он мог выводить ной графики для нужд киноиндустрии. нентов, построенных на базе Эмиттер- на растровый монитор в череcстрочВ надежде на дальнейшее сотрудни- но-связанной логики (Emitter-Coupled ном (интерлейсном) режиме изобрачество Triple-I создала тестовую трёх- Logic, ECL) вместо более медленной жение размером 1024х1024 пикселей мерную анимацию для фильмов «Близ- Транзисторно-транзисторной логики и глубиной 18 бит (262 тысячи цветов). Кроме того, во время рендеринга комкие контакты третьей степени» (Close (Transistor-Transistor Logic, TTL). Encounters of the Third Kind), «ЗвёздВся «начинка» F1 была собрана на пьютер мог использовать память буные войны. Эпизод V: Империя нано- пяти больших платах, соединённых фера кадра для хранения промежусит ответный удар» (Star Wars. Episode между собой жгутами кабелей. Пос- точных данных. V: Empire Strikes Back) и «Чёрная дыра» кольку использование ECL-микросхем В качестве средств ввода инфор(Black Hole). К сожалению, до подписа- неизбежно вело к большому энерго- мации в F1 использовались два грания контракта в случае с этими карти- потреблению и как следствие высо- фических планшета производства нами дело ни разу не дошло. кому тепловыделению, каждая плата Talos Systems с размерами 152х122 см. Первый и, к сожалению, послед- была установлена в отдельный корпус Компьютер предусматривал подклюний серьёзный клиент в лице студии с собственной системой охлаждения. чение до четырёх графических терDisney появился у Triple-I лишь спусКомпьютер содержал блок памяти миналов с векторными дисплеями тя пять лет, в начале 80-х. Именно это на ферритовых кольцах ёмкостью 1 Мб от Tektronix. Присутствовал и накописотрудничество позднее будет зане- производства компании Ampex. Диско- тель на магнитной ленте, считывавсено в анналы истории компьютер- вая подсистема, построенная на ба- ший данные с одной катушки, способной графики. зе контроллера RH-10 компании DEC, ной хранить 9 Мб информации, со скоОднако прежде чем продолжить по- состояла из трёх жёстких дисков об- ростью 800 бит/с. вествование, настал черёд рассказать щей ёмкостью 50 Мб. Один винчестер Компьютер нельзя было считать сао внутреннем устройстве F1. был системным и содержал всё про- модостаточным, поскольку для его работы необходимо было наличие отдельного KA-10, который выполнял роль «консольного процессора». Поскольку F1, даже будучи работоспособным, всё ещё находился на стадии разработки, отдельный компьютер был необходим для начальной инициализации и загрузки операционной системы. Кроме того, KA-10 использовался в качестве средства для отладки F1, а также устранения постоянно возникавших неполадок. К компьютеру DEC был подключён модем, благодаря которому в случае возникновения внештатной ситуации Дейв Пул мог удалённо провести предварительную диагностику всей системы. KA-10 как отдельный компьютером, имел собственный набор аппаратного обеспечения: дисковые контроллеры, жёсткие диски, накопители на магнитной ленте и даже матричный принтер. Мучительно долгая загрузка системы Кадр из ролика «Адам Пауэрс, жонглёр»
88
ретроспектива происходила с перфокарт, поэтому включение F1 с холодного старта отнимало до часа времени. Тем не менее компьютер, произведённый инженерами Foonly Inc., стал самым быстрым PDP-10 в мире: в то время как KA-10 только-только преодолел рубеж в один миллион операций за секунду (MIPS), F1 мог похвастаться в шесть раз большей производительностью. Теоретически же он мог достигать скоростей вплоть до 10 MIPS. Для вывода обработанного изображения на киноплёнку к F1 был подКадры из фильма «ТРОН». Транспортный корабль Сарка ключён модифицированный фильмпринтер PFR-80, который печатал на стандартной 35-мм плёнке. Компьютер без программного обеспечения – всего лишь груда металлолома (хоть на тот момент и очень дорогого). Понимали это и в Triple-I, поэтому параллельно с разработкой F1 кипела работа и над написанием программ, которые должны были работать на нём. Главным инструментом для создания трёхмерной графики служило ПО под названием TRANEW, созданное группой программистов во главе Кадры из фильма «ТРОН». «Солнечный парусник» с Джимом Блинном. Основным языНу а теперь, ознакомившись с ком- здание всей компьютерной графики ком для написания TRANEW был Фортран, однако наиболее критические час- пьютером, мы можем смело двигать- к фильму. Однако финансовые трудности Triple-I, а также уход Демоса ти кода были оптимизированы при по- ся дальше. и Уитни Младшего вследствие размощи Ассемблера. ногласий с руководством компании, Данные, обрабатываемые TRANEW, Боевое крещение можно было вводить вручную посредс- В 1980 году Disney посетил начина- вынудили Disney распределить задатвом специальных команд либо же ющий аниматор Стивен Лисбергер чи между несколькими студиями. Тапредставлять в виде хеш-таблиц, в ко- (Steven Lisberger), предложивший на- ким образом, к проекту присоединиторых содержались координаты каж- писанный им сценарий для будуще- лись MAGI/Synthavision, Digital Effects дого полигона объекта, отдельные го фильма, повествующего о приклю- и Robert Abel & Associates. Что же касается Triple-I, на её до(красный, синий, зелёный) компонен- чениях внутри компьютера. Поскольты цвета текстуры, а также координа- ку студия в то время страдала от не- лю выпало создание «Солнечного паты расположения камеры и траекто- достатка свежих идей, текст пришёл- русника», транспортного корабля злодея Сарка и Программы Мастер-конрии её движения. Для каждого трёх- ся руководству по душе. Работы над фильмом, которому троль. мерного объекта можно было задать Разработка дизайна технических собственные параметры освещённос- было дано название «ТРОН» (TRON), ти, отражающей способности, про- стартовали в апреле 1981 года. Из- средств в «ТРОН’е» была поручена изначально Лисбергер хотел, чтобы его вестным художникам Жану «Мёбиусу» зрачности и т. д. Компанию TRANEW составляли: фильм состоял целиком из компьютер- Жиро (Jean «Moebius» Giraud) и Сиду ASAS (редактор описания движения ной графики, однако трезвый ум под- Миду (Syd Mead). Их концепт-рисунки объектов в сцене), GEOMED (програм- сказывал ему, что конечный резуль- являлись отправной точкой для дальма, с помощью которой осуществлялся тат обычные зрители вряд ли поймут нейшей работы Triple-I. Художниками MPPG было подгоперенос модели, нарисованной на бу- и оценят, а Disney останется недовольмажном чертеже, в цифровую форму) ной стоимостью проекта. Однако пол- товлено по шесть каркасных чертеи TWEAK (набор утилит для редакти- ностью отказаться от цифровых эф- жей на каждую модель, которые затем рования трёхмерных объектов). В об- фектов было нельзя, поэтому студия отправлялись на сканирование. Используя графический планшет, а такщей сложности на создание програм- и обратилась к Triple-I. Первоначально на плечи сотруд- же программу GEOMED, художник скамного обеспечения для F1 ушло 20 чеников отдела MPPG возлагалось со- нировал пером каждую вершину геоловеко-лет.
№8, август 2007
89
ретроспектива
Кадры из фильма «ТРОН». Программа Мастер-контроль
метрической фигуры, из которых состояла модель, с бумаги в компьютер. На основе полученных данных выполнялось дальнейшее моделирование объекта. Благодаря применению полигонального метода проектирования трёхмерных моделей, при котором объект состоит из множества треугольников, называемых полигонами, финальный результат по качеству уходил далеко вперёд по сравнению с моделями, созданными для фильма специалистами MAGI (использовавшими процедурный метод, при котором объект создаётся путём комбинации простейших геометрических фигур). Например, «Солнечный парусник» состоял из 15 тысяч полигонов, что по тем временам было просто невероятной цифрой. Подобная детализация, однако, требовала немалых жертв. После внесения изменений в сцену художнику приходилось ждать несколько минут, прежде чем обновлённый результат появлялся на экране. Рендеринг каждого кадра занимал 20 минут. Его печать на киноплёнке длилась ещё несколько минут. В результате, например, для производства 10 секунд готовой трёхмерной анимации F1 требовалось около 80 часов. В конечном итоге из 105 минут экранного времени, которые длится «ТРОН», 15 были полностью сгенерированы на компьютере, а ещё 15 минут представляли собой комбинированные съёмки, совмещавшие живых актёров на фоне компьютерных объектов.
Забытьё Прокатная история «ТРОН’а» была не слишком успешной, что непосредственным образом повлияло на Triple‑I,
90
вложившую в фильм все свои силы. Компания была вынуждена в 1982 году закрыть MPPG и сфокусировать свои дальнейшие усилия исключительно на старом бизнесе – производстве оборудования для газетной индустрии. Foonly F1, оставшийся не у дел, был приобретён Omnibus Computer Graphics, впечатлённой «ТРОН’ом» и возлагавшей на компьютер серьёзные надежды по производству компьютерной графики для телевизионного и кинорынков. Впоследствии эта компания использовала F1 для создания спецэффектов к фильмам «Исследователи» (Explorers) и «Полёт Навигатора» (Flight of the Navigator). Гари Демос и Джон Уитни Младший, ушедшие из Triple-I, основали собственную компанию, получившую название Digital Productions. Используя суперкомпьютер Cray X-MP, арендованный у самой Cray Inc., а также фильм-принтер под заурядным названием Digital Film Printer (наследник PFR‑80), они создали компьютерные спецэффекты для фильмов «Последний звёздный боец» (The Last Starfighter) и «2010». В стремлении завоевать лидирующие позиции на американском рынке в 1986 году Omnibus приобрела своих главных соперников – компании Robert Abel & Associates и Digital Productions. Однако совершённая покупка негативным образом сказалась на не самых радужных финансовых показателях компании. Год спустя Omnibus, не имеющая средств для дальнейшего существования, была вынуждена объявить себя банкротом, а всё имущество – пустить с молотка. Впоследствии F1 всплыл в недрах компании Intergon, которая, за гро-
ши выкупив его у предыдущего владельца, пыталась использовать уже давно морально устаревший компьютер по предназначению. Дальнейшая судьба F1, к сожалению, осталась неизвестной. Что же касается Foonly Inc., после окончания работ над F1, компания построила по заказу различных компаний, нуждающихся в PDP-10, однако не желающих переплачивать за них DEC, ещё четыре различные модели систем (названные соответственно F2…F5). Почти все они были уменьшенными аналогами F1. Например, архитектурно F2 изначально представлял собой «консольный процессор», который должен был подключаться к предшественнику вместо KA-10. Недостатком компьютеров Foonly Inc. являлась работа под управлением собственного варианта операционной системы TENEX под названием Foonex, тогда как продукция DEC использовала в качестве ОС TOPS-20. Кроме того, все произведённые компьютеры не были готовыми системами, а представляли собой, как и F1, прототипы в виде нескольких плат, соединённых множеством проводов, что значительно снижало надёжность их работы. Для установки и последующего обслуживания каждой системы необходимо было постоянное присутствие высококвалифицированного персонала. Данные обстоятельства серьёзно ограничивали рынок, на который могла претендовать компания. К 1983 году Foonly Inc., никогда не обладавшая сколь-нибудь значительными финансовыми активами для поддержания собственной деятельности, лишилась последних заказов и была вынуждена объявить себя банкротом. В 1999 году Дейв Пул отправился в плавание на собственной яхте и, подобно своему детищу F1, пропал без вести. Тяжкий путь первопроходцев, создателя и его творения, подошёл к концу. 1. http://www.wikipedia.org. 2. http://vhost2.zfx.com/~dave. 3. http://www.accad.ohio-state.edu/~waynec/ history/tree. 4. http://www.spies.com/aek/pdf/xerox. 5. http://pdp10.nocrew.org. 6. http://www.tron-sector.com.
книжная полка
Рефакторинг баз данных: эволюционное проектирование Скотт Эмблер, Прамодкумар Садаладж
Рефакторинг, следуя определению, данному во введении книги, в широком смысле означает «улучшение качества сделанной вами работы без нарушения или добавления чего-либо». Здесь же методики, предназначенные для совершенствования программного исходного кода, переносятся в сферу баз данных. Авторам удалось совместить два
важных направления не только в области использования методов рефакторинга применительно к базам данных, но и на концептуальном уровне вообще: это теоретическая информация, призванная способствовать совмещению реляционного и объектноориентированного подходов, и практические рекомендации, следуя которым специалист сможет добиться значительных улучшений при проектировании баз данных и работе с ними. В вводной части описаны основные сведения об эволюционном подходе к моделированию баз данных, их регрессионном тестировании и о существующих в подобных методиках недостатках, рассмотрены операции рефакторинга БД в общем виде и возможности их развития, сам процесс рефакторинга и вопросы его внедрения. Каждая такая вводная глава оканчивается небольшим резюме, где под-
водится итог для представленной теоретической базы. Затем вниманию читателя предстают различные операции рефакторинга, которые затрагивают структуру, качество данных, ссылочную целостность, архитектуру, методы. В завершающей главе можно найти такие преобразования, как вставка данных, введение нового столбца, таблицы и представлений, а также обновление данных. Все примеры использования рефакторинга в программировании приведены для языка Java, а непосредственно баз данных – для Oracle.
n Издательство: n Год издания: n Количество страниц: n ISBN: n Цена:
«Вильямс» 2007 672 978-5-8459-1157-5 ≈ 650 руб. К н и г а п р е д о с т а в л е н а и з д ат е л ь с т в о м «Вильямс».
Разработка приложений в среде Linux, 2-е издание Майкл Джонсон, Эрик Троан
Эта книга небезосновательно входит в число наиболее популярных и всеобъемлющих «печатных помощников» Linux-программистов. Она прошла рецензию у группы лидирующих разработчиков Linux-ядра, что обеспечило ей минимальный разрыв между теорией и практикой. В начале книги представлена краткая история появления и развития
92
Linux-ядра, а также рассмотрены лицензии на свободное программное обеспечение. Далее следует анализ имеющихся в мире свободного ПО сред разработки и вспомогательных средств, в котором приведено лаконичное знакомство с традиционными консольными редакторами (vi, emacs), утилитами make, gcc и отладчиками, а также освещено взаимодействие с различными библиотеками. Основу же издания составляет подробное описание возможностей системного программирования в Linux, затрагивающего управление процессами, заданиями и обработку сигналов, работу с файлами и каталогами, сокеты, терминалы и консоль. В завершении авторы предлагают разработчикам примеры использования вспомогательных библиотек, таких как S-Lang для управления терминалами и qdbm для работы с базами данных.
Среди существенных изменений в книге по сравнению с первым изданием отмечаются такие нововведения, как описание библиотеки glibc, утилит strace/ltrace, набора утилит для отладки Valgrind, системных вызовов poll/epoll, реализации PAM, создание защищенных программ. Из недостатков можно выделить зачастую слабую документированность приводимых примеров исходного кода, что может затруднить понимание важных аспектов Linux-программирования – это особенно актуально для начинающих разработчиков.
n Издательство: n Год издания: n Количество страниц: n ISBN: n Цена:
«Вильямс» 2007 544 978-5-8459-1143-8 ≈ 464 руб. К н и г а п р е д о с т а в л е н а и з д ат е л ь с т в о м «Вильямс».
книжная полка
Руководство администратора Linux, 2-е издание Эви Немет, Гарт Снайдер, Трент Хейн
C трудом верится, что сегодня можно встретить системного администратора, работающего с операционной системой GNU/Linux и не знакомого с этим классическим руководством, второе издание которого недавно появилось в России. Второе издание «Руководства администратора Linux» – это обновленная редакция фундаментального и обя-
зательного к прочтению труда известных Linux-гуру. Пусть рассматриваемые в книге дистрибутивы уже не последних версий, их неплохое (для подобного издания) соответствие актуальным релизам неоспоримо. Список же таков: RHEL 4.3 ES, Fedora Core 5, SLES 10.2, Debian GNU/Linux «Etch» (тестовая сборка от сентября 2006), Ubuntu 6.06. Спектр освещаемых вопросов очень широк: авторы, начав с установки Linux, проводят читателя через армаду проблем, с которыми ежедневно сталкиваются системные администраторы, и завершают книгу более тонкими вещами – стратегиями управления. Из кораблей в упомянутой армаде можно выделить следующее: процессы, привилегии и управление учетными записями пользователей, файловая система и права доступа, работа с жесткими дисками (добавление устройств, резервное копирование), мониторинг работы
ОС, управление пакетами ПО, базовые аспекты сетевой работы, DNS‑сервер BIND, сетевая файловая система NFS, NIS и LDAP, почтовое ПО (наибольшее внимание по-прежнему уделено Sendmail, но также рассмотрены Exim и Postfix), многие аспекты безопасности, веб-сервер Apache, графическое окружение, печать (CUPS). В отдельные главы также вынесена дополнительная информация по таким вопросам, как работа с железом, Linuxядро и драйверы устройств, взаимодействие с Windows (VNC, RDP, Samba), демоны различного назначения.
n Издательство: n Год издания: n Количество страниц: n ISBN: n Цена:
«Вильямс» 2007 1072 978-5-8459-1093-6 ≈ 679 руб. К н и г а п р е д о с т а в л е н а и з д ат е л ь с т в о м «Вильямс».
Защита вашего компьютера от сбоев, спама, вирусов и хакеров на 100% (+CD) Сергей Яремчук
Несмотря на то что автор этой книги написал не один десяток статей для нашего журнала, вряд ли кто осмелится всерьез советовать ее опытным системным администраторам. Хотя бы из‑за заметных различий в целевых аудиториях изданий, о чем можно догадаться по одному только ее названию. Это подтверждает и официально обозначенный «уровень пользовате-
№8, август 2007
ля», на которого ориентировано содержимое, – «начинающий». Причем множество рекомендаций и рассматриваемых проблем относится исключительно к платформе Microsoft Windows. Книга представляет собой «ликбез массового назначения», то есть простое в освоении руководство по безопасной эксплуатации компьютера для людей, знакомящихся с работой на ПК и желающих избежать последствий возможных угроз, что таит в себе компьютерный мир. Читателю подается и базовая теория о том, какие проблемы с безопасностью могут возникать, и элементарная практика по тому, какие действия необходимо предпринимать в тех или иных ситуациях. Среди рассматриваемых «проблем»: вирусы и трояны, руткиты и ошибки в программном обеспечении, сетевые атаки, распростра-
ненные в Интернете методики обмана (фишинг и фарминг). Кроме того, затронуты темы спама, анонимности работы в сети, а также здоровья ребенка, работающего за ПК. Там, где это возможно, вкратце проанализированы конкретные средства защиты: антивирусы, ПО для поиска руткитов, брандмауэры, IDS, спам-фильтры, системы ограничения доступа к ПК и Интернету. Некоторые дополнительные главы вынесены на прилагаемый к книге CD‑диск (в формате PDF).
n Издательство: n Год издания: n Количество страниц: n ISBN: n Цена:
«Питер» 2007 288 978-5-469-01639-7 ≈ 189 руб. К н и г а п р е д о с т а в л е н а и з д ат е л ь с т в о м «Питер».
Обзор книжных новинок подготовил Дмитрий Шурупов
93
подписка на 2007 год
Редакционная подписка для физических лиц n Вы можете оформить подписку
n Вы можете оформить подписку
n Журнал высылается почтой прос-
на любой российский адрес. n При заполнении квитанции обя‑ зательно РАЗБОРЧИВО укажи‑ те фамилию, имя, отчество пол‑ ностью, почтовый индекс и ад‑ рес получателя (область, город, улица, номер дома, номер квар‑ тиры), контактный телефон.
с любого месяца на любой срок. n В графе «Сумма» проставьте сумму за выбранное количество номеров. Стоимость одного номера журнала 150 руб. За 10 месяцев (с марта по декабрь) – 1500 руб. НДС и почтовые расходы включены в стоимость.
той бандеролью только после поступления денег на расчетный счет и копии заполненного и оплачен‑ ного бланка, отправленной в ре‑ дакцию по факсу: (495) 628‑82‑53 или на элек тронный а д рес: info@samag.ru.
94
подписка на 2007 год Российская Федерация
n Подписной индекс: годовой – 20780, полугодовой – 81655
Каталог агентства «Роспечать» n Подписной индекс: 87836 Объединенный каталог «Пресса России» Адресный каталог «Подписка за рабочим столом» Адресный каталог «Библиотечный каталог» n Альтернативные подписные агентства: Агентство «Интер-Почта» (495) 500-00-60, курьерская доставка по Москве Агентство «Вся Пресса» (495) 787-34-47 Агентство «Курьер-Прессервис» Агентство «ООО Урал-Пресс» (343) 375-62-74 ЛинуксЦентр www.linuxcenter.ru n Подписка On-line http://www.arzi.ru http://www.gazety.ru http://www.presscafe.ru
СНГ В странах СНГ подписка принимается в почтовых отделениях по национальным каталогам или по списку номенклатуры «АРЗИ»: n Азербайджан – по объединенному каталогу российских изданий через предприятие по распространению
печати «Гасид» (370102, г. Баку, ул. Джавадхана, 21)
n Казахстан – по каталогу «Российская Пресса» через ОАО «Казпочта» и ЗАО «Евразия пресс»
n Беларусь – по каталогу изданий стран СНГ через РГО «Белпочта» (220050, г. Минск, пр-т Ф. Скорины, 10)
n Узбекистан – по каталогу «Davriy nashrlar» российские издания через агентство по распространению печати «Davriy nashrlar» (7000029, г. Ташкент, пл. Мустакиллик, 5/3, офис 33) n Армения – по списку номенклатуры «АРЗИ» через ГЗАО «Армпечать» (375005, г. Ереван, пл. Сасунци Давида, д. 2) и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул. Сарьяна, 22) n Грузия – по списку номенклатуры «АРЗИ» через АО «Сакпресса» ( 380019, г. Тбилиси, ул. Хошараульская, 29) и АО «Мацне» (380060, г. Тбилиси, пр-т Гамсахурдия, 42) n Молдавия – по каталогу через ГП «Пошта Молдовей» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134) по списку через ГУП «Почта Приднестровья» (МD-3300, г. Тирасполь, ул. Ленина, 17) по прайс-листу через ООО Агентство «Editil Periodice» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134) n Подписка для Украины: Киевский главпочтамт Подписное агентство «KSS», тел./факс (044)464-0220
Подписные индексы:
20780* 81655** по каталогу агентства «Роспечать»
87836 по каталогу агентства «Пресса России» *
годовой полугодовой
**
№8, август 2007
95
СИСТЕМНЫЙ АДМИНИСТРАТОР №8(57), Август, 2007 год УЧРЕДИТЕЛИ Владимир Положевец Александр Михалев РУКОВОДИТЕЛЬ ПРОЕКТА Петр Положевец РЕДАКЦИЯ Исполнительный директор Владимир Положевец Ответственный секретарь Наталья Хвостова sekretar@samag.ru Технический редактор Владимир Лукин Главный редактор электронного приложения «Open Source» Дмитрий Шурупов Внештатные редакторы Алексей Барабанов Валентин Синицын Дмитрий Горяинов Роман Сузи Андрей Бирюков РЕКЛАМНАЯ СЛУЖБА тел./факс: (495) 628-8253 Евгения Тарабрина reсlama@samag.ru Верстка и оформление maker_up@samag.ru Дизайн обложки Дмитрий Репин Николай Петрочук По вопросам распространения обращайтесь по телефону: (495) 628-8253 (доб. 120) 107045, г. Москва, Ананьевский переулок, дом 4/2, стр. 1 тел./факс: (495) 628-8253 Сайт журнала: www.samag.ru ИЗДАТЕЛЬ ЗАО «Издательский дом «Учительская газета» Отпечатано типографией ГП «Московская Типография №13» Тираж 15000 экз. Журнал зарегистрирован в Министерстве РФ по делам печати, телерадиовещания и средств массовых коммуникаций (свидетельство ПИ № 77-12542 от 24 апреля 2002 г.). За содержание статьи ответственность несет автор. За содержание рекламных материалов ответственность несет рекламодатель. Все права на опубликованные материалы защищены.
96
Читайте в следующем номере: Миграция с SPS 2003 на MOSS 2007 Переход с Sharepoint Portal Server 2003 на Microsoft Office Sharepoint Server 2007 потребует от системного администратора не только времени, но и предварительной теоретической подготовки. Хотя бы потому, что перейти на новую версию можно как минимум тремя способами. Каковы преимущества и недостатки каждого варианта, и как осуществить миграцию, читайте в следующем номере журнала.
Вариант настройки спутникового Интернета в Mandriva Linux 2007 Mandriva Linux 2007 считается идеальным решением для домашнего компьютера. Но ядро версии 2.6.17 этой ОС не поддерживает DVB-карту SkyStar 3, которая позволит организовать доступ к спутниковому Интернету. Подробности о том, как обойти эту проблему, ищите в сентябрьском выпуске.
Организуем коммерческий хотспот Технология беспроводной передачи данных Wi-Fi уже давно распространена во всём развитом мире. Во многих публичных местах расположены бесплатные или коммерческие хотспоты. Однако в большинстве городов России использование Wi-Fi находится в зачаточном состоянии. Одна из причин этого – недостаток информации
по организации публичных точек доступа. В следующем номере журнала мы расскажем, как без больших материальных затрат организовать коммерческий хотспот.
Создаем сервис телерадиовещания в интранет-сети В современных сетях интранет уже давно внедрен и успешно применяется сервис VoIP, позволивший организовать дешевую голосовую связь. В свою очередь, увеличение пропускной способности канала влечет за собой появление новых сервисов, способных существенно изменить представление о современной IP-сети. Сейчас есть возможность получать сервисы файлообмена, Интернет, телефонию и телевидение по одному кабелю. В итоге подобные решения позволяют сэкономить на кабельной инфраструктуре и ее обслуживании, а также повысить качество предлагаемых услуг, их удешевление и появление ранее не существовавших сервисов. Что же может уже сейчас предоставить современная IP‑сеть? Доступ в сеть Интернет, обмен файлами (p2p), услуга IP-телефонии, телеконференции, теле- и радиовещание, видеонаблюдение. В сентябрьском выпуске «Системного администратора» вы найдете описание создания простого сервиса телерадиовещания и познакомитесь с технологиями имитационного моделирования.
Уважаемые читатели! Продолжается подписка на 2-ое полугодие 2007 года. Приобрести новые и старые номера журнала вы можете через интернет-магазин LinuxCenter.ru.
Доставка почтой в любую точку России.