Так видит журнал читатель, который забыл оформить подписку:
КА
БЫ С
ТР О ТИ РАС РА КУ Ж ПИ
НИ НО К У ВО ЛЫ ГО ЗА ДНИ ТЯ Е НУ ЛИ
ЛИ
СЬ
№5(30) май 2005 подписной индекс 81655 www.samag.ru
Почему MS SQL медленно работает? Ищем причины Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD Что важно знать об IP-телефонии
№7(44) июль 2006 подписной индекс 20780 www.samag.ru
танавливаем Symantec Antivirus 9.0 в корпоративной сети Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM
Так видит журнал читатель, оформивший подписку: №5(30) май 2005 подписной индекс 81655 www.samag.ru
Почему MS SQL медленно работает? Ищем причины Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD Что важно знать об IP-телефонии танавливаем Symantec Antivirus 9.0 в корпоративной сети
№7(44) июль 2006
КО НЕО НЧ ЖИ ИЛ ДА ИС НН ЬД О ЕН ЬГ И ЗА
ПО АВ СЛ РА Е О Л НА ТПУ РА СКА БО ТЕ
УЕ ХА Л
ВО
ТП УС К
Интервью с Ларри Уоллом – создателем языка Perl
Greylisting: хуже спама – только борьба со спамом! StressLinux: автоматизируем тестирование железа Устанавливаем Systems Management Server 2003 FreeNAS: строим надежную систему хранения данных
Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM Интервью с Ларри Уоллом – создателем языка Perl
Как увеличить безопасность процессов посредством chroot и jail OpenVPN: доступ повышенной проходимости
ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Роспечать – 20780, 81655 Пресса России – 87836 Интер-почта – тел. (495) 500-00-60
Статистика прокси-сервера Squid Интервью с легендарным Расмусом Лердорфом – создателем языка PHP
в номере 5 ТЕНДЕНЦИИ
53 OpenVPN: доступ повышенной проходимости
ИНТЕРВЬЮ 6 Расмус Лердорф
Вы думаете, что 11 лет назад я решил разработать язык сценариев, которым будут пользоваться во всем мире!? Дмитрий Горяинов dg@webclub.ru
ВЕБ-ПРОГРАММИРОВАНИЕ 9 Заглянем в будущее PHP 6
Что ожидается в новой версии PHP? Кирилл Сухов geol@altertech.ru
АДМИНИСТРИРОВАНИЕ 12 Greylisting: панацея от спама или «мыльный пузырь»?
Попытки покончить со спамом похожи на попытки достичь горизонта – чем быстрее мы к нему движемся, тем быстрее он отдаляется. Сергей Супрунов amsand@rambler.ru
16 Roaring Penguin CanIt: ведём борьбу со спамом
Простое в установке, настройке и последующей эксплуатации антиспам-решение. Сергей Яремчук grinder@ua.fm
23 Как работает Sendmail? Полезные подробности. Часть 3
Если почтовый сервер перестал справляться с нагрузкой, не спешите покупать «железо» помощнее. Возможно, возможно всё решится грамотной настройкой Sendmail. Сергей Супрунов amsand@rambler.ru
32 Статистика прокси-сервера Squid
Журнальные файлы Squid даже для небольших предприятий могут быть очень объёмны. Для ведения статистики или учёта нужны вспомогательные программы. Павел Малахов 24pm@mail.ru
42 Автоматизируем тестирование железа с помощью StressLinux
Создаем инструмент для автоматического тестирования железа всех узлов локальной сети. Дмитрий Волков volkov_d@nikiet.ru
48 FreeNAS: строим надежную систему хранения данных
Как переносить данные с различных носителей в централизованное хранилище? Как строить системы хранения информации в небольших организациях? Сергей Яремчук grinder@ua.fm Оформили подписку!
Мужики, где журнал взяли?
№7, июль 2006
Почему я до сих пор этого не сделал?!
Летим скорее на почту!
Я забыл подписаться!
Своевременный доступ к информации, хранящейся внутри корпоративной сети компании, порой становится решающим фактором успешной работы сотрудников. И иногда предоставить доступ оказывается не так-то просто. Алексей Коршунов akeeper@samag.ru
60 Устанавливаем и настраиваем Systems Management Server 2003
Рутинную работу по установке и обновлению ПО лучше доверить System Management Server. Андрей Бирюков mex_inet@rambler.ru
64 Возможности технологии MS Windows SharePoint Services Часть 2
Что делать, когда требуется расширить функциональность технологии WSS и улучшить внешний вид веб-узла. Иван Хрипунов i-ivank@microsoft.com
ЧЕЛОВЕК НОМЕРА 70 Один в поле – воин!
Сергей Рыжиков, директор компании «Битрикс», против аутсорсинга, пиратов и интернет-шантажа. Оксана Родионова rodion@dol.ru
СЕТИ 74 Управляем зонами DNS
Запускаем и настраиваем программу BIND, регистрируем доменное имя, дожидаемся завершения тестов – и можно раздавать друзьям адреса mymail@shortdomain.com! Рашид Ачилов shelton@granch.ru
БЕЗОПАСНОСТЬ 78 Как увеличить безопасность процессов с помощью chroot и jail
Каковы преимущества и недостатки сhroot и jail – двух разных способов изолировать процесс от основной файловой системы? Василий Озеров fr33man@fr33man.ru
РЕТРОСПЕКТИВА 84 Попытка изменить мир: хроники компании NeXT
Слухи об этой компании перестали циркулировать сразу же после её исчезновения. Тем не менее, наследие, оставленное NeXT, очень внушительно и не должно быть забыто. Дмитрий Мороз akuji@list.ru
92 КНИЖНАЯ ПОЛКА Информация о подписке на 94 стр.
Лучше каждому получать отдельный экземпляр журнала Принес номер на работу, «увели» почитать
И у меня такая же беда
А можно ещё успеть?
Как же я без любимого журнала?
1
Спасибо Теду Кекатосу за профессиональный праздник 28 июля сисадмины всей страны будут отмечать День системного администратора. В свой профессиональный праздник вы можете выйти на улицы с мышами и клавиатурами, чтобы устроить своеобразный флеш-моб и заявить миру о своем существовании. Придумал праздник 6 лет назад американский системный администратор Тед Кекатос. С тех пор последняя пятница июля считается священным днем, когда сисадмины, вебмастера и другие ИТ-специалисты могут после рабочего дня вдоволь повеселиться вместе, пожелать друг другу профессиональных успехов и побольше толковых пользователей. Координационный центр по празднованию этого дня сосредоточен на сайте «Сисадмин тоже человек» (http://sysadmin.mail.ru), одном из ресурсов для сисадминов. Организаторы сайта продумали для вас целую программу Полина Трояновская, руководитель празднования. проекта «Сисадмин@Mail.Ru» На сайте создан новый раздел, в котором каждый из вас может найти коллег из своего города, чтобы в шумной, веселой компании отметить праздник. Кроме этого, на сайте вы можете воспользоваться системой поиска коллег со схожими интересами. Многие системные администраторы говорят, что им сложно вырваться в отпуск и вволю отдохнуть, что работа держит в офисе и конца ей не видно. Мы думаем, именно поэтому День сисадмина празднуют летом. Он, словно маленький отпуск, украшает собой даже самые горячие трудовые будни. Поздравляем всех с наступающим праздником и желаем отличного настроения, побед в конкурсах, веселых встреч с друзьями и коллегами! Пусть День сисадмина-2006 станет для вас настоящим праздником!
Сисадмины попадут в книгу рекордов! Уже запущен конкурс сисадминских рекордов — профессиональных, личных, серьезных и шуточных. Самые громкие и самые оригинальные достижения составят «Сисадминскую книгу рекордов», причем оценивать «взлеты» будут сами посетители сайта. Авторов лучших рекордов наградят сувенирной продукцией, подарочными сертификатами интернет-магазина Daripodarki.ru, сертификатами на обучение в Учебном Центре Softline, призами от спонсоров и организаторов, подпиской на журнал «Системный администратор». Кроме этого, на сайте можно будет выиграть футболку с надписью «Сисадмин тоже человек» и эпатировать ею прохожих. Готовьтесь к конкурсу репортажей о том, как вы отметили свой профессиональный день. Вы сможете размещать на сайте интересные отчеты и забавные фото. Авторы лучших материалов получат призы.
«Бред юзера или явь сисадмина»? Завершением программы празднования станет выход в свет второго тома книги «Бред юзера или явь сисадмина», своеобразного сборника сисадминских историй, баек, стихов, первый том которого был издан два года назад. Примечательно, что сайт http://sysadmin.mail.ru был создан в 2004 году как раз в связи с празднованием Дня сисадмина. Тогда на этом ресурсе проводили конкурс «Сисадмин тоже человек», организованный http://soft.mail.ru. Оказалось, что тема, несмотря на свою специфичность, очень востребована. Название конкурса трансформировалось в название сайта, который стал активно развиваться. День Системного Администратора – отличный повод собраться вместе на сайте или в родном городе. Пусть он пройдет так, чтобы было о чем вспомнить. До скорых встреч!
тенденции Закон приняли. Поправки отклонили Как и предсказывал «Системный администратор» в конце июня Госдума поставила точку в нашумевшей истории с запретом зарубежного софта (№6 за 2006 год). Проект федерального закона «Об информации, информационных технологиях и защите информации» во втором чтении поддержали 395 из 450 депутатов. И также активно думцы… промолчали по поводу двух поправок, касающихся запрета использования зарубежных программно-технических средств в стратегических отраслях и особо важных объектах, а также недопустимости наличия в данных средствах недокументированных функций. Авторы поправок, единороссы Геннадий Гудков и Александр Хинштейн, вынесли их на отдельное голосование. Но подавляющее большинство депутатов – 382 и 386 – просто уклонились от процедуры, демонстративно проигнорировав все возможные позиции – «за», «против», «воздержался». «По сути это был саботаж, невыполнение прямых обязанностей народных избранников», – сказал «Системному администратору» Дмитрий Горовцов, помощник депутата Госдумы РФ Геннадия Гудкова. Только 65 и 63 депутатов при голосовании за первую и вторую поправки определились со своей позицией и нажали кнопку «за». Таким образом «зеленый свет» дан и зарубежному софту в России, и прославившемуся законопроекту. «В целом, – пообещал Председатель Госдумы Борис Грызлов, – мы примем его до конца текущей сессии». В чем же состоит суть будущего закона? Здесь впервые появился термин «Интернет» и особо оговаривается создание условий для вхождения России в мировое информационное пространство, развитие и эффективное использование информационно-телекоммуникационных сетей. Современное состояние электронного документирования информации также нашло отражение в новой редакции закона. Электронный документ и электронно-цифровая подпись введены в правовое поле и будут признаваться равнозначными в гражданско-правовых отношениях собственноручной подписи и обмену документами. Согласно новой редакции закона в основу принципов регулирования информационных отношений легли конституционные права россиян на информацию, неприкосновенность частной жизни и равноправие языков народов, проживающих на территории России. Теперь государственные органы и органы местного самоуправления будут обязаны обеспечить доступ к своей информации как на русском языке, так и на государственном языке соответствующей республики Российской Федерации.
Xandros позиционируется как удобная в использовании операционная система, призванная стать заменой Windows. Так, целевой аудиторией для Xandros в первую очередь являются корпоративные пользователи, желающие перевести рабочие станции с Windows NT/2000 на GNU/Linux. И поскольку интерфейс Xandros создавался с этими намерениями, он по возможности приближен к привычному виду Windows. Кроме того, в состав Xandros вошли различные специализированные коммерческие продукты, такие как NTFSдрайверы для Linux от Paragon Software, и CrossOver Office от CodeWeavers.
Проект FreeDOS официально закрыт 28 июня было официально объявлено о том, что проект свободной реализации DOS прекращает свое существование. Те, кто следит за развитием проекта, вряд ли удивился этому событию. Пояснение было дано на официальном сайте FreeDOS.org: «28 июня 1994 года проект, которым стал FreeDOS, явился миру. Через 12 лет мы так и не достигли релиза «1.0», и нет никаких намеков на то, что это произойдет в обозримом будущем. Я сдался. Я перестал ждать «1.0». FreeDOS мертв». Смерть проекта ознаменовалась переездом домашней страницы FreeDOS на популярный хостинг SourceForge – http://freedos.sourceforge.net.
Составил Дмитрий Шурупов по материалам www.nixp.ru
Ольга Максимович
Вышел Linux-дистрибутив Xandros 4.0 Во второй половине июня был анонсирован релиз Linuxдистрибутива Xandros 4.0, нацеленного на Windows-пользователей. Xandros 4.0 по традиции основан на Debian GNU/Linux (на последней стабильной версии – 3.1) и содержит специфичные для соответствия Linux Standard Base (LSB) поправки, созданные в рамках Linux-альянса DCC.
№7, июль 2006
5
интервью
Расмус Лердорф: «Вы думаете, что 11 лет назад я решил разработать язык сценариев, которым будут пользоваться во всем мире!?»
В этом году Расмус Лердорф, изобретатель одного из самых популярных языков веб-сценариев, приехал в Москву вместе с разработчиком ядра PHP Андреем Змиевским, чтобы принять участие в V Международной конференции «Современные технологии эффективной разработки веб-приложений с использованием PHP».
П
ризнаюсь, я с некоторым трепе- Yahoo!. Есть ли здесь связь? Как вы том ждал этой встречи: человек, совмещаете одно с другим? который одиннадцать лет назад Да, несомненно, это связано. Yahoo! изобрел язык, на котором сейчас пи- очень широко использует PHP, а я был шут миллионы людей во всем мире, – его изобретателем и продолжаю много это живая легенда. Но вместо этакого работать над его развитием. Они просумудренного опытом и преисполненно- то наняли меня для того, чтобы я пого сознанием собственной значимос- мог им с PHP. ти мэтра мне посчастливилось побеседовать с очень общительным и откры- Господин Лердорф , вы многократно говорили, что PHP – это труд очень тым человеком. многих разработчиков и вы всего Господин Лердорф, вы впервые лишь один из первых. Какова ваша в нашей стране, с чем это связано, роль в развитии языка, в принятии почему именно сейчас вы приеха- ключевых решений сейчас? Действительно, PHP – это коллективли к нам? Да, это мой первый визит, хотя я давно ный труд, и продукт сотрудничества интересуюсь вашей страной. Я много многих и многих людей. И хотя кто-то, читал и много знаю о России и хотел как я, работает в проекте с самого напобывать здесь. Почему именно сей- чала, имеет больший опыт, написал час? Даже не знаю. Никакой особой больше кода, чем новые люди, такого причины тут нет. Я стараюсь посещать человека, который говорит всем «да» конференции, на которые меня пригла- или «нет» по поводу тех или иных решают, если есть время и возможность. шений, просто не существует. И уж, коМеня пригласили, была возможность нечно, я не тот человек. Люди, которые приехать, и я приехал. пишут код, выполняют основную работу, именно они в конечном итоге выраВы автор-разработчик языка PHP, батывают и принимают коллективное и в то же время один из сотрудников решение о том, что включать в конеч-
6
ный продукт. Подчас это бывает очень нелегко. Мы помногу раз возвращаемся к обсуждению одного и того же. Спорим, убеждаем друг друга. Это очень живой процесс. Но я не говорю решающего слова. Я не был таким человеком все эти годы и не являюсь им теперь. Я часть группы, часть сообщества, которое принимает решение. PHP – это большой коллективный проект, который я не смог бы сделать в одиночку, без помощи других людей. С момента выхода PHP-3 до PHP-4 прошло довольно много времени, и визуальная разница между этими версиями языка для пользователя весьма ощутима. Так же много времени и различий отделяют друг от друга PHP-4 и PHP5. На первый взгляд основное отличие будущей версии – исключительно во встроенной поддержке Unicode. С точки зрения конечного пользователя, эта смена версий может показаться не настолько очевидной. Что вы можете сказать об этом? Смена версии происходит всякий раз, когда у нас накапливаются достаточно
интервью серьезные изменения в коде. И внед- су различных вещей, в нем зачастую рение поддержки Unicode относится не так просто найти односложный отименно к таким. вет на конкретную задачу. Кроме того, номер версии – это Это общая проблема универсальне только цифра для конечного поль- ных языков. Поэтому я не вижу с их зователя. Это завершение некоторо- стороны прямой конкуренции. Есть люго этапа для людей, которые созда- ди, которые любят PHP и которые люют код PHP. И мы должны это четко бят путь понятных и простых PHP-реобозначить. шений для веб-задач. И они вряд ли Да, различия между третьей и чет- получат его в других языках. Я люблю вертой или четвертой и пятой вер- PHP именно за понятность. То есть наше внимание всегда сосиями на первый взгляд более наглядны, чем те которые мы планиру- средоточено собственно на Web и возем для PHP-6. Но в действительнос- никающих в нем типовых задачах. Коти они грандиозны. Мы проделали нечно, вы можете делать с помощью очень большую и качественную работу PHP и другие вещи, но для нас, как раздля всех тех, кто использует PHP. работчиков, первоочередной целью Дело в том, что проблеме Unicode остается именно эта. И такой подход посвящено множество внешних рас- несомненно привлекает к нам нашего ширений и частных решений. Теперь пользователя. Не думаю, что мы его же мы, наконец, смогли встроить не- потеряем. Так что в действительности посредственно в PHP, и внутренние я не очень забочусь о сравнении нашеразличия между 5-й и 6-й версиями го развития с другими языками и инсочень велики. Эти изменения могут трументальными средствами. Не дуотразиться на разрабатываемых про- маю, что они могут предложить что-то граммах. В рамках одной версии мы существенно проще и эффективнее, стараемся соблюсти преемственность чем то, что мы делаем в PHP. в поведении программ. Если что-то работает у вас в версии 5.1, то оно будет PHP-5 – это объектная ориентация. работать и в версии 5.2 и в версии 5.3. Это поддержка классов, использоТаким образом, мы добавляем новые вание шаблонов программировамодификации и исправления. Но все ния, внедрение статистических меэто допустимо только до тех пор, пока тодов и т. п. Вместе с тем довольно не происходит качественный скачок. долгое время PHP был скорее проИ этот скачок – PHP-6. цедурным языком. К чему больше тяготеете вы сами? К процедурноPHP все время сравнивают с други- му или объектно-ориентированноми языками и технологиями – ASP, му подходу? JSP, Python или Ruby On Rails. А ко- Я использую смесь обоих подходов. го вы сами видите в качестве глав- Мне нравится смешивать процедуры с ного конкурента? На что ориенти- объектами. Когда я думаю о чем-то как руетесь при выборе стратегии раз- о целом объекте, я и делаю это объеквития языка? том. Разумеется, есть люди, которые Наша основная цель – решение пов- стремятся сделать свой код полностью седневных проблем, возникающих объектно-ориентированным. Но ко мне в Web. И мы создаем средство для ре- это не относится. Для меня это примершения таких проблем и всегда фокуси- но 50 на 50. В публичных выступленируемся на том, чтобы решить возник- ях я часто использую процедуры, чтошую проблему, а не на том, как это бу- бы сохранить простоту и наглядность. дет укладываться в какую-нибудь кон- Для того чтобы продемонстрировать цепцию развития языка. Конечно, есть какое-то действие, мне не нужен объдругие подходы, и другие инструмен- ектный код, к тому же он будет более тальные средства строятся совершен- длинным. Объектно-ориентированно иначе. Там люди могут проделывать ный слой может лежать где-то глубомассу работы для того, чтобы ответить, ко внутри, а поверх него будет сущеснапример, на вопрос: «Как мне решить твовать простой и понятный сценарий эту задачу с помощью Python?» Пос- с процедурным кодом. Скажем так, кольку Python – универсальный язык в PHP никогда не было объектов ради и с его помощью можно делать мас- самой идеи объектов. И это действи-
№7, июль 2006
тельно отражает мой собственный подход. Можно даже назвать PHP процедурным языком с объектами. Самая распространенная для вебпроектов платформа – это UNIX + Apache. Однако в последнее время очень много разговоров о том, что такое сочетание уже не удовлетворяет запросам веб-проектов с большим трафиком и высокой пользовательской посещаемостью. Возникают решения, построенные на основе других веб-серверов с использованием FastCGI. Что вы можете сказать по этому поводу? У нас есть поддержка FastCGI, и, действительно, не так давно мы проделали большой объем работ в этом направлении. Кроме того, нашим основным принципом остается открытость. Если кто-то заинтересован в том или ином новом решении, он может присоединиться к проекту и реализовывать свою идею. Но, в любом случае, мы ориентируемся на большинство наших пользователей. В конечном итоге большинство использует PHP под UNIXподобными системами и веб-сервером Apache, и первоочередные изменения и исправления делаются именно для этой платформы. В качестве примера можно рассмотреть СУБД Informix. Она может работать, скажем, под управлением ОС Novell. Но людей, использующих в такой связке PHP, будет, наверное, трое во всем мире. Да, их сообщения об ошибках будут учитываться, но рассматривать их будут в последнюю очередь. Поэтому приоритетной для нас попрежнему остается платформа UNIXApache-PHP. То есть у себя в Yahoo! вы остаетесь верными связке с Apache, и, несмотря на большую популярность и посещаемость, вы не ощущаете проблем ресурсоемкости и т. п.? Я не думаю, что тут вообще есть какая-либо проблема. Это работает уже много-много лет. FreeBSD и веб-сервер Apache – это очень простое, эффективное решение. И оно действительно хорошо работает. Если не секрет, какова доля PHPразработок в Yahoo!? Сейчас в Yahoo! PHP использует-
7
интервью ся, примерно в 80-90% процентах за- из них – это, маленькая лаборатория дач. Конечно, мы используем и C/C++ по изучению насущных проблем. И то, код. PHP – это верхний слой, уровень в чем будут заинтересованы эти люпредставления, уровень веб-сервера, ди, на то и будет нацелен PHP. Потому а большая часть «тяжелой» бизнес-ло- что само PHP и есть сообщество. Не я, не Андрей Змиевский – никто отдельно! гики написана на С++. Вместе с тем нельзя говорить, что Да, мы многое делаем в проекте, и, возYahoo! везде и всюду использует ис- можно, поэтому наш голос звучит более ключительно PHP. Скорее так – почти авторитетно, чем голос других участв каждой задаче мы используем PHP ников. Но если завтра мы с ним сойна верхнем уровне, на входе и большое дем с ума и начнем нести полную чушь, количество внутренних процессов, на- мы услышим в свой адрес крепкое руписанных на С++ под этим слоем. гательство. Точно так же, как и любой другой член сообщества. Мы должны Вы приехали к нам вместе с одним находить взаимопонимание со всеми из активных разработчиков ядра Ан- остальными участниками. Именно содреем Змиевским, и вы автор язы- общество в целом и возникающие пека и по-прежнему остаетесь одним ред его членами задачи решают, куиз вдохновителей проекта PHP. Что да и каким путем пойдет PHP дальше. мы можем ожидать в будущем? Есть В каком направлении пойдет Web, туда ли уже сейчас какие-то планы даль- вслед за ним пойдет и PHP. Я не провидец. Конечно, я хотел бы нейшего развития, новой версии? В PHP-5 мы решали проблемы раз- знать, что будет интересовать людей работки веб-сервисов, переработали хотя бы в ближайшие три года, но я поддержку XML и т. п. Слишком мно- не знаю. Я могу только догадываться. го людей были недовольны тем, как это было решено в PHP-4, так что нам Вопрос, который наверняка задапришлось бросить все силы на то, что- ют вам постоянно: что автор языка бы это улучшить. И сейчас аналогич- вкладывал в аббревиатуру PHP? ная ситуация породила необходимость В самом начале я назвал это Personal PHP-6: очень многие пользователи ис- HomePage Tools. Постепенно люди сопытывают проблемы с использовани- кратили это название до PHP. В следуем функций mb_string и вынуждены ис- ющей версии, когда я добавил обракать обходные пути решения этих про- ботку форм, добавилось «FI» (прим.: блем. Сейчас все большее количество от англ. form interpreter). Это было чторазработчиков стремятся сделать свои то вроде маленькой шутки, перефравеб-проекты в полной мере интерна- зом для TCP/IP. Чувствуете? TCP/IP циональными, с полноценной много- и PHP/FI. Затем, когда появился PHP-3, язычной поддержкой. В рамках PHP-5 который уже не был просто набором это не так просто, как нам бы хотелось. инструментов для домашних страниИ решение этой проблемы – главный чек и который можно было использомотив, главная цель PHP-6. вать для множества различных веб-заВы спрашиваете меня, что будет дач, мы стали подумывать о смене нав PHP-7? Какова следующая цель? Это звания. Но ничего удачного нам в говсе равно, как если бы вы спросили ме- лову не приходило. Кроме того, уже ня: «А каким будет Web? Что произой- были люди, которые привыкли польдет в Web в следующие три года?» Ес- зоваться сокращением PHP, и нам ли бы я только знал! А вот, например: не хотелось их расстраивать. Так что мы просто сменили название на абмы все заработаем кучу денег! Я не знаю точно, в каком направле- бревиатуру. Больше не было Personal нии будет развиваться Web. Думаю, он HomePage Tools, было просто PHP. Все станет более интерактивным, но какая эти выдумки по поводу «protected» или именно технология будет при этом до- «preprocessed» – это глупость. Мы так минирующей? Этого я не знаю. Но ка- и сказали людям: «Это просто PHP». кой бы она ни была, PHP будет поддерживать эту технологию, потому Расмус, в интервью в 2002 году вы что двигается и развивается вместе сказали, что никогда не думали разсо своим сообществом и это сообщес- рабатывать язык сценариев, вы детво – тысячи и тысячи людей. И каждый лали свой маленький инструмен-
8
тарий, который постепенно вырос в какую-то библиотеку, которая была открытой для всех, и вот так, постепенно, все это наросло как снежный ком. Прошло уже 11 лет. Что вы можете сказать сейчас, оглядываясь назад? Не жалеете ни о чем? Сожалею ли я о чем-нибудь? Нет, это было здорово! Конечно, никаких планов о том, чтобы создавать целый язык у меня не было. Самый-самый первый скрипт, который я написал, был очень простым и решал простые задачи. Когда меня спрашивали: «Как ты это делаешь?» – я объяснял, что написал некий простой инструмент. И я просто давал его всем тем, кто ко мне обращался. Вот так это просто распространялось, прямо с моей домашней странички. Неужели вы думаете, что одиннадцать лет назад я сел и начал обдумывать план, вроде такого: «Так, я собираюсь разработать язык сценариев, которым будут пользоваться во всем мире…»? Разумеется нет! Я просто-напросто решал те проблемы, которые передо мной возникали. Другие люди говорили, что это хорошее решение и также начинали его использовать. И вот так-то все постепенно разрасталось и разрасталось. Перефразируя слова Линуса Торвальда, можно ли сказать, что все это было ради удовольствия? Я бы не стал говорить, что все это было «просто ради удовольствия». Люди нанимали меня для того, чтобы решать вполне конкретные задачи. При этом я видел, что довольно часто они обращаются ко мне с одними и теми же проблемами. Постепенно у меня накопился свой, готовый инструментарий для их решения. Это получается, как песенка для рекламы: «У меня есть мое чудесное средство, детка. Бац-бац! И я решу им все твои проблемы!» – что-то типа такого. Конечно, это было и моим увлечением. Мне все это очень нравилось. Но это также было и моей работой. Я был и разработчиком, и консультантом. То, что я делал – решал возникающие у людей проблемы. Это было не только ради удовольствия, это были реальные проблемы, которые нужно было решать. Именно так все и было!
Дмитрий Горяинов
веб-программирование
Заглянем в будущее
Кирилл Сухов Смена версий у популярных программных продуктов, как правило, предполагает радикальные изменения в технологии или идиологии его использования. MySQL, PHP, Perl, PostgreSQL… и PHP тут совсем не исключение – в четвёртой версии было с нуля переписано ядро, в пятой появилась новая объектная модель.
В
начале осени прошлого года на snap.php.net стали доступны версии шестой ветки препроцессора. Я предлагаю разобраться, что в них нового и чем эта версия, пока ещё прорисованная довольно смутно, отличается от предыдущих. В начале августа прошлого года разработчиками было принято решение – CVS HEAD был отделен в ветку PHP.5.1, после чего HEAD стал PHP 6.0.0. Означало это одно – все нововведения отныне стали применяться для этой, шестой ветки. Оставляя за PHP пятой версии только незначительные изменения и багфиксы. В середине августа Расмус Лендорф, основатель языка, в своём письме сообществу (http://news.php.net/php.internals/17883) высказал ряд пожеланий к шестой версии, которые это сообщество принялось активно обсуждать. В общем-то на тот момент отличие от «пятёрки» было только одно – полноценная поддержка Unicode. Обсуждение дало результаты – на ноябрьской встрече разработчиков в Париже были озвучены основные возможности, которые планируется воплотить в новой ветке.
№7, июль 2006
В настоящее время идёт разра- чанию инициализировались автоматиботка, не утихают споры. Но некото- чески. Это было, конечно, удобно для рые контуры PHP 6 видны уже сегод- разработчика, но несло в себе огромня. Итак, приступим. ную угрозу безопасности приложению, так как любой злоумышленник мог подменить значения переменных. Начиная Отречёмся с 4.2 параметр register_globals по умолот старого мира В первую очередь грядущая версия чанию был выключен, оставляя возязыка поражает не нововведения- можность обращаться к переменным ми, а количеством вещей, от кото- окружения через глобальные массирых решено отказаться. Разработчи- вы ($_GET, $_POST, $_SERVER и т. д.), ков не трудно понять. PHP завоевал но многие приложения уже были напимир своей простотой и доступностью, саны в старом стиле, и часто недалёно постоянно подвергался критике за кие авторы статей или книг советованизкую безопасность и слабую защи- ли решить проблему, просто включив ту от ошибок (от ошибок программис- инициализацию. Теперь об этом можта, разумеется). Кроме того, во имя но будет забыть – и слава богу. обратной совместимости со старыми Дирек тивы magic _quotes _ gpc версиями, язык тянет за собой уста- и magic_quotes_runtime отвечают за авревшие deprecated, которые были ещё томатическое экранирование некотоуместны в PHP 3, но уже в PHP 5 ка- рых спецсимволов. Они были разражутся полным анахронизмом. ботаны для повышения безопасносПрежде всего «чистка» коснёт- ти, но на деле их использование сося всем изрядно поднадоевших пара- здавало программисту дополнительметров в конфигурации интерпрета- ные неудобства. Положение осложнятора – register_globals, magic_quotes лось тем, что эти опции любили вклюи safe_mode, – из шестой ветки они чать хостеры. будут изъяты. В версиях языка, до 4.2, С режимом safe_mode ситуация все переменные окружения по умол- сложнее. Директива, введённая из со-
9
веб-программирование ображений безопасности, устанавливает серьёзные огра- ти момента, поясню – именно это послужило причиной сменичения на работу PHP-интерпретатора. При её включении ны номера версии. Дело в том, что по настоящий момент пропадало большинство возможностей работы с файлами при разработке приложений приходится сохранять варии каталогами (в частности затруднительно положить файл анты имён методов, функций, переменных одновременно конфигурации выше директории веб-сайта, а ведь это ра- в двух таблицах символов – Unicode и non-Unicode. Решено зумная мера безопасности). С другой стороны, сам по се- обеспечить поддержку Unicode на уровне сервера (а не отбе режим safe_mode был далеко не панацеей и его огра- дельного запроса, как было до сих пор). Соответствующие ничения легко можно было обойти. Таким образом, он, не настройки будут храниться в файлах конфигурации и уйдут давая защиты, был вечной головной болью разработчиков. из поля зрения программиста. Ранее PHP действовал как исключительно бинарный После его исключения исчезнет риск нарваться на хостинг с safe_mode=on. (Следует сказать, что функциональность обработчик, тип байтовой строки был единственным и исдирективы open_basedir будет сохранена.) пользовался для работы с любой информацией, что создаЧто ещё? Поддержка таких древностей, как библиотеки вало (и создаёт) различные проблемы при работе с кодиFreetype 1 и (недоброй памяти) GD 1 также прекращается. ровками и национальными символами. В PHP 6 введёна Устраняется поддержка ASP-тегов (по сею пору <% можно возможность работать с типом данных «строка Unicode», после включения соответствующих настроек использовать реализованная посредством библиотеки ICU (International на равнее с <?php или <?, зачем – мне непонятно). Components for Unicode). Использование ICU API позволиФункция dl(), динамически подгружающая расширения ло реализовать такие возможности, как корректная сорPHP (и вызывающая своей некорректной работой много- тировка, с использованием любого национального алфачисленные нарекания), будет сильно ограничена в правах, вита, транслитерация, расположение текста для арабскоа именно – останется только в SAPI. При этом каждую фун- го, иврита, хинди и тайского языков, трансформации теккцию SAPI пройдется регистрировать отдельно. Честно го- ста и многое другое. Это касается не только обработки строк и летералов, но воря, не жалко, так как многие разработчики склонны раси кодировок HTTP-запросов скриптов и индификаторов. Ансматривать её существование почти как нелепость. Расширение для работы с регулярными выражениями дрей Змиевский в своём докладе на конференции в Москве ereg будет удалено из дистрибутива и перенесено в репози- в мае этого года привёл следующий пример кода: тарий PECL. Я не думаю, что это повод для паники, так как class ....... { подключить его – минутное дело, кроме того, уже в пятой function ... ...... { ... } версии языка рекомендуется использовать perl-compatiblefunction !..$ ....) { ... } function .......... { ... } регулярные выражения. Правда, разработчики пошли даль} ше и собираются перенести в PECL все расширения для ра$..... = array(); $.....[‘עְיולוּחַשׁנָָה’] = new .......(); боты с базами данных, за исключением PDO (расширение для унифицированного доступа к базам данных, введёнВообще поддержка Unicode в PHP 6 – это довольно обное в версии 5.1). Этот шаг, конечно, логически обоснован, но пока выглядит страшновато. ширная тема, заслуживающая отдельной статьи. Теперь о наведении порядка в синтаксисе. Не знаю, как относиться к следующей новости, но отСтарые названия массивов (если точнее, старые массивы) ныне гарантированна полная поддержка FastCGI, причём вида HTTP_*_VAR из языка удаляются. Их применение вызо- данная технология будет включена по умолчанию (без возвет ошибку уровня E_CORRE_ERROR. Старый синтаксис об- можности отключения) для CGI SAPI. Самое «вкусное» – PHP-акселератор APC, кэшируращения к строковым индексам {} будет исключён, зато появится возможность получать символы от конца строки запи- ющий сценарии в байт-код, будет теперь включён в ядсью вида [4]. Оставшийся от PHP 4 синтаксис вида $foo=& new ро. Это, на мой взгляд, самое радикальное нововведение, myClass(), или function &foo, в новой версии вызовет ошибку и именно его я буду ждать. Кроме того, в дистрибутив реуровня E_STRICT (хорошо, что не выше – слишком много ко- шено включить расширения XML Reader (простой XML-парда написано в стиле ООП PHP 4). Более того, поддержка ZE1 сер, основанный на SAX) и XML Writer (провайдер для XML будет вообще исключена. В объявлении полей класса конс- API). Оба расширения, взятые из репозитария PECL, притрукция var (использующаяся в PHP 4, но приводящая к ошиб- званы значительно облегчить работу программиста с XMLке уровня E_STRICT в пятой версии языка), теперь уравне- документами. Из PECL также будет добавлено расширена в правах с модификатором public. Это безусловно пос- ние Fileinfo. Добавлен новый тип данных – init64, который будет солабление, но оно вполне укладавается в рамки «наведения порядка». Отпадает необходимость модернизации несколь- ответствовать integer. Ну и по мелочи: оператору break можно будет задавать ких приложений, не списанных на PHP 4. Ну а чтобы совсем «добить» нерадивых разработчиков, сообщения об ошибках метку, на которую будет перенесено выполнение програмуровня E_STRICT теперь войдут в E_ALL (при переходе на мы после прерывания, станут возможны конструкции вропятую версию параметры были разделены). де следующей:
Что нового
<?php
Изъято довольно много, что предлагается в замен? Прежде всего поддержка Unicode. Для тех, кто не осознаёт важнос-
for ($i = 0; $i < 9; $i++) {
10
веб-программирование
foo: } ?>
if (true) { break foo; } echo "not shown"; echo "iteration $i\n";
Foreach сможет работать с многоуровневыми массивами: <?php
} ?>
static function static2() { echo "B::static2\n"; }
B::staticA();
Результатом работы будет вывод «A:static2».
Чего не будет
Чего точно не будет, так это типизации переменных. По мнению разработчиков. Это противоречит духу языка. Впрочем, есть идеи по поводу возможности типизации возвращаемых значений, но они пока не проработаны. Про пространство имён пока тоже речи нет, правда, есть слабая надежда, что в операторе ?: будет допустимо опускать первый пара- в будущем его поддержка всё же появится. метр. В объектную модель будет добавлен новый предикат Заключение static:: static2, позволяющий управлять static во время вы- Вот тут хочу высказать некоторые сомнения. Когда пояполнения. Для иллюстрации его работы привожу пример вился (скорее слово неверное, он не появился, он проявкода: лялся постепенно, как чеширский кот) PHP 5, у многих были сомнения, что хостеры вовремя предоставят возмож<?php ность пользоваться новой версией. Эти сомнения в целом class A { оказались напрасными – все ведущие площадки обновиstatic function staticA() { self::static2(); ли интерпретатор довольно быстро. Проблема оказалась } совсем в другой плоскости, а именно – в головах разработstatic function static2() { чиков. До сих пор и повсюду многие программисты, даже echo "A::static2\n"; имея в своём распоряжении пятую версию, пишут на ней, } } как на четвёртой (это ещё в лучшем случае). Придется ли ко двору PHP 6? Время покажет. class B extends A { $a = array(array(1, 2), array(3, 4)); foreach( $a as $k => list($a, $b)) { } ?>
№7, июль 2006
11
администрирование
Greylisting: панацея от спама или «мыльный пузырь»?
м Хуже спа
борьба а – тольскооспамом.
Админска
я мудрость
Сергей Супрунов Проблема спама, несмотря на затрачиваемые усилия на борьбу с ним, не теряет своей остроты. Попытки покончить с ним всё больше похожи на попытки достичь горизонта – чем быстрее мы к нему движемся, тем быстрее он от нас отдаляется...
М
етодов борьбы со спамом у него сил, чтобы справиться с одной получатели уже не существуют, а то и за последние годы разработа- из серьёзнейших проблем современ- вовсе не существовали, дисковое проно множество – от техничес- ного Интернета? странство для такой очереди и ресурских, таких как «чёрные списки», Байеные затраты на её обработку будут несовые классификаторы, комплекс- Идея «серых списков» оправданно высоки. Конечно, в слуный анализ заголовков, до юридичес- Суть работы грейлистинга основана чае «лобовой атаки», когда все адреких, когда за рассылку спама предус- на предположении, что спамеры, осу- са указываются в одном письме, такой матриваются всё более жестокие на- ществляя рассылку, далеко не всегда проблемы не возникнет. Но поскольказания вплоть до уголовной ответс- выполняют предусмотренные прото- ку подобная рассылка – слишком лёгтвенности. колом SMTP требования. В частности, кая добыча для различных фильтров, Один из этих методов, получив- этот протокол требует, чтобы при полу- то спамеры всё чаще вносят в рассыший название «greylisting», или «се- чении ответа с кодом 4xx, означающим лаемые сообщения случайные фрагрых списков», в последнее время при- временную проблему на сервере-полу- менты. А это уже будет означать отобретает всё большую популярность. чателе, сообщение помещалось в оче- дельное сообщение на каждого полуДля удобства восприятия, я буду ис- редь отправителя, и спустя некоторое чателя. Безусловно, можно модифипользовать транслитерированный тер- время предпринимались повторные цировать программу рассылки, чтобы попытки выполнить доставку. она не вела очередь, а просто помемин «грейлистинг». Очевидно, что для спамеров вы- чала проблемные адреса и выполняНа различных форумах всё чаще даётся совет настроить фильтрацию полнение этого требования обойдёт- ла на них повторную отправку, но в люпо «серым спискам» чуть ли не как ся слишком дорого в плане затрачи- бом случае для спамера это означает окончательное решение любых про- ваемых ресурсов потребуется вести дополнительные трудозатраты. Как следствие многие спамеры блем со спамом. Но так ли хорош этот очередь сообщений, а учитывая, что метод на самом деле и достаточно ли в базах адресов, как правило, многие просто игнорируют любые ошибки,
12
администрирование в том числе и временные, продолжая отсылать сообщения дальше по своей базе. То есть если на первую попытку соединения возвращать код 4xx, то спамер его проигнорирует и оставит ваш сервер в покое (либо наоборот, если окажется очень настойчивым, будет непрерывно отправлять сообщения, не утруждая себя различными паузами). В то время как добропорядочный сервер, «выругавшись про себя», терпеливо положит письмо в очередь и чуть позже попытается ещё раз его отправить. На этом и основана фильтрация по «серым» спискам – «правильные» серверы будут предпринимать повторную попытку доставки спустя некоторое время (обычно это 30 минут или 1 час), а «неправильные» либо сделают повтор сразу же, либо не сделают вообще.
Пример практической реализации Чтобы было понятнее, рассмотрим работу грейлистинга на конкретном примере. Для Sendmail существует программа milter-greylist. Её установка из портов FreeBSD труда не составит: root# cd /usr/ports/mail/milter-greylist root# make install
Подправьте под свои требования конфигурационный файл /usr/local/etc/mail/greylist.conf. Я рекомендую здесь изменить значение параметра greylist на более доброжелательную по отношению к удалённым серверам цифру, например, на 15 минут. По умолчанию используется 1 час, что вынудит большинство серверов тщетно выполнять не одну, а две-три попытки отослать сообщение (а то и больше, если отправитель наивно надеется снизить латентность очереди и тем самым повысить качество обслуживания своих клиентов за счёт более частой обработки очереди), прежде чем ваш сервер снизойдёт до его рассмотрения. Впрочем, есть разумные соображения и по поводу используемого по умолчанию значения (см. врезку «Сколько можно ждать?!»), так что окончательное решение оставляю за вами. Также на первое время можно раскомментировать строку verbose, чтобы получать более полную информацию о работе фильтра. Ну и полезным будет дополнить представленный в конфигурационном файле список «белых» адресов теми серверами, с которых вы регулярно получаете «легальную» корреспонденцию. Это опять-таки некоторый «акт милосердия» по отношению к отправителям: acl acl acl acl acl acl
whitelist whitelist whitelist whitelist whitelist whitelist
domain domain domain domain domain domain
donpac.ru rostel.ru mail.ru rambler.ru yandex.ru freebsd.org
Туда же не забудьте добавить обслуживаемые вашим сервером подсети, чтобы клиенты не надоедали вам претензиями типа: «Я пытаюсь отправить письмо, а оно не уходит» или «Я отправил почту семь минут назад, а её до сих пор не получили». Ещё пропишите в /etc/rc.conf такую строку: miltergreylist_enable="YES"
№7, июль 2006
Теперь соответствующий демон будет запускаться сценарием /usr/local/etc/rc.d/milter-greylist.sh автоматически. Из текста этого же сценария можно узнать точный путь к сокету, который должен использовать Sendmail для взаимодействия с milter-greylist. Этот сокет и нужно указать в вашем mc-файле для настройки Sendmail: INPUT_MAIL_FILTER(`miltergreylist', ↵ `S=local:/var/milter-greylist/milter-greylist.sock, ↵ F=, T=S:4m;R:4m')dnl
Теперь, пересобрав конфигурационный cf-файл и перезапустив Sendmail, вы получите работающий «серый» фильтр. В /var/log/maillog (если не менялись настройки по умолчанию демона Syslog) вы сможете отследить то, как этот фильтр работает: Jun 5 10:23:52 mydomain milter-greylist: k556NpVc033684: addr 1.2.3.4 from <user@mail.server.ru> to <user@mydomain.ru> delayed for 00:05:00 Jun 5 11:23:58 mydomain milter-greylist: k557Nuv5034199: addr 1.2.3.4 from <user@mail.server.ru> rcpt <user@mydomain.ru>: autowhitelisted for 24:00:00
Этот фрагмент демонстрирует, что первая попытка сервера mail.server.ru доставить почту для пользователя user завершилась задержкой сообщения на 5 минут. Спустя час сервер повторил свою попытку, за что был награждён правом находиться в «белом» списке 24 часа. Нужно сказать, что по умолчанию, чтобы попытка доставки была признана повторной, а не новой, с зафиксированными в базе должны совпасть три параметра – почтовый адрес отправителя, адрес получателя и IP-адрес хоста-отправителя. Использование конфигурационного параметра subnetmatch позволяет понизить требования к соответствию IP-адреса, признавая совпадающими все адреса, входящие в заданную подсеть. Это может быть полезно в том случае, если сервер-получатель использует FallbackMX для того, чтобы разгрузить очередь основного сервера, или если используется пул SMTP-серверов (т.е. в тех случаях, когда повторная отправка может предприниматься с другого хоста). Есть ещё один параметр – lazyaw, – активация которого приведёт к тому, что в автоматически формируемых «белых» списках будет учитываться только IP-адрес, а адреса получателя и отправителя приниматься во внимание не будут. Продолжим рассмотрение лог-файла. Так будет выглядеть подключение со стороны сервера, представленного в «белом» списке, т.е. в правилах acl whitelist: Jun 5 07:04:50 mydomain milter-greylist: k5534nov032377: skipping greylist because sender DNS name mx17.mail.ru is whitelisted, (from=<gluck@mail.subscribe.ru>, rcpt=<terra@mydomain.ru>, addr=4.3.2.5)
Как видите, ему никаких препятствий в работе не создаётся. Ну и, наконец, для спамеров (к сожалению, не для всех) будет представлена только одна запись про «delayed for 00:05:00». Что и требовалось доказать.
Плюсы грейлистинга Как показывает практика, значительную долю нежелательной почты действительно удаётся отсечь с помощью грейлистинга (см. врезку «Немного статистики»). При этом поч-
13
администрирование Сколько можно ждать?! По умолчанию для задержки сообщений рекомендуется использовать значение, равное 1 часу. Мне оно кажется слишком «невежливым», и потому я рекомендую его снизить. Впрочем, это лишь моё мнение. Вас же вполне могут убедить часто приводимые доводы в защиту именно этого значения:
Многие MTA используют как раз 1 час в качестве периода обработки очереди;
Этот интервал достаточен для того, чтобы рассылка спамера была обнаружена, и его адрес попал в соответствующие «чёрные» списки; Большинство пользователей вполне могут подождать 1 час в ожидании письма, и такая задержка во многих случаях останется незамеченной.
жена на его плечи (в смысле на дисковую подсистему). И кстати говоря, ваш Backup-сервер наверняка будет скрупулёзно придерживаться протокола, так что любой спамер, додумавшийся использовать резервную MX-запись, может быть уверен, что его сообщение будет доставлено. Если же резервный сервер занести в «белый» список, то нагрузка на него, конечно же, значительно снизится. Но вот сам он станет прекрасным способом гарантированно доставить вам любое сообщение (впрочем, он его в любом случае доставит, как было показано выше). То есть, чтобы грейлистинг работал, все Backup-серверы тоже должны использовать эту технологию. А следовательно, нагрузка на отправителя возрастёт ещё больше, поскольку он будет не только держать сообщение в очереди, но и безнадёжно «ломиться» на несколько хостов, вместо того чтобы «успокоиться» после одной неудачной попытки. Рассмотренный выше milter-greylist позволяет настроить синхронизацию между различными MX-хостами (см. комментарии к опциям peer и syncaddr в конфигурационном файле, а также man greylist). Благодаря этому все настроенные таким образом почтовые серверы будут использовать общую базу. То есть отправитель, обратившийся на резервный хост после неудачной попытки пробиться на основной, уже будет известен Backup-серверу, и соответственно его обработают успешно. Правда, опять-таки сработает это лишь в том случае, если повторная попытка будет выполняться не сразу, а спустя некоторое время. Ну и к сожалению, не каждый администратор
товый трафик может ощутимо снизить- ставляются администратору или пося, поскольку в отличие от различных мещаются в общедоступный каранстатистических и сигнатурных анали- тин), то грейлистинг не нарушает ни заторов предварительный приём спа- того ни другого, работая строго в сомерского сообщения не осуществля- ответствии с техническими требовается. ниями. Поскольку любой сервер моВ то же время грейлистинг прак- жет при тех или иных обстоятельствах тически полностью исключает лож- вернуть временную ошибку, то ничего ные срабатывания, когда добропоря- криминального в этом нет. дочное письмо блокируется фильтром и не попадает к адресату. Исключе- Минусы грейлистинга ние может составить разве что случай, С другой стороны, грейлистинг при когда почтовый сервер отправителя всей своей идеальности обладает и ряпо тем или иным причинам не впол- дом отрицательных моментов. Прене следует установленным стандар- жде всего эта технология относится там. Но это, как говорится, не наши к «невежливым», поскольку вынуждапроблемы. ет сервер отправителя тратить свои реТакже отмечу сравнительную не- сурсы на дополнительное обслуживатребовательность к ресурсам вашего ние искусственно создаваемой очересервера. Конечно, всё не так просто, ди. Только представьте себе, что прокак в случае «чёрных» списков на ос- изойдет с сервером типа mail.ru, если нове DNS, но по сравнению с тем же каждое исходящее сообщение он буSpamAssassin грейлистинг может счи- дет вынужден ставить в очередь и оттаться очень простым и незатратным сылать повторно? методом, поскольку требует анализа Далее отправитель, получив вретолько конверта сообщения и веде- менную ошибку, скорее всего попытания несложной базы, в которой будут ется отправить сообщение на резерфиксироваться состояния «триплетов» вный сервер для вашего домена. Ес(IP-адрес, почтовый адрес отправите- ли Backup-сервер (т.е. хост с менее ля, почтовый адрес получателя) – за- приоритетной MX-записью) у вас есть несён ли этот триплет в «белый» спи- и он не включён в ваш «белый» список, была ли в недалёком прошлом сок, то львиная доля нагрузки по обпопытка доставить такое же сообще- служиванию очереди будет перелоние и т. д. Ну и ещё можно отметить «юри- Немного статистики Здесь учитывался лишь спам, источнидическую» чистоту этого метода. Ес- Испытания milter-greylist на небольшом, ки которого не попали в DNSBL-списки, исли блокирование почты на основа- но очень «боевом» почтовом сервере по- пользуемые на сервере (в первую очередь нии DNSBL может вступить в проти- казали, что пользователи стали получать срабатывает блокировка по DNSBL, а затем воречие с обязательством провайде- спама примерно в десять раз меньше, уже выполняется проверка по greylist.db). ра обеспечивать надёжную и беспе- чем до внедрения этой системы (при том, Конечно, это не 99%, теоретически доребойную работу обслуживаемой се- что для обслуживания домена использу- стижимые для тщательно настроенного (и рети, а различные анализаторы при из- ется неподконтрольный мне Backup-сервер гулярно подстраиваемого) SpamAssassin или вестной сноровке можно рассматри- без грейлистинга). Показатели по вирусам DSPAM, но с учётом заметно более низкой вать как покушение на конституцион- ещё лучше – их число снизилось примерно нагрузки на сервер и отсутствия «сопутсное право пользователей на тайну их в 30 раз (как правило, они автоматически твующих» проблем выглядит эта технололичной жизни (особенно если копии рассылаются вирусами же, которые менее гия весьма привлекательно. По крайней сообщений, признанных спамом, до- сообразительны, чем живые спамеры). мере пока...
14
администрирование имеет полный доступ к настройке машин, определённых как Backup-серверы для его домена. Ещё одна проблема связана с серверами, на которых эксплуатируется «конкурирующая» система борьбы со спамом – так называемый обратный звонок (callback). Суть этого метода заключается в следующем: при получении входящего соединения сервер на стадии RCPT TO приостанавливает сессию и имитирует рабочую сессию с сервером, указанным в команде MAIL FROM. Если эта попытка из-за несуществующего адреса отправителя или по другим причинам завершается неудачей, то и приостановленное соединение разрывается без дальнейшей обработки. Нетрудно догадаться, что если вы будете использовать грейлистинг, то у вас наверняка возникнут проблемы с отправкой почты на серверы, где настроен callback: в ответ на ваше подключение удалённый сервер попытается установить с вами «встречное» соединение, а вы его отправите «попробовать немного позже». Кому от этого будет хуже – неизвестно. В нашем «наглядном пособии» – milter-greylist – эта проблема тоже известна, и для её решения предусмотрен ещё один параметр – delayedreject. При его активации milter-greylist будет возвращать ошибку 4xx не после команды RCPT TO, как это предусмотрено по умолчанию, а после получения команды DATA. Это вынуждает удалённый сервер надеяться на успех чуть дольше, но зато не создаёт препятствий для «обратного звонка», который, как правило, завершается после ответа сервера на команду RCPT TO. Ну и кто знает, как будут реагировать на ошибку 4хх службы «легальной» рассылки. Для них тоже не доставит удовольствия по полдня возиться с обработкой задержанных по тем или иным причинам сообщений.
Прогнозы на будущее Можно сделать вывод, что грейлистинг при всех своих недостатках на данный момент – вполне эффективная технология. Но её эффективность определяется исключительно низкой распространённостью. Звучит парадоксально, но это так и есть – чем боль-
№7, июль 2006
Не «мильтером» единым... Упомяну тый здесь инструмент, miltergreylist, не единственный. Существует масса фильтров и модулей к различным MTA, есть самостоятельные (не зависящие от конкретной почтовой программы) пакеты, такие как фильтр Spamd (см. журнал №6, 2005 г.), работающий в паре с пакетным фильтром pf, или упомянутый в ссыл-
ше серверов станут использовать «серые» списки в своей практике, тем менее эффективной и более проблемной для законопослушных отправителей станет эта технология. Так, по мере распространения грейлистинга всё больше ресурсов будет тратиться на доставку почты. Хорошо, если ваши пользователи имеют ограниченный и регулярный список адресатов, большая часть которых будет постоянно присутствовать в «белом» списке, не влияя на эффективность работы. А если нет? Не исключено, что крупные почтовые провайдеры будут вынуждены устанавливать специальные Fallbackсерверы исключительно для обслуживания «серой» почты, что естественно приведёт к удорожанию услуг или снижению их качества (впрочем, о каком качестве может идти речь, если каждое новое письмо в среднем будет задерживаться минут на сорок). Конечно, можно возразить, что «своя рубашка ближе к телу» и что дополнительные затраты на грейлистинг с лихвой компенсируются значительным снижением спам-трафика и нагрузки на оборудование, им создаваемой. Только вот действительно ли это снижение будет столь уж значительным? Ведь что требуется от спамера, чтобы с лёгкостью обойти грейлистинг? Всего-навсего через час провести повторную рассылку с теми же параметрами... И дальше пожинать плоды попадания в «белый» список. Даже не нужно ничего менять в программах рассылки. Так что как только грейлистинг станет серьёзной помехой для спамеров, он, как это ни странно прозвучит, вообще потеряет свою актуальность, лишившись большинства преимуществ, но сохранив все недостатки.
ках в конце статьи SMTP-прокси Spey. Некоторые из этих инструментов перечислены на страницах специализированного сайта, посвящённого пропаганде грейлистинга – http://greylisting.org. Впрочем, не забывайте, что если для лечения болезни существует огромный выбор различных препаратов, значит, болезнь неизлечима.
Поэтому не стоит возлагать такие надежды на использование «серых» списков. И уж конечно же, не нужно всюду пропагандировать эту технологию – чем меньше людей о ней знают, тем больше преимуществ она принесёт лично вам.
Ложка мёда Ну и немножко оптимизма напоследок. Да, сам по себе грейлистинг эффективен лишь в небольших дозах. Но в тандеме с такими методами, как сигнатурные анализаторы или «чёрные» списки на основе DNS, он может оказаться весьма полезен. Ведь он вынуждает спамеров делать задержку в своей рассылке, необходимую для того, чтобы обнаружить столь странную активность и занести их адреса или сигнатуры сообщений в соответствующие базы. А дальше, как говорится, дело техники. Так что будем надеяться, что когданибудь в наших почтовых ящиках будут «оседать» только действительно нужные нам письма. 1. http://greylisting.org – cайт, посвящённый пропаганде «серых списков». 2. http://projects.puremagic.com/greylisting – проект Эвана Харриса, автора идеи и концепции «серых списков», а также одной из практических реализаций. 3. http://www.eserv.ru/GreyListing – cтраница компании «ЕТАЙП», посвящённая технологии «greylisting». 4. http://ru.wikipedia.org/wiki/Greylisting – Wikipedia о «серых списках». 5. h t t p s : / / h d c . t a m u . e d u / r e f e r e n c e / documentation/?section_id=586 – FAQ по вопросам грейлистинга на сайте Техасского A&M University. 6. http://hcpnet.free.fr/milter-greylist – домашняя страничка проекта milter-greylist. 7. http://spey.sourceforge.net – SMTPпрокси с под держкой технологии greylisting.
15
администрирование
Roaring Penguin CanIt Ведём борьбу со спамом
Сергей Яремчук Борьба с непрошеной коммерческой почтой – спамом, как и прочие задачи, отбирает некоторое время и силы системных администраторов, особенно на первом этапе установки и настройки спам-фильтров. В Сети можно найти многостраничные руководства по настройке любой системы борьбы со спамом, а мы попробуем найти более удобный вариант.
Б
ольшие организации с соответс- больших же фирмах покупка дорогоствующим бюджетом и имеющие тоящего решения не только не целев своем штате целый IT-отдел сообразна, но иногда и просто не по могут позволить себе закупать гото- карману. Почитав некоторые описания вые решения, сэкономив тем самым по настройке почтовых систем на базе время на развертывание и получив со- свободного ПО, приходишь к выводу, ответствующую техподдержку. В не- что для их реализации требуются се-
16
рьезная подготовка и наличие некоторого времени, так как заставить работать как единое целое несколько программ с ходу не получится. Это и послужило одной из причин возникновения готовых наборов антиспам-систем, которые на порядок проще в уста-
администрирование новке, настройке и последующей эксплуатации. Об одном из них и пойдет речь сегодня.
Возможности CanIt В основе канадской системы CanIt лежат известные утилиты: MIMEDefang – гибкий инструмент, предназначенный для защиты компьютерных систем от вирусов, и SpamAssassin – известное средство борьбы со спамом. Кроме того, в состав входят скрипты, упрощающие установку и первичную настройку, дополнительные приложения и удобный веб-интерфейс, необходимый для дальнейшей настройки системы и спам-фильтров, а также выдачи отчетов. Для прослушивания SMTP соединений MIMEDefang использует milter интерфейс Sendmail. Поэтому почтовая система должна быть постРисунок 1. Принцип работы CanIt роена только на Sendmail. Это не самый мой любимый почтовый сервер, с настройкой и безопасностью у него лиз заголовка, анализ формата сопостоянные проблемы. Но, очевидно, общения, Байесовский статистичесздесь сыграла роль его популярность. кий анализ, черные, белые и серые Если у вас уже установлен другой MTA списки, списки известных open-proxy, (Postfix, Exim, Qmail), то разработчики DNS-верификация, SPF (sender policy предлагают использовать Sendmail framework, http://spf.pobox.com). А такдля фильтрации спама, а затем пере- же hit-and-run, когда неизвестному давать почту основному MTA, работа- пользователю отсылается сообщение ющему на нестандартном порту. Вам о невозможности доставки и в случае не потребуется делать дополнитель- его повторного отправления сообщеные денежные вложения, если в сис- ние будет принято. Хотя здесь тоже теме предусмотрено достаточно ресур- имеются дополнительные настройки, сов на развитие, правда, это несколь- позволяющие ограничить прием повко усложнит систему. Но в том случае торного сообщения только той подсекогда используется MTA, разработан- тью, из которой письмо было отправное для отличных от UNIX-операцион- лено первый раз. Система может быть ных систем, без отдельного компью- сконфигурирована для фильтрации тера уже не обойтись. Либо как вари- входящего, исходящего и внутреннеант решения разработчики предлага- го почтового трафика. Можно задать ют приобрести фильтрующий почто- правила фильтрации по MIME-типу, потенциально опасным расширениям вый прокси CanIt Appliance. В качестве антивируса по умолча- прикрепленных файлов (в документанию применяется ClamAV, но при же- ции приведено 56 таких расширений – лании CanIt можно легко сконфигури- asf, bat, chm, cmd, com, crt, dll, exe, hlp, ровать с F-Risk’s F-PROT и F-PROTD, hta, inf, scr и прочие), почтовым адреF-Secure’s FSAV, H + BEDV AntiVir, сам получателя и отправителя, домеNetwork Associates’ uvscan, Norman ну и прочие. Вы можете задать и свои Virus Control, Sophos Sweep, Symantec правила фильтрации. Также несколько установленных CarrierScan Server, Trend Micro’s vscan и Vexira Anti-Virus. Учитывая, что ви- CanIt могут образовывать единую сеть, русы часто рассылаются при помо- позволяющую синхронно тренировать щи спам-технологий, они частично бу- Байесовские фильтры, Roaring Penguin дут отброшены антиспам-фильтром. Traning Network. Кроме GNU/Linux CanIt будет рабоДля определения спама использованы практически все популярные се- тать на Solaris, FreeBSD, Compaq Tru64 годня методы: ключевого слова, ана- UNIX, HPUX и AIX. Отдельно хотелось
№7, июль 2006
бы отметить хорошую документацию проекта, часть которой поставляется вместе с дистрибутивом.
Архитектура и принцип работы CanIt Для того чтобы немного понять принцип работы системы CanIt и проще было бы разобраться с настройкой, необходимо рассмотреть её архитектуру. Сообщение при помощи milter передается mimedefang, который запускает отдельный процесс, работающий в дальнейшем с сообщением. Между ними может быть как UNIX, так и TCPсокет. Процесс, получивший заголовок и тело сообщения от Sendmail, помещает его во временный каталог (/var/spool/MIMEDefang) и через UNIXсокет отсылает команду mimedefangmultiplexor, который управляет пулом постоянно запущенных Perl-процессов, осуществляющих фильтрацию, и передает сообщение одному из них. При нехватке Perl-процессов по команде multiplexor запускаются дополнительные, а при уменьшении нагрузки лишние «убиваются». Чтобы избежать утечки памяти все процессы периодически обновляются (забегая вперед, скажу, что это все настраивается в файле mimedefang.conf). Если SMTP-соединение либо отправитель сообщения принадлежат к любому из черных списков, сообщение отвергается. На следующем
17
администрирование этапе удаляются или изолируются потенциально опасные Fedora Core 3, Red Hat Enterprise Linux 3 и Solaris 2.9 (развложения и происходит проверка на вирусы. Письмо из бе- мер архивов колеблется в пределах 8,5-9,6 Мб). Для ослого списка проходит дальше без проверок. Если же оно тальных систем CanIt придется собирать из исходных текне занесено в такой список, письмо проверяется и, в слу- стов (архив 12,9 Мб). В этом случае ряд операций придетчае если оно не оценивается как спам, проходит дальше. ся проделать вручную, поэтому в статье будет рассмотЕсли же сообщение помечается как спам, то оно проходит рен более сложный вариант. Хотя, к слову, в архиве с исеще несколько этапов. Сначала на основании хэш-функ- ходными тестами в подкаталоге Packaging лежат скрипты, ции высчитывается уникальный ID, который сравнивает- позволяющие собрать пакеты для Solaris 9, SuSE, Debian ся с имеющимся в базе данных. Если ID совпадает со ста- и RedHat. тусом spam или not-spam, то в первом случае отправитеКроме самого CanIt, нам понадобятся установленный лю отсылается код отказа, а во втором – письмо отправ- Sendmail с milter. В документации версия не указана, но наляется получателю. Если же соответствующий ID не най- чиная с 8.11/8.12 использован новый milter API, с которым ден, то письму присваивается статус one-shot и отправи- сейчас работает MIMEDefang. Я использовал Sendmail вертелю отсылается сообщение о временной невозможнос- сии 8.13. Далее веб-сервер Apache, первый или второй, собти доставки (такое сообщение по умолчанию не показы- ранный с поддержкой PHP 4 или 5 версий, установленная вается в веб-браузере). Спамеры могут проигнорировать СУБД PostgreSQL от 7.3 (лучше от 8.0) и Perl не ниже 5.6, такое сообщение и не отправить письмо повторно, а поч- так как CanIt написан на нем. Все это уже должно быть устовые серверы в такой ситуации через некоторое время тановлено и настроено. повторят его обязательно. Если ID уже занесен в базу данных как one-shot, то его статус меняется на pending и от- Небольшие подготовительные операции правителю опять отсылается сообщение о временной не- Следующим шагом после распаковки архива следует провозможности доставки. Время нахождения в статусах one- верка и предварительная подготовка системы при помощи shot и pending зависит от настроек. По умолчанию если че- скрипта, находящегося в os-specific. Вся проблема состорез неделю one-shot не изменило статус на pending, то оно ит в том, что скрипты ориентированы на различные веробозначается как спам. сии RedHat/Fedora, других дистрибутивов вы там не найдете. Если попробовать выполнить любой из них, получаЛицензия ется такой вот результат: На сегодня доступны две версии продукта – CanIt Pro #./os-specific/fedora-core-1/prepare-system и CanIt Free. Вторая версия предназначена для малого бизнеса и по сравнению с первой имеет некоторые ограR O A R I N G P E N G U I N S O F T W A R E I N C . --------------------------------------------------------ничения. Так, пользователю не разрешается модифицировать исходный код для своих задач (кроме, надо полагать, Welcome to the CanIt preparation script for Fedora Core 1 GPL-продуктов, входящих в состав), система будет поддеThis script will check your system to ensure that all prerequisites рживать не более 50 пользователей, правила всех антиrequired to run CanIt are installed. спам-фильтров может редактировать только администраVerifying that you are running Fedora Core 1... FAILED тор, пользователи будут лишены некоторых возможносFedora Core not found; you are running ALT Linux Sisyphus (20050723) тей, не будет доступна техническая поддержка и Roaring Penguin Training Network, нельзя использовать продукт Чтобы не пропустить какое-то из обязательных действий, для обслуживания третьей стороны. Для небольшой ор- я рекомендую вам изменить любой из этих скриптов. Обяганизации такие ограничения не существенны. Кроме то- зательно закомментируйте функцию проверки версии сисго, free-лицензия будет действительна ровно год, затем ее темы check_release и, возможно, функцию проверки налипридется обновлять. При этом если послать запрос зара- чия установленных пакетов, требуемых для удовлетворенее, до истечения срока действия ключа, на уже исполь- ния зависимостей check_rpms. Если посмотреть на работу зованный один раз электронный адрес, то все равно полу- функции, отвечающей за проверку наличия установленных чите старый ключ, даже если остальные параметры (орга- пакетов, то можно получить этот список: низация, операционная система) будут изменены. Поэтоdb4 db4-devel perl httpd postgresql-devel postgresql му, если вам нужно несколько ключей, пользуйтесь разpostgresql-libs postgresql-server php php-pgsql php-imap sendmail ными адресами. sendmail-devel sendmail-cf gcc make glibc-devel m4 binutils libgcc
Готовим систему к установке Free CanIt Во время написания статьи была актуальной версия Free CanIt 3.2.0, выпущенная в феврале 2006 года, о ней и пойдет речь. Перед получением доступа к архиву необходимо подтвердить лицензионное соглашение и заполнить данные для генерирования ключа, обязательно указав правильный электронный адрес. После чего внизу страницы набираем «I agree» и нажимаем «Generate Licence Key». Архивы с прекомпилированными пакетами доступны для Red Hat 8.0, Red Hat 9, Fedora Core 1, Fedora Core 2,
18
В некоторых системах, в том числе и основанных на rpm-пакетах, названия могут немного отличаться. Просто проверьте, что у вас уже установлено. Далее скрипт проверяет наличие в системе необходимых пользователей и каталогов для работы и, если требуется, создает их. Сначала пользователь для Sendmail. # id smmsp uid=112(smmsp) gid=# id smmsp uid=112(smmsp) gid=58(smmsp) группы=58(smmsp)58(smmsp) группы=58(smmsp)
администрирование Если в системе нет пользователя smmsp, создаем. Но скорее всего это означает, что Sendmail либо не установлен, либо работает от имени другого пользователя. # /usr/sbin/useradd -c "Sendmail user" -r -M -d ↵ /var/spool/clientmqueue -s /bin/false smmsp
Теперь проверяем для MIMEDefang. # id defang id: defang: Такого пользователя нет
# mkdir -p /var/spool/MIMEDefang # /usr/sbin/useradd -c "MIMEDefang user" -r -M -d ↵ /var/spool/MD-Bayes defang # chmod 700 /var/spool/MIMEDefang # chown defang.defang /var/spool/MIMEDefang # mkdir -p /var/spool/MD-Bayes # chmod 700 /var/spool/MD-Bayes # chown defang.defang /var/spool/MD-Bayes # mkdir -p /var/spool/MD-Quarantine # chmod 700 /var/spool/MD-Quarantine # chown defang.defang /var/spool/MD-Quarantine
Даже при относительно небольшом количестве писем, проходящих через ваш сервер, вероятно, лучшим решением будет использование оперативной памяти для каталога /var/spool/MIMEDefang. Это на порядок ускорит обработку информации. Для этого в /etc/fstab необходимо внести следующие строки (для 128 Мб): none /var/spool/MIMEDefang tmpfs mode=700,size=128M, ↵ uid=defang,gid=defang 0 0
Следующим шагом скрипт сохраняет старые настройки Sendmail из каталога /etc/mail в /etc/mail-canit-backup и создает новые конфигурационные файлы. # fgrep -v INPUT_MAIL_FILTER < | fgrep -v ↵ 'DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, ↵ Name=MTA' > /etc/mail/sendmail.mc.NEW # cat <<'EOF' >> /etc/mail/sendmail.mc.NEW INPUT_MAIL_FILTER(`mimedefang', ↵ `S=unix:/var/spool/MIMEDefang/mimedefang.sock, ↵ F=T, T=S:15m;R:15m;E:15m') EOF
После этого сохраняем старые настройки и компилируем рабочий файл. # mv -f /etc/mail/sendmail.mc /etc/mail/sendmail.mc.ORIG # mv -f /etc/mail/sendmail.mc.NEW /etc/mail/sendmail.mc # make -C /etc/mail
Теперь проверяем и устанавливаем в автозагрузку все сервисы, от которых зависит работа CanIt. В различных дистрибутивах это делается по-разному, приведу пример для RedHat и SuSE. # chkconfig sendmail on # chkconfig postgresql on # chkconfig httpd on
Для сервисов CanIt устанавливаем запуск с большим номером, чем у предыдущих. # ln -s /etc/mail/canit/mimedefang-ctrl /etc/init.d/canit # ln -s /etc/mail/canit/ticker-ctrl /etc/init.d/canit-ticker
Делаем символическую ссылку для третьего уровня за-
№7, июль 2006
пуска системы, если нужен запуск на остальных уровнях, укажите другой конечный каталог. # ln -s /etc/init.d/canit /etc/rc3.d/S86canit # ln -s /etc/init.d/canit-ticker /etc/rc3.d/S87canit-ticker
Для остановки при выключении и перезагрузке системы. # # # # # #
ln ln ln ln ln ln
-s -s -s -s -s -s
/etc/init.d/canit-ticker /etc/rc0.d/K13canit-ticker /etc/init.d/canit-ticker /etc/rc1.d/K13canit-ticker /etc/init.d/canit-ticker /etc/rc6.d/K13canit-ticker /etc/init.d/canit /etc/rc0.d/K14canit /etc/init.d/canit /etc/rc1.d/K14canit /etc/init.d/canit /etc/rc6.d/K14canit
С CanIt пока все. Проверяем настройки PostgreSQL, Apache c PHP. В конфигурационном файле PostgreSQL /var/lib/pgsql/data/pg_hba.conf локальные запросы должны быть помечены как trust. Обычно по умолчанию так и сделано, но проверьте, чтобы не было комментария в строке (для версий 7.3 и выше). local all all trust
В более ранних версиях PostgreSQL формат несколько иной. local all trust
Кроме этого, в файле postgresql.conf, который находится в этом же каталоге, параметр max_fsm_pages установите в 500000. Теперь Apache. Убедитесь в конфигурационном файле веб-сервера httpd.conf, что PHP подключен, а файлы, имеющие расширение .php, рассматриваются как программы на PHP. LoadModule php4_module modules/libphp4.so AddModule mod_php4.c DirectoryIndex index.html index.php AddType application/x-httpd-php .php4 .php .phtml
Во многих дистрибутивах параметр max_execution_time, определяющий максимальное время выполнения каждого скрипта, в файле php.ini имеет низкое значение (обычно 30), недостаточное для нормального выполнения некоторых действий CanIt. Его рекомендуется установить в 300. Также необходимо отключить safe_mode, так как чтение файла /etc/mail/canit/db-settings невозможно в этом режиме. safe_mode = Off
Теперь запускаем PostgreSQL и Apache и переходим к следующему этапу. # /etc/init.d/httpd start # /etc/init.d/postgresql start
Компилируем модули и устанавливаем CanIt После всех подготовительных работ переходим непосредственно к сборке модулей Perl, MIMEDefang и Sendmail 8.12
19
администрирование (если он не установлен). В подкаталоге src архива после распаковки вы обнаружите 26 файлов, в том числе и Sendmail 8.12.11 и 8.13.5, ClamAV 0.88, MIMEDefrag, CanIt 2.55 и остальные Perl-модули для удовлетворения зависимостей. В общем случае для сборки всей системы необходимо дать команду./build.sh, которая сама определит, что нужно устанавливать. # id smmsp R O A R I N G P E N G U I N S O F T W A R E I N C . --------------------------------------------------------Welcome to the CanIt build script. Checking your system for prerequisites... OK Looks like you have Sendmail 8.13; we'll unpack 8.13 Good... all source files present and accounted for. Unpacking archive: Digest-SHA1-2.00.tar OK ...... Substituting paths in CanIt source code... OK Building Digest::SHA1... ---O-Found Perl module Digest::MD5 (2.20) SKIP BUILD Building HTML::Tagset... OK ...... Found Perl module File::Spec (0.8) SKIP BUILD Found Sendmail 8.13.4 with Milter SKIP BUILD libmilter.a not found BUILD Building libmilter... OK Building Sendmail wrapper program... OK Building Mail::SpamAssassin... OK Building CanIt perl modules... OK Building MIMEDefang... OK Building Clam AntiVirus... OK *** Software has been built successfully. You may run './install.sh' *** as root to install the software. *** NOTE: There is no 'defang' user on this system. We strongly *** recommend creating a 'defang' user and group for MIMEDefang.
Обратите внимание на вывод. Если соответствующий модуль уже был установлен в системе, то он пропускается. Бывает, что Perl модуль по непонятным причинам не компилируется и тогда скрипт завершается с ошибкой. В этом случае просто установите его стандартным способом, например, при помощи apt-get. При сборке он будет помечен как установленный, и соответствующий шаг будет пропущен. Также в системе на момент сборки не было пользователя defang, скрипт, как видите, предупредил нас об этом. В некоторых ситуациях, возможно, понадобится передать скрипту дополнительные параметры. Например, --everything позволит принудительно пересобрать все, а при использовании --not-sendmail или --not-clamav не будут собираться соответствующие приложения. Теперь поступаем, как подсказывает предыдущий вывод, и запускаем скрипт install.sh, в качестве параметра ему необходимо передать каталог веб-сервера, куда будут скопированы php-скрипты. Как вариант можно все настройки указать в файле layouts/layout.default. Для CanIt лучше использовать отдельный каталог. Я указал rr, в примерах документации использован canit.
20
# ./install.sh --webroot=/var/www/html/rr R O A R I N G P E N G U I N S O F T W A R E I N C . --------------------------------------------------------Welcome to the CanIt installation script. Using layout file /home/sergej/work/rr/soft/canit-distro-3.2.0/layouts/layout.default . /home/sergej/work/rr/soft/canit-distro-3.2.0/layouts... OK .... Installing documentation and contributed code Installing CanIt files Installing Web page files *** Software has been installed successfully. Now, initialize the Spam database by running:
OK OK OK
./init-database from inside the distribution directory. NOTE: Even if you are upgrading from an earlier version, you must still run ./init-database. Your existing data will be preserved.
Следующий шаг – инициализация базы данных. Здесь скрипт запускаем без дополнительных параметров. И последовательно отвечая на вопросы, указываем имя и пароль администратора для доступа к PostgreSQL, и пользователя, от имени которого CanIt будет работать с базой. В квадратных скобках указаны параметры по умолчанию. # ./init-database Please Please Please Please Please Please Please Please
enter the PostgreSQL super-user name [postgres]: enter the PostgreSQL super-user password: re-enter the PostgreSQL super-user password: enter the regular database user's name [spam]: enter the regular database user's PostgreSQL password: re-enter the regular database user's PostgreSQL password: enter the database name to use [spam]: enter the database host if not local []:
Review of your entries: Database Super-User: Database Super-User Password: Regular database user: Regular database user's password: Database Name: Database Host: Is this information correct? (Y/N) y
postgres <Hidden> spam <Hidden> spam <Local Server>
Please enter the Web GUI login name of the CanIt administrator [admin]: Please enter the CanIt administrator's password: Please re-enter the CanIt administrator's password: Review of your entry: CanIt Administrator: admin Is this information correct? (Y/N) y Checking for existing spam database... No spam database found; creating a fresh one. No spam database found; creating a fresh one. Detected PostgreSQL version 8.0.4 Creating user postgres Creating database 'spam' Creating standard CanIt tables, sequences and indexes Creating sequences: ..... Creating tables: ......................................... Creating indexes: ......... Granting access on objects to postgres: ..... Granting access on objects to postgres: ......................................... Doing base CanIt variable descriptions Doing base CanIt data Creating administrator account
NO
OK OK OK OK OK OK OK OK OK OK
Данные для доступа к БД будут сохранены в файле /etc/mail/canit/db-setting, их можно впоследствии изменить вручную. Владельцем этого файла должен быть apache,
администрирование группа defang права доступа 0640, на каталог и подкаталоги /etc/mail/canit соответственно root:root и 0755.
И последний этап перед установкой Теперь очередь MIMEDefang. В конфигурационном файле /etc/mail/canit/filter-settings.pl необходимо изменить значения следующих полей, выставив их в соответствии с действующими настройками. Хотя это можно сделать затем и через веб-интерфейс (во вкладке Setup есть три мастера), но мне удобней отредактировать один файл, чем искать настройки по вкладкам, с вscjrjq вероятностью что-то пропустить. В случае неудачи вы получите на указанные адреса отладочные сообщения, например, об отсутствии или невозможности подключиться к базе данных. $AdminAddress – адрес электронной почты администратора CanIt$. $AdminName – имя администратора. $DaemonAddress – адрес электронной почты, куда MIMEDefang будет отсылать свои сообщения. $TempfailIfDatabaseDown – при установке этого параметра в 1, в случае невозможности просканировать сообщение (например, отсутствие PostgreSQL) в заголовок почтового сообщения будет добавлено предупреждение X-Scan-Warning: «NOT SCANNED BY CANIT». $VirusHandlingIfDatabaseDown и $WindowsExecutables IfDatabaseDown – что делать при обнаружении вируса или с файлами, имеющими потенциально опасное расширение при отсутствии связи с БД («Discard», «Reject» или «Accept»). Более тонко изменить работу MIMEDefang можно в файле mimedefang.conf. Настройки антивирусного сканера, который будет проверять почту, производятся в файле /etc/mail/canit/virusscanners.pl. В него включены все поддерживаемые антивирусы, для подключения любого из них достаточно снять комментарий с соответствующих строк. Учитывая, что ClamAV распространяется по лицензии GPL и к тому же входит в комплект CanIt, приведу пример для него. # http://www.clamav.net/ $Features{'Virus:CLAMD'} = '/usr/sbin/clamd'; # Внимание clamd должен работать от имени # пользователя «defang» $ClamdSock = '/var/spool/MIMEDefang/clamd.sock';
Хотя возможен и второй вариант. # Раскомментируйте если для проверки будет # использоваться clamscan # $Features{'Virus:CLAMAV'} = '/usr/bin/clamscan';
В каталоге /etc/mail/canit/ лежит скрипт clamav-ctrl, предназначенный для запуска демона clamd. # ln -s /etc/mail/canit/clamav-ctrl /etc/init.d/clamd # chkconfig clamd on
Периодически необходимо очищать базу данных от устаревшей информации и чистить временный каталог и карантин. Для этих целей служит скрипт /etc/mail/canit/canit.cron, который должен запускаться при помощи cron раз в день
№7, июль 2006
Рисунок 2. Страница приветствия при первой загрузке. Обратите внимание на сообщения
от имени root. В дистрибутив также включен cron-скрипт для запуска freshclam, обновляющий антивирусные базы ClamAV. # crontab -e 0 6 * * * /bin/sh /etc/mail/canit/canit.cron 0 6 * * * /bin/sh /etc/mail/canit/freshclam.cron
При помощи cron запускается скрипт /etc/mail/canit/ send-trapped-report.pl, задача которого – рассылать сообщения всем пользователям о том, сколько и каких присланных им писем находятся в карантине. Он требует небольшого редактирования под действующую сеть, но подробно останавливаться на его работе не буду. Почту, находящуюся в карантине, администратор может отправить запросившему ее пользователю при помощи скрипта /etc/mail/canit/unquarantine, указав в качестве параметра каталог карантина, в котором находится интересующее пользователя письмо (он находится в /var/spool/MD-Quarantine/).
Первый запуск Считаем, что веб-сервер, PostgreSQL и Sendmail уже запущены, пора сделать тоже с CanIt. # /etc/mail/canit/ticker-ctrl start Starting the CanIt ticker
[ OK ]
# /etc/mail/canit/mimedefang-ctrl start Validating setup: Starting mimedefang-multiplexor: Starting mimedefang:
[ OK ] [ OK ] [ OK ]
При первом запуске mimedefang-ctrl в дистрибутиве ALTLinux 3.0.4 скрипт завершил работу с такой ошибкой. # /etc/mail/canit/ticker-ctrl start Validating setup: Can't locate DB_File.pm in @INC (@INC contains: /usr/local/lib/perl5/site_perl/5.8.7/i386-linux /usr/local/lib/ perl5/site_perl/5.8.7 /etc/perl5 /usr/lib/perl5/i386-linux /usr/ lib/perl5 /usr/local/lib/perl5/site_perl /usr/lib/perl5/vendor_ perl/i386-linux /usr/lib/perl5/vendor_perl .) at /usr/local/lib/ perl5/site_perl/5.8.7/CanIt/Bayes/Signature/Berkeley.pm line 9. BEGIN failed--compilation aborted at /usr/local/lib/perl5/site_ perl/5.8.7/CanIt/Bayes/Signature/Berkeley.pm line 9. .........
21
администрирование
Рисунок 3. Предупреждение CanIt о неоптимальной настройке PostgreSQL
Global Setting». Письма, приходящие на адреса, не указанные в этой таблице, будут сразу же отбрасываться (адрес postmaster согласно стандарту SMTP всегда считается действительным, и письма на этот адрес будут приходить в любом случае). Здесь все просто, заносите почтовые адреса по одному в линии и нажимаете «Add Recipient(s)». При этом адреса можно писать полностью с указанием домена (user@domain.net) или локального пользователя (user). Во вкладке «Administration → Users» можно разрешить такому пользователю вход через веб-интерфейс для просмотра статистики, изменение параметров работы некоторых фильтров. В критических ситуациях можно сбросить пароль любого пользователя при помощи скрипта /etc/mail/canit/reset-password.pl. В других вкладках можно задать правила приема почты для домена и отправителя (рис. 4) и еще много настроек. На странице Reports можно получить любые отчеты по инцидентам.
Проверяем Корректность установки CanIt можно проверить при помощи telnet. $ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 notebook.net ESMTP Sendmail 8.13.4/8.13.4; Thu, 25 May 2006 14:05:05 +0300 HELO localhost 250 notebook.net Hello notebook.net [127.0.0.1], pleased to meet you MAIL FROM:<canit-probe@roaringpenguin.com> 554 5.7.1 CanIt is installed QUIT
Рисунок 4. В настройках CanIt можно указать адреса отправителей и действия, которые будут применены при получении от них письма
В поставляемых в комплекте CanIt файлах не оказалось DB_File.pm. Проблема решилась установкой пакета perl-DBM-5.8.7-alt2.i586.rpm. Теперь в веб-браузере набираем «http://имя_узла/rr/» и получаем доступ к графическому интерфейсу. После регистрации, используя логин и пароль, указанный при инициализации базы данных, вам предложат ввести регистрационный ключ, без которого CanIt работать не будет. Обратите внимание на сообщения на странице приветствия (рис. 2), обязательно просмотите все указанные ссылки. Первое, помеченное как warning, говорит о том, что имеются замечания по настройке (рис. 3). Администратор предупреждается о том, что настройки PostgreSQL не оптимальны (такие сообщения всегда доступны в «Setup → System Check»). Последнее сообщение предлагает воспользоваться мастером Basic Setup Wizard для первоначальной настройки CanIt. Перейдя по ссылке, вы обнаружите параметры, выставленные в файле filter-settings.pl. И наконец, сообщение по середине сообщает, что свободная версия рассчитана на 50 пользователей и их необходимо занести в таблицу «Valid Recipients». В версии CanIt Pro эта таблица используется для обозначения действующих почтовых адресов и активируется установкой «Only accept mail for accounts in the Valid Recipients table» в «Administration →
22
Отправка письма canit-probe@roaringpenguin.com должна завершиться с ошибкой, но будет выведено сообщение «CanIt is installed», говорящее о том, что установка прошла успешно. В /etc/mail/canit находится файл samplespam-message, отправив который можно проверить работу спам-фильтров. А при помощи команды ps waux | grep defang убеждаемся в запуске новых процессов, обрабатывающих сообщение. $ ps waux | grep defang defang 9326 0.0 0.2 3376 696 ? S 13:46 0:00 /usr/local/bin/mimedefang-multiplexor -p /var/spool/MIMEDefang/ticker.pid -U defang -m 2 -x 4 -r 100 -i 3600 -b 432000 -c 50 -w 0 -s /var/spool/MIMEDefang/ticker.sock -l -X 150 -P 4 -Y canit-ticker -F /etc/mail/canit/ticker-filter defang 9327 0.0 2.2 18936 5304 ? S 13:46 0:01 /usr/bin/perl /usr/local/bin/mimedefang.pl -f /etc/mail/canit/ticker-filter -server … defang 9408 0.0 0.2 4080 592 ? S 14:00 0:00 /usr/local/bin/mimedefang -P /var/spool/MIMEDefang/mimedefang.pid -m /var/spool/MIMEDefang/mimedefang-multiplexor.sock -R 1 -z /var/spool/MIMEDefang -U defang -s -t -p /var/spool/MIMEDefang/mimedefang.sock -x CanIt (www . roaringpenguin . com)
Информация о работе CanIt заносится в файлы журналов. Успехов! 1. Сайт проекта Roaring Penguin CanIt – http://www.roaring penguin.com. 2. Сайт проекта MIMEDefang – http://www.mimedefang.org.
администрирование
Как работает Sendmail? Полезные подробности Часть 3: Вопросы администрирования Если хочешь, чтобы что-то было сделано хорошо, – сделай это сам. Народная мудрость
Сергей Супрунов Если ваш почтовый сервер перестал справляться с возросшей нагрузкой или работает недостаточно стабильно, не спешите покупать более мощное «железо». Возможно, проблема решится после грамотной настройки Sendmail.
Пользователи и права Сначала коснёмся общих вопросов безопасности, связанных с работой Sendmail. Как мы видели в первой части статьи [1], Sendmail, обеспечивающий функционирование почтового сервера, выполняет несколько различных задач. Рассмотрим этот процесс с точки зрения необходимых прав. Процесс, прослушивающий 25-й порт в ожидании входящих соединений, должен обладать правами root, поскольку порты до 1024-го относятся к привилегированным и не могут быть
№7, июль 2006
связаны с процессами, принадлежа- ми пользовательских .forward-файлов щими обычным пользователям. (если они используются). СледовательДочерний процесс, порождаемый но, он должен обладать правами на их для обработки входящего соедине- чтение. В то же время право на запись ния, должен иметь право на запись со- в .forward-файл должен иметь тольобщений в каталог очереди и на чте- ко его владелец, иначе этот файл буние конфигурационных баз, таких как дет проигнорирован. Аналогично праaliases.db. Причём в Sendmail реали- ва на запись в файл aliases должны зован некоторый защитный механизм, иметь только пользователи, перечиспозволяющий снизить возможность ленные в списке доверенных (парапроблем неправильной настройки. метр TrustedUser). В частности, принимая решение о доГоворя о правах доступа, сразу ставке сообщения, Sendmail руководс- скажу о том, с какими правами обратвуется файлом псевдонимов и данны- батываются перенаправления. Если
23
администрирование .forward-файл настроен на передачу сообщения на стандартный вход некоторой программы (по конвейеру), то процесс Sendmail, выполняющий это перенаправление, получит права пользователя-владельца .forward-файла. Аналогично ссылки, содержащиеся в файлах, подключенных к базе aliases с помощью конструкции :include:, будут обрабатываться с правами владельца соответствующего include-файла. Если его владельцем является root, то обработка выполняется с правами пользователя, указанного в конфигурации опцией DefaultUser (в mc-файле директива define(`confDEFAULT_USER’, `имя_пользователя’), по умолчанию используется mailnull). В первой части статьи уже упоминалось, что по умолчанию во FreeBSD создаются две конфигурации Sendmail – sendmail.cf для работы в режиме MTA, и submit.cf для процесса, выполняющего роль MDA, то есть для доставки сообщений от локальных пользователей. Сделано это для того, чтобы отказаться от suid-бита на пользователя root. Теперь Sendmail обходится suid-битом на группу smmsp, что позволяет выполнять запуск процесса с правами локального пользователя (обратите внимание, что права на очередь clientmqueue должны принадлежать пользователю и группе smmsp). Но процессы, порождаемые для обработки внешних соединений, по умолчанию выполняются с правами суперпользователя.
Root иль не root? Работа с правами root делает сервер MTA соблазнительной мишенью для взломщиков, поскольку, проникнув в систему с правами этого процесса, можно получить практически неограниченные возможности. Однако в конфигурационный файл Sendmail можно включить параметр, позволяющий настроить то, с какими правами MTA будет выполнять свою работу. В частности, чтобы порождаемые основным процессом дочерние, выполняющие обработку конкретных соединений, исполнялись от имени непривилегированного пользователя, используется опция RunAsUser. Но для этого требуется решить несколько проблем. Во-первых, чтобы разместить сообщение в очереди, пользователь, с правами которого будет запущен процесс, должен иметь возможность создавать новые файлы в соответствующем каталоге (по умолчанию – /var/spool/mqueue). Во-вторых, если письмо предназначено для локальной доставки, процесс Sendmail должен быть способен вызвать программу локальной доставки (по умолчанию mail.local) с правами, достаточными для работы с почтовыми ящиками любых пользователей. Поскольку теперь LDA вызывается процессом, не обладающим правами root, нужно либо предоставить полный доступ непривилегированному пользователю к хранилищу почтовых ящиков пользователей, либо установить на mail.local бит suid. В-третьих, этот процесс не сможет использовать данные в пользовательских .forward-файлах, либо должен быть обеспечен доступ на чтение к этим файлам. То есть приходится учитывать целый ряд дополнительных ограничений, и в итоге безопасность может оказаться, наоборот, ослабленной. Впрочем, на почтовых шлюзах,
24
Рисунок 1. Работа утилиты mailstats
где не практикуется предоставлять пользователям shell-доступ в свои домашние каталоги и право создавать .forwardфайлы, подобное ограничение может иметь смысл. Поэтому приведу здесь последовательность действий, позволяющую этого добиться. Во-первых, добавьте такие строки в mc-файл: define(`confRUN_AS_USER',`mailnull')dnl define(`confFORWARD_PATH', `')dnl
Вторая строка отключает использование .forward-файлов. Также нужно соответствующим образом изменить права на каталог очереди и на содержащиеся в нём файлы (если таковые имеются), а также на используемые базы данных: root# chown -R mailnull /var/spool/mqueue root# chown mailnull aliases aliases.db access access.db
Далее, поскольку mail.local теперь будет вызываться не «рутовым» процессом, то придётся поставить на него suid-бит: root# chmod 4555 /usr/libexec/mail.local
Иначе натолкнётесь на такую ошибку (в файле maillog): May 24 17:24:31 host sm-mta[66054]: k4ODO0sN066053: to=<user@server.ru>, delay=00:00:31, xdelay=00:00:31, mailer=local, pri=65423, relay=local, dsn=4.3.0, stat=Deferred: 451 4.3.0 lockmailbox /var/mail/user failed; error code 75
Если у вас есть подключаемые фильтры (например, clmilter, обеспечивающий работу антивируса ClamAV), то нужно будет также позаботиться о необходимых правах при обращении к этим программам. Например, попытка запуска «по умолчанию» обернётся сообщением об ошибке: Starting: sendmail 451 4.0.0 /etc/mail/sendmail.cf: line 1670: Xclmilter: local socket name /var/run/clamav/clmilter.sock unsafe: Permission denied
Чтобы его избежать, нужно позволить пользователю, с правами которого работает Sendmail, осуществлять запись в указанный сокет. После всех этих корректировок осталось пересобрать конфигурационный файл и перезапустить сервер: root# cd /etc/mail; make install restart
Теперь процессы sendmail, обрабатывающие входящие соединения, будут работать с правами пользователя mailnull, в чём можно убедиться, просмотрев вывод команды ps: serg$ ps -axouser,command | grep sendmail root
sendmail: accepting connections (sendmail)
администрирование mailnull sendmail: startup with w83-193.abo.wanadoo.fr (sendmail) mailnull sendmail: server [220.69.161.120] cmd read (sendmail)
Как видите, вполне можно обеспечить работу Sendmail с правами обычного пользователя. Однако это ослабит защиту на других участках – suid-бит на файле mail.local, дополнительные права на запись в UNIX-сокеты внешних фильтров и т. д. Так что подобная настройка весьма неоднозначна. Впрочем, окончательное решение принимать вам.
Собираем информацию Прежде чем перейти к вопросам повышения производительности почтового сервера, пару слов скажу о средствах мониторинга его работы. Ведь чтобы оценить эффект от изменения, необходимо получить некоторые количественные показатели «до» и «после», которые и будут сравниваться. Да и вообще, регулярный мониторинг работы сервера лишним никогда не будет.
Log-файлы Первое место, куда следует заглянуть, чтобы проконтролировать работу любого сервиса, – это лог-файлы. Sendmail по умолчанию ведёт журнал своей работы в файле /var/log/ maillog. Если быть точнее, то используется система Syslog, куда выводятся рабочие сообщения с facility «mail». Дальнейшее уже определяется настройками в /etc/syslog.conf. Уровни сообщений задаются в опции LogLevel (в mcфайле директивой define(`confLOG_LEVEL’,`9’), где 9 – уровень, используемый по умолчанию. Обычно используется значение от 0 (минимальное количество информации) до 10 (достаточно подробный вывод). Значения выше 10 обычно используются лишь для отладки. В ряде случаев может оказаться полезным уровень 12, на котором протоколируются все SMTP-соединения. Не забывайте, что ведение лог-файлов создаёт дополнительную нагрузку на дисковую подсистему. На загруженных серверах, по возможности, выносите каталог с лог-файлами на отдельный жёсткий диск либо используйте способность Syslog отправлять сообщения по сети на удалённый хост.
Статистика Помимо лог-файлов полезной может оказаться и утилита mailstats (рис. 1). Она выводит число принятых и отправленных сообщений (msgsto и msgsfr соответственно), входящий и исходящий трафик (bytes_to и bytes_from), число отклонённых сообщений (в соответствии с базой access). Последние две строки – итоги (строка T) и количество соединений (строка C). Для автоматической обработки может быть полезен запуск с ключом -P, когда не выполняется дополнительное форматирование: root# mailstats -P 1148036405 1148543708 0 0 0 301 1 0 0 43 3 862 51985 2495 5 2938 134398 578 T 3800 186383 3417 C 16764 720 8149
434 506 129910 50810 181660
0 0 24 513 537
0 0 0 0 0
0 0 0 0 0
prog *file* local esmtp
Запуск с ключом -p (обратите внимание на регистр символа) выводит аналогичную информацию, одновременно очищая накопленную статистику. Этим можно воспользоваться, например, для автоматической ежедневной, еженедельной или ежемесячной (в зависимости от нагрузки и требуемой оперативности) обработки статистических данных.
Состояние хостов В процессе работы Sendmail может собирать статистику доступности хостов-получателей, которую в дальнейшем можно просмотреть с помощью команды hoststat (или sendmail -bh, что то же самое). Для этого в конфигурационном файле укажите имя каталога (абсолютный путь или путь относительно каталога очереди), в котором будет сохраняться статистическая информация: define(`confHOST_STATUS_DIRECTORY', `.hoststat')dnl
Cпустя некоторое время вы сможете просмотреть состояния хостов, к которым Sendmail обращался. Так можно получить список хостов, возвративших ошибку «Operation timed out»: root# hoststat | grep timed mqg.com dila.com hideakifan.com mxfilter.bayou.com
Рисунок 2. Очередь сообщений
№7, июль 2006
00:58:43 00:57:28 00:56:12 00:02:33
Deferred: Deferred: Deferred: Deferred:
Operation Operation Operation Operation
timed timed timed timed
Здесь выводится три столбца – имя домена в первом, его состояние в третьем, и между ними – сколько времени прошло с момента определения этого состояния. Sendmail использует эту информацию, чтобы не пытаться установить соединение с сервером, который пару минут назад был недоступен (период, в течение которого состояние хоста считается достоверным, определяется опцией Timeout. hoststatus (define(`confTO_HOSTSTATUS’) в mc-файле), по умолчанию используется значение 30 минут). Однако и системный администратор может получить здесь полезную информацию.
25
администрирование Состояние очереди Пожалуй, можно считать, что от эффективности обработки почтовой очереди во многом зависит качество работы всего сервера, поскольку именно она создаёт основную нагрузку на дисковую подсистему. В то же время очередь – один из основных показателей этого самого качества. Ведь в неё попадают сообщения, которые из-за каких-то проблем не удалось отправить сразу (в нормальном режиме работы сообщение в очередь, конечно же, попадает, но ненадолго). И чем больше сообщений в очереди, тем больше проблем, которые требуют внимания. Состав очереди может быть просмотрен с помощью команды mailq (см. рис. 2). Выводимая информация позволяет узнать, сколько сообщений находится в данный момент в очереди, когда они туда попали, от кого и к кому направляются. Почти всегда в очереди можно обнаружить несколько сообщений от MAILER-DAEMON для каких-нибудь загадочных получателей в экзотических доменах – скорее всего, это сообщения об ошибке, сформированные на письма, отправленные спамерами.
Общие вопросы эффективности
Протокол IDENT Authentication Server Protocol (серверный протокол аутентификации), часто именуемый IDENT, был разработан для идентификации пользователя-владельца конкретного TCP-соединения. С его описанием вы можете ознакомиться в документе RFC 931 (который датирован январём 1985 года). В ответ на запрос в виде разделённых запятой локального (с точки зрения сервера) и удалённого портов сервер возвращает идентификационную информацию о владельце данного соединения. Служба запускается на 113-м порту (в /etc/services определён как auth). Так может выглядеть сеанс с сервером, где IDENT поддерживается: serg$ telnet smtp.nekiyhost.ru 113 Trying 1.2.3.4... Connected to mail.nekiyhost.ru.
соб повысить пропускную способность сети – максимально снизить «накладные» расходы, такие как DNS-запросы. Впрочем, некоторые другие параметры (например, значения тайм-аутов) также могут повысить производительность. Об этом и поговорим чуть подробнее. Но сперва нужно заметить, что по умолчанию конфигурация Sendmail имеет достаточно разумные параметры, так что если загрузка вашего сервера не подходит вплотную к максимальным возможностям «железа», то, скорее всего, дополнительная настройка либо не обеспечит скольконибудь заметного эффекта, либо будет связана с необоснованной потерей функциональности. Поэтому прежде чем приступать к изменению конфигурации, вспомните «золотое правило» системного администратора: «Не сломалось – не чини!».
Производительность работы любой программы определяется тем, насколько эффективно она использует доступные ей ресурсы. Условно ресурсы можно разделить на «дешёвые» и «дорогие». В случае с Sendmail «цена» ресурса определяется прежде всего затратами времени на работу с ним. Например, оперативную память можно отнести к дешёвым, поскольку обращение к ней выполняется максимально быстро. А, скажем, файловая система на жёстком диске относится к дорогим ресурсам, поскольку на переме- Вездесущий DNS щение головок винчестера требуется Как известно, неправильно настровесьма ощутимое по процессорным енные или нестабильно работающие серверы DNS являются источниками меркам время. Таким образом, в первом приближе- очень многих проблем в работе других нии основной задачей повышения эф- служб. Электронная почта – не исклюфективности можно считать задачу ми- чение, и её устойчивая работа также нимизации обращений к диску. Однако во многом зависит от качества рабозачастую «узким местом» становится ты DNS-сервера. Ведь в процессе оби сетевое подключение. Естественно, работки сообщений выполняется больписьма должны приниматься и отправ- шое число DNS-запросов: разрешение ляться (для этого, собственно, сервер имён доменов отправителя и получатеи существует), поэтому основной спо- ля; обратное разрешение IP-адресов
26
Escape character is '^]'. 25, 49973 25, 49973 : USERID : UNIX : mail
То есть вы вводите пару «порт сервера – порт клиента» (в примере предварительно было установлено соединение с 25-м портом сервера, «свой» порт можно узнать, например, с помощью sockstat), и сервер возвращает информацию о пользователе-владельце данного сокета. В настоящее время польза от данного сервиса весьма сомнительная, поскольку возвращаемая информация может быть легко фальсифицирована. В связи с этим его использование не является обязательным для работы служб Интернета, и потому на многих серверах поддержка этого протокола отключается. Например, на системах FreeBSD эта служба по умолчанию закрыта (см. /etc/inetd.conf, строки auth).
для проверки хоста, пытающегося установить соединение, по базе access; и так далее. В итоге любые задержки в работе DNS влияют и на скорость работы SMTP-сервера, вынужденного простаивать в ожидании ответов. Поэтому рекомендуется запускать DNS-сервер (в идеале – кэширующий, обслуживающий только запросы почтового сервера) на той же машине, на которой работает сервер SMTP. В случае высокой загруженности почтового сервера DNS можно вынести на отдельный компьютер, но в любом случае критичным остаётся возможность организовать быстрое и максимально надёжное соединение. Благодаря этому можно будет значительно снизить задержки при обращении к DNS-серверу, что в свою очередь позволит обслуживать большее число запросов в единицу времени. В ряде случаев, например, при работе через низкоскоростное соединение, для повышения производительности почтового сервера можно сократить до минимума использование DNS, например, отключив канонизацию адресов: FEATURE(nocanonify)
Но, поскольку в данном случае адреса не будут преобразовываться к стандартному виду, при таких настройках сервер должен работать в со-
администрирование Таблица 1. Опции тайм-аутов Опция в cf-файле
Директива mc-файла
Описание
Timeout.helo
define(`confTO_HELO', `знач')
Время ожидания команды HELO
Timeout.mail
define(`confTO_MAIL', `знач')
Время ожидания команды MAIL FROM:
Timeout.rcpt
define(`confTO_RCPT', `знач')
Время ожидания команды RCPT TO:
Timeout.quit
define(`confTO_QUIT', `знач')
Время ожидания команды QUIT
Таблица 2. Строки qt-файла очереди Строка
Пример
Описание
T
T1148293041
UNIX-время постановки сообщения в очередь
K
K1148299145
UNIX-время последней обработки сообщения
N
N5
Количество выполненных попыток отправки сообщения
P
P415878
Рассчитанный приоритет (см. ниже)
S
SMAILER-DAEMON
Имя отправителя
M
MDeferred: Connection refused by mail.darbs.lv.
Сообщение о причине неудачной доставки в прошлый раз
H?
H??To: <info@job.lv>
Строки заголовка сообщения
ра. Поэтому чуть подробнее рассмотрим вопросы, связанные с ней.
Организация очереди Очередь сообщений организована в виде каталога в файловой системе. По умолчанию используется /var/spool/ mqueue (clientmqueue для процессов, вызванных локальными пользователями). В ней можно найти несколько типов файлов: qf* – заголовочный файл сообщения. Содержит информацию, предназначенную для доставки и обработки сообщения (заголовок), а также некоторую служебную информацию, используемую программой обработки очереди (приоритет, время размещения в очереди). Значения некоторых строк представлены в таблице 2. df* – в этих файлах хранятся почтовые сообщения. Соответствие с заголовочным файлом устанавливается по оставшейся части имени файла. В процессе обработки создаются и другие временные файлы (например, xf*, содержащие сведения об ошибках, возникающие в процессе передачи сообщения).
трудничестве со Smart-хостом, который будет выполнять все необходимые корректировки. В противном случае возмож- Приоритеты ны проблемы при доставке ваших сообщений. Для сообщений, поставленных в очередь, можно назнаЕсть и более кардинальный способ: чать различные приоритеты. Это достигается с помощью следующей конфигурационной директивы (используется FEATURE(nodns) по умолчанию):
Так в чём задержка?
define(`confQUEUE_SORT_ORDER', `Priority')dnl
Дополнительной оптимизации вы достигнете, если с уста- Чем большее значение получает сообщение, тем позже оно новите более подходящие для вашего конкретного случая будет обрабатываться. Рассчитывается значение приоризначения тайм-аутов соединений. Используемые по умол- тета таким образом: чанию значения довольно велики (например, время ожиПриоритет = Размер_сообщения_в_байтах – дания ответа на команду HELO составляет 5 минут). Прав(ClassFactor * Класс_сообщения) + да, учтите, что в большинстве случаев они соответству(RecipientFactor * Кол-во_получателей) + (RetryFactor * Кол-во_попыток_отправки) ют принятым стандартам и рекомендациями (в частности, RFC 2821). К тому же проблемные ситуации достаточно редки при нормальной работе, так что снижение боль- где коэффициенты ClassFactor, RecipientFactor и RetryFactor шинства тайм-аутов (например, Timeout.quit, определяю- задаются в файле конфигурации (в формуле указаны их щий время ожидания команды QUIT) практически не ска- имена в cf-файле) и определяют «вес» класса сообщежется на общей производительности сервера. ния, количества получателей и числа предыдущих попыНо в ряде случаев изменение тайм-аутов может оказать- ток доставки. ся полезным. Например, в наши дни протокол IDENT (см. Класс определяется значением поля Precedence, а его врезку «Протокол IDENT»), предназначенный для иденти- числовое значение задаётся строками «P» в конфигурацификации владельца сокета, используется редко из-за его онном (cf) файле, например: неэффективности и недостоверности. Следовательно, нет Pbulk=-60 никакого смысла ожидать результата идентификации, и Pfirst-class=0 можно смело устанавливать соответствующий параметр в Pjunk=-100 Pspecial-delivery=100 ноль: define(`confTO_IDENT’,`0’). Некоторые из опций, отвечающих за установку различных тайм-аутов, приведены в таблице 1. Таким образом, в первую очередь будут отправляться Есть ещё группа тайм-аутов, отвечающих за работу поч- небольшие сообщения, имеющие минимальное число полутовой очереди, о них мы поговорим в следующем разделе. чателей и наибольший класс, и которые не имеют «тяжёлой кармы» безуспешных попыток доставки в прошлом. Но на Кто последний? практике механизм приоритетов не очень сильно влияет на Почтовая очередь оказывает в большинстве случаев на- общую работу сервера. Конечно, более быстрая доставка ибольшее влияние на общую производительность серве- небольших сообщений способствует «разгрузке» очереди,
№7, июль 2006
27
администрирование не позволяя ей чрезмерно вырасти за то время, пока будет выполняться обработка мегабайтного послания. Но, с другой стороны, отправитель письма, имеющего достаточно большой объём, тоже вправе рассчитывать на его своевременную доставку. Тем более что на выстраивание сообщений согласно приоритету требуются дополнительные ресурсы. Можно сделать вывод, что использование приоритетов может быть полезно разве что на сильно загруженных серверах, имеющих неравномерную загрузку (что даст гарантию отправки больших сообщений в период «затишья») при отсутствии жёстких требований по срокам доставки корреспонденции.
Другие виды сортировок Помимо рассмотренной выше сорт и р о в к и п о п р и о р и т е т у, о п ц и я QueueSortOrder может принимать ещё три значения – Host, Filename и Time. В первом случае очередь будет обрабатываться в алфавитном порядке хостов-получателей, что позволяет несколько сэкономить на установке соединения, поскольку повышается эффективность кэша хостов (см. hoststat). Во втором случае очередь будет обрабатываться в порядке размещения файлов в каталоге, что снизит нагрузку на файловую систему, поскольку не требуется предварительно считывать файлы для определения приоритетов/хостов. При установке опции в значение «Time» сортировка осуществляется в зависимости от времени нахождения сообщения в очереди. Есть ещё вид сортировки – Random. В этом случае перед обработкой очереди список файлов в каталоге будет перемешиваться случайным образом. Благодаря этому достигаются преимущества метода Filename и снижается вероятность того, что несколько одновременно запущенных процессов будут пытаться отправить одно и то же сообщение.
Ветвления Sendmail позволяет организовать параллельную обработку очереди, когда для каждого сообщения вызывается свой процесс. Определяет-
28
Группы очередей Sendmail позволяет распределять сообщения по различным очередям с группировкой по домену получателя. Например, чтобы выделить в отдельную очередь почту для mail.ru, yandex.ru и rambler.ru, необходимо выполнить следующие действия: Добавить в mc-файл строки: FEATURE(`queuegroup') QUEUE_GROUP(`mails', ↵ `P=/var/spool/mqueue/mails, F=f')
Этими строками мы объявляем отде-
ся это опцией ForkEachJob (директива define(`confSEPARATE_PROC’) в mc-файле). Это снизит общее время обработки сообщений в очереди: пока одни процессы будут ожидать ответа удалённых серверов, другие могут выполнять дисковые операции или использовать ресурсы процессора. Но, как и у любой медали, здесь есть оборотная сторона: большое число одновременно работающих процессов создаёт дополнительные «непроизводственные» затраты на переключение процессов и обслуживание сетевых соединений. К тому же при параллельной работе процессы sendmail не смогут воспользоваться кэшем состояния хостов (hoststat). В этот кэш при последовательной обработке очереди заносится информация о недоступных хостах, и попытки отправить другие сообщения на эти хосты не предпринимаются. В случае же параллельной обработки каждый процесс самостоятельно проверяет работоспособность хоста получателя, так что при недоступности одного из удалённых серверов будут предприниматься попытки доставки каждого адресованного ему сообщения.
Режимы обработки очереди
льную очередь для группы mails. Ключ F=f заставляет Sendmail запускать для обработки этой очереди отдельный процесс (выполнять вызов fork). За «приписку» конкретных сообщений к группе mails отвечает файл access: QGRP:mail.ru QGRP:yandex.ru QGRP:rambler.ru
mails mails mails
Теперь почта для указанных доменов будет размещаться в собственной очереди.
interactive – интерактивный режим. Sendmail сразу пытается доставить сообщение, не разрывая соединение с отправителем. Если доставка выполняется успешно, отправитель получает ответ «250 OK» и отсоединяется. В очередь письмо помещается только в том случае, если его не удаётся доставить сразу. В данном режиме, особенно если основная масса получаемых сообщений предназначена для локальной доставки, существенно снижается нагрузка на дисковую подсистему. Но при этом отправитель вынужден удерживать соединение всё то время, пока будет предприниматься первая попытка доставить сообщение. queue – только в очередь. В этом режиме попытка немедленно отправить сообщение вообще не будет предприниматься. MTA будет только помещать письмо в очередь. Отправка будет осуществляться уже обработчиком очереди. Может быть полезно в случае, если перед отправкой требуется установить интернет-соединение (например, коммутируемое). defer – отложить доставку. Аналогичен режиму queue, но при этом подавляются также и любые обращения к сети (например, запросы DNS).
В Sendmail предусмотрено несколько режимов обработки очереди, задаваемых директивой define(`confDELIVERY_ Наборы очередей MODE’): Вместо общего каталога для всех background – используемый по файлов очереди в Sendmail можно исумолчанию режим фоновой отправ- пользовать наборы очередей. Наприки. В этом случае Sendmail снача- мер, директива define(`QUEUE_DIR’, ла получает сообщение от клиен- `/var/spool/mqueue/*’) заставляет Sendmail та, помещает его в очередь и воз- все каталоги в mqueue рассматривать вращает клиенту ответ «250 ОК». как очереди и соответственно обрабаПосле чего сообщение доставля- тывать их. При этом для размещения нового письма конкретный каталог буется в фоновом режиме.
администрирование дет выбираться случайным образом, что гарантирует определённую «равномерность» заполнения очередей. Есть возможность и более «интеллектуально» размещать различные сообщения – см. врезку «Группы очередей». Если имена каталогов в mqueue будут начинаться с qf, df, xf, то Sendmail будет использовать их для размещения соответствующих файлов. Если при этом каталоги разнести по разным жёстким дискам, то можно повысить скорость обработки каждого сообщения. Причём некоторые файлы (например, xf) могут быть безболезненно размещены в памяти (используя tmpfs). Помимо снижения количества сообщений в отдельных каталогах, наборы очередей позволяют осуществлять параллельную обработку нескольких очередей, что положительно сказывается на производительности.
«Русский экстрим» Для иллюстрации предлагаю вам рассмотреть один практический пример. Имеется почтовый сервер, который уже не справляется с навалившейся на него нагрузкой, а денег на новый нет. Зато есть несколько «слабеньких» машин, которые можно использовать. Один из вариантов решения – организовать «распределённый» почтовый сервер за счёт «разделения труда», когда несколько вспомогательных серверов принимают на себя часть нагрузки основного. Схема нашего «сводного сервера» представлена на рис. 3. Основной сервер занимается взаимодействием с клиентами – принимает от них сообщения для отправки, размещает входящую корреспонденцию по почтовым ящикам пользователей, и т. д. То есть делает то, что и любой почтовый сервер. Но, чтобы ему было проще, предусмотрено несколько вспомогательных серверов. Сервер, обозначенный на схеме как Smart-хост, берёт на себя заботу о доставке исходящих сообщений. Поскольку он имеет надёжную связь с основным сервером, то задержки при передаче ему почты будут незначительными. Благодаря этому затраты ресурсов основного сервера на отправку сократятся, поскольку никаких проблем, способных вызвать чрезмерное разрастание очереди, возникнуть не должно (не считая, конечно, выхода из строя самого Smart-хоста). Ещё один вспомогательный сервер, теперь уже для облегчения участи Smart-хоста, – FallBack-сервер, задача которого – обрабатывать «проблемные» сообщения, которые Smart-хост не смог доставить. Благодаря этому и на Smart-хосте очередь должна оставаться минимальной.
№7, июль 2006
«За выслугу лет» Ещё одним полезным параметром является MinQueueAge. С его помощью можно указать, сколько сообщение должно «отлежаться» в очереди, прежде чем будет предпринята следующая попытка доставить его. Такая странная на первый взгляд опция позволяет повысить время отклика очереди, установив сравнительно небольшой интервал её обработки (например, 5 минут), но без слишком частых попыток отправить «застрявшее» сообщение. Сделать это можно следующим образом: define(`confMIN_QUEUE_AGE', `30m')
Если теперь процесс-обработчик очереди запустить с параметром -q5m, то очередь будет обрабатываться каж-
Backup-сервер (на который должна указывать MX-запись с меньшим приоритетом) в рассматриваемой схеме выглядит не совсем уместно, будучи подключенным на тот же интернет-канал. Если организация располагает резервным интернет-соединением, то данный сервер следует подключить именно на него. Но даже в такой схеме его использование позволит разгрузить основной сервер. Для этого нужно на основном сервере установить небольшие значения тайм-аутов, а также «посильное» значение MaxDaemonChildren. В результате медленные, а также «избыточные» внешние соединения будут отклоняться, и их обслуживание возьмёт на себя Backup-сервер. Есть ещё один приём балансировки нагрузки. Заключается он в том, что если домен имеет несколько MX-записей с одинаковым приоритетом, то для работы должна выбираться случайным образом одна из них, что обеспечивает равномерность распределения нагрузки между несколькими хостами. Для Backup-сервера можно указать более приоритетную M X- з а п и с ь, ч то б ы вся вход ящая почта поступала в первую очередь на него. При этом основной сервер сможет получать почту от Backupсервера с меньшими издержками благодаря более быстрому и надёжному соединению. Но имейте в виду, что использование отдельного сервера для входящих соединений имеРисунок 3. Больше
ет один недостаток: этот сервер ничего не будет знать о существовании конкретных пользователей, следовательно, он будет принимать всю почту, адресованную на обслуживаемый домен, вместо того чтобы отклонять сообщения для несуществующих пользователей ещё на стадии команды RCPT TO. Мы рассмотрели, скажем так, «предельный» случай. На практике можно варьировать его в весьма широких пределах в зависимости от наличия «лишних» компьютеров. Например, можно объединять на одной машине ряд задач (FallBack-сервер и Backup-сервер вполне уживутся на одном компьютере, особенно если он будет подключён на резервный интернет-канал) либо часть задач возлагать не на выделенный сервер, а на уже имеющийся (например, принт-сервер в локальной сети), если его ресурсы и режим безопасности позволяют это сделать, и т. д. И конечно же, обязательным является только основной сервер, все остальные – «опциональны».
серверов – хороших и разных...
29
администрирование дые 5 минут, но при каждом запуске будут отправляться только те сообщения, попытка отправки которых предпринималась не менее получаса назад.
Ограничения по загрузке Механизм обработки очереди в Sendmail предусматривает ещё один метод предотвращения перегрузки сервера. Сразу нужно заметить, что это не средство оптимизации работы Sendmail, а своего рода «аварийный клапан», и если он срабатывает достаточно регулярно – значит, нужно что-то делать для повышения производительности. Речь идёт о двух опциях – QueueLA и RefuseLA (в mc-файле – define(`confQUEUE_LA’, `знач’) и define(`confREFUSE_LA’, `знач’) ) соответственно). Первая из них при превышении средней загрузки сервера (Load Average) сверх указанной переводит Sendmail в режим «только очередь» (queue), когда для входящих сообщений не предпринимаются попытки доставить их немедленно, а выполняется только размещение в очереди. Вторая опция даёт указание отклонять новые соединения, если средняя загрузка системы превышает указанное значение. О том, что это произошло, можно узнать по записям «Sendmail rejecting connecting, load average too high» в /var/log/maillog.
Оптимизация очереди
Рисунок 4. Схема работы с резервным сервером
набор очередей, разнеся различные каталоги по нескольким дискам, то можно достичь ещё более высоких показателей скорости работы. Нужно сделать и одно предостережение – как бы ни казалось заманчивым размещение очереди в оперативной памяти (используя tmpfs), этого не следует делать. Ведь сообщения для того и помещаются в очередь, чтобы гарантировать их сохранность при неожиданных проблемах с сервером, вплоть до перезагрузки. Если же в вашем случае надёжностью доставки можно пренебречь (думаю, это верно разве что при рассылке спама), то можно отключить опцию SuperSafe (define(`confSAFE_QUEUE’, `False’)). А вот размещение в tmpfs конфигурационных файлов (таких как aliases.db, access.db) может быть весьма полезно – ведь в этом случае Sendmail не будет каждый раз обращаться к диску для «разрешения» псевдонима или поиска адреса отправителя в базе access. Впрочем, в грамотно работающей системе эти данные и так должны преимущественно находиться в дисковом кэше (если, конечно, нехватка оперативной памяти не вынуждает систему снижать размер кэша до предела).
Основная проблема, связанная с очередью, – это её чрезмерное разрастание. Когда по тем или иным причинам (проблемы при доставке или поступление новых сообщений с большей скоростью, чем сервер может обработать) в каталоге очереди скапливается большое число файлов, система начинает тратить слишком много времени на их предварительную обработку (поиск, чтение, расчёт порядка обработки согласно приоритету и т. д.). Если проблема носит регулярный характер, то более эффективным, по-видимому, будет устранение её причины («узкий» интернет-канал, недостаточно быстрый процессор, спам-рассылки со стороны ваших клиентов). Учитывая постоянно возрастающие объёмы пересылаемой корреспон- Методы «авральной» работы денции, попытки выиграть несколько процентов произво- И всё же порой случается, что очередь заполняется неимодительности за счёт оптимизации работы с очередью (воз- верным количеством сообщений. Например, причиной поможно, ценой снижения функциональности или надёжнос- добного может явиться прерывание соединения с Интернетом на несколько часов. Пока канал будут «поднимать», нети) могут рассматриваться лишь как временная мера. Тем не менее рассмотрим основные приёмы, позволяю- терпеливые пользователи накидают уйму писем, которые после восстановления соединения могут вызвать резкий щие добиться более быстрой работы с очередью. Во-первых, рассмотренные выше режимы сортировки всплеск нагрузки на сервер. Если учесть, что в это же время очереди позволяют несколько перераспределить нагрузку на ваш MTA обрушится масса внешних соединений (удалёнв зависимости от того, в каких ресурсах испытывается не- ные серверы ведь тоже накапливали всё это время письма, достаток. Так, порядок Filename несколько снижает нагруз- адресованные вам, и теперь поспешат от них избавиться), ку на дисковую подсистему; Host – оптимизирует исполь- то ситуация может стать близкой к катастрофической. Наиболее простым и почти что «стандартным» спосозование сетевых ресурсов и т. д. Во-вторых, подумайте над тем, чтобы вместо одной оче- бом решения подобных проблем можно считать перенос нареди использовать наборы. Меньшее число файлов в конк- копившихся файлов очереди в отдельный каталог с послеретном каталоге позволит более быстро и с меньшими за- дующей его обработкой «вручную». Это позволяет максимально быстро вернуть сервер в «штатный» режим. тратами выполнять поиск нужного файла. В-третьих, на сильно загруженных серверах имеет смысл вынести каталог очереди на отдельный жёсткий Серверы на «чёрный» день диск или даже на RAID-массив, с тем чтобы максимально К сожалению, время от времени любая техника даёт сбои. повысить скорость доступа к файлам. Если использовать Чтобы смягчить последствия временной недоступнос-
30
администрирование Для решения этой проблемы предусматривается так называемый FallBack-сервер. Так, если основной сервер содержит в своей конфигурации такую строку: define(`confFALLBACK_MX', `адрес_сервера')
то при возникновении проблем с отправкой сообщения оно будет «сбрасываться» на указанный адрес, который возьмёт на себя дальнейшую заботу о его судьбе (рис. 5). Технически адрес FallBack-сервера добавляется в конец списка хостов-получателей, определённых на основании MX-записей. То есть это работает так, как если бы каждый удалённый сервер имел ещё одну MX-запись с минимальным приоритетом, указывающую на FallBack-сервер. Рисунок 5. Схема работы с FallBack-сервером
Продолжение следует…
ти вашего сервера или интернет-соединения, сохранив Итак, Sendmail предоставляет достаточно широкие возмождля удалённых пользователей возможность по-прежнему ности по гибкой настройке работы для повышения эффекотправлять вам почту, можно предусмотреть резервный тивности, надёжности и безопасности. В большинстве слупочтовый сервер. чаев дополнительная настройка сервера выглядит излишПочтовый сервер, выполняющий роль резервного, дол- ней, но в условиях дефицита ресурсов некоторая оптимижен быть настроен на обработку почты, поступающей для зация может оказаться весьма полезной. другого домена. Ну и естественно, на него должна указыВпереди у нас ещё одна, последняя, тема – взаимовать MX-запись для обслуживаемого домена, имеющая низ- действие Sendmail со сторонними программами. Например, ший приоритет. В этом случае при невозможности доста- эта программа позволяет фильтровать сообщения с помовить почту на основной сервер будет использоваться ре- щью так называемых milter. Чтобы не превратить свой серзервный (см. рис. 4). вер в открытый релей и в то же время позволить всем ваИногда полезно предусмотреть и «обходной манёвр» шим пользователям отправлять почту из любой точки мира, для обратной проблемы – когда ваш сервер не может от- можно настроить smtp-аутентификацию с помощью Cyrus править почту удалённому. По умолчанию в этом случае SASL. Об этом и поговорим. вся отправляемая корреспонденция должна оставаться в очереди, и периодически должны предприниматься по- 1. Супрунов С. Как работает Sendmail. Полезные подробности. пытки её доставить. Однако в результате очередь сообщеЧасть 1. //Системный администратор, №5, 2006 г. – С. 12-18. ний может оказаться перегруженной, и почтовый сервер бу- 2. Супрунов С. Как работает Sendmail. Полезные подробности. дет тратить слишком много времени на её обслуживание. Часть 2. //Системный администратор, №6, 2006 г. – С. 18-25.
Итоги фестиваля DiHalt 2006
В
Сидорук Иван Сергеевич: пред- конкурсах художников. Первые месконце апреля 2006 года в Нижнем Новгороде прошел очеред- ставитель коллектива авторов (f0x, та в ZX Spectrum GFX, Handdraw GFX, ной фестиваль компьютерно- unc и группы deMarche ) победивших и Freestyle GFX. Всем победителям в подарок вруго искусства DiHalt 2006. Лучшие про- в Amiga/PC 64k intro. Шарапов Алексей Александро- чается подписка на журнал «Системграммисты, художники и музыканты выставляли свои работы на суд зри- вич: Out of Style III (совместная рабо- ный администратор» на второе потелей. та от Storm Studios и The SandS) – пер- лугодие 2006 года. Работы, предПобедителями (по итогам голосо- вое место в Amiga/PC demo. ставленные на фестивале, доступКостик Сергей Юрьевич: человек, ны по адресу: http://www.scene.org/ вания зрителей) в номинированных по праву одержавший победы в трех dir.php?dir=/parties/2006/dihalt06. конкурсах стали: Елфимов Константин Валерьевич: работа от творческого коллектива CyberPunks Unity – «Untitled» занявшая первое место в номинации ZX Spectrum demo. Акимов Вадим Алексеевич: автор работы LPSTOP, по праву занявшую первую строку в конкурсе Amiga/ PC 4k intro.
№7, июль 2006
31
администрирование
Ведём статистику прокси-сервера Squid
Павел Малахов Журнальные файлы прокси-сервера Squid даже для небольших предприятий могут быть очень объёмны. Разбирать их вручную малоэффективно, а вести статистику или учёт просто невозможно. Для этого существуют вспомогательные программы.
Р
ано или поздно мы (системные администраторы) хотим (или нас заставляют) установить контроль над использованием интернет-трафика. У меня пользователи периодически недоумённо осведомляются, на что истратилась их квота. Чаще всего они
32
не глядя скачали какое-нибудь обновление, но бывают случаи, от них не зависящие. Например, не отвечал сервер mail.ru, а его агенты, пытаясь установить с ним связь, «съедали» у некоторых пользователей большую часть их скромной квоты. Приходилось не-
сколько раз сталкиваться со злонамеренными самообновляющимися страницами. Ясность частично можно внести и штатными средствами, используя команды cat и grep. Например, сделать выборку из журнала для конкретного IP-адреса командой:
администрирование # cat /var/log/squid/access.log | grep 10.0.0.15 > ↵ /tmp/10.0.0.15.txt
а затем перенести файл на компьютер, где есть MS Excel, и там его просматривать. Так я и делал, пока не потребовалось проводить более серьёзный анализ и вести статистику.
Подготовительные работы Ради универсальности процедуры установки программ под разные операционные системы (семейства UNIX) будем устанавливать их из исходных кодов. На сайтах программ указано, где можно взять уже собранные пакеты для определённых ОС. По возможности лучше использовать их, так как в этом случае пакет регистрируется в системе, что при автоматическом обновлении ОС позволит получить подробную информацию об установленном пакете, соблюдать зависимости при установке новых пакетов и в других случаях. Примите во внимание, что при установке собранного пакета пути к файлам могут отличаться от указанных в статье. Для просмотра отчётов через веб-интерфейс нам понадобится веб-сервер. Отчёты будем хранить в каталоге /var/www/html/reports. Calamaris и LightSquid написаны на Perl, поэтому он должен уже стоять в системе. Автор Calamaris рекомендует ставить самую последнюю версию, хотя и упоминает, что некоторые пользователи успешно использовали его программу на Perl 5.001. Требования к Perl для LightSquid не приводятся, так что от себя скажу, что на версии 5.8.7 всё работает отлично. Squid (www.squid-cache.org), конечно, уже должен быть установлен, вести журнал в родном формате (что определяется в squid.conf опцией emulate_httpd_log off) и проводить ежедневную ротацию журналов, не сжимая архивы. Последнюю задачу лучше поручить программе logrotate, указав в файле /etc/logrotate.d/squid следующее: /var/log/squid/access.log { daily rotate 6 copytruncate nocompress notifempty missingok } … # далее описана ротация cache.log и store.log
а Squid освободить от этой обязанности, указав опцию logfile_rotate 0.
Sarg
Если вы используете Linux и хотите размещать конфигурационные файлы в /etc/sarg (по умолчанию /usr/local/sarg), в этом случае укажите соответствующую опцию: # ./configure --enable-sysconfdir='/etc/sarg' # make # make install
Создаём каталог, где будем хранить отчёты: # mkdir -p /var/www/html/reports/
В /etc/sarg/sarg.conf устанавливаем параметры: language Russian_koi8 access_log /var/log/squid/access.log.1 # вчерашний журнал title "Squid report for proxy1" output_dir /var/www/html/reports/sarg date_format e charset Koi8-r www_document_root /var/www/html
Опцией date_format мы определяем, как будет выглядеть имя выходного файла, который состоит из форматированной даты. Возможные варианты значения этой опции: e – dd/mm/yyyy – европейский формат даты; u – mm/dd/yyyy – американский формат даты (предлагается по умолчанию); w – yyyy.ww – год и номер недели в году. Все необходимые настройки сделаны, запускаем: # sarg SARG: Records in file: 19329, reading: 100.00% SARG: Отчет успешно сгенерирован в: /var/www/html/reports/sarg/ 04Jun2006-06Jun2006
Видим, что всё прошло успешно. Теперь отчёт можно посмотреть в браузере. Ещё несколько параметров, которые могут понадобиться: # оставить в отчёте только нескольких пользователей include_users "petrov:ivanov:secretar" # не учитывать записи журнала, содержащие подстроки exclude_string "подстрока1:подстрока2" # не учитывать обращения к перечисленным доменам exclude_hosts /etc/sarg/hosts.txt # сколько файлов отчётов нужно хранить в директории, # самый старый убирается lastlog 30 # создавать отчёт только для указанных дней недели, # воскресенью соответствует 0 weekdays 1-5 #создавать отчёт только для определённых часов hours 8-18
Можно отправлять отчёт по почте. Правда, в этом слуSarg (Squid Analysis Report Generator – генератор аналитических отчётов Squid) доступен на нескольких языках, на рус- чае не будет формироваться html-файл. В параметре report_type можно указать, какие отчёты ском – в трёх кодировках: koi-8, UTF-8, windows-1251. нас интересуют. Sarg предоставляет следующие: Сайт – sarg.sourceforge.net. Стабильная версия – 2.2.1. topsites – отображает название сайта, количество подключений к нему, количество взятых с него байт и об Объём – 376 Кб. щее время соединений; «Понимает» журналы – Squid, Microsoft ISA, Novell Border Manager. sites_users – отображает список всех посещённых сайтов и какие пользователи на них заходили; Собираем стандартным способом: users_sites – отображает список сайтов, на которые заходил пользователь, количество подключений к каждо# ./configure му и скаченный объём (рис. 1);
№7, июль 2006
33
администрирование Создаём каталоги для самого Calamaris и для создаваемых им отчётов: # mkdir -p /etc/calamaris /var/www/html/reports/calamaris
Копируем calamaris.conf в /etc/calamaris/ и редактируем:
Рисунок 1. Список сайтов, которые посетил пользователь
Рисунок 2. Активность пользователя в Интернете
date_time – отображает таблицу интенсивности исполь
зования прокси-сервера пользователем в часах и днях (рис. 2); denied – отображает список сайтов, в доступе к которым было отказано; auth_failures – отображает ошибки аутентификации; site_user_time_date – отображает для каждого пользователя дату и время всех обращений к сайту; downloads – отображает отчёт по загрузкам (download). Какие файлы отнести к этой категории, определяем в параметре donwload_suffix. Например, можно указать расширения аудио-файлов и узнать, кто, когда и откуда скачивал музыку.
Sarg также может обрабатывать журналы DansGuardian и SquidGuard – сторонних программ, написанных для Squid и ограничивающих доступ к сайтам на основании различных правил (по URL, по содержимому сайта и т. д.).
Calamaris 3 Переводится с английского так же, как и Squid, – кальмар, головоногий моллюск. Сайт – www.Calamaris.Cord.de. Стабильная версия – 2.59. Объём – 100 Кб. «Понимает» журналы – Squid, NetCache, Inktomi Traffic Server, Oops! proxy server, Compaq Tasksmart, Novell Internet Caching System, Netscape/iPlanet/SunONE Web Proxy Server, Cisco Content Engines. Если не нужны графики, то достаточно одного скрипта. Распаковываем: # tar -xzvf /path/to/calamaris-2.59.tgz
Если же хочется увидеть результаты ещё и в графиках, то нужно устанавливать бета-версию 2.99.4.0 (сбоев не замечено) и доустановить библиотеки и модули. Подробную инструкцию можно посмотреть в [1], но и идущая с пакетом инструкция вполне понятна (правда, на английском).
34
$requester_report = -1; $status_report = 1; $type_report = -1; $hostname = 'lookup'; $output_format = 'html,graph'; $output_path = '/var/www/html/reports/calamaris'; $output_file = 'index.html'; $show_reports = '0,2,5,6,8,10,11,13,14';
Копируем calamaris в /etc/calamaris/calamaris.pl. Расширение добавляем для определённости, что это скрипт на Perl. Создаём каталог /usr/lib/perl5/calamaris (или там, где у вас находятся библиотеки perl) и копируем туда calAxestype.pm, calAxestype3d.pm, calBars3d.pm. Копируем мануал calamaris.1 в /usr/local/man/man1/. Будем использовать скрипт (см. листинг), который позволит нам создавать ежедневные, еженедельные и ежемесячные отчёты. Ежедневные будут храниться месяц, а еженедельные и ежемесячные – год. Скрипт поместим в /etc/ calamaris/calam_rep.sh <files/scripts/calam_rep.sh>. #!/bin/bash # Скрипт для Calamaris 3. Создаёт отчёты по логам Squid # Использование: calam_rep.sh [today|yesterday|week|month] # Pavel Malakhov 28.03.05 CALAM_DIR='/etc/calamaris'; # Каталог программы SQUID_LOG_DIR='/var/log/squid'; # Каталог логов Squid # Корневой каталог отчётов, остальные создадутся REP_PATH_PREFIX='/var/www/html/reports/squid'; # Каталог, где будем хранить недельные кэш-файлы CACHE_DIR='/etc/calamaris/cache'; # Так как отчёт делаем за вчерашний день, то название отчёта # должно это отражать. Определим для этого переменные. # Для наглядности предположим, что сегодня 1 февраля 2006, # среда, тогда вчера было 31 января, вторник # Вчерашнее число, т.е. YESTD=31 YESTD=`date -d yesterday +%d`; YESTW=`date -d yesterday +%V`; # Номер недели # Для нашего примера номер недели не изменился и YESTW=5. # Номер и название месяца, т.е. YESTM=01_January YESTM=`date -d yesterday +%m_%B`; # Существует проблема с обработкой не английских букв, # если используется кодировка en_US.UTF-8. # Поэтому переназначим переменную LANG. Если используется # другая кодировка или проблем нет, то закомментируйте # нижеследующие 2 строки LANG=en_US export $LANG # --- Нижеследующий код изменять не нужно --------------# ---- [но исследование приветствуется!] ---------------# Если параметр отсутствует, то прерываем выполнение скрипта if [ "$1" = "" ]; then echo "Usage: calam_rep.sh [today|yesterday|week|month]" exit 1 fi # Если каталог для отчётов не существует, то создаём function checkdir { if [ ! -e "$REPPATH" ];then echo -n `date +%c` "Dir \"$REPPATH\" is absent. Creating.."; mkdir -p $REPPATH; echo "Done."; fi; } # Если каталог для кэша не существует, то создаём if [ ! -e "$CACHE_DIR" ];then echo -n `date +%c` "Cache dir \"$CACHE_DIR\" is absent. ↵ Creating... "; mkdir -p $CACHE_DIR; echo "Done."; fi;
администрирование case "$1" in "today" ) REPPATH=$REP_PATH_PREFIX'/today'; checkdir; cd $CALAM_DIR; echo -n `date +%c` "Processing data for today... "; cat $SQUID_LOG_DIR/access.log | ./calamaris.pl ↵ --config-file ./calamaris.conf --output-path $REPPATH; ;; "yesterday" ) REPPATH=$REP_PATH_PREFIX'/days/'$YESTD; checkdir; cd $CALAM_DIR; echo -n `date +%c` "Processing data for yesterday... "; cat $SQUID_LOG_DIR/access.log.0 | ./calamaris.pl ↵ --config-file ./calamaris.conf --output-path $REPPATH ↵ --cache-output-file $CACHE_DIR/day.$YESTD; ;; "week" ) REPPATH=$REP_PATH_PREFIX'/weeks/'$YESTW; checkdir; cd $SQUID_LOG_DIR; echo -n `date +%c` "Processing data for week... "; cat access.log.6 access.log.5 access.log.4 access.log.3 ↵ access.log.2 access.log.1 access.log.0 | $CALAM_DIR/calamaris.pl --config-file $CALAM_DIR/calamaris.conf --output-path $REPPATH ↵ --cache-output-file $CACHE_DIR/week.$YESTW; ;; "month" ) REPPATH=$REP_PATH_PREFIX'/months/'$YESTM; checkdir; cd $CACHE_DIR; CACHEFILES=""; for ((i=1; i<=31; i++)); do FILE='day.'$i; if [ -e "$FILE" ]; then if ["$CACHEFILES" = ""]; then CACHEFILES=$FILE; else CACHEFILES=$CACHEFILES':'$FILE; fi fi done echo 'files to process '$CACHEFILES; echo -n `date +%c` "Processing data for month... "; $CALAM_DIR/calamaris.pl --config-file $CALAM_DIR/calamaris.conf --cache-input-file $CACHEFILES ↵ --no-input --output-path $REPPATH; echo "Done"; # Очищаем кэш в начале месяца. # Удаляем только записи для дней, для недель оставляем DD=`date +%d`; if [ "$DD" = "01" ]; then echo -n `date +%c` "Cleaning up cache dir... "; rm -f $CACHE_DIR/day.*; fi ;; esac echo "Done"; echo `date +%c` "---Everything is done" exit 0
Делаем этот скрипт исполняемым: # chmod +x /etc/calamaris/calam_rep.sh
Cоздаём отчёт: # ./calam_rep.sh yesterday
и смотрим его в браузере по адресу http://our.domain.ru/ reports/calamaris/days. Создаём журнальный файл /var/log/calam_rep.log, куда будем записывать результаты запуска скрипта по cron: # touch /var/log/calam_rep.log
Слабое место Calamaris – статистика по пользовате-
№7, июль 2006
Рисунок 3. Cуммарная информация по работе прокси-сервера
Рисунок 4. Распределение трафика по протоколам
лям и сайтам, сильная сторона – общая статистика по нагрузке на прокси-сервер. Все отчёты последовательно отображаются на одной html-странице. Некоторые отчёты не отображаются, если в журнале не найдены необходимые для него записи. Мне удалось получить 11 отчётов. Вот их описание: Summary – суммарная информация по работе проксисервера (рис. 3). Incoming requests by method – входящие запросы по методу (Get, Post и т. д.). Incoming UDP(TCP)-requests by status – входящие запросы по статусу (HIT, MISS, DENIED и т. д.). Outgoing requests by status – исходящие запросы по статусу. Outgoing requests by destination – исходящие запросы по месту назначения. Request-destinations by 2nd-level-domain – сгруппированная статистика для доменов 2-го уровня, т.е. запросы на site1.example.com и site2.example.com суммируются в статистике для домена example.com.
35
администрирование Берём последнюю версию с lightsquid.sourceforge.net и распаковываем: # tar -zxvf ./lightsquid-1.6-beta.tgz
Создаём каталог, где будем хранить отчёты: # mkdir -p /var/www/html/reports/lightsquid
Всё содержимое каталога lightsquid-1.6-beta копируем в созданный каталог. Меняем владельца на того, кто у нас в роли httpd-пользователя (например, webmaster) и делаем скрипты исполняемыми файлами: Рисунок 5. Удобный интерфейс начальной страницы LightSquid
# # # #
chown -R root.webmaster /var/www/html/reports/lightsquid cd /var/www/html/reports/lightsquid chmod +x *.cgi chmod +x *.pl
В конфигурационном файле lightsquid.cfg меняем значения переменных:
Рисунок 6. Популярные сайты. Можно сортировать по «Соединениям» и по «Байтам»
Request-destinations by toplevel-domain – сгруппиро
ванная статистика для доменов 1-го уровня (ru, com, org и т. д.) TCP-Request-protocol – распределение трафика по протоколам (рис. 4). Requested content-type – распределение трафика по значению поля Content-type и по статусу входящих TCP-запросов (TCP_HIT, TCP_MISS, TCP_DENIED, и т. д.) Requested extensions – распределение трафика по расширениям запрошенных файлов (gif, htm и т. д.). Incoming UDP(TCP)-requests by host – статистика по пользователям (количество запросов, скаченный объём).
Если Calamaris будет не единственным обработчиком журналов Squid, то я бы не ставил поддержку графики (от них практической пользы нет) и не выводил статистику по пользователям (другие программы это делают и полнее, и красивее). В таком облегчённом варианте он ставится быстро, и генерируемые им отчёты в будущем будут занимать меньше места.
LightSquid Перевести название программы можно как «освещённый Squid». В каком свете нам будет представлен Squid, а точнее наши пользователи, можно посмотреть по адресу http://lightsquid.sourceforge.net/demo16b/index.cgi?year= 2005&month=04. Сайт – http://lightsquid.sourceforge.net. Стабильная версия – 1.6. Объём – 45 Кб. «Понимает» журналы – Squid.
36
# пути к настроечным файлам $tplpath ="/var/www/html/reports/lightsquid/tpl"; $langpath ="/var/www/html/reports/lightsquid/lang"; $reportpath ="/var/www/html/reports/lightsquid/report"; $ip2namepath ="/var/www/html/reports/lightsquid/ip2name"; # путь к журналам Squid $logpath ="/var/log/squid/"; # какие сайты не учитывать в отчётах $skipurl = "zdd.com|192\.168\.1\.|cnn.com"; # язык отчётов $lang = "ru"; # определяем размер «большого файла» в 2 Мб $bigfilelimit = 2*1024*1024; # показывать отчёт о пользователях, превысивших квоту $showoversizelink = 1; # устанавливаем квоту 10 Мб (одна для всех) $perusertrafficlimit = 10*1024*1024;
Проверяем, все ли настройки сделаны правильно: # ./ check-setup.pl
Создаём отчёт: # ./lightparser.pl
Проверим в браузере, что мы получили. Начальная страница отчёта должна быть, как на рис. 5. LightSquid поддерживает как родной формат журнала Squid, так и формат httpd. Можно объединять пользователей в группы и смотреть отчёты по группе. Для этого в файле group.cfg определяем, какой пользователь к какой группе относится: 192.168.10.1 192.168.10.9 192.168.10.14 192.168.10.30 192.168.10.74
01 02 02 02 03
Sysadmin Managers Operators Operators Managers
Можно вместо IP-адресов выводить имя компьютера и каждому имени компьютера сопоставить реальное имя пользователя. Для первой цели автор программы предлагает либо использовать DNS, либо подставлять из списка. Скрипты, обрабатывающие файлы списков, находятся в подкаталоге ip2name. Можно написать свой, но нам сей-
администрирование час достаточно использовать имеющийся. Для того чтобы получить отчёт, как на рис. 6, определяем в lightsquid.cfg следующие параметры: $ip2name = "list"; $showgrouplink = 1; $userealname = 1;
В ./ip2name/ip2name.list меняем значение переменной: sub StartUser() { my $ipfile = "/var/www/html/reports/lightsquid/users.txt";
и создаём указанный файл следующего содержания: 192.168.10.1 192.168.10.9 192.168.10.14 192.168.10.30 192.168.10.74
Myself Bond Bart Ivan Petrov
Теперь в group.cfg нужно заменить все IP-адреса на сопоставленные им имена компьютеров, а в файле realname.cfg сопоставить имена компьютеров с именами рользователей: Myself Bart Ivan Petrov Bond
sysadmin Bart Simpson Ivan Ivanov Petrov Semen Semenovich James Bond
Рисунок 7. Группировка пользователей в LightSquid
ет в полночь. А Calamaris будет запускаться с аналогичной задачей ежедневно в 00:30, раз в неделю по понедельникам в 00:35 и первого числа каждого месяца в 00:45. В первых же числах он обновит свой журнал. Ограничим доступ к отчётам только с определённых IP-адресов. Для этого создаём файл /var/www/html/ reports/.htaccess: Options +Indexes Order deny,allow Deny from all Allow from 192.168.100.11 Allow from 192.168.100.17
Можно сделать доступ по паролю. Подробности по наКонечно, если у вас где-то ведётся свой список пользователей, то лучше использовать его, написав для LightSquid стройке доступа можно прочитать в [2]. небольшой скрипт по разбору этого файла. Запуская программу, мы получаем следующие отчёты: Подведем итоги Количество соединений и скачанных байт на день, У всех трёх программ есть настройки внешнего вида отчёта, на месяц и на год по каждому пользователю, для груп- графики. Все поддерживают русский язык. У каждой есть свои отличительные характеристики, заслуживающие внипы и для прокси-сервера в целом. Популярные сайты (рис. 7). В этом есть возможность мания, и можно установить все три, но если такой возможсортировки списка по количеству запросов либо по объ- ности (или желания) нет, то при выборе стоит учесть: нужны ли вам те или иные отчёты; ёму данных. Таблица времени доступа пользователя к сайтам, достаточно ли у вас дискового пространства, чтобы хранить все желаемые отчёты; то есть время его активности в Интернете. позволяет ли нагрузка на процессор добавить генера Отчёт о «больших» скачанных файлах. цию всех желаемых отчётов. Для обработки 140 тысяч строк журнала на компьютере с процессором Pentium 4 Хочется особо отметить удобный интерфейс. с тактовой частотой 3 ГГц и с 1 Гб оперативной памяти потребовалось для всех трёх программ вместе Последние штрихи при их последовательном запуске около 2,5 минуты. Осталось автоматизировать генерацию отчётов путём добавления в /etc/crontab соответствующих заданий: Напоследок хочу сказать, что, поискав в Интернете от# Генерируем отчёты прокси сервера Squid клики по этим программам, вы обнаружите различные жа0/20 * * * * root /var/www/html/reports/lightsquid/ ↵ лобы администраторов на их неудобство или даже частичlightparser.pl today 5 0 * * * root /usr/sbin/sarg ную неработоспособность. Так, например, Sarg до сих пор 30 0 * * * root /etc/calamaris/calam_rep.sh ↵ останавливается на некоторых записях журнала, отказыyesterday >> /var/log/calam_rep.log 35 0 * * 6 root /etc/calamaris/calam_rep.sh ↵ ваясь создавать отчёт (благо что такие записи у меня поweek >> /var/log/calam_rep.log падаются редко). Однако все три проекта довольно актив45 0 1 * * root /etc/calamaris/calam_rep.sh ↵ month >> /var/log/calam_rep.log но развиваются и недочёты исправляются, поэтому ставьте свежие версии программ и пользуйтесь! Конечно, частота обновления отчётов остаётся на ваше усмотрение. В приведённом примере LightSquid будет под- 1. http://pm4u.narod.ru/linux_server.htm#Calamaris3. 2. Малахов П. Многоликий Apache. Размещаем несколько сайдерживать свои отчёты в актуальном состоянии, обновляя тов на одном веб-сервере. //Системный администратор, №12, их через каждые 20 минут. Sarg будет создавать их один 2005 г. – с. 63-65 (http://pm4u.narod.ru/apache.htm). раз в день после ротации журналов, которую logrotate дела-
№7, июль 2006
37
администрирование
Frenzy 1.0 – дитя мечты
Сергей Можайский После почти двухлетнего перерыва вышла новая версия популярного русскоязычного LiveCD-дистрибутива Frenzy. Факт смены номера версии с 0.3 до 1.0 говорит о многом, да и информация о релизе с описанием нововведений вас впечатлит.
П
рошли те времена, когда загру- системы и, как следствие, увеличизочная дискета была непремен- лось количество приложений, была выным атрибутом системного ад- пущена в августе 2004 года, после чеминистратора. На смену дискетам при- го развитие проекта приостановилось шли LiveCD и загрузочные USB Flash. почти на два года. Благодаря помощи Выбор LiveCD для системных адми- сообщества пользователей Frenzy ранистраторов достаточно велик, правда, бота была продолжена в апреле 2006 большинство дистрибутивов основа- года, и в начале мая в Интернете пояны на Linux (к примеру, INSERT, GRML вилась первая бета-версия Frenzy 1.0. и BackTrack). На основе же FreeBSD Такой скачок номера версии связан создано всего несколько дистрибути- с большими изменениями в структувов, и почти все они ориентированы ре дистрибутива. Открытое бета-тесна обычного пользователя. Все, кро- тирование длилось месяц, за это време одного. мя были найдены и исправлены мноЛетом 2003 года я начал работу гие ошибки. над проектом по созданию LiveCD-дисПосле двух месяцев активной разтрибутива для системных администра- работки 5 июня вышел релиз Frenzy 1.0 торов на основе ОС FreeBSD. Новый (Dreamchild). Новая версия выпускаетдистрибутив, названный Frenzy, быс- ся в нескольких вариантах: тро стал популярным в среде русско- Frenzy standard – предназначена язычных администраторов и пользов первую очередь для системных администраторов. Размер диствателей FreeBSD. Этому способствовала поддержка русского языка, нерибутива – 200 Мб, что позволяет уместить его на 3-дюймовый CD. большой размер, хорошая подборка утилит. Версия 0.3, в которой поя- Frenzy extended – для системных вилась поддержка сжатой файловой администраторов и продвинутых
38
пользователей. Дистрибутив содержит все программы из standardверсии, а также дополнительные приложения (в том числе просмотрщики CHM, PDF, DjVu-форматов, эмуляторы DosBox и QEMU, мультимедийные проигрыватели XMMS и MPlayer). Размер дистрибутива – 250 Мб. Frenzy lite – содержит только консольные утилиты. Размер дистрибутива – всего 50 Мб, что позволяет уместить его на CD-визитку и носить с собой в бумажнике (как я и поступил). Немалова жным достоинством Frenzy является качественная русификация системы. В отличие от многих LiveCD-дистрибутивов, в которых локализации уделено мало внимания, в Frenzy поддержка русского языка присутствует изначально – проблем с ним ни в консоли, ни в графической оболочке не возникает. Кроме того, Frenzy отлично документирована –
администрирование в ее состав входит Frenzy Handbook, описывающий основы работы с дистрибутивом и специфичными для него программами, а также русскоязычная документация по FreeBSD (традиционные Handbook и FAQ). На официальном сайте проекта (http://frenzy.org.ua) работает форум, где можно пообщаться с разработчиком и пользователями Frenzy. Также у проекта есть почтовая дискуссионная рассылка. Дистрибутив можно свободно скачать (http://frenzy.org.ua/ru/releases/1.0/ download.shtml) или приобрести в онлайн-магазинах.
Начинаем работу З а г р у ж а е м с я с к о м п а к т- д и с к а . Frenzy 1.0 основана на FreeBSD 6.1STABLE, поэтому вначале загрузка ничем не отличается от FreeBSD (изменен только логотип при загрузке), но сразу после загрузки ядра мы попадаем в меню выбора параметров загрузки (рис. 1). Мы можем выбрать язык системы, указать размер диска в оперативной памяти. В Frenzy 1.0 появилось два новых режима загрузки. Режим toram позволяет загружать Frenzy полностью в оперативную память, позволяя извлечь компакт-диск из привода. В режиме fromhdd система будет загружаться со сжатого образа на жестком диске (для этого папку frenzy с компактдиска необходимо скопировать в корень любого раздела на HDD), компактдиск при этом также освободится. Кроме того, теперь мы можем указать при загрузке, что делать с разделами жесткого диска. В предыдущих версиях система по умолчанию пыталась монтировать разделы жесткого диска в режиме «только чтение», других вариантов предусмотрено не было. Теперь мы можем вообще не обращаться к жесткому диску (параметр nohdd), производить поиск разделов, но не монтировать их (параметр nohdmnt) или же монтировать разделы диска в режиме чтения и записи (параметр hdrw). Frenzy поддерживает файловые системы UFS, FAT, EXT2/EXT3, NTFS, ReiserFS (последние две – только в режиме чтения). После загрузки мы попадаем в консольный режим. На первой консоли автоматически производится вход под
№7, июль 2006
учетной записью суперпользователя, в остальные можно войти, используя логин root без пароля. В отличие от стандартной FreeBSD системные сообщения не выводятся на первую консоль, их можно просмотреть, нажав <Alt+F12>. Рисунок 1. Загрузочное меню Frenzy Присутствует и графическая система X.Org 6.9.0, в качес- щих в состав Frenzy, вы можете найти тве графической оболочки использу- в документации по системе или на сайется популярный оконный менеджер те проекта. Мы же рассмотрим только fluxbox. В новой версии Frenzy fluxbox некоторые программы, представлянастроен так, что можно перемещать ющие интерес для системных адмии масштабировать окна, используя нистраторов. Набор программ для работы сетью клавиатурные комбинации. Меню программ можно вызвать, просто щелк- в Frenzy весьма велик. Помимо станнув правой кнопкой мыши на рабочем дартных утилит ping и traceroute пристоле или нажав клавишу «Windows» сутствует полезная утилита mtr, сочена клавиатуре (к чему многие при- тающая в себе преимущества обеих программ. Статистику трафика, проховыкли). Меню программ в fluxbox стоит от- дящего через компьютер, можно посметить особо. В нем содержатся прак- мотреть с помощью trafshow. Хочется тически все утилиты, входящие в со- отметить утилиту darkstat, выводящую став Frenzy (консольные утилиты за- статистику о проходящем трафике чепускаются в окне терминала rxvt). Кро- рез веб-интерфейс. Для работы с бесме того, они рассортированы по темам, проводными сетями присутствует начто позволяет легко найти нужную про- бор утилит bsd-airtools и популярная утилита kismet. грамму (рис. 2). Для подключения к другим компьюПеречислять все программы, входящие в состав дистрибутива, можно терам в сети можно воспользоватьдолго – в standard-версию входит бо- ся ssh-клиентом PuTTY, терминальлее 500 пакетов, в extended – более ным клиентом для Windows Terminal 600. Полный список программ, входя- Services rdesktop или VNC-клиен-
Рисунок 2. Меню fluxbox
39
администрирование
Рисунок 3. Конфигурационные утилиты frconf, netconf, servconf
аппаратном обеспечении помогут собрать утилиты pciutils, dmidecode, udesc_dump. Для получения данных с сенсоров температуры и напряжения на материнской плате служат consolehm, lmmon и mbmon. В состав дистрибутива входят утилиты для работы с файловыми системами UFS, FAT, NTFS, EXT2/EXT3, ReiserFS, XFS. Среди утилит для работы с диском стоит отметить утилиту gpart, позволяющую восстановить поврежденную таблицу разделов (меня она спасала неоднократно, несмотря на то, что она не всегда справляется со сложной разметкой диска со множеством логических разделов). Для тех же целей можно использовать и testdisk, который помогал мне даже в тех случаях, когда gpart оказывалась бессильна. Для проверки разделов жесткого диска также весьма полезен будет набор утилит для восстановления файлов – fatback, fatundel, ntfsundelete. Утилиты magicrescue и foremost способны восстанавливать файлы по известным сигнатурам даже в случае полного разрушения файловой системы независимо от ее типа. На диске присутствует большая коллекция бенчмарков д ля оценки производительности процессора, файловой системы, сети и компьютера в целом. В новом релизе появилась также утилита для стресс-тестирования stresstest, позволяющая оценить, насколько подходит существующая аппаратная конфигурация для работы в качестве интернет-сервера. В extended-версию Frenzy входят
том tightvnc. Обзор сетевого окру- ется в HTML-файле и может быть прожения можно выполнить с помощью смотрен в любом браузере. LinNeighborhood. Для работы с баПроверить компьютер на наличие зами данных есть клиенты MySQL вирусов вы сможете с помощью антии PostgreSQL. Есть несколько SNMP- вирусного пакета clamav. В состав дисклиентов (консольный braa и графи- трибутива входит вирусная база, акческий mbrowse) и LDAP-клиентов туальная на начало июня, поэтому пе(консольный ldapvi, позволяющий ре- ред началом вирусной проверки обдактировать LDAP через текстовый новите базу утилитой freshclam. Впроредактор, и «иксовый» gq). чем, в UNIX-системах намного чаще Утилита rbllookup позволит выяс- встречаются руткиты, нежели вирусы. нить, внесен ли ваш IP в «черный спи- Найти их помогут rkhunter и chkrootkit. сок» на каких-либо blacklist-серверах. Для удобного просмотра и анализа logДля перевода форматов масок подсе- файлов, что немаловажно при анализе ти и их расчета пригодятся cidr, ipcalc последствий атаки злоумышленников, в Frenzy имеются программы ccze, log_ и whatmask. В дистрибутиве имеются утилиты analysis, abck, logtool. Работа с аппаратным обеспечедля сканирования портов (естественно, не обошлось без ставшего классичес- нием компьютера представлена цеким сканера NMAP), получения различ- лым рядом утилит. Информацию об ной информации о компьютерах в сети – версиях ОС и установленных се- Запись на NTFS в FreeBSD Смонтировать NTFS для записи можтевых служб. Не обошлось и без сниф- Практически на каждом форуме по FreeBSD но командой: феров – кроме Ethereal и Ettercap, при- появляется вопрос: «Поддерживает ли ntfsmount /dev/ad0s3 /mnt/ntfs ↵ -o force сутствует также стандартный tcpdump FreeBSD запись на NTFS?». Ответ на него с графическим фронтэндом netdude. Полностью поддерживается чтение был стандартен: «Нет, не поддерживает». Для проверки компьютеров на раз- Ситуация изменилась только после пор- и редактирование имеющихся файлов, личные уязвимости предназначена по- тирования в FreeBSD популярной в Linux частично – создание, перемещение и удапулярная клиент-серверная программа дистрибутивах системы FUSE (Filesystem ление каталогов и файлов. Под «частично» nessus, о которой написаны десятки in Userspace), позволяющую легко созда- подразумевается, что в некоторых случаях статей. Добавлю только, что в состав вать драйверs для любых файловых сис- операция проходит успешно, в некоторых – Frenzy входит вспомогательная ути- тем. Теперь после установки из портов нет. Поскольку драйвер является эксперилита autonessus, позволяющая прово- модуля fuse и комплекта утилит ntfsprogs ментальным, пользоваться возможностью дить сканирование компьютеров и се- возможна частичная запись на NTFS (пол- записи на NTFS стоит только в случае крайтей в «пакетном» режиме без вызо- ную запись драйвер linux-ntfs из состава ней необходимости (к примеру, для сброса ва графического интерфейса клиента ntfsprogs пока не поддерживает). В Frenzy пароля на установленной Windows XP с поnessus. Отчет о сканировании сохраня- такая возможность тоже имеется. мощью утилиты chntpw).
40
администрирование эмуляторы dosbox и qemu. DosBox позволяет запускать в редактируем файл /etc/fstab и меняем в описании точки монFrenzy DOS-программы, а QEMU, являющийся свободным тирования корневой файловой системы нули на единицы: аналогом VMWare, позволяет запускать практически лю# Device Mountpoint Fstype Options Dump Pass# бую операционную систему. /dev/ad0s1a / ufs rw 1 1 В целом можно сказать, что набор программ покрыУстановка на USB Flash выполняется у тилитой вает практически все потребности системного админис«install2flash» также просто. Утилита установки автоматитратора. чески разбивает флешку на два раздела – один для установки Frenzy (размер зависит от типа дистрибутива, 50-250 Мб), Настройка и установка Кроме традиционного sysinstall, в Frenzy имеется конфигу- второй – для хранения данных (под него резервируется все рационный центр frconf, с помощью которого вы можете на- оставшееся место). строить систему (рис. 3). В частности, с помощью этой утилиты легко создать swap-файл на указанном разделе диска. Frenzy SDK Для настройки сетевых подключений предназначена утили- Кроме ISO-образов, в сети доступен и комплект Frenzy SDK, та netconf. С ее помощью можно настроить соединение по предназначенный для самостоятельной сборки собственлокальной сети, dialup-соединение, VPN-соединение (в ка- ного дистрибутива Frenzy. В его состав входят сборочные честве VPN-клиента используется mpd) и соединение через скрипты, архивы исходных кодов FreeBSD и дерева портов, ADSL-модем. Утилита servconf предназначена для быстро- пакаджи и исходные коды для всех программ из Frenzy. Структура сборочных скриптов заметно изменилась го конфигурирования и запуска различных серверов. Она позволит быстро запустить SSH-сервер, FTP-сервер, веб- по сравнению с предыдущими версиями. Появилась поддержка нескольких версий сборки – сейчас одна и та же струксервер thttpd и сервер Samba. Все сделанные настройки можно сохранить на диске- тура скриптов используется для сборки standard и extended ту, жесткий диск или USB Flash с помощью утилиты frbk. версий как англоязычной, так и русскоязычной, достаточно При следующей загрузке Frenzy настройки будут восста- лишь внести изменения в файл конфигурации. Ручное вмешательство в процесс сборки сведено к минимуму – нужновлены автоматически. Одной из самых долгожданных новинок в Frenzy 1.0 ста- но положить собранные пакаджи в нужный каталог и подла возможность установки на жесткий диск и USB Flash. править конфигурацию сборочных скриптов. Подробную Эта возможность была добавлена по многочисленным информацию о работе с набором SDK можно найти в офипросьбам пользователей Frenzy, которые желали видеть циальной документации по Frenzy. на своем жестком диске FreeBSD, настроенную точно так же. Процесс установки весьма прост – набираете «install2hdd» Что дальше? и следуете инструкциям инсталлятора. Правда, упроще- Естественно, развитие дистрибутива продолжается. В сление процесса установки привело к тому, что вся система дующей версии планируется в первую очередь включить ноустанавливается на один слайс, создание отдельных раз- вую реализацию unionfs для FreeBSD от Daichi Goto, котоделов для /var, /usr и т. п. не предусмотрено. Для рабочей рая в настоящее время существует в виде набора патчей. станции это приемлемо, но для сервера такую конфигура- Это позволит реализовать модульную структуру LiveCD (как это уже сделано в популярном чешском дистрибутицию я не рекомендую. После установки Frenzy на жесткий диск вы получите ве SLAX), что заметно упростит процесс самостоятельной полноценную ОС FreeBSD с набором программ. Разве что сборки и модификации дистрибутива. Также планируется исходные коды системы (src) и коллекцию портов (ports) интегрировать tmpfs, портированную из NetBSD, которая намного выигрывает в быстродействии у mfs-реализации нужно будет установить самостоятельно. Правда, не обошлось без ложки дегтя. В установленной RAM-дисков в FreeBSD. В недавнем обзоре на Distrowatch Frenzy был назван на жесткий диск Frenzy 1.0 после выключения питания наотрез отказывается запускаться fsck для проверки диска. Ко- лучшим LiveCD-дистрибутивом на основе FreeBSD как нечно, его можно запустить вручную или с LiveCD, но лучше для системных администраторов, так и для начинаюисправить проблему сразу. Поэтому сразу после установки щих пользователей. Действительно каждый может найти в этом дистрибутиве что-то полезное LiveCD для сисадминов нения размеров разделов жесткого диска, и интересное. Новички могут начать Кроме Frenzy, есть и другие LiveCD-дис- и антивирусный пакет clamav, занимая при знакомство с FreeBSD именно с этотрибутивы, ориентированные на систем- этом всего 50 Мб. Stresslinux (http://www. го дистрибутива, не устанавливая ОС ных администраторов. Правда, практи- stresslinux.org) предназначен специально на жесткий диск. Продвинутые польчески все они основаны на том или ином для стресс-тестирования и мониторинга зователи найдут множество полезных дистрибутиве Linux. GRML (http://grml.org) аппаратного обеспечения. И напоследок программ. Ну а системные администпредлагает большой набор утилит для си- вспомним о Backtrack (http://www.remote- раторы, для которых и разрабатывалсадминов для восстановления системы, exploit.org/index.php/BackTrack), образо- ся дистрибутив, не раз воспользуютанализа сети и просто для работы. INSERT вавшемся в результате слияния дистрибу- ся Frenzy в своей повседневной рабо(http://www.inside-security.de/insert_en.html) тивов WHAX и Auditor, который предлагает те. Лично меня Frenzy выручала неодсодержит такие полезные утилиты, как ути- большой набор утилит для анализа безо- нократно, надеюсь, что и вам она тоже пригодится. лита gparted для редактирования и изме- пасности компьютеров и сетей.
№7, июль 2006
41
администрирование
Автоматизируем тестирование железа с помощью StressLinux
Дмитрий Волков На основе компьютера с ОС Linux и StressLinux можно создать инструмент для автоматического тестирования железа всех узлов локальной сети.
Б
ывают дефек ты оборудования, которые могут проявиться только при высоких нагрузках, в этом случае поможет дистрибутив Linux, который может использовать ресурсы ваших комплектующих на 100%. В первую очередь тестирование будет полезно для компьютеров, на которых возлагаются задачи, требующие большой загрузки процессора. Такие компьютеры должны работать 24 часа в сутки и не давать сбоев. Поэтому их как следует нужно проверить на прочность. В настоящее время существует множество утилит для тестирования железа как из Windows, так из Linux. Но необязательно, что на компьютерах находятся две ОС: Linux и Windows. Поэтому для тестирования удобно использовать дистрибутивы LiveCD. Но такой путь ведет к потере времени, если у вас много хостов, требующих тестирования. Каждый компьютер необходимо загружать с CD/DVD и прогонять тесты вручную, при этом другие узлы сети будут простаивать и ждать своей очереди. Для решения проблемы можно использовать тестирование с загрузкой тестов через сеть по вашему собственному сценарию, при этом все результаты тестирования будут со-
42
храняться на сервере. Что мы и попы- граммы разработаны для создания вытаемся реализовать. сокой нагрузки процессоров, поэтоНа сегодняшний день существует му неохлаждаемые, разогнанные или единственный специализированный по другой причине «непрочные» (weak) для тестирования LiveCD-дистрибу- системы при прохождении тестироватив – StressLinux. Он работает толь- ния могут вызвать потерю данных (повко в режиме консоли и занимает по- реждение файловой системы), также рядка 50 Мб, но этого будет достаточ- есть вероятность нанести повреждено чтобы провести полноценное тести- ния компонентам микросхем». Поэтому если ваше железо еще рование. StressLinux содержит основные утилиты для тестирования комп- на гарантии, можете проводить тесты, лектующих компьютера при высоких а если нет, то использовать тестированагрузках, утилиты для считывания ние вы будете на свой страх и риск. информации с датчиков процессорной платы, а также обладает высокой Конфигурация тестового гибкостью в настройках сценариев для комплекса тестирования. Вы сами сможете зада- Комплекс для тестирования будет совать сценарии тестирования, добавляя стоять из сервера и одной рабочей или убирая тесты. В качестве оболоч- станции, соединенных в одну сеть. Требования к рабочей станции – ки в StressLinux используется busybox. Она содержит набор общих UNIX-ути- наличие сетевой карты с поддержкой лит для работы в Linux, позаимствован- PXE. Список поддерживаемых карт ных из GNU пакетов fileutils, shellutils можно узнать здесь: (http://www.bootix. и т. д. С помощью busybox можно со- com/adapters/adapters_en.html). В каздать ОС Linux, умещающуюся на од- честве рабочей станции я буду исну дискету. Подробную информацию пользовать VMWare, так как это удобо проекте вы можете найти на сайте но для создания скриншотов в моменhttp://www.busybox.net. ты загрузки системы. Тесты загружать в VMWare бесполезно, потому что при тестировании будет использоКак насчет гарантии? Разработчики тестов, входящих в со- ваться только та часть ресурсов, котостав StressLinux, сообщают: «Эти про- рая выделена под виртуальную систе-
администрирование му. Поэтому тестирование надо проводить на реальной машине. А вот настройки загрузки через сеть StressLinux под VMWare проводить очень удобно, не придется бегать от сервера к клиенту и проверять, что же там опять не работает. Со стороны сервера потребуется: дистрибутив StressLinux; дистрибутив Linux, функционирующий на сервере (я использую ASP Linux 9.0); серверная часть пакетов: pxe, dhcp, tftp, nfs.
Как будет работать тестовый комплекс Перезапускаем клиентскую машину и в BIOS выбираем загрузку по сети. После перезагрузки сетевая карта будет выполнять поиск DHCP-сервера. Сервер принимает запрос и присваивает клиенту IP-адрес, pxe предлагает выбрать загрузку: Local boot – с жесткого диска; PXELinux – появится меню для выбора загрузки одного из ядер StressLinux, или загрузки отдельного теста, например теста памяти – memtest.
default – имя сценария для загрузки по умолчанию; prompt – может принимать значения 1 или 0. Если значение 1, то перед загрузкой будет выведена строка «boot: <Имя загружаемого сценария>». Если же значение 0, то эта строка выводится только при: нажатии <Alt> или <Shift>, или при включенном CapsLock, или Scroll lock; timeout – содержит количество секунд до начала автоматической загрузки; display – параметр, указывающий на файл-приветствие, будем использовать по умолчанию loader.msg: Welcome to StressLinux Boot Server! 0fTo start the stresslinux distribution enter press ↵ <return>.07 Available boot options: stress
- Boot Stresslinux via PXE with initrd
09F1:0f Stresslinux
F1 – здесь можно создать файл-help и указать все возможные параметры ядер;
При выборе ядра происходит передача его по протоколу tftp с последующей загрузкой корневой файловой системы nfs, находящейся на сервере. Выполняется тестирование в автоматическом режиме, а результаты записываются в текстовые файлы на сервере.
Конфигурация сервера
label – это имя сценария загрузки, а сценарий может содержать в себе 3 параметра: kernel – путь к ядру Linux или к отдельной загружаемой программе, например memtest; append – список параметров, передаваемых ядру; ippappend – параметр, используемый PXELinux для указания настроек сети. Он нам не нужен, так как предполагаем, что загрузка для всех узлов сети общая. Параметры сети для каждого клиента указывает dhcp сервер. Описание всех возможных конфигураций файла default можно узнать (http://syslinux.zytor.com/faq.php).
Я использую дистрибутив ASP Linux 9.0 на rpm-пакетах. Вам нужно использовать пакеты, входящие в состав вашего Linux. Для начала скачиваем последнюю версию дистрибутива StressLinux 0.3.1 с http://www.stresslinux.org/release/stresslinux0.3.1.pxe.tgz с поддержкой загрузки через PXE. РаспаковыДалее будем настраивать dhcp-сервер. Для этого неваем каталог с корневой системой StressLinux (_stresslinux) в директорию на сервере /tftpboot/X86PC/_stresslinux. обходимо установить его из вашего дистрибутива Linux, Скачиваем http://www.stresslinux.org/release/stresslinux- в ASP Linux это rpm – Uvh dhcp-3.0pl1-23.i386.rpm, а ес0.3.1.pxe_sample_configs.tgz архив с примерами конфигура- ли же такого под рукой не имеется, тогда скачиваем его ционных файлов pxe, dhcp, tftp, nfs. Распаковываем в ката- с http://ftp.isc.org/isc/dhcp. На момент написания статьи послог /tftpboot/X86PC/pxelinux содержимое из папки pxes. Этот ледней версией была – 3.0.4. Создаем конфигурационный каталог будет использоваться для создания сценариев за- файл /etc/dhcpd.conf, указав MAC-адрес одного из клиенгрузки рабочих станций через pxe. Каждой рабочей станции тов. Я буду указывать MAC-адрес VMWare. После изменеможно присвоить свой сценарий загрузки на основе её IP-ад- ний файл должен выглядеть так: реса, за подробной информацией можно обратиться на сайт Subnet 192.168.12.0 netmask 255.255.255.0 { http://syslinux.zytor.com/pxe.php. Применим одинаковый сцеoption subnet-mask 255.255.255.0; нарий загрузки для всех клиентов – default. В файл внесем default-lease-time 21600; max-lease-time 43200; изменения, указав в nfsroot адрес вашего сервера и располоhost some_host{ жение корневого каталога _stresslinux. Сервер имеет IP-ад# Указываю MAC-адрес VMWare hardware ethernet 00:0C::29:50:84:D7; рес: 192.168.12.191. После изменений файл /tftpboot/X86PC/ fixed-adress 192.168.12.242; pxelinux/pxelinux.cfg/default будет выглядеть так: option vendor-class-identifier "PXEClient" default stress prompt 1 timeout 600 display loader.msg F1 loader.msg label stress # Stresslinux kernel ../_stresslinux/boot/vmlinuz append rw video=vesafb:640x480-32@75,nomtrr,ywrap ↵ root=/dev/nfs nfsroot=192.168.12.191:/tftpboot/ ↵ X86PC/_stresslinuxip=dhcp hda=scsi hdb=scsi ↵ hdc=scsi hdd=scsi
№7, июль 2006
}
}
Надо уделить внимание опции ‘option vendor-classidentifier “PXEClient”’. Она требуется для того, чтобы dhcp передал управление серверу pxe в момент присвоения IP-адреса клиенту, а pxe в свою очередь смог отобразить меню для выбора загрузки (это меню появляется путем запуска бинарного файла pxelinux.0 на сетевой карте). Службы dhcp и tftp можно запустить на разных узлах сети, тогда
43
администрирование использоваться для доступа к корневой файловой системе StressLinux загружаемыми станциями. Устанавливаем nfs-utils, в ASP Linux выполнив rpm – Uvh nfs-utils-1.0.1-2.9.i386.rpm), иначе скачиваем с ресурса http://prdownload.sourceforge.net/nfs). Все настройки nfs сводятся к конфигурации трех файлов: /etc/exports – указывает каталоги, доступные через nfs; /etc/hosts.allow и /etc/hosts.deny – файлы управления доступом к серверу. Переходим непосредственно к конфигурации nfs-сервера – файлу /etc/exports. Более подробно о настройках nfs можно узнать на http://nfs.sourceforge.net/nfs-howto. Откроем доступ к каталогу /tftpboot/X86PC/_stresslinux на чтение и запись для всех узлов сети 192.168.12.0/24, указав строку: /tftpboot/X86PC/_stresslinux 192.168.12.0/255.255.255.0 ↵ (rw,insecure,sync,no_root_squash) Рисунок 1. Пример конфигурационного файла pxe.conf
Рисунок 2. Приглашение для выбора варианта загрузки
необходимо добавить в конфигурационный файл параметр next-server, указывающий на имя или IP-адрес tftp-сервера. Мы же будем использовать один хост, поэтому этот параметр не указываем. Перейдем к настройке предзагрузочной среды запуска – pxe. Для её установки в ASP Linux выполняю rpm –Uvh pxe0.1-36.i386.rpm, если в вашем дистрибутиве такого пакета нет, то скачиваем с сайта http://www.kano.org.uk/projects/pxe. Изменяем конфигурационный файл /etc/pxe.conf, установив 2 значения: interface – номер интерфейса на сервере, по которому соединены сервер с клиентом; default_address – IP-адрес сервера. Остальные параметры оставляем без изменений. Вид файла после изменений смотрите на рис. 1. Устанавливаем tftp-server, взяв его из дистрибутива (tftp-server-0.33-1asp.i386.rpm) или с http://www.kernel.org/ pub/software/network/tftp. Tftp-сервер будет использоваться для передачи ядра и образа ядра клиентам. Запуск его можно реализовать из-под xinetd, для этого в файле /etc/xinet.d/tftp исправить значение параметра disable с «yes» на «no» и убедиться, что в качестве рабочего каталога установлен /tftpboot. А запуск из консоли можно выполнить: # in.tftpd –v –l –s /tftpboot
Теперь подходим к финальному шагу по настройке загрузки StressLinux – конфигурированию nfs, который будет
44
Теперь запускаем программы dhcpd, pxe, tftp, nfs. Перезагружаем клиента и выбираем загрузку по сети, в результате появится приглашение (см. рис. 2). Выбираем PXELinux (см. рис. 3). Отображается меню StressLinux для выбора загрузочного ядра в нашем случае – это будет одно-единственное 2.6.16. Но это пока, в дальнейшем можно будет расширить список ядер и отдельных программ для тестирования. Выбираем ядро и загружаемся. Если оно загрузилось успешно, тогда выводится приглашение (см. рис. 4) для ввода логина. Вводим root без пароля. Друг за другом появятся 2 меню для выбора раскладки клавиатуры и выбора процессорной платы соответственно (см. рис. 5, 6). Если на вашей процессорной плате есть сенсоры температуры и напряжений, то тогда во время тестирования можно будет наблюдать за состоянием компьютера. Вывод данных реализован программой sensors из пакета lm_sensors. Список поддерживаемых процессорных плат можно узнать на http://secure.netroedge.com/~lm78/supported.html. Для поиска требуемых модулей можно воспользоваться программой sensors-detect. В этой версии StressLinux используется ядро 2.6.16. Если вас устраивает это ядро, тогда следующий пункт можно пропустить, если же нет, тогда перейдем к настройке собственного ядра.
Конфигурация нового ядра Ядро, входящее в дистрибутив StressLinux, не имеет поддержки некоторых SCSI-контроллеров. Поэтому можно использовать собственное ядро с поддержкой всего необходимого железа. При нго конфигурировании необходимо не забыть установить параметр CONFIG_ROOT_NFS, для того чтобы использовать корневую файловую систему nfs. Также можно добавить последнюю версию пакета lm_sensors. Для загрузки нового ядра копируем его в каталог /tftpboot/X86PC/_stresslinux/boot/ и назовем vmlinuz-<номер версии ядра>. Все модули этого ядра копируем в /tftpboot/X86PC/_stresslinux/lib/<номер версии ядра>.
администрирование Добавляем следующие строки в файл /tftpboot/X86PC/ pxelinux/pxelinux.cfg/default: label my # Stresslinux (my kernel) kernel ../_stresslinux/boot/vmlinuz-<номер версии ядра> append initrd= rw video=vesafb:640x480-32@75,nomtrr,ywrap ↵ root=/dev/nfs nfsroot=192.168.12.191:/tftpboot/ ↵ X86PC/_stresslinux ip=dhcp hda=scsi hdb=scsi ↵ hdc=scsi hdd=scsi
Рисунок 3. Отображение содержимого файла loader.msg
Не забываем добавить пункт в файл loader.msg. Перезапускаем клиента и выбираем созданное ядро.
Список доступных утилит для тестирования Список основных утилит представлен в файле /tftpboot/ X86PC/_stresslinux/etc/motd (см. рис. 7). В файле указаны доступные программы для тестирования, но этот список можно расширить путем простого добавления их в корневую файловую систему StressLinux на сервере. В стандартном наборе имеем: серию программ для высокой загрузки процессоров – burn-оптимизированных под разные процессоры (http://pages.sbcglobal.net/redelm); stress – используемую в качестве инструмента для установки определенной загрузки процессора, памяти, ввода/вывода, жесткого диска (http://weather.ou.edu/ %7Eapw/projects/stress); netio – для тестирования производительности сети; smartctl – для тестирования устройств с поддержкой S.M.A.R.T.; lshw – для сбора информации обо всей системе; x86info – информация о процессорах; программы мониторинга – hddtemp, sensors.
Рисунок 4. Пример успешной загрузки ядра
Рисунок 5. Программа для ручного выбора типа клавиатуры
Сценарии тестирования Для создания сценария достаточно создать скрипт на bash или другом языке программирования и указать его выполнение в файле /tftpboot/X86PC/_stresslinux/etc/bash.bashrc. Создадим сценарий – test.sh и разместим его в /tftpboot/ X86PC/_stresslinux/etc/init.d/. Предполагаем, что компьютеров для тестирования будет много, поэтому результаты прохождения тестов для каждого узла будем сохранять в отдельную папку, в качестве имени папки будем использовать IP-адрес этого узла. Реализовать это можно следующим образом: #!/bin/bash // Получаем IP-адрес узла IP=`ifconfig|grep inet|perl -nle ↵ @ar=split(/\s+/,$_);@ar2=split(/\:/,\\$ar[2]); ↵ print \\$ar2[1]` // Создаем каталог, если такого еще не существует if[ ! -d /home/result/$IP ] then echo Making results dir /home/result/$IP /bin/mkdir -p result/$IP fi // все результаты тестирования будем записывать сюда cd /home/result/$IP
Далее загружаем модули для вывода информации, модули для вашей процессорной платы можно определить с помощью скрипта detect-sensors.
№7, июль 2006
Рисунок 6. Программа для ручного выбора процессорной платы VAL=`/sbin/lsmod | grep i2c-isa` if [ x$VAL == x ] then echo trying insert module i2c-isa modprobe i2c-isa fi
Перед тестированием собираем информацию об узле и сохраняем ее на сервере: echo Collecting information # собираем информацию о PCI-устройствах /sbin/lspci | tee lspci sleep5 # собираем информацию о процессорах /usr/bin/x86info | tee x86info sleep5
45
администрирование # собираем расширенную информацию о системе /usr/bin/lshw | tee lshw sleep5
Программа tee выдает результаты на экран и одновременно записывает в указанный ей файл на сервер. Переходим к тестированию. В этой части сценария каждый волен запускать свои тесты, я же приведу пример одного из тестов на вычисление квадратного корня программой stress:
Рисунок 7. Список программ для тестирования с кратким описанием
TM=20 # Таймер echo Starting 1st test | tee stress1 echo Spanning 10 workers spinning on sqrt() | tee -a stress1 echo waiting for $TM seconds | tee -a stress1 /usr/bin/stress -v -c 10 -t $TM | tee -a stress1 &
Запускаем stress с порождением 10 процессов на период, указанный в переменной $TM, равной 20 секундам. Результаты сохраняем в файл stress1. Пример успешного завершения теста приведен на рис. 8. В результате видим, что все 10 процессов запустились и завершились успешно, тест был проведен в течение 20 секунд. Если вы загрузили модули для считывания информации с датчиков, то после каждого теста можно использовать функцию, которая будет отображать состояние системы с интервалом в 1 секунду. sens "Spanning 10 workers spinning on sqrt() stress1" "$TM" SENSORS=`/usr/bin/sensors | grep 'No sensors found'` sens() { if [ "x$SENSORS" == "x" ] then for((i=1;i<=$2;i++)) do /usr/bin/clear /usr/bin/sensors echo "Time limit $2 s" echo "seconds $i $1" sleep1 done fi }
Рисунок 8. Пример успешного завершения теста по вычислению квадратного корня
Рисунок 9. Пример считывания информации с датчиков процессорной платы
46
Постоянное отображение состояния системы с периодичностью в 2 секунды можете наблюдать на /dev/tty12. Пример состояния системы во время тестирования представлен на рис. 9.
Напутствие На этом базовую настройку автоматического тестирования можно считать законченной, но это совсем не значит, что ничего больше сделать нельзя. Дальнейшая функциональность тестирования может быть расширена добавлением других программ в составе StressLinux, и не только. Например, можно добавить образы дискет загружаемых по сети для конфигурирования сетевых карт 3com или позаимствовать некоторые DOS-утилиты для восстановления mbr из дистрибутива Ultimate Boot CD. Дальнейшие улучшения будут зависеть только от ваших фантазий и времени, которое вы можете затратить. Желаю успешного тестирования!
администрирование
FreeNAS: строим надежную систему хранения данных
Сергей Яремчук Объемы информации постоянно растут, повышаются требования к её безопасности, доступности, актуальности. Возникают вопросы как переносить разрозненные данные с различных носителей в централизованные хранилища? Как построить системы хранения информации даже в небольших организациях?
48
администрирование
С
егодня на рынке существует достаточное количество предложений систем хранения данных, отличающихся возможностями, архитектурой и ценой. Решения на базе Windows Storage Server или Cisco Storage Networking требуют определенной подготовки администраторов, да и не всегда могут подойти по цене. Можно попытаться решить проблему при помощи любой из свободных операционных систем, но придётся затратить много времени на развертывание и поддержку. Есть ещё вариант – использовать специальную разработку FreeNAS (http://www.freenas.org).
Возможности FreeNAS Разработка представляет собой Open Source NAS-сервер, построенный на базе FreeBSD 6 и распространяемый по лицензии BSD. Отсюда и его назначение – обеспечивать небольшие организации и отделы надежным устройством хранения информации по минимальной стоимости. Разработкой FreeNAS занимается в свободное время Оливер Кохард (Olivier Cochard). Судя по релизам, делает он это весьма активно, так как за 5 месяцев 2006 года уже было 11 предрелизов. Текущая на момент написания статьи версия 0.66 обеспечивает поддержку: сетевых файловых протоколов CIFS, FTP, NFS, SSH, RSYNC и AFP (для компьютеров Apple); жестких дисков ATA/SATA, SCSI, USB и Firewire; файловые системы UFS, FAT32, EXT2/EXT3, NTFS (только чтение); программного RAID 0, 1 и 5; аппаратных RAID и сетевых карт, поддерживаемые FreeBSD 6 (включая беспроводные); аутентификации локальной и домена Microsoft (сейчас полным ходом идет работа по под де ржке LDAP, планируется еще NIS и Radius).
Рисунок 1. Вся настройка происходит посредством удобного веб-интерфейса
Рисунок 2. В пункте «System: General setup» настраиваются основные параметры сервера
Так как под него могут форматироватьЗ а г ру з к а с и с т е м ы в о з м ож н а ся диски полностью, нельзя использоне только с жесткого диска, но и с USB- вать загрузочный диск как часть RAID. устройства. Например, можно исполь- На сайте доступен образ, оптимизирозовать flash-карту, т.к. размер установ- ванный под VMWare. Для настройки ленной системы не превышает 17 Мб), уже установленной системы испольтакой вариант может быть полезен при зуется веб-интерфейс. За время разиспользовании программного RAID. вития с сайта SourceForge.net FreeNAS
№7, июль 2006
разных версий был скачан более 85 тысяч раз.
Установка FreeNAS Д ля ус тановки и ис поль зования FreeNAS понадобится компьютер, как минимум, с 96 Мб оперативной памяти, сетевой картой и одним или бо-
49
администрирование лее жестким диском. Если планируется использование RAID 5, для которого требуется 3 диска, а загрузка с USB невозможна, то поступите следующим образом. На период установки вместо одного из жестких дисков устанавливается CD-ROM, а после производится обратная замена. Размер iso-образа дистрибутива – 30,2 Мб, записываем его на диск и загружаемся. В процессе инициализации системы будут выданы сообщения о наименовании жестких дисков (CD cd0, disk0 и т. д) и найденных сетевых устройств. После загрузки будут выданы установки системы по умолчанию: LAN-сетевой интерфейс и его IP-адрес. Вся первоначальная настройка происходит при помощи консоли установки – FreeNAS console setup. "FreeNAS console setup" "*********************" 1) Interfaces: assign network ports 2) Set up LAN IP address 3) Reset webGUI password 4) Reset to factory defaults 5) Reboot system 6) Ping host 7) Install on HD/CF/USB Key 8) Shell 9) PowerOff system
На первом этапе необходимо установить систему на жесткий диск (вс е д анные буду т уничтожены). Для этого нажимаем 7 и попадаем в меню настройки: "FreeNAS Install" "*********************" 1) Install on HD, CF or USB key: Create 1 UFS partition 2) Install on HD: Create 2 UFS partitions (FreeNAS and DATA) 3) Return to main menu
Выбор 1-го пункта позволит установить FreeNAS на жесткий диск, который может быть использован только для загрузки. Если вы планируете использовать только один диск в системе (для загрузки и хранения информации), то выбирите 2-й пункт. В этом случае в пределах одного слайса будет создано два раздела: небольшой 17 Мб для FreeNAS и остальное пространство будет отведено под данные. Для установки потребуется ввести имя исходного привода CD-ROM и затем имя диска, на который будет производиться установка. Программа ус-
50
тановки покажет все найденные в системе устройства, и вам потребуется только выбрать и ввести необходимое название. В моем случае это были acd0 и ad0 соответственно. После установки программа сообщила, что FreeNAS был установлен на первый раздел ad0s1 слайса. Система подсказывает, что, для того чтобы использовать созданный раздел с данными, необходимо добавить диск на странице Disks:Management и точку монтирования на странице Disks: Mount point. Запомним это. Нажимаем <Enter> для продолжения и, выбрав 5-й пункт консоли, перезагружаем систему. Теперь загружаемся уже с жесткого диска и для настройки сетевых ин-
терфейсов в меню выбираем 1-й пункт. Будет выведен список найденных устройств (в том числе и fireware), активированное сетевое устройство будет помечено как up. Если в системе установлено несколько сетевых карт, то, кроме LANинтерфейса (в моем случае это ed0), система запросит выбрать и Optional 1 и пр. Вместо цифры можно указать букву a (т.е. auto-detection), тогда система сама попробует определить интерфейс, нажав на <Enter>, можно перейти к следующему этапу. Д ля справки, сервер FreeNAT не поддерживает маршрутизацию между интерфейсами, поэтому передача данных из одной сети в другую через сервер невозможна. Несколь-
Разделы веб-интерфейса FreeNAS Раздел
System
Interfaces
Disks
Подразделы
Назначение и осуществляемые настройки
General Setup
Установка имени сервера, адресов DNS-серверов, изменение пароля администратора, протокола работы WebGUI http/https, при необходимости и порта, на котором он будет работать (по умолчанию 80/443), часового пояса, данных NTP-серверов
Static routes
Управление маршрутизацией
Firmware
Загрузка и установка обновлений
Advanced
Установка сгенерированных на внешних источниках SSL-ключей и сертификатов, отключение «Console menu», проверки обновлений, спикера, включение демона S.M.A.R.T и некоторые другие настройки
LAN и пр.
Настройка сетевых интерфейсов. Здесь можно установить IP-адрес, шлюз, изменить MTU, выставить скорость интерфейса и режим работы – half/full duplex, а также Device polling, позволяющий регулировать опрос сетевых устройств
Management
Управление дисками, форматирование разделов под UFS, FAT и Software RAID, инициализация iSCSI
Software RAID
Создание и управление, получение информации о Software RAID
Mount Point
Работа с точками монтирования
Services
–
Настройка протоколов CIFS, FTP, NFS, RSYNCD, SSHD и AFP. По умолчанию все отключено, поэтому первоначально необходимо активировать протокол, установив Enable в правом верхнем углу во вкладке, соответствующей нужному протоколу
Access
–
Настройка локальных пользователей и групп, а также параметров доступа к Active Directory. Пункты NIS и RADIUS пока не работают
Status
–
Просмотр системной информации (загрузка системы, процессы), сетевых проводных и беспроводных интерфейсов, дисковых устройств
Diagnostics
Logs
Просмотр файлов журналов (системных и сетевых сервисов) и настройка отправки выбранных сообщений внешнему syslog-серверу
Informations
Вывод информации о дисках, дисковых разделах и свободном месте, SMART, точек монтирования, статус программного RAID, iSCSI. И сюда же поместили статус Active Directory
Ping/Traceroute
Выполнение команд ping и traceroute, для чего достаточно ввести IP-адрес или имя узла. Доступно изменение ряда параметров (интерфейс, количество попыток, максимальное количество узлов)
Execute command
Здесь можно вручную выполнить любую команду на сервере, результат будет выведен в браузере, поддерживается история команд. Кроме того, отсюда можно загрузить файлы с сервера и на него
ARP Table
Вывод ARP-таблицы (соответствие IP- и МАС-адресов, и имени узла)
Backup/restore
Сохранение и восстановление настроек системы
Factory defaults
Установка первоначальных параметров (возможно и через пункт 4 – «console setup»)
Reboot system Shutdown system
Перезагрузка и выключение сервера
администрирование ко интерфейсов можно использовать только для доступа к серверу FreeNAS из разных сетей. После перезагрузки в пункте 2 устанавливаем для LAN IP-адрес (как пример, 192.168.0.1) и сетевую маску (как обычно, 255.255.255.0 или в CIDR нотации – 24). Дополнительные интерфейсы настраиваются исключительно при помощи веб-браузера. Воспользовавшись пунктом 6, можно попробовать пропинговать любой узел в сети. Если все нормально, монитор, клавиатуру и прочие лишние устройства можно отключить и в дальнейшем работать удаленно, через вебинтерфейс.
Веб-интерфейс FreeNAS В строке веб-браузера набираем http://192.168.0.1. Для регистрации используем пользователя admin и пароль freenas (его можно сбросить при помощи 3-го пункта). Как видите из рис. 1, через веб-интерфейс доступно семь разделов настроек. Чтобы легче было ориентироваться, все основные параметры сведены в таблицу.
Рисунок 3. Окно добавления нового диска
Настройка NAS в рабочей группе Оливер Кохард, по его словам, будет активно заниматься документацией проекта уже после релиза 1.0, сейчас на сайте доступен документ «FreeNAS Setup and User guide», который дает довольно общие понятия процесса (хотя почитать его следует). Поэтому в завершение статьи небольшой практический пример. Настроим FreeNAS с одним диском в небольшой рабочей группе, использующей в качестве клиентов компьютеры с MS Windows. После регистрации в системе необходимо первым делом установить имя сервера, протокол работы сменить на защищенный и поставить новый пароль администратора, а также выбрать свой часовой пояс. Заходим в «System: General setup» и заполняем соответствующие поля (рис. 2). Для того чтобы изменения вступили в силу, потребуется перезагрузка системы, но это можно сделать и после выполнения следующей операции. В «Disks: Management» нажимаем на «+» и попадаем в пункт, позволя-
№7, июль 2006
Рисунок 4. Создание новой точки монтирования
ющий добавить новый диск. Выбираем в выпадающем списке «Disk» диск, с которым будем работать (рис. 3), при необходимости устанавливаем для него режим работы UDMA, параметры перехода в standby, Advanced Power Management и acoustic. После чего нажимаем «Add». Новый диск появится в «Disks: Management», остальные диски добавляются аналогично. После того как в систему будут добавлены все диски, нажимаем «Аpply changes», для подтверждения изменений и теперь перезагружаемся.
Чтобы зайти на сервер через веб-консоль, используем уже протокол HTTPS, т.е. адрес выглядит так: https://192.168.0.1/, после чего принимаем сертификат сервера. Диски добавлены, теперь очередь точек монтирования. Выбираем в «Disks: Mount Point» и нажимаем «+». В выпадающем меню «Disk» (рис. 4) выбираем жесткий диск, в «Partition» – номер раздела в слайсе (первый раздел сейчас занят под систему, поэтому выбираем 2), в «File System» устанавливаем файловую систему UFS и за-
51
администрирование
Рисунок 5. Настройка доступа к серверу для Windows-сети
Рисунок 6. Добавление локального пользователя
Рисунок 7. FTP-сервер FreeNAS не умеет отображать имена файлов в кириллице
полняем поля «Share Name» и описание ресурса «Description». Далее нажимаем «Save» и в основном окне «Apply changes». Теперь необходимо сделать доступным новый дисковый ресурс по сети. Переходим в «Services: CIFS», для
52
включения сервиса ставим галочку в Enable (рис. 5). В поле «Authentication» выбираем метод аутентификации (анонимный, локальный и Active Directory). Последнего сервиса в маленькой группе нет, если выставить Anonymous, то доступ к серверу сможет получить любой пользователь сети. Мы же хотим ограничить доступ для непрошеных гостей и поэтому выставляем «Local User». В полях NetBiosName и Workgroup прописываем имя сервера, под которым он будет виден в сети NetBios, и рабочую группу. Параметр «Dos charset» выбираем как ACSII, иначе русских букв в именах файлов вам
не видать. При установке «Time server» в «Yes» сервер FreeNAS может выступать сервером времени для клиентов. Закончив со всеми настройками, жмем «Save». Теперь последний шаг – создание локальных пользователей. Здесь все так же просто. Сначала необходимо создать хотя бы одну группу, если поступить наоборот, то это может привести к ошибкам и в тяжелой ситуации к использованию «Factory defaults». Переходим в «Access: Users: Groups», нажимаем «+» и вводим название группы (например, user) и ее описание. Теперь в «Access: Users» заводим пользователя, указав имя, пароль, группу. Для отдельных пользователей можно разрешить до ступ к серверу по SSH, включив «Full Shell» (администратору он разрешен по умолчанию). В будущих версиях планируется указывать и сетевой интерфейс, с которого смогут регистрироваться пользователи. Если сейчас набрать в строке браузера на клиенте \\netbios-имя\ (или \\192.168.0.1\), то после ввода имени и пароля пользователя увидим новый ресурс, в котором можно читать и создавать файлы. К сожалению, при использовании для аутентификации локальных пользователей FreeNAS не позволяет тонко ограничить доступ пользователей к имеющимся ресурсам, все легитимные пользователи получат одинаковый доступ ко всем папкам. Сервер FTP настроить так же легко, только у меня не получилось добиться вывода русских имен файлов, тогда как с SMB таких проблем не было.
Подводим итоги Дистрибутив сам по себе интересен. В нем сочетаются небольшой размер, хорошие возможности, интерфейс, обеспечивающий удобство настройки и понятный даже новичку. Для повседневной работы его возможностей более чем достаточно, командную строку придется задействовать только для более тонких настроек. Как бы то ни было, FreeNAS является хорошей альтернативой для построения простого NAS сервера, без необходимости установки полной версии GNU/Linux или какой то из BSD-систем.
администрирование
OpenVPN: доступ повышенной проходимости
Алексей Коршунов Не секрет, что своевременный доступ к информации, в том числе хранящейся внутри корпоративной сети компании, может оказаться решающим фактором успешной работы сотрудников. Речь о виртуальных частных сетях (VPN). Иногда предоставить доступ оказывается не так-то просто.
Доступ всегда и везде Обеспечивая удалённый доступ во внутреннюю сеть компании приходится учитывать множество факторов. Например, ситуации, когда установить соединение между клиентом и сервером не возможно. Причина может быть проста – системные администраторы гостевой сети, из которой сотрудник вашей фирмы пытается произвести подключение, закрыли возможность всех исходящих соединений, а доступ к вебресурсам осуществляется через «прозрачный» прокси-сервер. В такой ситуации установить VPN-соединение, используя стандартные решения типа pptp и IPsec, не возможно. Второй большой неприятностью для любого мобильного пользователя может оказаться банальная потеря (или кража) ноутбука. Излишне объяснять, чем обернётся для компании доступ чужого человека в корпоративную
№7, июль 2006
сеть. Разумеется, мобильные пользо- мер, к почтовому серверу (во многих ватели обязаны (как правило, на уров- компаниях использование внешних соне корпоративного стандарта) не ста- единений по POP3, IMAP и SMTP-провить опцию хранения пароля на учёт- токолам запрещено). Проблема может ную запись доступа VPN, но... вы много заключаться в том, что почтовый сертаких пользователей видели? Мне пока вер находится, например, вне локальне довелось ни одного. Поэтому пред- ной сети компании. Существует компочтительно ввести дополнительные плексное решение всех обозначенсредства безопасности доступа к внут- ных проблем. ренней сети компании. Другими словами, использовать двухфакторную ав- Как мы будем торизацию пользователей – програм- решать задачу мным и аппаратным способом. Речь Воспользуемся следующими програмидёт о ключах eToken, которые могут мными и аппаратными средствами: использоваться для безопасного хра- OpenVPN, работающим под Linux, нения сертификатов для шифрования в качестве поставщика защищёни дешифрования данных или авториного частного канала связи; зации в различных системах. программами htc и hts для оргаИ последнее (по счёту, но не по важнизации http-тунеля через проксисервера; ности), что хотелось бы упомянуть – возможность получения дост упа eToken PRO от компании Alladin. не только к файлам на серверах комВы можете использовать аналогичпании, но и к другим ресурсам. Напри-
53
администрирование ные ключи любых других производителей, ключ этой компании просто оказался у меня под рукой. Рассмотрим каждый пункт отдельно.
Вам потребуется только сам ключ и свободно распространяющаяся утилита для работы с ним. Итак, перейдём к решению поставленной задачи.
OpenVPN
Установка OpenVPN-сервера
Система OpenVPN [1] выбрана для реализации решения не случайно. Это программное обеспечение весьма активно обновляется разработчиками. OpenVPN позволяет реализовать практически любые задачи по организации VPN-каналов. Среди достоинств системы: поддержка большинства операционных систем – Linux, Windows версий 2000/XP и выше, OpenBSD, FreeBSD, NetBSD, Mac OS X, Solaris; возможность использовать все доступные OpenSSL-методы шифрования, аутентификации и сертификатов для защиты вашего частного канала; возможность создавать целые фермы серверов с балансировкой нагрузки тысяч входящих VPN-соединений; использование статического ключа для шифрования или систему открытых ключей; возможность создавать безопасное подключение типа «мост» (ethernet bridges); возможность использования как udp, так и tcp для VPN-канала.
Воспользуемся Gentoo Linux для установки системы OpenVPN. Прежде всего убедитесь, что ядро Linux содержит все необходимые модули. Для этого зайдите в конфигуратор ядра и обратите внимание на запись, относящуюся к TUN/TAP-драйверам.
И это далеко не полное перечисление функционала OpenVPN. Система постоянно дорабатывается, количество возможностей увеличивается.
Туннель http с использованием htc и hts Это маленькие программы, одна из которых запускается на сервере, а другая соответственно на клиенте. Они не нуждаются в особых настройках и запускаются простой командной строкой. Ниже мы рассмотрим их более подробно.
eToken-ключ
Device Drivers ---> Network device support ---> <*> Universal TUN/TAP device driver support
Если поддержка установлена, то всё в порядке, и можно продолжать. Если нет – установите необходимое значение и перекомпилируйте ядро вашей системы. Если вы не планируете в дальнейшем использовать аппаратные ключи для двухфакторной аутентификации, то установка самой системы OpenVPN крайне проста и выполняется одной командой. # USE='ssl examples' emerge openvpn
С текущей версией ebuild система установит OpenVPN версии 2.0.6. Для использования eToken придётся пройти по дереву портов и принудительно установить более новую версию (на данный момент 2.1_beta14). # echo net-misc/openvpn >> /etc/portage/package.keywords # USE="ssl example" emerge openvpn
Кроме того, может потребоваться установка дополнительных пакетов. Поэтому я рекомендую на время установки системы просто раскомментировать в /etc/make.conf опцию ACCEPT_KEYWORDS нужной архитектуры (в моём случае это «~x86»), позволив системе установить всё необходимое. Опция SSL необходима для поддержки OpenSSL, а examples установит примеры конфигурационных файлов OpenVPN. В противном случае никаких примеров не будет и файлы настроек придётся писать, что называется, с чистого листа.
Для наших целей подойдёт любой аппаратный ключ, предназначенный для безопасного хранения цифровых сертификатов. eToken PRO – защищенное устройство, предназначенное для строгой аутентификации, безопасного хра- Создание ключей сервера нения секретных данных, выполнения криптографических и клиентов вычислений и работы с асимметричными ключами и циф- После того как скомпилируется система, потребуется ровыми сертификатами. USB-ключ архитектурно реализо- (для удобства) скопировать примеры конфигурационных ван как USB-картридер с встроенной в него микросхемой файлов и скрипты для формирования ключей и сертифи(чипом) смарт-карты. Ключ выполнен в виде брелка и на- катов в /etc/openvpn. И то и другое находится в директории /usr/share/openvpn. прямую подключается к USB-порту компьютера, при этом не требует для своей работы каких-либо дополнительных В поддиректории easy-rsa содержатся скрипты на все слуустройств. чаи жизни, позволяющие создавать: Подобных аппаратных средств на рынке представлено корневой сертификат (build-ca); огромное множество, и вы можете выбрать наиболее оп- ключ и сертификат сервера (build-key-server); тимальное для ваших целей устройство. Приятная особен- простые ключи для клиентов (build-key); ность состоит в том, что вы один и тот же ключ может ис- ключи для клиентов, защищённые паролем (build-keyпользоваться для разных задач – производить авторизацию pass); для доступа по Wi-Fi в сеть, для установления VPN-соеди- ключи PKCS для необходимой нам возможности испольнения и для шифрования данных на жёстком диске. зовать eToken (build-key-pkcs12).
54
администрирование Первоначально создадим все необходимые сертификаты и ключи для сервера. # # # # # # #
cd /etc/openvpn/easy-rsa source ./vars ./clean-all ./build-ca ./build-key-pkcs12 --server server ./build-dh ./build-key-pkcs12 –-pkcs12 client1
cert и key. Если будут выставлены пересекающиеся опции, система откажется запускаться. Если вы решили использовать обычный VPN, укажите адресное пространство, в котором он будет работать и из которого будет назначать адреса клиентам. server 192.168.4.0 255.255.255.0
Если вы собираетесь использовать подключение типа Последняя команда создаёт PKCS12-ключи для поль- «мост», то потребуется другая опция (параметр server зазователя. Client1 – это имя пользователя. Команда долж- комментируйте, так как сервер может единовременно рана быть выполнена для каждого предполагаемого клиен- ботать только в одном качестве): та. Обратите внимание, что при создании ключа вы можеserver-bridge 192.168.1.73 255.255.255.0 192.168.1.61 ↵ те защитить его дополнительно паролем. 192.168.1.63
Настройка OpenVPN Конфигурационный файл OpenVPN (называющийся поумолчанию server.conf) снабжён подробными комментариями и позволяет без проблем выставить все необходимые настройки без использования какой-либо дополнительной документации. Сначала укажем, по какому адресу и на каком порту будет работать наш сервер: local Х.Х.Х.Х port 443
Выбор порта не случаен, почему, я поясню позже, когда будем настраивать клиентскую и серверную часть http-туннеля. Выберем, как будет работать наш VPN: по tcp или udp. Для этого есть соответствующая опция: proto tcp
или proto udp
Так как мы собираемся сделать возможным доступ через веб-прокси-сервер гостевой системы, то выберем proto tcp. Выберите тип сетевого устройства, которое будет использоваться. dev tun0 – в случае организации обычного VPN; dev tap0 – если вы хотите использовать подключение типа «мост». Используя второй вариант, помните о необходимости достаточного пула свободных сетевых адресов в вашей локальной сети, которые будут время от времени заниматься удалёнными пользователями при подключении по VPN. В секции описания ключей напишем полный путь до нашего ключа: pkcs12 /etc/openvpn/easy-rsa/keys/server.p12 dh /etc/openvpn/easy-rsa/keys/dh1024.pem
Обратите внимание, что одновременно может использоваться только либо ключ pkcs12, либо «стандартные» ca,
№7, июль 2006
где: первый и второй параметры – адрес и маска локальной сетевой карты сервера; третий и четвёртый параметры – пул адресов для выдачи внешним клиентам. Опция, которую мы пропустили: ifconfig-pool-persist /etc/openvpn/ipp.txt
содержит имя файла, в котором будут храниться соответствия клиентов (по именам их ключей) и их внутренним адресам, которые им выдаёт система OpenVPN. Следующие важные опции указывают, какие адресные пространства будут доступны для клиентов и при подключении автоматически добавятся в таблицу маршрутизации. push "route 192.168.1.0 255.255.255.0" push "route Х.Х.Х.Х 255.255.255.255"
Первая опция добавляет возможность использовать нашу локальную сеть, а вторая добавляет один внешний адрес, на котором находится наш почтовый сервер, куда клиенты также должны иметь доступ при любых обстоятельствах. Большинство опций, которые следуют дальше, необходимы для реализации возможностей, выходящих за рамки данного материала. Опции: push "dhcp-option DNS 192.168.1.1" client-to-client
указывают, какой DNS использовать клиентам для преобразования имён в IP-адреса внутри нашей локальной сети, и позволять ли клиентам VPN взаимодействовать между собой. Это может быть полезно, если есть необходимость обмена файлами между двумя пользователями. Если вам по какой-то причине нужно позволить двум независимым клиентам VPN использовать одновременно идентичные сертификаты – раскомментируйте опцию duplicate-cn. Последнее, на что сейчас стоит обратить внимание, это название файла и путь к нему, куда OpenVPN будет писать свой журнальный файл, а также на количество допустимых пользователей системы одновременно.
55
администрирование Настройка шлюза локальной сети Если ваш сервер OpenVPN не является основным шлюзом локальной сети – потребуется добавить маршрутизацию для VPN-подсети. Так как в моей сети используется Cisco 2621 в качестве основного шлюза, я добавил маршрут на ней командой: ip route 192.168.4.0 255.255.255.0 192.168.1.73
где первый и второй параметр – адрес и маска виртуальной подсети, а последний – адрес внутреннего интерфейса OpenVPN-сервера. (Не забывайте включать интерактивный режимана Cisco перед вводом команды, а также записи изменений в память устройства после добавления маршрута.) Добавление маршрута на Linux-шлюзе производится командой: # route add -net 192.168.4.0/24 gw 192.168.1.73
где первый адрес – это наша виртуальная подсеть, а второй – адрес внутреннего интерфейса сервера OpenVPN. Если не сделать вышеописанных действий, пакеты из локальной сети не смогут найти «дорогу» до VPN-клиента.
Обеспечение доступа к внешнему ресурсу для VPN-клиентов Для того чтобы позволить VPN-клиентам попадать на наш почтовый сервер, находящийся во внешнем мире относительно нашей рабочей сети, воспользуемся услугами iptables. Создавая правило, я не стал указывать допустимые порты соединения по той простой причине, что на внешнем сервере помимо почтового сервиса находятся и другие сервисы, работающие на нестандартных портах, которые часто закрыты в гостевых системах для соединения. Вы можете указать, какие порты будут доступны для соединений клиентам VPN. Если правила на вашем firewall настроены по принципу «всё запретить, нужное разрешить», то не забудьте добавить разрешения на пересылку пакетов с интерфейса tun0.
Sat Jun 17 22:54:42 2006 us=799376 Sat Jun 17 22:54:42 2006 us=799409 192.168.4.2 mtu 1500 Sat Jun 17 22:54:42 2006 us=824310 255.255.255.0 gw 192.168.4.2 Sat Jun 17 22:54:42 2006 us=827291 ET:0 EL:0 AF:3/1 ] Sat Jun 17 22:54:42 2006 us=912828 Sat Jun 17 22:54:42 2006 us=912911 Sat Jun 17 22:54:42 2006 us=912950 Sat Jun 17 22:54:42 2006 us=913000 Sat Jun 17 22:54:42 2006 us=913028 Sat Jun 17 22:54:42 2006 us=913042 Sat Jun 17 22:54:42 2006 us=913072 Sat Jun 17 22:54:42 2006 us=913136 Sat Jun 17 22:54:42 2006 us=913348 Sat Jun 17 22:54:42 2006 us=913382
TUN/TAP TX queue length set to 100 /sbin/ifconfig tun0 192.168.4.1 pointopoint /sbin/route add -net 192.168.4.0 netmask Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 GID set to nobody UID set to nobody Listening for incoming TCP connection on Х.Х.Х.Х:443 Socket Buffers: R=[87380->131072] S=[16384->131072] TCPv4_SERVER link local (bound): X.X.X.X:443 TCPv4_SERVER link remote: [undef] MULTI: multi_init called, r=256 v=256 IFCONFIG POOL: base=192.168.4.4 size=62 MULTI: TCP INIT maxclients=10 maxevents=14 Initialization Sequence Completed
Также обратите внимание на вывод команды ifconfig, который должен показать, что в системе появилось новое сетевое устройство tun0. tun0
Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:192.168.4.1 P-t-P:192.168.4.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Если устройство не появилось, то внимательно просмотрите журнал и файл конфигурации. Не забудьте добавить сервис OpenVPN в список автоматически запускаемых, а также сохранить новые правила iptables в вашем списке.
Установка и настройка клиента OpenVPN Теперь, когда первая половина настройки нашей системы завершена, самое время приступить к установке клиентской части программы (клиенты Linux и Windows-систем).
Устанавливаем Linux VPN-клиент
Клиент на Linux-системе может потребоваться вот в каком случае. Допустим, у вас есть удалённые интранет-серверы, ресурсы которых вы хотели бы использовать в своей локальной сети. Нет ничего проще! Вы просто подключаете эти системы к VPN и пользуйтесь. Особенно это может оказаться полезным, если сервер является локальным для какой-нибудь удалённой сети. Как и в случае с настройкой серверной системы, убедитесь в наличии необходимых модулей в ядре. В Linux клиентская часть от серверной отличается только конфигурационным файлом. Этот файл значительно короче и снабжён подробными комментариями. Первые же параметры указывают сервису OpenVPN, что в системе он является клиентом. Какое сетевое устройсЗапускаем сервер Пришло время запустить OpenVPN-сервер и посмот- тво и протокол используются, а также, какой IP-адрес у серреть, что будет в журнальном файле. Обратите внимание: вера и какой порт используется сервисом OpenVPN. по умолчанию скрипт /etc/init.d/openvpn настроен на рабоclient ту с конфигурационным файлом /etc/openvpn/openvpn.conf, dev tun а вовсе не server.conf, который идёт в примерах. Итак, заproto tcp remote openvpn.domain.ru 443 пускаем наш сервер: # /etc/init.d/openvpn start
В журнальном файле вы должны увидите приблизительно следующий результат работы: Sat Jun 17 22:54:42 2006 built on Jun 15 2006 Sat Jun 17 22:54:42 2006 Sat Jun 17 22:54:42 2006 EL:0 ] Sat Jun 17 22:54:42 2006
56
us=295361 OpenVPN 2.0.6 i686-pc-linux-gnu [SSL] [LZO] [EPOLL] us=569088 Diffie-Hellman initialized with 1024 bit key us=798824 TLS-Auth MTU parms [ L:1544 D:140 EF:40 EB:0 ET:0 us=799346 TUN/TAP device tun0 opened
Скопируем на клиентскую систему необходимые для работы ключи и сертификаты: ca.crt, client1.crt, client1.key
и укажем их в конфигурационном файле ca /etc/openvpn/easy-rsa/keys/ca.crt
администрирование cert /etc/openvpn/easy-rsa/keys/client1.crt key /etc/openvpn/easy-rsa/keys/client1.key
На этом настройка клиентской системы завершена, и вы можете её использовать. Запускать можно, просто переименовав файл из client.conf в openvpn.conf или же командной сторокой: # openvpn /etc/openvpn/client.conf
Первый раз я рекомендовал бы запустить из командной строки. Так как протокол будет выводиться непосредственно на экран, это поможет убедиться, что всё в порядке. Если всё прошло нормально, то в окончание вывода будет приблизительно следующим: Sun Jun 18 20:32:02 2006 TUN/TAP device tun0 opened Sun Jun 18 20:32:02 2006 /sbin/ifconfig tun0 192.168.4.30 pointopoint 192.168.4.29 mtu 1500 Sun Jun 18 20:32:02 2006 /sbin/route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.4.29 Sun Jun 18 20:32:02 2006 /sbin/route add -net Х.Х.Х.Х netmask 255.255.255.255 gw 192.168.4.29 Sun Jun 18 20:32:02 2006 /sbin/route add -net 192.168.4.0 netmask 255.255.255.0 gw 192.168.4.29 Sun Jun 18 20:32:02 2006 GID set to nobody Sun Jun 18 20:32:02 2006 UID set to nobody Sun Jun 18 20:32:02 2006 Initialization Sequence Completed
Не забудьте добавить сервис в список автоматически запускаемых.
Устанавливаем Windows OpenVPN-клиент OpenVPN в Windows-системе обладает графическим интерфейсом (GUI), что значительно упрощает работу с ним для пользователей. По адресу [2] всегда можно найти свежую версию программы. Рекомендую хотя бы первый раз скачать полный инсталяционный пакет (на данный момент это openvpn-2.0.7-gui-1.0.3-install.exe), так как в нём содержатся драйвера для TUN/TAP-интерфейсов. В последствии можно скачивать обновления только самой программы. (Application only по ссылке.) Среди достоинств и удобств клиента можно выделить: отображение иконки программы в системном трее; свертывание окна журнала соединения сразу после установления сессии;
Рисунок 1. Программа для работы с ключом
№7, июль 2006
просмотр журнал соединения (вызов из контекстного меню);
изменение настроек конфигурационного файла (вызов из контекстного меню);
использование OpenVPN в качестве системного сервиса;
окно ввода пароля на цифровой сертификат для аутентификации на сервере;
дополнительная защита программы на операцию соединения (свой собственный пароль);
изменение пароля на защищённый ключ (в том числе PKCS # 12);
настройка используемого прокси-сервера; использование настроек прокси-сервера из опций Internet Explorer;
выполнение скрипта (bat) перед и/или после соединения с сервером OpenVPN;
индикация статуса соединения в системном трее. Помните, что в версиях Windows младше 2000/XP OpenVPN-клиент работать не будет. Но думаю, в наше время такие версии операционных систем встречаются редко. После установки клиента в меню программ появляется пункт OpenVPN с богатым выбором: ссылка на папку с конфигурационными файлами; на папку с примерами; программа формирования статического ключа; программа создания сертификата и формирования запроса на его подпись; программа-клиент OpenVPN; ссылки на различную документацию. Конфигурационный файл, как и все предыдущие, снабжен комментариями и ничем не отличается от файла для клиента Linux-системы. Разница только в расширении файла. Если в Linux оно было «conf», то в Windows – opvpn. Поэтому описывать настройки смысла не имеет, можно смело заимствовать их из предыдущего примера. Остановимся только на описании ключей и сертификатов. Как вы помните, мы решили использовать двухфакторную аутентификацию мобильных пользователей. Для этого скопируем на клиентскую систему с серверной только два
Рисунок 2. Окно импорта сертификата
57
администрирование файла – ca.crt и сертификат соответствующий (по имени) данному клиенту с раширением p12. Теперь нам необходимо импортировать сертификат в имеющийся в нашем расположении Alladin eToken. Для этого скачаем (если ещё не установлено) программное обеспечение по работе с ключом RTE по ссылке [3]. После установки полученной программы в меню программ появится папка eToken с единственной ссылкой на программу eToken properties (см. рис. 1). Вставив наш ключ в USB-порт, мы увидим его в окне программы. Перейдя на иконку ключа и выбрав «Дополнительно», введем PIN-код для доступа к ключу. Это даст возможность импортировать сертификат (см. рис. 2). Если при создании сертификата на сервере был использован пароль (сразу после его подписывания), то здесь нас попросят ввести его еще раз и можете распоряжаться данным сертификатом. Теперь мы можем убедиться, что сертификат известен нашей Windows-системе, а заодно узнать, как к нему будет обращаться клиент OpenVPN. Для этого проследуем в «Панель управления», где выберем «Свойства обозревателя». В этом окне нас интересует только вкладка «Содержание» и кнопка «Сертификаты» (см. рис. 3). Выделим наш сертфикат и кликнем на «Просмотр», в открывшемся окне выбирем «Состав». Здесь нас интересует поле «Отпечаток», которое скопируем в буфер обмена. Полученную информацию об отпечатке сертификата внесём в конфигурационный файл нашего OpenVPN-клиента. cryptoapicert "THUMB:ed 38 ac 63 …" ca ca.crt
Теперь, когда первоначальное конфигурирование клиента завершено, пришло время опробовать его в действии. Для этого достаточно в контекстном меню выбрать коннект. Если обращение к eToken прошло корректно, появится окно ввода PIN-кода для доступа к ключу (см. рис. 4). В случае ошибки убедитесь, что ключ вставлен в USBпорт, а предыдущие шаги выполнены верно. После подтверждения доступа к ключу в том же окне ввода будет отображаться журнал соединения с сервером. Окно автоматически скроется, как только соединение будет успешно установлено. Вернуться к журналу всегда можно, выбрав в контекстном меню «View log». Осталось попробовать выполнить команду ping для какого-нибудь из компьютеров удалённой локальной сети и убедиться, что всё работает правильно. Теперь, когда всё уже настроено и работает, пора вернуться к ситуации, когда доступ во внешний мир ограничен веб-ресурсами. А для его предоставления используется прозрачное проксирование.
hts и htc Эти две программки легко устанавливаются и ещё проще используются. Суть их работы состоит в том, что первая «слушает» указанный ей порт (в нашем случае это будет 80, доступ к которому есть везде) и в случае инициации соединения создаёт http-тунель.
58
Рисунок 3. Список доступных сертификатов
Вторая же наоборот слушает 443 порт и инициирует с удалённой htc-соединение через 80 порт. Установка htc в Gentoo Linux на сервере выполняется простой командой: # emerge httptunnel
Для Windows-систем скачать httptunnel можно со страницы проекта по ссылке [4]. Использовать httptunnel весьма просто. Для запуска на сервере достаточно команды: # hts --forward-port Х.Х.Х.Х:443 80
где указан IP-адрес и порт, на которые должен быть установлен туннель в случае обращение на порт 80. Команда выполняется без какого-либо вывода на экран. О результатах её выполнения можно узнать только из системного журнала (например, /var/log/messages). Jun 18 01:47:28 with arguments: Jun 18 01:47:28 Jun 18 01:47:28 Jun 18 01:47:28 Jun 18 01:47:28 Jun 18 01:47:28 Jun 18 01:47:28 Jun 18 01:47:28 Jun 18 01:47:28 Jun 18 01:47:28 Jun 18 01:47:28
admin hts[27389]: hts (httptunnel) 3.3 started admin admin admin admin admin admin admin admin admin admin
hts[27389]: hts[27389]: hts[27389]: hts[27389]: hts[27389]: hts[27389]: hts[27389]: hts[27389]: hts[27389]: hts[27389]:
me = hts device = (null) port = 80 forward_port = 443 forward_host = Х.Х.Х.Х content_length = 102400 strict_content_length = 0 use_std = 0 debug_level = 0 pid_filename = (null)
Команда netstat подтверждает нам, что hts действительно работает и «слушает» 80-й порт. # netstat -napl |grep 80 tcp
0
0 0.0.0.0:80
0.0.0.0:*
LISTEN
27389/hts
Осталось сделать Windows-скрипт (bat) для запуска клиентской части httptunnel. Этот файл мы создадим в папке c:\program files\openvpn\config и назовём hts_pre.bat. А в сам файл добавим только одну строку:
администрирование C:\httptunnel\htc.exe -F 443 -P 192.168.1.1:3128 X.X.X.X:80
где: -F 443 – указывает порт, являющийся итоговым получателем; -P 192.168.1.1:3128 – IP-адрес и порт прокси-сервера гостевой системы; X.X.X.X:80 – собственно адрес серверной части httptunnel. Выбор места создания и имени файла для скрипта не случаен. Как было уже сказано выше, OpenVPN для Windows умеет выполнять bat-файлы до соединения, сразу после соединения и после завершения сессии. Для этого достаточно выполнить всего два условия. Создать bat-файл в директории конфигурационных файлов OpenVPN и назвать файл по следующей схеме: Назвать файл xxx_pre.bat для выполнения скрипта непосредственно перед соединением. Назвать xxx_up.bat для выполнения сразу после установления соединения. Назвать ххх_down.bat для завершающего сессию скрипта.
(может быть, потому что не силён в написании скриптов для Windows). Если вам способ известен – тем лучше. Как вы заметили, для установления туннеля нам потребовалось знать IP-адрес и порт, на которых работает проксисервер гостевой системы. Эта информация, конечно, не написана крупным шрифтом при входе в здание, но тем не менее (обычно) легко узнаётся у системного администратора. Случаев, когда сисадмин отказывался сообщать параметры прокси, мне (возможно, пока) не известны. Теперь наша система полностью настроена и готова работать в практически любых условиях. Этакий максимально защищённый «вседорожник» на просторах Интернета!
Насколько мобильным может быть OpenVPN
Система OpenVPN позволяет использовать удалённую локальную сеть практически в любых условиях. Но помимо компьютеров (в том числе и ноутбуков), как вам известно, существуют ещё более «мобильные» устройства. Я говорю о коммуникаторах и наладонниках (КПК). В большинстве из них (например, в устройствах на базе Windows Mobile или Symbian) есть либо встроенное средство установления VPN-соединения, либо можно установить программное Нас интересует первый тип скрипта. К слову сказать, обеспечение стороннего производителя. выполнив команду из нашего bat-файла, система не заОднако из-за использования в системе OpenVPN кроет окно, и это придётся сделать вручную. Это не оста- TUN/TAP простые средства соединения не подойдут. И найновит наш туннель, но избавит от лишнего открытого ок- ти их для устройств данного класса, увы, пока не возможна на рабочем столе. но. Изыскания в Интернете дали только информацию о веПредполагаю, есть средство, позволяющее избежать дущихся разработках реализации возможности использо«вечно открытого» окна, но с ходу я его не обнаружил вания OpenVPN. (Сейчас ссылка на информацию об этом есть уже и на главной странице проекта. [5]) Правда, есть одно исключение. Если вы обладатель КПК Sharp Zaurus и давно собирались установить на него Linux, то вполне сможете использовать ваш VPN. Драйвера и необходимый софт для этого можно найти на просторах Интернета. Он используется многими людьми. Необходимые файлы можно взять, например здесь [6].
Заключительное слово Устанавливая и настраивая клиент OpenVPN, помните, что средства встроенной защиты уже самой Windowsпрограммы никто не отменял и ввод ещё одного пароля не будет лишним, если того требует строгая политика информационной безопасности вашей компании. Использование же сертификатов без eToken также нам доступно. Например, на домашних компьютерах аппаратные ключи использовать совершенно не обязательно. А вот мобильным пользователям ПК eToken явно не будет лишним. Особенно если вспомнить, что этот же ключ можно использовать для авторизации в самой Windows-системе (и не только).
Рисунок 4. Удача и поражение
№7, июль 2006
1. 2. 3. 4. 5. 6.
http://openvpn.net http://openvpn.se/files/install_packages http://www.alladin.ru/support/download/category177 http://userpages.umbc.edu/~tmoses1/hypertunnelNT.zip http://www.ziggurat29.com/OVPNPPCAlpha/OVPNPPCAlpha.htm http://users.skynet.be/isa-et-pep/pep/zaurus/feed
59
администрирование
Установка и настройка Systems Management Server 2003
Дмитрий Щербаков Системному администратору приходится устанавливать и обновлять программное обеспечение, проводить инвентаризацию. Эту рутинную работу лучше доверить System Management Server 2003.
60
администрирование
С
помощью Systems Management Server (SMS) вы сможете централизованно развертывать программное обеспечение, своевременно обновлять прикладные программы и операционные системы семейства Windows, а также собирать информацию об аппаратном и программном обеспечении компьютеров сети, удаленно управлять ПК. Средствами SMS 2003 можно составлять разнообразные отчеты об имеющемся парке вычислительной техники, причем выборка производится из десятков параметров, которые вы можете компоновать по собственному усмотрению. Приятно, что есть возможность фильтрации по тому или иному признаку, например, по установленной ОС. Хочется заметить, немного забегая вперед, что, так как сведения об имеющемся оборудовании и ПО хранятся в базе SQL-сервера, они доступны и при выключенном удаленном компьютере и есть возможность отслеживать изменения в конфигурации машин. Официальная страничка в Интернете, посвященная SMS, находится по адресу: http://www.microsoft.com/ smserver/default.mspx. На данный момент готовится к выходу версия SMS 2003 R2, последнее обновление – Service Pack 2. Требования к аппаратному обеспечению сервера: Процессор 550 МГц и мощнее. Оперативная память 256 Мб и больше. Минимум 2 Гб свободного места на жестком диске на разделе NTFS. Сетевая карта.
Рисунок 1. Поиск ресурсов сети
Рисунок 2. Назначение ролей серверу SMS
н е н и же Windows 20 0 0 S P4 и л и Windows XP SP1. Прежде чем перейти непосредственно к установке SMS 2003, добавлю, что использование SMS целесообразно в больших сетях (от 100 компьютеров) либо в распределенных сетях, где расстояние между объектами велико.
Требования к программному обеспечению: Windows 2000 Server SP4 и выше. IIS. Microsoft SQL Server 7.0 SP3 и выше, SQL Server 2000 SP3a или SQL Server 2005 (SQL Server не обязательно должен быть установлен Установка SMS 2003 Сервер SMS может работать в двух на одном компьютере с SMS). режимах безопасности: Standard SMS 2003 поддерживает два ти- и Advanced. Стандартный режим служит для па клиентов: Legacy Client – только для Windows 98 и Advanced Client – взаимодействия с доменами NT4.0 для клиентов под управлением ОС и используется по умолчанию при об-
№7, июль 2006
новлении SMS 2.0. В этом режиме для взаимодействия между компьютерами используются доменные учетные записи. Microsoft рекомендует выбирать режим Advanced, если не требуется поддержка доменов NT 4.0 и предполагается работа только в домене под управлением Windows 2000 или Windows 2003 Server, так как этот режим обеспечивает более высокий уровень безопасности. Для взаимодействия между компьютерами используются учетные записи компьютеров. Для нашего примера установки выберем Advanced Security. Перед установкой SMS 2003 желательно создать SMS Service Account
61
администрирование Остальные значения можно оставить по умолчанию. Итак, установка завершена. Но это, как вы догадались, самая легкая часть. Самое главное при настройке SMS – это терпение, терпение и еще раз терпение. Нельзя сказать, что SMS такой уж тяжеловесный и требующий много ресурсов продукт, но он очень неторопливый. Так что сразу хочу предупредить: не ждите результатов мгновенно. Пройдет не одна минута, а порой это может быть и час, пока вы увидите результат. Это не означает, что вы чтото сделали неправильно, но многих это смущает, и на этом этапе им приходится отказаться от использования SMS. Поэтому главный инструмент отслеживания работы сервера – логи. Рисунок 3. Настройка установки клиентов методом Client Push
Обнаружение ресурсов
(с правами администратора домена), но установить два типа сайтов: Primary сети который будет использоваться для ра- Site и Secondary Site. В Secondary Site Для начала найдем компьютеры в наботы служб сервера, создания объек- не предусмотрено базы данных сай- шей локальной сети. В консоли «SMS тов ОС, доступа к SQL Server и для об- та SMS, и он управляется родитель- Administrator» найдите «Discovery ращения на другие контроллеры до- ским Primary Site. Так как изначально Methods» («Site Database → Site у нас нет никаких сайтов SMS, присту- Hierarchy → имя_сайта → Site Settings»). мена. SMS 2003 тесно связан с Active пим к установке Primary Site. Secondary Откройте свойства «Network Discovery» Directory (AD). Данные SMS хранят- Site не является обязательным и слу- и включите этот метод («Enable Network Discovery») (см. рис. 1). Тип поиска усся в контейнере «System → System жит для удаленных филиалов. При установке SMS выбираем тановите «Topology, client and client Management», SMS получает информацию из AD (о пользователях, ком- «Custom Setup». В качестве «Site Code» operating system». На вкладке «Subnets» на экране «SMS Site Information» не- введите информацию о вашей подсети, пьютерах). При установке SMS 2003 предла- обходимо ввести первые три буквы на вкладке «Domains» – о вашем домегает расширить схему Active Directory. имени вашего компьютера, например, не. На вкладке «Schedule» установиРасширение схемы дает возможность, для компьютера Windows – WIN. В по- те параметры запуска поиска по раснапример, для Advanced Clients, обна- ле «Site Name» – то же самое. Не за- писанию. Далее перейдите в узел руживать назначенный им код сай- будьте установить флажок «Extend «Collections» и обновите данные группы та, опубликованный в AD, таким же the Active Directory Schema» на экра- «All Systems». Предупреждаю, что скоспособом находить Management Point не «SMS Active Directory Schema». Ес- рее всего результат вы быстро не по(служит для взаимодействия меж- ли хотите воспользоваться средства- лучите. Зависит он также и от параметду Advanced Clients и SMS). Хотя SMS ми удаленного администрирования, ров запуска Network Discovery, который официально поддерживает установку на экране «Installation Options» уста- вы выбрали на предыдущем шаге. В отна Windows 2000 Server, но при этом новите флажок «Remote Tools» (хотя дельных случаях бывает, что информавозникает много подводных камней. утилиты типа DameWare предостав- ция обновляется только на следующий В частности, расширение схемы AD ляют намного больше возможностей). день. Обнаруженные учетные записи в автоматическом режиме не проходит. Для этого надо давать разрешения вручную. На сайте Microsoft есть документ «Active Directory Schema Modification and Publishing for Systems Management Server 2003», где описаны необходимые манипуляции. В случае Windows 2003 Server все происходит гораздо легче, да и управляемость его значительно выше, что дает еще один повод для перехода на Windows 2003. Рисунок 4. Установка Advanced Client Рисунок 5. Установка Advanced Client шаг 1 шаг 2 При помощи SMS Setup Wizard мож-
62
администрирование компьютеров помещаются в соответствующую коллекцию (по умолчанию – идет разделение по типу ОС). Потом вы можете для удобства работы сами создать свою коллекцию. Для обнаружения учетных записей пользователей в знакомом уже «Discovery Methods» находим пункт «Windows User Account Discovery». Добавим домен и на вкладке «Polling Schedule» установим флажок «Run discovery as soon as possible». То же самое надо проделать для «Active Directory User Discovery». Аналогично происходит обнаружение учетных записей групп – пункты «Active Directory System Group Discovery» и «Windows User Group Discovery». Результаты поиска пользователей помещаются в коллекцию All Users, а групп – в All User Group. Учетные записи пользователей и групп зачастую обнаруживаются быстрее компьютеров, но с ними также возможны проблемы.
Установка клиентов SMS 2003 Перед установкой клиентов необходимо подготовить сервер SMS. Для этого запустим консоль «SMS Administrator → Site Database → Site Hierarchy → имя_сайта → Site Settings → Site Systems». Назначим серверу роли «Management Point», «Server Locator Point», «Client Access Point» и «Distribution Point». Для этого на соответствующих вк ладках в свойствах сервера установим флажки (cм. рис. 2). Существует два вида установки клиентов: методом Client Push и ручная установка. Legacy Client поддерживает только ручную установку. Рассмотрим установку Advanced Client методом Client Push. В консоли «SMS Administrator» находим «Client Installation Methods» («Site Database → Site Hierarchy → имя_сайта → Site Settings»). В свойствах «Client Push Installation» установим флажки «Enable Client Push Installation to assigned resources и Domain Controllers», а также «Enable Client Push Installation to site systems» и выберем «Advanced Client» (см. рис. 3). На вкладке «Accounts» введите информацию об учетной записи администратора домена. Бывает так, что инсталляция таким методом не проходит.
№7, июль 2006
Рисунок 6. Обновление политики на клиенте
Одна из возможных причин – отсутствие или неправильное имя общедоступного ресурса с клиентом SMS. Необходимо проверить каталог C:\SMS\Client (если установка проходила на этот диск). Он должен быть общим с именем SMSClient. Если это не так, дайте необходимые разрешения (достаточно read для группы Everyone). Теперь приступим непосредственно к установке клиента методом Client Push. В коллекции «All Systems» выберем нужный компьютер (или можно установить клиента сразу на все компьютеры), «All Tasks → Install Client». На втором экране выбираем «Install the SMS client», «Advanced Client», далее ставим галочку напротив пункта «Always install». Рекомендуют оставлять галочку «Include only clients assigned to this site», но если сайт у вас один, нет удаленного офиса и мобильных клиентов, то можно ее снять, так как иногда инсталляция клиента методом Client Push в такой конфигурации не проходит (см. рис. 4, 5). Установка клиента происходит скрыто от пользователя. Проследить за процессом установки можно, просматривая файл ccmsetup.log в каталоге c:\windows\system32\ccmsetup. Также в Task Manager будет присутствовать процесс ccmsetup.exe. По окончании установки в «Панели управления» появятся новые аплеты типа Systems Management.
Для установки клиента SMS вручную потребуются права администратора. Запустим программу установки client.msi из сетевого каталога \\имя_сервера\SMSClient\I386. На втором экране установки введите код вашего сайта (обычно первые три буквы имени сервера). Для ускорения добавления клиента в базу SMS и для того, чтобы сразу же начать работать, в «Панели управления» запустите аплет Systems Management и на вкладке «Actions» для «Machine Policy Evalution and Retrieval Cycle, User Policy Evalution and Retrieval Cycle» произведите операцию Initiate Action (см. рис. 6). Опять же, наличие клиента на компьютере не быстро отражается в базе SMS, поэтому, для того чтобы увидеть истинное количество компьютеров с установленными клиентами, надо немного подождать или, как в случае с поиском компьютеров по сети, принудительно обновить коллекции. На этом начальная фаза установки сервера SMS, его предварительная настройка и установка клиентов завершены. Далее все зависит только от желаний и требований, предъявляемых к управлению сетью. В следующей статье будут рассмотрены вопросы проведения инвентаризации оборудования и программного обеспечения, централизованная установка ПО и применение Remote Tools for Client Support.
63
администрирование
Возможности MS Windows SharePoint Services Часть 2
Иван Хрипунов Windows SharePoint Services предоставляет удобный и простой интерфейс, с помощью которого вы можете создавать и изменять веб-страницы. А если требуется расширить функциональность этой технологии и улучшить внешний вид веб-узла?
В
первой части статьи [1] вы позна- дет именоваться Microsoft SharePoint комились с базовыми элемента- Designer 2007. Это говорит о том, ми Windows SharePoint Services. что программа ориентирована исклюВ качестве иллюстрации возможнос- чительно на работу с технологиями тей технологии мы создали веб-узел SharePoint. В настоящий момент для пользотелефонного справочника, содержащий сведения о сотрудниках компа- вателей и администраторов веб-узнии, а также их фотографии. Все из- лов, использующих платформу WSS, менения на веб-узле проводились с по- во FrontPage доступны такие возможмощью обозревателя Internet Explorer. ности: Эта функциональность WSS позволя- Дизайн. Если вы не знакомы с языет решать большинство задач по преком разметки HTML или не хотите работать с кодом, вы можете измедоставлению информации. Со временем вам, возможно, потнять веб-страницы в режиме консребуются более гибкие настройки труктора (WYSIWYG). Добавляйте и расширенная функциональность. Наслои, динамические эффекты и папример, вывести данные в формате, нели навигации – это улучшит внеотличном от стандартного, или измешней вид веб-узлов WSS. нить расположение элементов на стра- Кодирование. Изменяйте веб-странице. В этом случае вам на помощь ницы в режиме кодирования с попридет редактор, совместимый с техмощью профессионального редакнологиями SharePoint. тора HTML, XML и CSS. Доступны функции автозавершения и проверки правильности кода, шаблоны поMicrosoft Office FrontPage 2003 ведения (Behaviors) и работа с элементами управления ASP.NET. С момента выхода первой версии программы, которая была нацелена на ис- Расширение функциональности. пользование в качестве наглядного Вы можете работать с информаци(WYSIWYG, What You See Is What You ей из различных источников, создаGet) редактора HTML, во FrontPage вая веб-узлы, управляемые данны2003 многое изменилось. Помимо томи. Создавайте и изменяйте цветого, что стало удобнее редактировать вые схемы с помощью встроенного HTML, XML, CSS и проч., теперь можредактора. Анализируйте статисно полноценно работать со службами тику использования веб-узла WSS SharePoint. А следующая версия, ков различных разрезах при помощи представления «Отчеты». торая выйдет в начале 2007 года, бу-
64
C помощью FrontPage вы можете выполнять задачи по обслуживанию и управлению веб-узлами: Создавать веб-узлы, списки, библиотеки документов, страницы вебчастей, используя мастера и шаблоны. Изменять основные параметры веб-узлов, списков, библиотек документов. В том числе добавлять и редактировать столбцы в списках и библиотеках. Появляется возможность изменить URL веб-узла, используя окно свойств. Изменять служебные файлы списков и библиотек документов, которые позволяют добавлять, редактировать и просмотривать элементы. Создавать и восстанавливать резервные копии веб-узлов.
Каталог источников данных При работе с веб-узлами, основанными на технологии SharePoint, FrontPage позволяет получать данные из разнообразных источников: Списков и библиотек документов данного узла. Баз данных, совместимых с OLEDB, например, Microsoft SQL Server. Веб-сервисов. XML-файлов. Все используемые источники ин-
администрирование формации текущего веб-узла хранятся в так называемом каталоге данных. Физически этот каталог представлен в иерархии узла папкой, обычно _fpdatasources, где хранятся файлы в формате XML с описаниями подключений. Эта папка создается при первом обращении к каталогу источников данных во FrontPage. Вы можете добавлять каталоги других узлов и таким образом отображать данные списков, библиотек документов и т. д., расположенных за пределами текущего узла. Основа для получения информации из перечисленных источников – механизм передачи данных (data retrieval service), одно из нововведений в WSS. Этот механизм позволяет обмениваться информацией между поставщиком и получателем данных по протоколу SOAP (Simple Object Access Protocol), используя XML, и является, по-сути, веб-сервисом.
Вывод информации из каталога
Рисунок 1. Схема работы механизма передачи данных WSS
вы можете с помощью браузера или FrontPage. Стандартные веб-части списков и библиотек документов вы можете трансформировать в «Представление данных» во FrontPage с помощью команды «Преобразовать в XSLT-представление данных». При этом сохраняется идентичный исходной веб-части внешний вид и функциональность, а также вам доступны средства, применимые к веб-части «Представление данных».
Чтобы отображать данные из каталога на веб-страницах, в составе WSS пос- Используем FrontPage тавляется веб-часть «Представление Давайте на практике рассмотрим раданных» (DataView web part). Она вы- боту с веб-узлами во FrontPage. Верступает как клиент сервиса переда- немся к нашему телефонному спрачи данных, форматируя их с помощью вочнику, расположенному по адреXSLT (eXtensible Stylesheet Language су http://server01/phones/. На первой for Transformations, расширяемый язык странице веб-узла, default.aspx, расстилей для преобразований). Таб- положены две связанные между собой лицы XSLT используются для описа- веб-части – одна отображает контактния преобразований структуры доку- ную информацию сотрудников компаментов, посредством простых набо- нии, другая – их фотографии. Данные о сотрудниках и их фотографии храров правил. FronPage – одна из первых про- нятся в списке и библиотеке рисунков грамм, предоставляющих возмож- соответственно. Откроем наш веб-узел во FrontPage: ность наглядного редактирования XSLT. Это означает, что вы можете ре- для этого запустите программу и выдактировать стили XSLT, не обладая берите пункт «Открыть узел» в меню глубокими знаниями о них. С другой «Файл». Справа на панели представлестороны, если вы не новичок в работе ны все каталоги открытого узла. Обрас XSLT, вы можете использовать ре- тите внимание, что библиотеки файлов дактор кода FrontPage для самостоя- (в нашем случае – фотографий сотрудтельного создания необходимых пре- ников) и списки (они находятся в директории Lists) отображаются в виде образований. Веб-часть «Представление дан- папок. Внутри каждого списка или бибных» поддерживает все свойства, лиотеки файлов (в папке «Forms») наприсущие этому элементу WSS, – из- ходятся вспомогательные файлы соменение параметров, персонализа- здания, редактирования и просмотра ция, соединения с другими веб-час- элемента, а также файлы веб-страниц тями. Для добавления на веб-страни- представлений. Кроме того, в структуцы данная веб-часть доступна только ре узла присутствуют следующие слуиз FrontPage. Изменять ее настройки жебные папки:
№7, июль 2006
_catalogs. Это скрытая системная папка. Отображается, если разрешен показ скрытых файлов и папок. Эта опция устанавливается в окне параметров узла. Содержит каталог шаблонов списков, узлов и вебчастей. _fpdatasources. Папка каталога источников данных. Создается при первом обращении к каталогу во FrontPage. _private. Это специальный скрытый каталог FrontPage, не видимый в обозревателе. Его можно использовать, например, для хранения информации, собранной с помощью форм. Images. Пустая папка для изображений, которые могут быть использованы при дизайне веб-страницы. Также в структуре отображаются все файлы веб-страниц. При изменении файлов вы можете выбирать представление, которое больше вам подходит. Это может быть представление «Конструктор», позволяющее редактировать страницу в визуальном редакторе, или представление «Код», для работы непосредственно над кодом веб-страницы. Одним из удобных является представление «С разделением», которое комбинирует вышеуказанные представления так, что вам доступны и изменение кода, и визуальный редактор. При этом обе части окна синхронизируются, то есть если вы добавили в таблицу код для создания нового столбца, это изменение будет отражено в визуальной части. А если вы выделите в визуальной части любой элемент, он будет подсвечен в области кода. Найдите файл default.aspx и откройте его.
65
администрирование Заметьте, после добавления вебчасти на страницу, на панели задач открылось окно «Сведения о представлении данных». Здесь представлены команды для настройки веб-части, а также отображены данные списка в виде древовидной структуры.
Настраиваем внешний вид
Рисунок 2. Открытый веб-узел во FrontPage 2003
Для позиционирования элементов на странице используется сложная структура вложенных таблиц. Нас интересуют только две области, веб-зоны. Они расположены в центральной части страницы, называются «Left» и «Right». Используя FrontPage, вы можете добавлять новые веб-зоны или изменять свойства существующих. В представленных веб-зонах находятся веб-части списка сотрудников и вебчасть изображения. Для нашего примера они нам не понадобятся, удалите их со страницы, освободив место для добавления новых элементов. В визуальной части окна достаточно выделить веб-часть и нажать на клавиатуре кнопку «Delete».
но вы можете добавлять сюда каталоги источников данных других узлов с помощью команды «Управление каталогом», которая находится в нижней части панели задач. Подключения данных для списков и библиотек SharePoint формируются автоматически при создании этих элементов на веб-узле. Для всех остальных типов источников данных вы должны добавлять подключения вручную, с помощью команды «Добавить в каталог», которая расположена в каждой группе источников данных. Раскройте группу «Списки Share Point». Здесь представлен единственный созданный нами список – «Сотрудники». Его можно «перетащить» в нужную веб-зону по аналогии с веб-часДобавляем представление тями или, нажав правую кнопку мыданных ши, выбрать из меню пункт «Добавить Перед вставкой веб-части выделите представление данных». После этого веб-зону, в которую она добавляется. будет добавлена веб-часть с данными Если добавить веб-часть на веб-стра- из списка сотрудников. По умолчанию ницу за пределы веб-зоны, она не будет она содержит несколько основных подоступна для изменения в обозревате- лей расположенных в таблице. Так как ле. Выделите левую веб-зону, кликнув в нашем списке было всего три запина ее названии, и в меню «Данные» вы- си, таблица содержит заголовок и три берите пункт «Вставить представление строки с данными. Стиль представледанных». В правой части окна, на пане- ния элементов вы можете выбирать ли области задач открывается каталог из десятка стандартных шаблонов – источников данных, где перечислены на основе таблиц, списков и других все имеющиеся поставщики, сгруппи- элементов HTML. Если вы знакомы рованные по типам и месту расположе- с XSLT, то легко можете создать свой ния. Изначально в качестве места рас- шаблон вывода данных, написав неположения указан текущий веб-узел, обходимый код.
66
Давайте для начала добавим необходимые для списка контактов поля – те что в данный момент отображаются, не несут в себе достаточной информации. Удалите названия полей из заголовка таблицы. Каждый столбец списка отображается в данной вебчасти полем. Эти поля необходимо выделить и удалить. Вы можете работать с любой строкой – при удалении поля из одной строки, удаляются все поля в столбце. Это происходит из-за того, что вы работаете непосредственно с шаблоном XSLT. Мы продолжим работать с табличным стилем, и нам потребуется добавить столбцы в таблицу по количеству полей, которые будут отображаться. В режиме конструктора это не сложнее, чем такая же операция в Microsoft Word. Добавить поля в таблицу вы можете, просто «перетащив» их в нужные колонки с панели «Сведения о представлении данных». Давайте добавим следующие столбцы: «Фамилия», «Имя», «Отдел», «Рабочий телефон», «Сотовый телефон», «Адрес электронной почты». Не забудьте, что самая первая строка таблицы – это заголовок, поэтому внесите сюда названия полей. После того как необходимые поля добавлены, можно приступить к их форматированию. Все поля у нас имеют текстовый формат и отображаются верно, кроме поля с адресом электронной почты. Это поле неплохо было бы отображать в виде гиперссылки. Выделите это поле в конструкторе и, используя меню «Данные», выберите пункт «Форматировать элемент как…». Из открывшегося меню нас интересует пункт «Гиперссылка». Если вы применяете такое форматирование к элементу «Адрес электронной почты», он отображается на веб-странице в виде гиперссылки. Но, к сожалению, текущая версия FrontPage не позволяет выбрать тип ссылки (обычная, сообщение электронной почты, ссылка в документе). В код автоматически вставля-
администрирование ется ссылка на страницу. Такая ссылка не будет работать для отправки сообщений электронной почты, и это придется исправить в коде вручную. Если вы уже работали с языком разметки, то знаете, что для ссылок на адреса электронной почты параметр href тега <A> должен содержать строку «mailto:[e-mail]». Выделите в визуальной части окна элемент с адресом и найдите в выделенном фрагменте вот такой код: <td class="ms-vb"> <a> <xsl:attribute name="href"> <xsl:value-of select="@Email"/> </xsl:attribute> <xsl:value-of select="@Email"/> </a> </td>
В описании XSL-атрибута href для тега <A> (строка 4) измените значение на «mailto:<xsl:value-of select=”@Email”/>». Теперь гиперссылка будет работать правильно – при выборе ее будет создаваться сообщение электронной почты. Вы не забываете сохранять изменения? Данная ситуация исправлена в новой версии FrontPage – SharePoint Designer 2007. Во второй бета-версии, доступной для публичного тестирования, при форматировании элемента как гиперссылки открывается стандартное окно «Выбор гиперссылки». Все остальные поля пока оставим без изменений форматирования.
Используем условное форматирование Можно немного оживить наш список – добавить условное форматирование. С помощью этой опции FrontPage вы можете, например, изменять форматирование (цвета, шрифт, отображение) в зависимости от выполнения какого-либо условия. С веб-частью списка сделать это нельзя, а вот для «Представления данных» это не сложно. Давайте для примера будем изменять цвет фона каждой нечетной строки на серый. Для создания правила условного форматирования выделите строку таблицы и на панели «Сведения о представлении данных» выберите команду «Условное форматирование». Создайте правило применения форматирования, в качестве поля укажите [номер строки] – нечетный. В окне изменения стилей («Формат» → «Граница» → «Заливка» ) укажите цвет заливки – светло-серый. Если этот цвет из стандартного набора кажется темным, то, нажав «Другие цвета» в списке цветов, введите, например, значение «Hex={DF,DF,DF}».
Сортируем и группируем список Используя веб-части списков вы можете сортировать, группировать и фильтровать данные – эти команды расположены на панели инструментов. К тому же, нажав на заголовок столбца, вы можете отсортировать строки. А что же «Представление данных»? Вся эта функциональность присутствует и в этой веб-части. Откройте окно «Типы представлений» с помощью команды «Стиль» на панели «Сведения о представлении данных». На закладке «параметры» вы можете изменить следующие настройки веб-части – показывать или нет панель инструментов, с помощью которой можно сортировать, фильтровать и группировать информацию; создать ссылки в заголовках стол-
№7, июль 2006
бцов для сортировки; выбрать отображение набора элементов и так далее. Для нашего примера можно включить параметр для сортировки данных по заголовкам столбцов.
Фотографии сотрудников Получившийся список контактов неплохо выглядит, но, в отличие от первой версии, на странице не отображается фотография. Вы можете поступить уже известным вам способом [1] – соединить веб-часть представления данных с веб-частью изображения, используя в качестве адреса фотографии поле «Фото». Отличительная особенность «Представления данных» от веб-части списка в том, что создавать соединения можно по любым полям, вне зависимости, показаны они на странице или нет. Единственное условие – поле списка должно быть указано в запросе данных. Еще одна замечательная возможность «Представления данных» – настройка отправки первой строки всем присоединенным веб-частям. На практике это означает, что при начальном отображении страницы во всех связанных веб-частях будет отображаться информация. Изменить эту настройку вы можете в окне изменения параметров веб-части, в разделе «Разное». Но раз уж мы ведем речь о «Представлении данных», сделаем вывод фотографий с помощью именно этой веб-части. Повторите описанные выше шаги по добавлению представления данных списка «Сотрудники» на страницу, но в вебзону «Right», расположенную в правой части страницы. Удалите всю информацию, оставив пустую таблицу, состоящую из одного столбца. Оставьте в таблице строку заголовка, а одну из строк, содержащих данные, разбейте на 7 строк. Последние пять строк разделите на две колонки. Теперь «перетащите» поля списка в полученный макет, введите названия и отформатируйте текст. Первые две строки – это поля «Фото» и «Полное имя». Элемент, содержащий путь к фотографии сотрудника, отформатируйте как рисунок. Нажмите правую кнопку мыши и из меню «Отформатировать элемент как» выберите «Рисунок». На рис. 3 показано, что у вас должно получиться. Не забывайте сохранять страницу.
Соединение веб-частей Мы сделали вывод дополнительной информации о сотруднике на одной странице – вместе с фотографией теперь доступны все необходимые поля. Осталось лишь связать список сотрудников с созданным информационным блоком, назовем его «Сотрудник – подробно». Создание соединений между веб-частями такого типа доступно только во FrontPage. Выберите одно из представлений данных, нажмите правую кнопку и выберите «Соединения веб-частей» из меню. Если данный элемент уже имеет настроенные соединения, то вы увидите окно соединений. Здесь перечислены все соединения, любое из них вы можете отредактировать или удалить. Мы создаем первое соединение для веб-части, поэтому сразу открывается окно «Мастер соединения веб-частей». Не буду описывать подробно все шаги мастера, в процессе его работы даются достаточно подробные объяснения. Замечу лишь, что так как мы связываем две веб-части, основанные на одном списке, то в ка-
67
администрирование бой момент можете преобразовать эту веб-часть в полностью настраиваемое XSLT-представление.
А как же остальные источники данных?
Рисунок 3. Результат изменений телефонного справочника
честве связующего стоит использовать Если список сотрудников достаточполе «Идентификатор». Хотелось обра- но большой, создайте еще один спитить ваше внимание на предпоследний сок, содержащий буквы алфавита. Дошаг мастера. На этом этапе вам пред- бавьте в список сотрудников вычислялагается выбрать поле веб-части источ- емое поле, в котором будет содержатьника, на котором будет создана ссылка ся первая буква фамилии сотрудника. для связи, и указать, какие поля будут Сделать это можно, записав в поле участвовать в обозначении выделенно- формулу «=ЛЕВСИМВ([Фамилия];1)». го элемента. Выделенный элемент вы- Добавьте на страницу еще одну вебделяется полужирным написанием. Вы- часть «Представление данных» с букберите в качестве поля со ссылкой и по- вами алфавита и соедините ее с вебля обозначения столбец «Фамилия» на- частью списка сотрудников. Вы получишего списка. Теперь сохраните страницу те удобную разбивку списка по алфаи откройте веб-узел в обозревателе. виту, и ориентироваться в таком справочнике будет удобнее. Вам необходимо добавить ссылку Полезные мелочи Посмотрите на получившуюся страни- на экспорт контактов в Outlook на страцу – фактически она ничем не отлича- ницу? Воспользуйтесь возможностями ется от первой версии, созданной с ис- протокола stssync, реализованного в пользованием стандартных веб-частей WSS. Подробнее об этом вы можете просписков и изображений. Но получивший- читать на страницах библиотеки MSDN ся справочник содержит на одной веб- (http://msdn.microsoft.com/library/en-us/ странице всю информацию о сотрудни- spptsdk/html/tsstsync_SV01036546.asp) Если вам потребуется выгрузка данке, позволяет более гибко настраивать внешний вид. Несмотря на то что на раз- ных в Excel, создайте на странице ссылработку такой страницы уходит больше ку на файл запроса данных. Получить времени, результат того стоит. такой файл вы можете на страницах Что можно еще улучшить? Напри- представлений списка. Достаточно наймер, добавить в XSLT-шаблон дина- ти ссылку «Экспорт в электронную табмические эффекты с помощью тегов лицу». При запросе необходимо сохра<xsl:attribute>. Таким образом вы мо- нить файл *.iqy на ваш веб-узел. И помните о том, что если при ражете описать DHTML-события OnClick, OnMouseOver и прочие. Например, ис- боте с «Представлением данных» вам пользуя событие OnClick, вы сможете не хватает функциональности, котовыводить информацию о сотруднике рая присутствует в стандартной вебпо щелчку в любом месте строки. части списка или библиотеки, вы в лю-
68
Все действия, описанные в статье, вы можете применять для данных, полученных из других поддерживаемых источников. Отличаться будет только запрос данных. Используйте веб-сервисы, которые устанавливаются вместе с WSS, и те, что доступны на внешних узлах в Интернете. Подробное описание вебсервисов для технологий SharePoint вы можете найти на сайте MSDN – http://msdn.microsoft.com/library/en-us/ spptsdk /html/soapnsMicrosoftShare PointSoapServer2_SV01043862.asp . Выгружайте на веб-узлы файлы в формате xml и выводите информацию из них на страницах веб-сайтов. Таким образом вы можете публиковать, например, курсы валют в удобном для вас формате. То же самое вы можете сделать и с потоками в формате RSS. 1. Хрипунов И., Черневский А. Возможности технологии MS Windows SharePoint Services. //Системный администратор, №5, 2006 г. – C. 20-27. 2. http://www.sharepointcustomization.com – сайт, посвященный совместному использованию FrontPage и технологий SharePoint. 3. ht tp : / / w w w.mic rosof t .c om / tec hnet / prodtechnol/office/office2003/maintain/ fp03wss.mspx – использование FrontPage для редактирования веб-узлов SharePoint. 4. http://msdn.microsoft.com/library/default. asp?url=/library/en-us/odc_fp2003_ta/ html/odc_fpbldgxmlwebs.asp – построение узлов, управляемых данными. 5. http://www.sharepointcustomization.com/ resources/whitepapers.htm – сборник документации. 6. http://www.sharepointcustomization. com/resources/sdks.htm – Software Development Kits для FrontPage и WSS. Все перечисленные интернет-ресурсы представлены на английском языке. Из русскоязычных ресурсов в ближыйшее время начнет функционировать блог, посвященный технологиям SharePoint. Найти его вы сможете по адресу http://blogs. technet.com/ruswss.
человек номера
Один в поле – воин!
Директор компании «Битрикс» против аутсорсинга, пиратов и интернет-шантажа.
О
браз человека, который мы ри- тором. Школа была математическая, суем, вспоминая о нем, – вещь поэтому с 9 класса он изучал языки часто весьма неожиданная. программирования – Фортран и БейИногда после общения с мужчиной бо- сик. Интернета еще, естественно, гатырского телосложения представля- не существовало. Он появился позже. ешь… маленького плачущего ребенка. «Как что-то не совсем понятное, завоеА побеседовав с хрупкой невзрачной вал свое место в жизни в качестве соженщиной, думаешь: какое величие ставной части коммуникационной средуха, красота души! Директор компа- ды современного общества. Как нении «Битрикс» внешне – симпатичный льзя представить сегодня общество молодой человек, которого при жела- без телевидения, газет, так нельзя его нии с удовольствием бы взяли сни- себе сегодня представить без Интерматься в сериал про современную нета», – рассказывает Сергей. Навержизнь на роль главного героя. Но по- ное, у талантливого, технически подчему-то после интервью с Сергеем мое кованного юноши не было эйфории подсознание рисует такую картинку: от осознания возможностей электронкрестьянское подворье, дом, службы, ной почты, какая была у меня в начаживность, с утра до вечера кипит ра- ле 90-х: вот сейчас твое письмо здесь, бота, и посреди двора Сергей Рыжи- на экране монитора, но стоит нажать «Send» – и оно уже на другом конце ков – хозяин этого богатства. планеты. Сергей Рыжиков – прагматик, он наверняка и в начале пути считал IT-родословная Многие сегодняшние тридцатипяти- Интернет просто средством доставлетние впервые увидели компьютер ки информации. К тому же в отличие в старших классах школы. Сережа от гуманитариев, вроде меня, он училРыжиков сразу познакомился с IBM – ся программированию в школе и вусерьезной машиной с цветным мони- зе, первый компьютер собрал, будучи
70
студентом. А когда знаешь, как изнутри устроено чудо техники, трудно считать его чудом… Сергей закончил Белорусский государственный университет в 1994 году по специальности «Радиофизика и электроника, математические машины» и благодарен своим преподавателям: «В Минске у нас был очень сильный преподавательский состав именно по программированию. Это было действительно мастерство: с помощью очень ограниченных в ресурсах машин программировать очень сложные задачи. Алгоритмически они часто достигали больших результатов». Правда, в некоторых вопросах преподаватели были осведомлены меньше, чем их продвинутые студенты. Преподаватели опирались на учебник, и на лекции порой звучало «конфиксус» вместо «конфиксис». А студенты исходили из практики. И здесь у них была явная «фора». На 4-м курсе Сергей с однокурсниками написали книгу на 400 страниц «Программирование микропроцессоров X-86 Pentium…». На пятом курсе получили
человек номера лицензию, открыли фирму со знако- свежую версию программного продуквым именем «Битрикс», взяли кредит, та, потому что в отдел, отвечающий Сергей Рыжиков издали книгу и продали ее. Выпусти- за состояние веб-страницы образова- В 1994 году окончил БГУ по специальносли еще несколько книжек, и «Битрикс» тельного ведомства столицы, пришли ти радиофизика и электроника. В АКБ №1 на этом прекратил существова- новые люди и у них руки пока не до- «Инвестбанк» возглавлял отдел интернетние. В планы Сергея не входило осе- шли до обновлений. История типичная, технологий и финансовых телекоммуникаций. С 1998 года – директор компании дать в Белоруссии. Минск ему очень так бывает часто. Это сегодня Сергей Рыжиков – хо- «Битрикс». С 2005 года активно участвунравился, но он понимал, что перспектив у бизнеса в республике немно- зяин компании, которая разрабатыва- ет в организации и проведении Российсго. Рыжиков вернулся в Калининград, ет программные продукты для управ- кого Интернет-Форума. Член сообществ устроился на работу в один банк, по- ления веб-проектами и многофункци- ISDEF и Ezhe.ru. том в другой. В итоге возглавил отдел ональные информационные системы интернет-технологий и коммуникаций для ведения коммерческой деятель- стал убеждать, что нужно делать проплатежных систем. «Я не ставил за- ности в сети Интернет. А начинали ра- дукты. У меня это не получилось. И мы дачи уйти и создать бизнес. Но в 1998 ботать, между прочим, как аутсорсин- пришли к необходимости заняться сагоду наступил кризис банковской сис- говая компания. Если опять исполь- мостоятельной деятельностью». Артемы. Самый главный вывод, который зовать сравнение с крестьянским хо- гументы Сергея трудно оспорить хоиз этого можно было сделать: бли- зяйством, сначала Сергей Рыжиков тя бы потому, что сегодня на российжайшие пять лет после кризиса банки и его сотрудники ходили «в батраках», ском рынке преобладает аутсорсинг обычно озабочены одной проблемой – нанимались то к одному, то к друго- отдельных задач или ресурсов. Отсювыживания. Так оно и оказалось. Банки му хозяину и выполняли работу, ка- да низкая экономическая эффективстремились просто выжить и сохранить кую попросит. А потом завели свое ность контрактов с фирмами-аутсортехнологический уровень. Более того, хозяйство и ныне выращивают свой серами. Аналитики находят в системе произошла очень сильная централиза- хлеб, высадили на российских про- немало других «подводных камней», ция банковской системы. А в филиаль- сторах свой «лес». Он шумит повсю- но надеются, что их удастся преодоной сетке нет перспектив для развития. ду, где есть партнерская сеть «Бит- леть со временем. Для усовершенсРазвитие всегда идет из центра, а фи- рикса», а это ни много, ни мало – 700 твования этой организационной схелиальная сеть только осваивает тех- компаний. Кстати, партнеры у «Битрик- мы предлагаются разные варианты – нологию. Понимая, к чему это может са» есть не только в России, но и за ру- диверсификация аутсорсинга, дублипривести, перед 1999 годом я уволил- бежом. На Западе с ним сотруднича- рование важнейших участков, введеся из банка». Впереди замаячили «Бит- ют около 200 компаний – американс- ние большого числа компаний-подрядрикс» №2 и сегодняшний успех. ких, европейских, ближневосточных. чиков и т. п. Сергей, как человек побыТак что за развитием ситуации в Ира- вавший в шкуре аутсорсера, не видит не Сергей следит с особым интере- и особых перспектив этого направлеСвой лес «Битрикс» на сегодня – стремительно сом – ведь там у «Битрикса» эксклю- ния бизнеса: «Чтобы увеличить доходразвивающаяся компания, словно бо- зивный партнер, который неплохо вы- ность, рентабельность, есть две страгатое хозяйство, выстроенное своими полняет свои обязательства. Военные тегии: либо нанимать больше людей, руками. Сергей Рыжиков и его коллеги действия и выходки экстремистов на- чтобы, условно говоря, было больше работают на средний и малый бизнес, прямую бьют по кошельку российских станков, либо увеличивать стоимость цены часа. У каждого из этих фактоа это совсем не простые покупатели. бизнесменов. Они хотят получать не просто качестПопулярный ныне в России аутсор- ров есть свои недостатки. Увеличение венные продукты, но еще и не слиш- синг, который, по оценкам некоторых числа людей – это риски, постоянная ком дорогие. Программными продукта- экспертов, набирает обороты быстрее, зависимость от контрактов. Идея, коми «Битрикс: Арендуемые магазины», чем на Западе, Сергей считает вред- торую я провожу, – нужно продавать «Битрикс: Инфопортал», «Битрикс: Уп- ным для экономики государства биз- продукт. Это важно для России в церавление сайтом» пользуются госу- несом: «Потому что это другая форма лом и для каждой компании в частносдарственные и образовательные уч- продажи человеческих ресурсов. С од- ти. Создание продуктов – это специфиреждения, крупные предприятия и ор- ной стороны, мы продаем нефть. А так ческий, отдельный бизнес. Он отличаганизации. На «Битрикс. Управление мы продаем рабочее время. С вами ра- ется от почасовой продажи, вообще сайтом» сегодня работают и готовятся зорвали контракт – у вас ничего не ос- от продажи и создания услуг. Это полк выпуску более 2500 различных веб- талось, вам нечего продавать. Вы за- ный цикл: нужно определить сегмент проектов. Цифра немаленькая! висимы от того, что у вас есть в конт- рынка, функции, которыми должен обС сайтом Департамента образования ракте. Интеллектуальные права все- ладать продукт, чтобы быть востребогорода Москвы http://www.educom.ru я го созданного принадлежат заказчи- ванным, выпустить его своевременно, знакома давно, он мне нравится за удобс- ку. Вы не владеете этим, вы не созда- правильно донести до потенциальнотво навигации и симпатичный дизайн. ли продукт, ничего не сделали. То есть го потребителя, окупить, организовать Кстати, сам Сергей на мои комплимен- завершен контракт – в истории ниче- смену версий, производство, документы отреагировал улыбкой: оказывает- го не осталось. Еще работая аутсорсе- тирование, техподдержку... Длинный ся, департамент использует не самую ром, я наших американских партнеров цикл, но это правильно. Очень хочет-
№7, июль 2006
71
человек номера ся верить, что аутсорсинговые компании одновременно начнут создавать самостоятельные продукты. Это им под силу».
Вон, непрошенные гости! Мужчина, который построил крепкое хозяйство, дом, «засеял» пусть не пшеничное, но просто свое поле деятельности, должен уметь защитить собственность от посягательств лихих людей. Или поставить на ворота крепких парней, которые умеют грамотно наладить охрану. «Битрикс» сотрудничает с ассоциацией «Русский щит», созданной в 1997 году российскими правообладателями для защиты авторских прав разработчиков программного обеспечения. Сергею Рыжикову нравится, что «Русский щит» действует законными способами: ведет переговоры с интернет-площадками, договаривается, объясняет, доводит вопросы до суда, если это необходимо. «Щит» защищает «Битрикс» от пиратства. Сложнее уберечься от посягательств на репутацию и от недостоверной информации. Сергей верит, что лучшая оборона – нападение, то есть результаты, успешные проекты. И не потому, что не в состоянии оценить реальную опасность. Наоборот, он очень хорошо понимает, что его компания вышла на такой уровень, когда некоторые «коллеги» считают – нужно уничтожить успешного конкурента, и в этой борьбе все методы хороши. «Мы часто сталкиваемся с недобросовестной конкуренцией. Человек может представиться в качестве сотрудника какой-то компании и заявить на форуме наших клиентов, что «его» компания жутко недовольна нашим продуктом. Однажды эта информация попала мне на глаза, совершенно случайно. Я очень хорошо знаком с директором якобы недовольной компании, тут же набрал его телефон и спросил: «Тут на одном форуме выступил ваш сотрудник. Ты знаешь этого человека, он правда у вас работает?» – «Нет, никогда не работал». – «А у тебя есть какие-то претензии к нам?» – «Нет, все отлично работает!» И тогда мы обратились к администратору форума. Выяснилось, что «критикующий» – даже модератор этого форума и что у него просто есть на нас «зуб»… Это один
72
из самых распространенных способов компрометации. Мы даже приняли решение отказаться от участия в форумах, сообществах за пределами нашего сайта. Готовы отвечать на все вопросы, вступать в любые дискуссии, но у себя. На внешних форумах и ресурсах, как показала практика, мы имеем дело не с клиентами, не с потребителями, а с мелким раздраженным недовольством. Кстати, это еще самый безобидный вариант. Намного серьезнее специально подготовленные и даже профинансированные мероприятия. Появляются люди, которые пишут порочащие статьи и продают ее тем, кого они считают нашими конкурентами. Они не понимают, что мы все общаемся между собой. Мне знакомый говорит: «Ко мне тут пришли, статью про вас продают, купить – не купить?». Тема безопасности для Сергея – больная, потому что эта проблема ключевая для компании «Битрикс» и ее клиентов. Он рассказывает о других способах опорочить репутацию компании. Интернет для таких дел – увы, очень удобная среда. Можно взломать сайт какого-нибудь уважаемого концерна, вывесить ерунду, сделать скриншот и отправить его в парочку агентств. Новость расходится мгновенно, а концерн несет колоссальные убытки. Можно украсть информацию с сайта и шантажировать компанию – мол, опубликуем, если не выполните наши требования. Чтобы этого не случилось с клиентами «Битрикса», компания заказывает аудит безопасности программных продуктов в нескольких компаниях. Аудит программного продукта «Битрикс. Управление сайтом» провели компании Positive Technologies и «Немесис». Сергей Рыжиков настроен оптимистично: «Я знаю уголовные дела, которые были доведены до суда в результате того, что компания шантажировалась под предлогом распространения какой-то информации. И это даже не единичные случаи. Самая большая проблема – поимка шантажиста. У преступника зачастую складывается ощущение, что в Интернете можно делать все совершенно анонимно, а человека поймать нельзя. Но есть специалисты, которые легко делают все тайное явным».
Простые планы Настоящий хозяин всегда думает о будущем – своей семье, своих детях, своем деле. У Сергея Рыжикова две очаровательные дочки, старшей девять, младшей два с половиной года. Конечно, первая мысль и главная забота – о них. Что же касается развития информационных технологий, перспективы директор компании «Битрикс» определяет такие: «Растущие сегменты, спрос со стороны бизнеса или частных лиц на определенные решения или продукты, возможность представить эти продукты». «А для частных лиц, обычных людей, которые пользуются Word и электронной почтой, которым не нужны сложные знания из области программирования, что ожидает их?» – упорно допытываюсь я у Сергея. Для меня это важный вопрос. Рыжиков, кажется, готов к ответу: «Все стремится к тому, чтобы стать максимально простым и управляемым. Интересное направление, которое появилось недавно, – медиацентры. Компьютер, подключенный к телевизору, объединяет в себе пишущий DVD, телевизор, FM-радио, кабельное телевидение. Можно записать телепрограмму, выйти в Интернет, получить электронную почту, просмотреть фотографии. Сегодня мы спокойно пользуемся телефонным аппаратом, хотя не знаем, как он устроен. Точно так же не будем задаваться вопросом, как работает Интернет. Это знают специалисты. Они привели провод в дом, подключили, и люди работают или играют в той среде, которую им выдали. Есть банальное, прагматичное использование технологии, которое дают коммуникации». Мне хорошо, соседям хорошо, всем хорошо – психология человека, который занимается своим делом на своем поле. В какой-то отрезок нашей истории хозяйства «кулаков» – какое название для них придумали! – просто уничтожали вместе с людьми. Дай бог, сегодня настоящие хозяева станут основой государства. В том числе хозяева огромной сферы современного общества под названием «информационные технологии».
Оксана Родионова
сети
Управляем зонами DNS
Рашид Ачилов Сформировать файлы, необходимые для создания собственной зоны DNS, – это еще не все. Необходимо настроить и запустить программу BIND, зарегистрировать доменное имя, дождаться завершения тестов – и можно раздавать друзьям адреса mymail@shortdomain.com! мешало бы нам создать несколько каналов и разбросать Настройка BIND Программа BIND очень богата на параметры конфигураци- сообщения между ними. онного файла. Даже простое их перечисление может занять logging { не один лист. Здесь я приведу собственный рабочий конchannel named_log { фигурационный файл, слегка измененный к придуманной syslog local7; severity info; нами задаче, которая рассматривалась в предыдущей ста}; тье «Создаем зоны DNS» (№6 за 2006 г.). Полное руководсcategory default { named_log; default_debug; }; category general { named_log; default_debug; }; тво по настройке BIND распространяется вместе с дистриcategory unmatched {named_log; default_debug; }; бутивом, а также доступно в [1]. }; Конфигурационный файл BIND – named.conf. Каталог После настроек системного журнала идут настройки, /etc/namedb во FreeBSD обычно содержит этот файл, заполненный настройками по умолчанию, файл named.root, в ко- управляющие контролем доступа. Они нам понадобятся, тором перечисляются «хорошо известные» корневые сер- чтобы разделить клиентов, запрашивающих информацию, вера (этот файл вы можете загрузить с [2]) и шаблон фай- и указать, кто какие зоны будет просматривать. ла обратной локальной зоны PROTO.localhost.rev, на осноacl me-white { 212.20.5.0/24; }; ве которого создается файл localhost.rev. acl grayteeth { 10.87.1.0/24; };
Клиенты, обращающиеся с адресов, удовлетворяюНастройки named.conf В качестве знака комментария используется символ «//», щих этим ACL, будут считаться «внутренними» и получать как в программах на С++. Допустимо также использова- доступ к «внутренней» зоне. Все прочие же клиенты будут ние знака «#», как в скриптах на /bin/sh. Порядок задания считаться «внешними» и получать доступ только к «внепараметров произвольный. шней» зоне. Первыми идут настройки, относящиеся к системноСоздаем внутренние зоны. Для начала определим, му журналу (syslog). BIND очень богат на опции настройки кто имеет право получать данные из внутренних зон и то, хранения информации в syslog, перенаправлять ее можно что для запроса от внутреннего клиента сервер являеткак угодно. В приведенном ниже примере создается канал ся рекурсивным, то есть не будет в ответ отдавать ссылки передачи сообщений (channel) такой, что все сообщения на- на другие сервера (DNS NXDOMAIN), а обязан вернуть отправляются в syslog с facility local7 и severity info. После опи- вет на запрос – успешный или неуспешный. сания канала задаются категории, указывающие, какие соview "internal" { общения куда следует направлять. В этом случае все просmatch-clients { grayteeth; me-white;}; то, все направляется в один и тот же файл, хотя ничто не поrecursion yes;
74
сети Определяем специальную зону «подсказок». Эта зона содержит список «хорошо известных» серверов, с которых начинается поиск адреса, если его еще нет в кэше. Фактически, мы описываем весь Интернет этой зоной. zone "." { type hint; file "named.root"; };
Определяем обратную зону для 127.0.0.1. Для данной зоны сервер является основным (master), не отсылает извещения об обновлении, блокирует любые попытки обновить или запросить трансфер зоны. Если для зоны не указаны allow-query, allow-update или allow-transfer, то применяются установки представления (внешнего или внутреннего), попадание в представление означает получение доступа. Таким образом, не задавая allow-transfer, мы оставляем возможность запустить трансфер зоны. Хотя для данной зоны это не страшно – просто бесполезная операция. zone "0.0.127.IN-ADDR.ARPA" { type master; notify no; file "localhost.rev"; allow-update { none; }; allow-transfer { none; }; };
Определяем основную зону прямого преобразования. Для этой зоны сервер является основным, блокирует любые попытки обновления зоны, разрешает запрос из зоны только клиентам, удовлетворяющим перечисленным ACL. zone "krokodil.ru" { type master; file "direct-krokodil-ru.int"; allow-update { none; }; allow-query { me-white; grayteeth; }; };
отдельной зоны tail.krokodil.ru, которая может администрироваться другим человеком, и соответственно наш сервер должен отсылать клиента к серверу зоны tail.krokodil.ru). view "external" { match-clients { any; }; recursion no;
Определяем основную зону прямого преобразования. Для этой зоны сервер является основным и полностью блокирует любые обновления. zone "krokodil.ru" { type master; file "direct-ru.ext"; allow-update { none; }; };
Определяем основную зону обратного преобразования. Для этой зоны сервер является основным и полностью блокирует любые обновления. Определение этой зоны не нужно, если провайдер предоставляет блок адресов размером менее сети класса С.
};
zone "5.20.212.in-addr.arpa" { type master; file "zone212.rev"; allow-update { none; }; };
Здесь мы рассмотрели только основные параметры для описания зон. Множество других параметров – опции настройки клиентской части («резолвера»), настройки канала управления RNDC – остались в стороне, поскольку они непосредственно не связаны с настройкой зон, хотя достаточно существенны для работы локальных программ и сопровождения.
Запуск и сопровождение
Для запуска named достаточно добавить Определяем основную зону обратного преобразования named_enable="YES" и завершаем внутреннюю часть. Для этой зоны сервер является основным, блокирует любые попытки обновления зоны, разрешает запрос из зоны только клиентам, удов- в /etc/rc.conf. По умолчанию в нынешних версиях раболетворяющим перечисленным ACL. чий каталог named делается с рассчетом на jail, и поэтому вынесен в /var/named, где уже созданы подкаталоzone "2.87.10.in-addr.arpa" { ги /dev, /etc и /var, а /etc/namedb является символическим type master; линком на /var/named/etc/namedb. Меня это не устроило, file "zone10.rev"; allow-update { none; }; и я расположил рабочий каталог в более привычном месallow-query { me-white; grayteeth; }; те – /etc/namedb. Для этого в /etc/rc.conf пришлось доба}; }; вить строки: named_flags="-c /etc/namedb/named.conf -4 -u bind" Создаем внешние зоны. Поскольку просмотр ACL идет named_chrootdir="" по схеме «first win», то есть используется первое совпадение, то все клиенты, которые не могут быть отнесены к внутренПараметр -4 отключает поддержку Ipv6 (когда она ним, автоматически попадут во внешние, следовательно, еще будет), параметр -u bind задает сброс привилегий нет необходимости в специальном описании ACL. Для за- после запуска до пользователя bind. Последняя стропроса от внешнего клиента сервер является нерекурсив- ка нужна для /etc/rc.d/named, чтобы он не пытался соным, то есть в ответе может содержаться не только положи- здать /var/named/etc/namedb. Если вас устраивает растельный или отрицательный результат, но и ссылка на дру- положение рабочего каталога по умолчанию, то достагой сервер (DNS NXDOMAIN). В нашем случае это не име- точно строки: ет значения, но могло бы понадобиться, если бы мы опреnamed_flags="-4 -u bind" деляли подзоны (например, end.tail.krokodil.ru потребует
№7, июль 2006
75
сети После запуска все сообщения должны направляться по тем маршрутам, настройки которых были заданы в named.conf. Если это файлы системного журнала, то они должны быть созданы заранее и syslogd оповещен о произошедших изменениях, иначе сообщения будут пропадать. Если после запуска named он не стартует и в соответствующий журнал ничего не записывается, просмотрите другие журналы, например, /var/log/daemon или другой файл, в который направляются сообщения с facility daemon и severity info, а также сообщения, выводимые на консоль. Если же named успешно открыл канал передачи информации, все данные уже будут направляться в соответствии с настройками. Перед тем как подавать заявку на регистрацию зоны, запустите named, убедитесь, что он работает, настроив на него компьютеры внутренней сети. Также вы можете использовать команды dig, host и dnswalk для проверки работоспособности зоны. Команда dnswalk – это небольшой скрипт на языке Perl, который с помощью несложной модификации можно превратить в средство для закачки полных зон. Устанавливается он из ports/dns/dnswalk и требует достаточно большого количества разнообразных дополнительных модулей – p5-Digest-HMAC-1.01, p5-Digest-SHA1-2.11, p5-Net-DNS-0.57, p5-Net-IP-1.24. Для того чтобы закачивать зоны (на самом деле dnswalk это делает и так, но не сохраняет копию), следует наложить патч: # diff -ub dnswalk.old dnswalk --- dnswalk.old Fri May 12 18:47:16 2006 +++ dnswalk Mon Apr 24 19:55:00 2006 @@ -93,6 +93,11 @@ } @subdoms=undef; foreach $rr (@zone) { + +# Inspired by Shelton to save zone file + $rr->print; +# To here + if ($rr->type eq "NS") { $subdom = $rr->name; $subdom =~ tr/A-Z/a-z/;
Средства для тестирования зон описаны в RFC 1713. В нём упоминаются все те же host, dig и dnswalk, а также другие программы, например DDT (Domain Debug Tools). Все программы, упомянутые в RFC, можно найти на [7]. После того, как сервер заработает, можно подавать заявку регистратору. При регистрации в РУЦЕНТРе нужно будет заполнить форму, в которой указать реквизиты организации и контактные адреса. Все поля, информация из которых будет в открытом доступе, имеют специальную пометку. Внимательно читайте подсказки веб-интерфейса, предоставляемые РУЦЕНТРом, – не все поля можно изменять через веб-интерфейс! Впрочем, те поля, которые изменить нельзя, и не имеют в нем возможностей для замены. Network Solutions имеет менее удобный интерфейс – при регистрации он просит зарегистрировать одну персону, контактные адреса которой и будут «по умолчанию» подставлены во все необходимые поля при регистрации домена. Это довольно неудобно, к тому же веб-интерфейс Network Solutions гораздо менее очевиден, чем веб-интерфейс РУЦЕНТРа. В нем можно разобраться, но для того, чтобы, например, добавить еще одну персону и перевести на нее какие-то контакты, придется изрядно повозиться.
76
РУЦЕНТР начинает тестирование через 4 часа после принятия заявки при условии, что на лицевом счету достаточно средств для ее исполнения, иначе заявка будет «поставлена в очередь» и тестирование начнется через 4 часа после поступления денег. После тестирования зоны вы получите информационное сообщение, в котором будет указан результат тестирования. Если тестирование прошло неудачно, то в сообщении будет приведена причина ошибки. Если при регистрации был указан почтовый адрес в новом домене (в нашем случае, например, admin@krokodil.ru), то проверьте еще и работоспособность локального почтового сервера и тот факт, что он принимает почту для домена krokodil.ru, в противном случае подтверждения можно и не дождаться. После регистрации домена вы получите другое подтверждающее сообщение. Также вы получите отдельное сообщение, если была заказана услуга вторичного сервера DNS. Оплата услуг производится на год, когда срок оплаты будет подходить к концу, все регистраторы начинают присылать сообщения с напоминаниями о том, что срок регистрации заканчивается и нужно оплатить следующий срок. Все регистраторы используют концепцию «персон» для установления лиц, которые отвечают за своевременное внесение изменений в информацию о своих зонах, а также получают извещения, например о том, что срок оплаты заканчивается. «Персона» – это набор анкетных данных, сообщаемых при регистрации. Как правило, сюда входят телефон и адрес электронной почты. Именно по указываемым здесь адресам и рассылается информация. После регистрации «персоне» присваивается handle (заголовок), который может быть указан на сайте регистратора в качестве Administrative (административного) или Technical (технического) контакта. Указанные контакты будут получать соответствующую информацию – administrative – об окончании срока оплаты и т. д., Technical – об ошибке получения свежей версии зоны и т. д. Кроме того, по обоим адресам будет рассылаться информация общего характера, например, об изменениях в правилах регстрации доменов. РУЦЕНТР не требует регистрации «персоны» – информация о том, куда сообщать, вводится в анкете. Network Solutions в любом случае создаст, как минимум, одну «персону» и пропишет ее во все необходимые места, RIPE требует создания «персоны» в обязательном порядке. Даже в случае неоплаты следующего срока РУЦЕНТР не освобождает домен день в день. Сначала сервер постоянно, примерно дней за 5 до окончания срока, каждый день шлет напоминания о необходимости оплатить услуги по продлению регистрации домена. Если же оплата так и не была внесена, то доступ к DNS-серверу блокируется, но еще месяц имя не освобождается. Если в этот момент оплатить продление регистрации, то имя не пропадает. Через месяц после того, как оплата была просрочена, имя освобождается и переводится в «аукцион доменов». «Аукцион» – это нововведение РУЦЕНТРа – если вы хотите зарегистрировать на себя какое-либо популярное доменное имя и оно вдруг становится доступным для регистрации, то оно будет разыграно на аукционе. Имя держится на аукционе год, после чего снимается.
сети Whois
phone:
+7 095 3631150
fax-no: +7 095 3631150 Whois – вспомогательный информационный сервис, очень e-mail: mihalev@land.ru тесно связанный с DNS, поскольку с его помощью опредеregistrar: RUCENTER-REG-RIPN created: 2002.06.21 ляется, например, занято в настоящий момент доменное paid-till: 2006.06.21 имя или свободно. Описывается он RFC 954. Задача этого source: TC-RIPN сервиса – поиск информации о запрошенном имени на укаLast updated on 2006.05.28 15:03:19 MSK/MSD занном сервере. Любой регистратор, как правило, предоЗа информацией о регистрации сетей, обратных зон ставляет возможность вам воспользоваться этим сервисом, чтобы выполнить поиск информации о каком-либо домене, и выяснения принадлежности IP – в RIPE [3]. Вывод будет сети или персоне. Такой поиск выполняется неявно, когда иметь следующий вид: вы указываете имя домена, которое хотите зарегистриро# whois -r 212.20.5.0/24 вать. В зависимости от сервера, вам могут либо сообщить, что доменное имя занято, либо предложат зарегистрироinetnum: 212.20.5.0 - 212.20.5.255 netname: GRANCH вать имя в другом TLD. Whois отображает только информаdescr: Granch ltd цию, которая находится в открытом доступе. При обращеdescr: Novosibirsk нии к разным серверам информация может выглядеть поdescr: Pisareva str. 53 descr: RU-630005 разному. Например, Network Solutions вставляет в выдаваcountry: RU емую информацию большой рекламный заголовок. admin-c: RNA1-RIPE tech-c: RNA1-RIPE Самый простой путь получения информации через status: ASSIGNED PA whois – воспользоваться соответствующим сервисом, наmnt-by: AS8691-MNT пример в РУЦЕНТРе [8]. Для тех же, кто предпочитает коmnt-by: ROSNIIROS-MNT source: RIPE # Filtered мандную строку, существует команда whois. Для ее использования требуется разблокированный на брандмауНесмотря на то что данная информация уже устареэре порт 43. Существует также простенькая X-версия команды xwhois, требующая Glib. ла, она все еще присутствует в RIPE. Можно запросить инНесмотря на то что обратиться за информацией whois формацию о персоне, указав ее handle для данного сервеможно к большому количеству регистраторов, которые пе- ра (напоминаю, что каждый регистратор имеет свои собсречислены в man whois, практическое значение для нас име- твенные handles): ют только некоторые из них. За информацией об именах # whois -r RNA1-RIPE в зонах .com, .org, .net, .edu, .biz и прочих функциональных зон – в Network Solutions [9]. Вывод будет иметь следующий person: Rashid N Achilov вид (рекламный заголовок опущен): address: Granch Ltd.
# whois -i freebsd.org Registrant: The FreeBSD Project 839 S.E. 209th Ave. Gresham, OR 97030-2235 US Domain Name: FREEBSD.ORG Administrative Contact, Technical Contact: Lawrence, David G. dg@dglawrence.com TriGamma Robotics Corp. 839 SE 209th Ave. Gresham, OR 97030-2235 US 503 660 0199 Record expires on 20-Sep-2006. Record created on 15-May-2002. Database last updated on 28-May-2006 07:14:10 EDT. Domain servers in listed order: NS0.FREEBSD.ORG 216.136.204.126 NS1.IAFRICA.COM 196.7.0.139 NS1.DOWNLOADTECH.COM 209.237.247.3 NS2.DOWNLOADTECH.COM 209.237.247.2
За информацией об именах в зонах .ru, .su – в РУЦЕНТР [8]. Вывод будет иметь совершенно другой вид:
address: address: address: phone: fax-no: e-mail: nic-hdl: source:
DNS считается одной из самых сложных тем при организации сети. И это вовсе неспроста – для понимания его работы требуется многое. Хотя такая относительно простая задача, как создание небольшой зоны, содержащей только ссылки на внешний веб- и почтовый серверы, вполне по силам большинству администраторов. Надеюсь, что прочитав эту статью, вы тоже сможете ее решить. 1. 2. 3. 4. 5.
# whois -c ru samag.ru domain: type: nserver: nserver: state: person:
SAMAG.RU CORPORATE ns0.redline.ru. ns0.ug.ru. REGISTERED, DELEGATED Mikhalyov Alexander Vladimirovich
№7, июль 2006
Pisareva str, 53 RU-630005 Novosibirsk RUSSIA +7 3832 242363 +7 3832 242363 shelton@granch.nsk.su RNA1-RIPE RIPE # Filtered
6. 7. 8. 9.
http://www.isc.org/index.pl?/sw/bind/arm93. ftp://ftp.internic.net/domain/named.root. http://www.ripe.net. http://www.ripe.net/rs/reverse/rdns-project/index.html. Немет Э., Снайдер Г., Сибасс С., Хейн Т.Р. UNIX: руководство системного администратора. Для профессионалов/Пер. с англ. – Спб.:Питер; К.: Издательская группа BHV, 2002. – 928 с.: ил. Cricket Liu, Paul Albitz, DNS and BIND, Third Edition, 1998 (издво O’Reilly, ISBN 1-56592-512-2). http://linuxmafia.com/pub/linux/network. http://www.nic.ru. http://www.networksolutions.com.
77
безопасность
Как увеличить безопасность процессов с помощью chroot и jail
Василий Озеров Chroot и Jail – два разных способа изолировать процесс от основной файловой системы. Где и когда их использовать? Каковы их преимущества и недостатки?
Б
ольшинство сервисов, работаю- чить безопасность системы и протес- ный ущерб от взломанного сервиса, щих в системе, имеют возмож- тировать новое ПО. следует изолировать его от основной При увеличении безопасности про- системы, используя chroot. Тогда серность просматривать структуру всей файловой системы сервера. цесса принципиальное значение име- вис будет иметь доступ только к той Это не всегда безопасно для информа- ют свойства процесса, а именно: с ка- части файловой системы, в которой ции, хранящейся на сервере. Для того кими привилегиями он работает. Если он «заперт». Используя chroot для тестирования чтобы не допустить кражу секретной процесс был запущен от имени обычинформации, были придуманы спо- ного пользователя, то все проблемы ПО, вы можете не бояться за основсобы, позволяющие изолировать про- с безопасностью решаются грамотной ную систему, ведь процесс не может установкой прав на файлы и катало- получить к ней доступ, не говоря уже цесс: chroot и jail. ги. Процесс, запущенный от имени су- об удалении важных файлов. Для того чтобы перенести програмперпользователя, имеет абсолютные Chroot Chroot – операция изменения корне- привилегии в системе, благодаря ко- му с одной системы на другую, не имея вого каталога для текущего процесса торым может выполнять любые дейст- исходных кодов, достаточно перенеси всех его потомков – поможет увели- вия. Для того чтобы снизить возмож- ти все библиотеки, нужные для рабо-
78
безопасность ты программы, и запустить саму программу в chroot-окружении. Думаю, преимущества chroot очевидны. Отмечу недостатки chroot: Увеличивается число копий одних и тех же файлов. Возможность выйти из chroot-окружения (на некоторых ядрах). Первый случай я поясню на примере: мы пытаемся запустить в «песочнице» /bin/sh. Корнем этого процесса сделаем /usr/chroot/. Посмотрим, от каких библиотек зависит sh: # ldd /bin/sh /bin/sh: libedit.so.5 => /lib/libedit.so.5 (0x2808c000) libncurses.so.6 => /lib/libncurses.so.6 (0x280a0000) libc.so.6 => /lib/libc.so.6 (0x280df000)
Так как для sh теперь корнем будет /usr/chroot, то библиотеки должны быть расположены следующим образом (относительно реального корня): /usr/chroot/lib/*. Обратите внимание, что это не все библиотеки, которые необходимо перенести. Очевидно, что нерационально расходуется место на жестком диске. Если же попытаться запустить связку Apache + MySQL + PHP в chroot, то придется переносить чуть ли не больше половины всей системы. А теперь задайте себе вопрос: а действительно ли переносить всю связку так необходимо? Ведь Apache работает не от имени суперпользователя, и главное – правильно выставить права на файлы и каталоги. О возможности выйти из chroot я расскажу чуть позже. Вернемся к нашей теме «Как увеличить безопасность системы с помощью chroot». Я написал небольшую программку на C, которая наглядно демонстрирует работу chroot: #include <errno.h> #include <stdio.h> #include <sys/types.h> int main(void) { char line[255]=""; /* Переменная для названия файла */ chdir("/");/* Перемещаемся в корень */ printf("Enter filename to create: "); scanf("%s", &line); if((fopen(line,"w+") == NULL)) /* Создаем файл */ { perror("Error"); /* Выводим сообщение об ошибке */ exit(1); /* И выходим, если создать файл не удалось */ } }
return 0;
Как вы видите из кода, первым делом мы перемещаемся в кореневой каталог файловой системы, а потом уже там создаем файл. Теперь посмотрим, как будет работать программа в chroot-кружении и без него. Компилируем: # gcc prog.c -o prog # ls -la prog -rwxr-xr-x 1 root wheel 5533 Jun 2 00:52 prog
№7, июль 2006
После этого запустим программу без chroot-окружения и создадим, например, файл chr00t. Проверяем наличие файла «/chr00t», как видно, такого файла не существует: # ls -la /chr00t ls: /chr00t: No such file or directory
Запускаем программу: # ./prog Enter filename to create: chr00t
Опять проверяем наличие файла «/chr00t», как видно, файл успешно был создан: # ls -la /chr00t -rw-r--r-- 1 root wheel 0 Jun 2 00:54 /chr00t
Очистим рабочее пространство для будущих экспериментов: # rm -f /chr00t
Теперь запустим нашу программу в chroot-среде, но для этого предварительно необходимо создать нужное нам дерево каталогов и перенести туда соответствующие файлы. Создаем дерево каталогов. В частности, папки lib и libexec для нужных библиотек: # mkdir -p /usr/chroot/{lib,libexec}
Переносим нашу программу в /usr/chroot: # cp ./prog /usr/chroot/
Смотрим, с чем связана наша программа: # ldd /usr/chroot/prog /usr/chroot/prog: libc.so.6 => /lib/libc.so.6 (0x28074000)
Копируем необходимые библиотеки: # cp /lib/libc.so.6 /usr/chroot/lib/
Библиотека ld-elf.so.1 нужна для запуска бинарных файлов формата elf: # cp /libexec/ld-elf.so.1 /usr/chroot/libexec/
После того как все предварительные шаги сделаны, можно запускать нашу программу в chroot-окружение, но перед этим проверим наличие файла в /usr/chroot и в /. Следующие две команды проверяют наличие файла в /usr/chroot и в /: # ls -la /chr00t
ls: /chr00t: No such file or directory
79
безопасность # ls -la /usr/chroot/chr00t ls: /usr/chroot/chr00t: No such file or directory
Вот как этот алгоритм выглядит на C (этот код нужно вставить после строки chdir(“/”) в предыдущей программе):
Запускаем нашу программу в изолированной среде:
mkdir("tmp", 0755); /* Создаем временную директорию */ dir_fd = open(".", O_RDONLY); /* Открываем текущую директорию */
# chroot /usr/chroot/ /prog
chroot("tmp"); /* Меняем корневую директорию для процесса*/
Enter filename to create: chr00t
Проверяем наличие файла в корневом каталоге процесса: # ls -al /usr/chroot/chr00t -rw-r--r-- 1 root wheel 0 Jun 2 00:56 /usr/chroot/chr00t
# ls -la /chr00t ls: /chr00t: No such file or directory
Как видите, файл успешно создался не в настоящем корне системы, а в корневом каталоге для данного процесса. На этом примере прекрасно видно, что процесс, «посаженный в песочницу», не имеет доступа ко всей файловой системе, а только к /usr/chroot/.
Выход из chroot-окружения Как я уже писал ранее, возможен обход chroot-окружения, но для этого одновременно должны выполняться два условия: Процесс должен работать под правами суперпользователя. Ядро должно поддерживать вложенные chroot-вызовы.
fchdir(dir_fd); /* Частично выходим из chroot, поднимаясь на уровень вверх */ close(dir_fd); /* Закрываем дескриптор директории */ for(n = 0; n < 1024; n++) { chdir(".."); /* Поднимаемся на уровень выше */ } chroot("."); /* Меняем корневой каталог процесса на настоящий */
Код достаточно прокомментирован, поэтому разобраться в нем не составит труда. Итак, запустим новую программу на FreeBSD 4.6. Проверяем наличие файла «/chr00t», такого файла нет: # ls -la /chr00t ls: /chr00t: No such file or directory
Создаем папки для библиотек: # mkdir -p /usr/chroot/usr/{lib,libexec}
Компилируем программу: # gcc break_chroot.c -o /usr/chroot/break_chroot
Копируем необходимые библиотеки: Запускаем нашу программу под правами суперпользователя, поэтому одно из условий уже соблюдается. Со вторым условием потруднее. Я протестировал свою программу для выхода из chroot на следующих системах: FreeBSD 6.0/6.1 FreeBSD 5.4 FreeBSD 4.6
# cp /usr/lib/libc.so.4 /usr/chroot/usr/lib/ # cp /usr/libexec/ld-elf.so.1 /usr/chroot/usr/libexec/
Запускаем программу в chroot-среде: # chroot /usr/chroot/ /break_chroot Enter filename to create: chr00t
Проверяем наличие файла «/chr00t»: И только четвертая версия ОС FreeBSD выпустила ме# ls -la /chr00t ня за пределы chroot, а следовательно, из chroot в системах FreeBSD 5.x/6.x выйти невозможно, по крайней мере -rw-r--r-- 1 root wheel 0 Jun 2 00:56 /chr00t мне не удалось. Но я все же расскажу о выходе из «песочницы». Для этоКак хорошо видно, файл был создан не в chroot-окружего процессу необходимо выполнить следующие действия: нии, а в настоящем корневом каталоге файловой системы. Создать временную(tmp) директорию в текущем рабо- Чтобы не дать выйти программе за пределы chroot-окружечем каталоге. ния, следует использовать функции setuid, setgid для изме Открыть временную директорию (нужно, только если нения EUID, EGID-процесса. Так как вызов chroot может быть вызван только суперпользователем, то программа просто вызов chroot меняет текущую рабочую директорию). Изменить корневой каталог на временную директорию не сможет сделать еще один chroot. вызовом chroot. Использую fchdir выйти из chroot-окружения (нужно, Тестирование ПО с помощью chroot только если вызов chroot меняет текущую рабочую ди- Если нужно протестировать какую-нибудь программу, ректорию). а под рукой нет тестового компьютера, то проще всего бу Много раз выполнить chdir(“..”) для перемещения в ре- дет создать себе изолированную систему для тестов, исальный корень файловой системы. пользуя chroot. Сразу предупреждаю: создать полноцен Изменить корневой каталог процесса на текущий ную систему с помощью chroot не получится, для этого при(chroot(“.”)), то есть реальный корень. меняется jail.
80
безопасность Давайте теперь попробуем запустить sh в chroot, для тестирования ПО. Создаем папки для упешного применения chroot для sh: # mkdir /usr/chroot/{bin,sbin,lib,libexec,usr} # mkdir /usr/chroot/usr/{bin,sbin,lib,libexec}
Давайте определимся:
Домен – UNIX. Компьютер, на котором производится установка виртуальной машины – satdevil.unix.(172.16.0.200).
Виртуальная машина – evil.unix.(172.16.0.199). DNS-сервер – dns.unix.(172.16.0.1).
Копируем нужные бинарные файлы: # # # #
cp cp cp cp
/bin/* /usr/chroot/bin/ /sbin/* /usr/chroot/sbin/ /usr/sbin/* /usr/chroot/usr/sbin/ /usr/bin/* /usr/chroot/usr/bin/
Копируем необходимые библиотеки: # # # #
cp cp cp cp
-r /lib/* /usr/chroot/lib/ /libexec/* /usr/chroot/libexec/ -r /usr/lib/* /usr/chroot/usr/lib/ -r /usr/libexec/* /usr/chroot/usr/libexec/
Запускаем sh в chroot: # chroot /usr/chroot/ /bin/sh
Теперь посмотрим, что у нас в корне. Из вывода ls прекрасно видно, что настоящий корень – /usr/chroot. # ls -la total 16 drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x
Чтобы понимать, на какой машине происходит действие, приглашение командного интерпретатора будет выглядеть следующим образом: «hostname#».
Создание виртуальной машины Создаем директорию, где будет находиться виртуальная машина: satdevil# mkdir /usr/local/evil
Собираем и устанавливаем «мир» в только что созданную директорию: satdevil# cd /usr/src satdevil# make world DESTDIR=/usr/local/evil
Теперь установите конфигурационные файлы, скрипты и т. д. в каталог: satdevil# make distribution DESTDIR=/usr/local/evil
7 7 2 3 2 2 6
0 0 0 0 0 0 0
0 512 Jun 1 21:49 . 0 512 Jun 1 21:49 .. 0 1024 Jun 1 21:49 bin 0 1024 Jun 1 21:49 lib 0 512 Jun 1 21:50 libexec 0 2560 Jun 1 21:49 sbin 0 512 Jun 1 21:49 usr
# pwd /
Мы скопировали библиотеки не только для sh, но и для остальных утилит, которыми мы будем пользоваться, например ls и pwd. Предыдущий пример использования chroot не очень удачный, так как chroot не создан для виртуализации системы. Для этого используется механизм jail, который является родным для FreeBSD, следовательно, продуман jail намного лучше, нежели chroot.
Jail Механизм jail позволяет администратору делить полноценную FreeBSD-систему на маленькие подсистемы, которые называются jail (тюрьмами). В каждой такой «тюрьме» находятся свои процессы, файлы, аккаунты. Благодаря этому механизму можно увеличить безопасность системы и создать виртуальные машины. Я бы не хотел повторяться, рассматривая примеры, которые были применены к chroot, поэтому сейчас я расскажу о том, как создать виртуальную машину с помощью jail. Итак, в первую очередь необходимо настроить DNS-сервер. Так как статья посвящена безопасности, то настройку сервера имен я здесь не описываю. Но имена машин нам понадобятся.
№7, июль 2006
Чтобы настроить нашу виртуальную машину, запустим в ней /bin/tcsh. Общий вид команды jail выглядит так: // jail <путь_к_новому_корню> <hostname> <ip_address> <команда>
команда указывается относительно нового корня. satdevil# jail make /usr/local/evil distribution DESTDIR=/usr/local/evil evil 172.16.0.199 /bin/tcsh
Теперь мы находимся в нашей новой системе. Для настройки можно воспользоваться sysinstall, но я буду использовать командный режим, а не графический. Первым делом создаём пустой файл /etc/fstab, это нужно для предотвращения ошибок при загрузке системы. evil# touch /etc/fstab
Теперь настроим автозагрузку. Отключаем rpcbind, который на виртуальной машине не нужен: evil# echo rpcbind_enable="NO" > /etc/rc.conf
Отключаем конфигурирование интерфейсов, дабы избежать ошибок, связанных с ifconfig: evil# echo network_interfaces="" >> /etc/rc.conf
Включаем sshd для удаленного управления виртуальной машиной: evil# echo sshd_enable="YES" >> /etc/rc.conf
81
безопасность Редактируем resolv.conf для нормального определения dns имен. Добавляем primary dns сервер и домен. evil# echo domain Unix > /etc/resolv.conf evil# echo nameserver 172.16.0.1 >> /etc/resolv.conf
Создаем базу алиасов для sendmail, опять-таки чтобы избежать ошибок при запуске sendmail: evil# newaliases
Теперь настраиваем timezone. Для Москвы это будет выглядеть так: evil# cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Задаем пароль суперпользователю в виртуальной машине. Напоминаю, что root в виртуальной системе и root на основной системе – два совершенно разных пользователя, никаким образом не зависящих друг от друга. evil# passwd Changing local password for root New Password: Retype New Password:
Давайте создадим нового пользователя, для удаленного администрирования сервера: evil# pw useradd fr33man -s /bin/tcsh -m -d /home/fr33man/
Зададим пароль пользователю: evil# passwd fr33man Changing local password for fr33man New Password: Retype New Password:
Выходим из виртуальной машины: evil# exit
Теперь необходимо подготовить основную систему. Прежде всего сделаем alias адреса 172.16.0.199 на адрес 172.16.0.200. rl0 – имя интерфейса с адресом 172.16.0.200: satdevil# ifconfig rl0 inet alias 172.16.0.199/32
Создаем proc filesystem, необходимую для работы ядра и процессов: satdevil# mount -t procfs proc /usr/local/evil/proc
Jail хорошо продумана во FreeBSD, поэтому запускать мы ее будем не из командной строки, как chroot, а с помощью специального скрипта, расположенного в /etc/rc.d/. При запуске скрипт считывает данные из /etc/rc.conf. Все действия производим на satdevil. Добавляем в rc.conf:
82
// Включаем jail jail_enable="YES" // Список «тюрьм», находящихся на данной машине. // Если тюрьм несколько, то перечисление их идет // через пробел jail_list="evil" // Запрещаем смену hostnam в jail jail_set_hostname_allow="NO" // Разрешаем использовать процессам только домены // PF_LOCAL, PF_INET, PF_ROUTE jail_socket_unixiproute_only="YES" // Далее идет описание конкретной «тюрьмы», // в нашем случае это evil // Задаем корневой каталог jail_evil_rootdir="/usr/local/evil/" // Указываем имя запускаемой виртуальной машины jail_evil_hostname="evil.unix" // Указываем IP-адрес виртуальной машины jail_evil_ip="172.16.0.199" // Указываем, что именно запустить в «тюрьме». // Команда /bin/sh /etc/rc приведет к инициализации // и запуску системы jail_evil_exec="/bin/sh /etc/rc" // Разрешаем использование файлов устройств jail_evil_devfs_enable="YES"
После редактирования осталось только запустить jail. Делается это командой: satdevil# /etc/rc.d/jail start
При первом запуске придется немного подождать, чтобы создались все необходимые файлы и запустились необходимые сервисы. Вот и все. Мы настроили виртуальную машину. Теперь, чтобы попасть в нее, достаточно сделать следующее: $ ssh evil.unix -l fr33man
Гланое – найти золотую середину Jail можно использовать как и для разделения основной системы на несколько маленьких, так и для увеличения безопасности путем помещения заведомо опасных процессов в «тюрьму». Если вы используете FreeBSD, то лучше использовать jail, чем chroot по нескольким причинам: Jail хорошо продуман во FreeBSD, и с его помощью, вы сможете решить любую задачу по изоляции процесса, вплоть до виртуализации системы. Chroot возможно обойти, да и продуман он не так хорошо, как jail. Также не забывайте и о превосходной системе прав в UNIX, которая позволяет решить практически любую проблему, связанную с безопасностью. Тем более если процесс не работает от имени суперпользователя. С jail тоже не следует переусердствовать: если у вас слишком много виртуальных машин, то проще парочку из них вынести на настоящие машины. Главное – найти золотую середину.
ретроспектива
Попытка изменить мир: хроники компании NeXT
Дмитрий Мороз NeXT относится к числу немногих тёмных лошадок компьютерной истории. Слухи об этой компании перестали циркулировать сразу же после её исчезновения. Тем не менее наследие, оставленное NeXT, очень внушительно и её история не должна быть забыта.
Мы хотели продолжать то, что делали в Apple – изменять мир (Стив Джобс) Любое творение гениального Стива Джобса можно назвать уникальным. Вспомните Apple. Эта компания не нуждается в саморекламе. Её продукция всегда считалась «электроникой, наделённой душой». Однако Джобс – основатель не только Apple. В своё время благодаря его усилиям в свет вышли компании Pixar и NeXT. Правда, если первая известна своими мультфильмами на весь мир, то о второй слышали лишь немногие, интересующиеся историей вычислительной техники.
84
Компьютеры, производившиеся ников начала – середины 90-х годов NeXT Inc., можно назвать уникальными прошлого столетия, а также обрабатыи очень редкими. Это и неудивитель- вали метеорологические данные и соно, ведь за всю историю существова- ставляли прогноз погоды. Компьютерния компании было продано немногим ные игры Doom и Quake, а также перболее 50 тысяч компьютеров. вый веб-браузер были созданы на этой Ко м п ь ю т е р ы N eX T п р и м е н я - платформе. лись в Национальном Аэрокосмическом Агентстве (говорят, что они вне- Превращение идеи сли свою лепту в подготовку к уста- в реальность новке и работе космического телеско- 1985 год. Компания Apple Computer. па «Хаббл»), секретной военной базе Джон Скалли, приглашённый в 1983 «Зона 51» в штате Невада, ЦРУ и дру- году Стивом Джобсом на пост управгих организациях. С их помощью уп- ляющего директора компании, постеравляли противовоздушными ракет- пенно захватил власть и стал более ными комплексами «Патриот», дела- влиятельным человеком, чем её осли расчёты для оптимальных траекто- нователь. Дабы, по его словам: «Зарий большинства американских спут- ставить компанию двигаться даль-
ретроспектива ше, что при Джобсе было невозможно», 10 апреля при поддержке совета директоров Скалли отстранил его от управления компанией. Стив Джобс всё ещё оставался членом этого совета, но в реальности никаких решений больше принимать не мог. Продав часть принадлежавших ему акций на сумму 20 млн. долларов, он съездил на отдых во Францию и Италию и вернулся в Америку, полон сил и энергии, готовый вновь «изменить мир». Теперь самое время перейти к рождению компании NeXT, идея которой пришла Джобсу… за завтраком. В начале сентября 1985 года Стив завтракал вместе с лауреатом Нобелевской премии, биохимиком Стэндфордского университета Полом Бергом. Во время трапезы учёный рассказывал Джобсу о своих исследованиях ДНК и о трудностях, с которыми сталкиваются при этом он со своей командой. На его вопрос об использовании компьютера в качестве средства для ускорения моделирования экспериментов Берг ответил, что, к сожалению, большинство университетов не располагают необходимыми компьютерными мощностями и соответствующим программным обеспечением. «Вот тогда я и начал развивать эту идею дальше», – вспоминает Джобс. В его голове чётко сформировался образ идеального компьютера для высших учебных заведений, способный, подобно Macintosh в 1984 году, стать новым «открытием» в учебном и исследовательском процессах. Несколькими днями позже, 13 сентября, он проинформировал совет директоров Apple о том, что принял решение покинуть компанию и основать новую. При этом Джобс пообещал, что ни в коем случае не собирается конкурировать с Apple и что его цель – рынок образования, конкретнее – высших учебных заведений. Единственное, что попросил Стив, – возможность взять с собой пару сотрудников Apple «низшего звена», после чего его след исчезнет навсегда. Совет директоров сразу же согласился и при этом пообещал купить в будущем 10% акций новой компании Джобса. На том и порешили. Однако уже на следующий день Скалли, увидев фамилии пяти человек, которых Джобс хотел увести с со-
№7, июль 2006
Рисунок 1. Скриншот первого веб-браузера, разработанного Тимом Бернерсом-Лии
бой, запротестовал, поскольку все компания судится со своими создатеони занимали довольно большие пос- лями. «Мне сложно объяснить, почеты: Даниель Левин – маркетинг-ме- му Apple с годовым оборотом более неджер Apple в секторе образования, 2 млрд. долларов и персоналом боБад Трайббл – руководитель отдела лее 4300 сотрудников боится шести разработки программного обеспече- человек в синих джинсах», – говорил ния, Сьюзен Бернес – глава отделе- по этому поводу Джобс. Первоначально он вложил в новую ния Apple по продажам на рынке США, а также Рич Пейдж и Джордж Кроу, яв- компанию 7 млн. долларов личных сбелявшиеся одними из лучших инжене- режений. Первые 100 тыс. долларов ушли на создание логотипа NeXT Inc, ров компании. Впоследствии Apple подала иск над которым работал 71-летний пропротив новоиспечённой NeXT Inc., мо- фессор Йельского университета Пол тивируя своё решение тем, что «лю- Ренд, известный в Америке дизайнер ди, ушедшие в новую компанию, рас- и автор логотипов компаний ABC, IBM, полагают секретной информацией UPS и Westinghouse. В июне 1986 он относительно ещё не анонсирован- представил Стиву результат. Изначально Джобс планировал ных продуктов, их стоимости, а также фамилий «независимых» людей, ко- сделать NeXT Inc. исключительно часторые будут помогать Apple в рекламе». 17 сентября Джобс сделал ответный ход – разослал копии бланка регистрации новой компании (позже переименованной в NeXT Computer Inc., однако в статье для краткости я буду использовать оригинальное название) во многие СМИ, а также пригласил представителей прессы в свой особняк в городке Вудсайд, где публично объявил, что ушёл из Apple и больше не имеет с этой компанией ничего общего. Судебный иск против NeXT Inc. просуществовал недолго. Главным образом из-за того, что сама Apple боялась таким образом навредить собственноРисунок 2. Стив Джобс возле му имиджу. Всё-таки не каждый день NeXT Computer
85
ретроспектива
Рисунок 3. NeXT Computer собственной персоной
Рисунок 4. Материнская плата NeXT Computer
тной компанией, владельцами которой будут её же сотрудники. Однако уже в 1987 году семь миллионов, вложенные Джобсом, иссякли. Необходимость в дополнительных капиталовложениях заставила его искать потенциальных инвесторов. И опять помог случай. В ноябре 1986 года в свет вышел документальный фильм «Предприниматели», в котором Стив Джобс разглагольствовал о причинах, побудивших его к основанию NeXT, о будущем чудо-компьютере, а также рынке, на который он нацелен. В этом же фильме говорилось и о дате выпуска системы – весна 1987 года, а также о цене, которая, по-прежнему не должна была превышать 3 тыс. долларов. Этот документальный фильм посмотрел и мультимиллионер Росс Перот, заработавший состояние продажей своей компании Electronic Data System. Компания Стива Джобса, а также цель, которой она добивалась, настолько потрясли Перота, что тот сразу же позвонил основателю NeXT Inc. и сказал: «Если вам когда-нибудь понадобится инвестор, звоните мне». Перот был настолько уверен в будущем успехе компании, что за 16% акций инвестировал в NeXT Inc. 20 млн.
86
долл. В то время, по оценкам экспер- тирования отодвинули срок появления тов, её стоимость составляла 30 мил- чипа на несколько лет. Поэтому было решено идти по пулионов. Стоит отметить, что Перот до этого отказался от предложения при- ти наименьшего сопротивления и исобрести молодую, но амбициозную пользовать широко распространённый компанию Microsoft. процессор Motorola 68030, который в то Благодаря ещё двум инвесторам, время являлся сердцем компьютеров Стэндфордскому университету и Уни- Macintosh, а также первых моделей раверситету Карнеги-Мелона, оценочная бочих станций Sun Microsystems. стоимость компании достигла 126 млн. Поскольку будущий компьютер долларов. При этом Джобс владел по замыслу Джобса должен был экс63% акций NeXT Inc. Совет директоров плуатироваться в университетах в какомпании состоял всего из трёх чело- честве основного устройства для провек: собственно Стива Джобса, Росса ведения различных исследований, арПерота и ректора Университета Кар- хитектура NeXT Computer (так позже была названа новая система) изнанеги-Мелона Пэта Кресина. чально предполагала наличие встроенного цифрового сигнального проНовый чудо-компьютер Ещё в начале становления NeXT Inc. цессора, обрабатывавшего звук и явв компании стартовал проект по со- лявшегося главным инструментом зданию «идеального» компьютера для при проведении различного рода исвысших учебных заведений. Для это- следований и экспериментов. Кроме го Джобс вместе с инженерами объ- того, для устранения «бутылочных горехали несколько университетов, что- лышек» в архитектуре компьютера инбы узнать, что именно хотят студенты женерами NeXT Inc. были разработаи профессора. ны две специальные микросхемы конОсновным критерием, кроме высо- троллеров ввода/вывода, предназнакой производительности и расширяе- ченных для управления внутренними мости, являлась цена: будущий ком- шинами данных. Один из чипов также пьютер не должен был стоить больше содержал контроллер прерываний. Однако главной особенностью 3 тыс. долларов. Ориентиры были поNeXT Computer являлся магнитооплучены, и работа закипела. Первоначально в качестве сердца тический (сокращённо – МО) привод, будущего компьютера инженеры NeXT единственный в системе. В то время планировали использовать RISC-про- объём жёстких дисков едва перевацессор 88000, однако трудности ком- лил за несколько сотен мегабайт, к топании Motorola в процессе его проек- му же они стоили очень дорого, а опе-
Рисунок 5. Скриншот NEXTSTEP 0.8
ретроспектива рационная система NEXTSTEP, о которой мы поговорим позже, занимала 200 Мб (1987 год!). Поэтому инженеры были вынуждены искать другой путь. Решение пришло в лице компании Canon и её новой и революционной разработки – магнитооптической технологии. Записывание информации в ней производится при помощи луча лазера и магнитного поля, а считывание – при помощи одного только лазера. Благодаря большому объёму записываемой и хранимой информации (256 Мб) этот привод был как раз тем, что искали инженеры NeXT Inc. Стоит отдельно поговорить и о внешнем виде NeXT Computer. Идеей Джобса было сделать корпус компьютера в форме идеального куба со сторонами чуть больше 30 см (12 дюймов). Дизайном занималась компания Frog Design, зарекомендовавшая себя созданием внешнего вида оригинального Macintosh. Корпус NeXT Computer состоял из чистого магния и был покрашен в чёрный цвет, делая из компьютера вершину дизайнерской мысли, однако при этом «накручивая счётчик» цены, которая позже ещё сыграет с NeXT Inc. злую шутку.
Рисунок 6. Компьютер NeXT Station
Топливо для двигателя Параллельно с разработкой нового компьютера стартовала работа и над операционной системой. Первоначально инженеры планировали лицензировать какую-нибудь из уже существующих ОС. Решение использовать UNIX в качестве операционной системы для NeXT Computer было принято самим Джобсом. «Я верю в нижесказанное всеми косточками своего тела: в 90-х UNIX станет основной операционной системой каждой уважающей себя компании», – заявлял он. Однако ни SunOS, ни другие вариации UNIX, предполагавшиеся в качестве вариантов, так и не подошли, в результате чего было принято решение разработать ОС с чистого листа. Ядром для будущей операционной системы, названной NEXTSTEP, выступило основанное на базе UNIX 4.3 микроядро Mach, разработанное в Университете Карнеги-Мелона. Его создатель, Ави Теваньян, позже был завербован Джобсом в NeXT Inc., став главным руководителем команды по разработке NEXTSTEP.
№7, июль 2006
Рисунок 7. Компьютер NeXT Cube
Однако микроядро Mach не являлось единственной отличительной особенностью этой ОС. Ещё в 1986 году NeXT Inc. начала работать с компанией Adobe над проектом Display PostScript. Джобса не удовлетворяла методика, использованная в компьютерах Macintosh: информация на экране компьютера отображалась с использованием библиотеки QuickDraw, тогда как при печати документов был задействован язык описания страниц PostScript. В результате напечатанная страница зачастую имела совсем другой вид, нежели выводимая на экран. Поэтому он договорился с Adobe о том, чтобы сделать их технологию частью операционной системы. Оконный менеджер
NEXTSTEP под названием Workspace Manager включал в себя интерпретатор Display PostScript – технологии, основанной на языке описания страниц PostScript. Благодаря этому пользователь всегда мог быть уверен, что информация, которую печатает принтер, будет в точности соответствовать выводимой на экран. Следующей особенностью NEXT STEP являлась её объектная ориентированность. Ещё до своего ухода из Apple Джобс был впечатлён возможностями стартовавшего в недрах компании проекта под кодовым названием «Розовый» (Pink), заключавшегося в создании объектно-ориентированной ОС для Macintosh (к сожале-
87
ретроспектива
Рисунок 8. Видеоплата NeXT Dimension
Рисунок 9. Прототип дополнительной платы для NeXT Dimension для сжатия видеопотока с чипом CL550
нию, эта ОС так и не увидела свет). Поэтому NEXTSTEP изначально планировалась как объектно-ориентированная операционная система, в которой лёгкое микроядро взаимодействовало с отдельными библиотеками, каждая из них отвечала за определённые функции ОС. Изначально в состав NEXTSTEP входили несколько библиотек: Application Kit (работа с приложениями), Music Kit (музыка), Sound Kit (звук). Позже были добавлены и другие библиотеки, например: 3d-Graphics Kit (работа с трёхмерной графикой), Database Kit (базы данных) и Driver Kit (работа с драйверами устройств). Кстати, в середине 90-х годов прошлого столетия из NeXT Inc. в молодую тогда компанию Be Inc. ушли несколько программистов, которые принесли в операционную систему BeOS концепцию отдельных библиотек с названиями, похожими на таковые в NEXTSTEP. В качестве основного языка программирования для этой ОС был использован Objective-C, объектно-ориентированный вариант языка С.
Выход NeXT Computer в свет Шёл 1988 год. Создание нового чудокомпьютера продолжалось на протяжении двух лет, однако до завершения работ было ещё далеко. Обещание Джобса представить NeXT Computer весной 1987 года кануло в Лету. К тому времени NeXT Inc. подписала стратегическое соглашение с кор-
88
порацией IBM, согласно которому в бу- Но компьютер стоил значительно додущем NEXTSTEP будет перенесена на роже планируемого – 6,5 тыс. доллаеё рабочие станции. В свою очередь ров. Если же пользователь хотел ос«Голубой гигант» вложил в компанию настить компьютер жёстким диском Джобса 60 млн. долларов. (а это было просто необходимо, посНаконец, 12 октября 1988 года чу- кольку при времени реакции МО-придо-компьютер был представлен пуб- вода, равном 97 мс, работа с ОС прелике. «Я, наверное, говорю от имени вращалась в адские муки), а также всех сотрудников NeXT Inc.: «Как здо- принтером NeXT Laser Printer, цена рово вернуться назад!», – начал своё всей системы зашкаливала за 10 тыс. выступление Стив Джобс. После трёх- долларов. Американские колледжи и универчасовой речи на глазах у 4500 человек Джобс продемонстрировал «новый ситеты, для которых предназначался Macintosh» – NeXT Computer. компьютер, не спешили расставаться Характеристики новинки говорили со столь большими суммами. Если же сами за себя: процессор 68030, рабо- покупка и осуществлялась, то колитающий на частоте 25 МГц, математи- чество приобретённых NeXT Computer ческий (68882) и цифровой сигналь- не превышало и двух десятков. В реный (56001) процессоры, 8 Мб опера- зультате специально построенная для тивной памяти (максимально 16 Мб), изготовления NeXT Computer полномагнитооптический привод и, наконец, стью автоматизированная фабрика «оконный UNIX». Монохромный (4 от- NeXT Inc. выпускала всего 400 комтенка серого цвета) монитор для это- пьютеров в месяц. Джобс понимал, что с такими усго компьютера был изготовлен на основе 17-дюймовой электронно-луче- пехами его компания долго не провой трубки Trinitron производства Sony существует, и поэтому принял решеи имел гигантское по тем временам ние начать продавать NeXT Computer разрешение – 1120 х 832 пикселей. всем желающим (изначально купить Вместе с NeXT Computer зрите- его могли только учебные учрежлям был представлен лазерный при- дения и студенты). Для этого NeXT нтер NeXT Laser Printer, внутренне яв- Inc. подписала договор с компанией лявшийся практически полной копи- Businessland, являвшейся в то время ей LaserWriter II производства Apple. крупнейшим продавцом компьютеров При разрешении 400 точек на дюйм на территории США. Businessland плаустройство печатало до восьми стра- нировала реализовать в первый год 10-15 тысяч систем, что в денежном экниц в минуту. Публика, присутствовавшая в Кон- виваленте должно было составить окоцертном зале симфонического оркес- ло 150 млн. долларов. Согласитесь, дотра Сан-Франциско, была настолько вольно оптимистичные прогнозы и непоражена, что устроила Джобсу ова- малая сумма. Но базовая цена на NeXT цию. Реакция прессы была также оче- Computer, предлагаемый Businessland, видна. «Это поистине великая систе- составила 9995 долларов. В результама, которая по праву займёт почётное те к концу 1989 года компания смогла место на пике всех существующих ны- продать лишь 360 компьютеров. Поне компьютеров», – писали Том Томсон пытка выхода «в свет» закончилась и Ник Берен в статье о NeXT Computer провалом. Фабрика по производству для журнала «Byte». NeXT Computer теперь выпускала всеОднако новый компьютер имел го 100 систем в месяц. ряд серьёзных недостатков, главным NeXT Inc. спасал лишь тот факт, что из которых являлась незаконченная она являлась частной компанией, пооперационная система NEXTSTEP, этому имела право не разглашать рекоторая к моменту презентации NeXT зультаты своей финансовой деятельComputer «добралась» лишь до вер- ности. В итоге лишь немногие знали, в сколь плачевной ситуации она пресии 0.8. Спустя некоторое время после пре- бывала. В июне 1989 года Canon, тесно созентации компания начала поставки ограниченного количества компьюте- трудничавшая с NeXT Inc., инвестиров первым клиентам, устанавливая ровала в компанию 100 млн. долл. на них бета-версию NEXTSTEP 0.9. в обмен на 16,7% акций, а также экс-
ретроспектива клюзивное право на продажи NeXT Computer в странах Азиатского континента. Эта сумма подняла оценочную стоимость NeXT Inc. до гигантских 600 млн. долл. Однако в то время в компании работали всего 200 сотрудников, а о доходе не могло быть и речи.
Призрачная надежда Что же касается новых разработок, в конце 1989 года состоялся долгожданный выпуск версии 1.0 операционной системы NEXTSTEP. Главным её нововведением стало появление пакета для разработки приложений Interface Builder, являвшегося аналогом современных сред визуального программирования. Не стояли в сторонке и инженеры компании. В январе 1990 года в NeXT Inc. стартовал проект «Основа 9» (Warp 9), целью которого являлась переработка NeXT Computer для снижения цены до изначально планировавшихся 3 тыс. долл. Через месяц после старта «Основы 9», не выдержав всё возрастающего напряжения внутри компании, NeXT Inc. покинули первые сотрудники. Среди них был Даниель Левин – один из пятёрки первых инженеров Apple, завербованных Джобсом. Сам проект, несмотря на потраченные на него шесть месяцев, оправдал себя, и 18 сентября 1990 года NeXT Inc. объявила о выпуске сразу трёх новых моделей своих компьютеров, а также NEXTSTEP 2.0. NeXT Station представляла собой результат «Основы 9»: компьютер, по своим характеристикам отличавшийся от NeXT Computer более быстрым процессором 68040, работающим на частоте 25 МГц, возможностью установки до 32 Мб ОЗУ (стандартно – 8 Мб), а также штатными флоппидисководом и жёстким диском. Миниатюрный корпус NeXT Station, над дизайном которого работала Frog Design, имел размеры всего 397 х 364 х 64 мм. Правда, цена всё равно была выше планируемой – 4995 долл. Заплатив на три тысячи больше, пользователь получал NeXT Station Color, которая, кроме увеличенного до 12 Мб объёма оперативной памяти, отличалась наличием в комплекте нового 16-дюймового монитора, способного отображать 4096 цветов.
№7, июль 2006
Отличие NeXT Cube (7995 долл.) от NeXT Station заключалось лишь в возможности установки до 64 Мб ОЗУ (штатно – 16 Мб), слотах расширения NeXTbus, а также возможности установки видеоадаптера NeXT Dimension. Последний наделял NeXT Cube возможностью работать с 32-битным цветом. Внешне же он ничем не отличался от NeXT Computer. К сожалению, трудности компании Motorola с выпуском процессора 68040 привели к задержке старта продаж новых компьютеров до марта 1991 года. Что же касается нововведений NEXTSTEP 2.0, стоит отметить появившуюся файловую систему NFS (Network File System) компании Sun Microsystems, поддержку дисководов, CD-ROM, факсов, и модемов. Кроме того, был переработан и улучшен оконный менеджер Workspace Manager. После того как в 1990 году корпорация IBM объявила о прекращении сотрудничества с NeXT Inc. и подписании нового контракта с Apple, Росс Перот начал обвинять Джобса в пустой трате денег и производстве компьютеров собственными силами компании. Особенно его вывели из себя результаты финансового квартала 1991 года, когда доход, составивший 28 млн. долларов, после изымания налогов и прочих издержек превратился в чистый «ноль». На протяжении шести лет своего существования компания работала себе в убыток. К концу второго квартала, несмотря на увеличившийся до 46 млн. долларов доход, продажи NeXT Inc. упали на 50%, и разочарованный Росс Перот ушёл из компании, продав свои 16% акций. «Я не должен был давать им деньги. Это была самая большая ошиб-
Рисунок 10. Сторонними компаниями для компьютеров NeXT было выпущено несколько плат-акселераторов. На снимке – NeXT Nitro с 40 МГц процессором 68040
ка в моей жизни», – говорил он тогда. В результате Джобсу пришлось вложить дополнительные 10 млн. долларов в свою компанию. Подобные вложения сделала и Canon, расставшись с 55 миллионами. Однако весь мир был в неведении о трудностях NeXT Inc. Джобс разглагольствовал о «светлом будущем» своей компании и предпочитал вместо цифр о финансовом состоянии своей компании говорить о будущих новинках. 22 января 1992 года в Сан-Франциско NeXT Inc. организовала первую выставку NeXT World, на которой представила NEXTSTEP 3.0 и NEXTSTEP 486. Новая ОС поддерживала 7 мировых языков, имела новые библиотеки для работы с 3D-графикой и базами данных, а также поставлялась с полной копией пакета RanderMan компании Pixar (которую Джобс приобрёл у LucasFilm ещё в 1986 году). ОС NEXTSTEP 486 (с выходом Pentium позже переименованная в NEXTSTEP for Intel Processors) предназначалась для работы с ПК и была ответом Microsoft на выпуск Windows 3.1. NeXT Inc. также представила более дешёвые Turbo-версии своих компьютеров (оснащённых процессорами 68040 с частотой 33 МГц), однако всё было напрасно. К концу года компанию покинули женившиеся Бад Трайббл и Сьюзен Бернес, а также Рич Пейдж. Из пятёрки первых сотрудников NeXT Inc., завербованных Джобсом из Apple, остался лишь Джордж Кроу. Главная же неожиданность ждала Стива в середине 1992 года. Питер ван Кайленберг, нанятый им в марте на пост исполнительного директора, предал Джобса, тайно предложив президенту Sun Скоту МакНили купить NeXT Inc., уволить Стива и отдать ему пост генерального директора. Однако честный МакНили предварительно позвонил Джобсу и предупредил о предложении. Ван Кайленберг был с позором выкинут из компании, однако основатель NeXT Inc., наконец, не выдержал и сдался.
«Чёрный вторник» 10 февраля 1993 года (впоследствии названный «чёрным вторником») NeXT Inc. официально объяви-
89
ретроспектива
Рисунок 11. Скриншот OpenStep
ла, что из-за катастрофических убыт- правила бал компания Sun. Последков, составивших 250 млн. долларов, няя была обеспокоена возможностью прекращает производить компьюте- возникновения нового серьёзного соры и отныне будет концентрировать- перника. 23 ноября 1993 года компания Sun ся лишь на совершенствовании и продвижении на рынок NEXTSTEP. В свя- подписала с NeXT Inc. договор, согласзи с этим компания изменила своё на- но которому объектно-ориентированзвание на NeXT Software Inc., а также ное окружение NEXTSTEP (но не вся сократила численность своего персо- ОС) будет перенесено на операционнала с 530 до 200 человек. Автомати- ную систему Solaris. В связи с этим Sun зированная фабрика по производству вложила в компанию 10 млн. долларов. Так стартовал проект OpenStep. компьютеров перешла к Canon. По большему счёту, всё, что необВ завершение этого короткого, но грустного подраздела немного ста- ходимо было сделать программистам тистики: компания Apple потратила NeXT Inc., – убрать из системы микровсего 73 дня на то, чтобы продать 50 тысяч компьютеров Macintosh. В свою очередь NeXT Inc. для реализации подобного количества своих систем понадобилось целых семь лет.
ядро Mach и переписать низкоуровневые серверы для работы с Solaris. Уже 30 июня 1994 г. компания опубликовала спецификации будущей OpenStep. Однако под конец года стало известно, что «Каир» от Microsoft – не более чем рекламная пустышка, после чего Sun потеряла всякий интерес к OpenStep и сконцентрировалась на доработке языка Java. Тем не менее NeXT Inc. не расстроилась и в конце 1994 года выпустила готовый продукт, причём не только для Solaris, но и для операционных систем Windows, HP-UX и MacOS. OpenStep сразу же нашла себе поклонников, в результате чего в начале 1995 года при объявлении финансовых результатов за истёкший квартал NeXT Inc. впервые отрапортовала о получении прибыли в один миллион долларов. В 1995 году компания представила пакет WebObjects, предназначенный для создания сложных динамических интернет-сервисов на основе баз данных. В 1996 г. количество клиентов, лицензировавших WebObjects у NeXT Inc., перевалило за 275 компаний, среди которых фигурировали: Dell, Chrysler, Nike, и Walt Disney. Известный на весь мир онлайн-магазин iTunes компании Apple построен как раз при помощи WebObjects. Впервые за десять лет своего существования компания наконец-то ста-
Планы на будущее В дальнейшем, кроме платформы х86, NEXTSTEP была перенесена на рабочие станции Sun (архитектура SPARC) и Hewlett-Packard (архитектура PA-RISC), однако особого распространения из-за своей цены (995 долларов за одну лицензию) не получила. В 1993 году компания Microsoft публично заявила, что в скором времени выпустит объектно-ориентированную операционную систему, получившую кодовое название «Каир» (Cairo). С этой ОС компания собиралась выйти на рынок объектно-ориентированных окружений, на котором до этого
90
Рисунок 12. Скриншот Rhapsody, работающий на компьютере с процессором Pentium
ретроспектива новилась на ноги. Однако, как известно, за небольшими, но потенциально успешными компаниями часто наблюдают их более зрелые конкуренты. Нередко большая рыба для укрепления собственных сил и авторитета поглощает более мелких представителей своего вида. То же случилось и с NeXT Inc: Джобс даже не подозревал, что Apple, с которой он порвал всякие отношения, выберет его компанию для покупки.
Возвращение на родину К середине 90-х годов прошлого столетия операционная система MacOS уже не являлась чем-то особенным. Да, её внешний вид и пользовательский интерфейс всё ещё радовали глаз, однако внутри она стремительно устаревала. Отсутствие вытесняющей многозаРисунок 13. MacOS X 10.0 – реинкарнация дачности, поддержки нескольких процессоров, а также защищённого режи- не менее революционной, уже заслума памяти – вот список того, чем бо- жила место под солнцем среди разялась хвастаться MacOS. В Apple был личных исследовательских организасоздан проект операционной систе- ций, военных структур и финансовых мы нового поколения под кодовым на- учреждений. Ещё одна причина, перетягивавзванием «Copland», однако безрезультатная разработка шла на протяжении шая канат на сторону NeXT, – велидвух с лишним лет, а после очередной колепные средства разработки новых выставки MacWorld в 1996 году, на ко- программ для этой ОС. Демонстрацию торой обещанная ОС так и не была вы- работы Interface Builder, которой завепущена, общественность окончатель- довал сам Стив Джобс, было сложно не назвать уникальной. В то время как но потеряла веру в неё. У Apple была возможность лицен- владелец NeXT проводил перед собзировать другую операционную сис- равшимися очередной семинар, протему (ходили слухи о Solaris от Sun граммист из его компании начинал рази Windows NT от Microsoft), однако ком- работку нового приложения. Под конец пания выбрала другой путь – покупку семинара Джобс демонстрировал готовую к работе программу. ОС вместе с её владельцем. Точка над «i» в переговорах была Первоначально в качестве потенциальной цели для покупки высту- поставлена 20 декабря 1996 года, когпала Be Inc. с её операционной сис- да Apple Computer объявила о покупке темой BeOS, которая обладала все- NeXT Inc. за 427 млн. долларов (из коми необходимыми качествами и к то- торых 130 млн. долларов Джобс забрал му же прекрасно работала на компью- себе). Сумма впечатляет, особенно терах Macintosh. К сожалению, тайные по сравнению с жалкими 120 млн., копереговоры с владельцем Be Inc. Жа- торые Apple была согласна выплатить ном-Луи Гассе застопорились на цене, Гассе за его компанию. Однако этот которую он затребовал за свою компа- отчаянный шаг был единственным лунию. К тому же, несмотря на свою ре- чиком света среди туч, постоянно сгуволюционность, BeOS в то время бы- щавшихся над головой Apple. Сразу же после приобретения NeXT ла молодой чёрной лошадкой, которой ещё предстояло пройти суровую школу Inc. проект «Copland» был закрыт, а его жизни на компьютерах обычных поль- место занял новый – «Rhapsody», благодаря которому OpenStep должна бызователей. С другой стороны, на рынке дав- ла стать «MacOS нового поколения». но существовала NeXT Inc., операци- Руководство по переделке ОС взял онная система которой, являвшаяся на себя Ави Теваньян.
№7, июль 2006
NEXTSTEP
Первым делом были убраны все лицензированные ранее технологии, например, Display PostScript была заменена на бесплатную Quartz. В 1997 году Apple выпустила финальную версию OpenStep 4.2, а также бета-версию Rhapsody, которая позже, после выхода Rhapsody DR3, была переименована в MacOS X. В новой ОС было принято отказаться от ядра Mach в пользу его наследника – открытого проекта Darwin. Кроме того, публике был представлен новый пользовательский интерфейс под названием Aqua. На выставке Apple Expo 2000 в Париже Apple представила публике MacOS X Public Beta, ставшую самой коммерчески успешной платной бетаверсией программы. Окончательный же выпуск новой операционной системы состоялся 24 марта 2001 года. На сегодняшний день MacOS X многими названа наиболее совершенной операционной системой, предлагающей мощь UNIX вместе с простотой MacOS. «Ушки» NeXT, «торчащие» за этим выражением, трудно не заметить. 1. 2. 3. 4. 5. 6. 7.
http://www.cnet.com http://www.osnews.com http://www.wikipedia.com http://www.romain-moisescot.com http://www.wired.com http://www.ex.com http://www.alyon.org
91
книжная полка
Знакомство с Microsoft Visual Studio 2005 Team System Ричард Хандхаузен
Сложно представить себе создание программных продуктов командой программистов без удобной среды разработки. Из этой книги вы узнаете о новом продукте от компании Micorsoft – Visual Studio 2005 Team System. В первой части книги, которая носит назва-
ние «Знакомство с Team System», вы ознакомитесь с общим обзором Team System, а также из каких частей состоит эта система, team foundation server (рассмотрены компоненты и архитектура), клиентские приложения team system (рассмотрены средства для руководителей проекта, архитекторов, разработчиков и тестировщиков). Во второй части рассмотрен ролевой подход к разработке ПО. Каждая из глав, входящая во вторую часть, рассматривает одну из ролей и функции из продукта, которые предназначены для них. Руководитель проекта (организация команды, начало работы над новым проектом, управление). Архитекторы (роль архитектора, конструктор распределенных систем, логического центра данных, систем, а также развертывания). Разработчики (просмотр рабочих элементов, управление версиями, интегрированные средства
тестирования, эффективность методической разработки). Тестировщики (рабочие элементы и тестирование, управление тестами, отслеживание ошибок). Из части книги, посвященной методикам и расширяемости, вы познакомитесь с Microsoft Solutions Framework, настройками и расширениями Team System, завершением работы над проектом, развертывание. В приложении вы найдете справочник по конструкторам распределенных систем, а также на примере рассмотрите создание нового проекта при помощи Team System. Весь изложенный материал написан простым и доступным языком.
Издательство: «Питер» Год издания: 2006 Количество страниц: 416 ISBN: 5-469-01218-2 Цена: ≈ 285 руб. Книга предоставлена издательством «Питер».
Мир программирования. Основы современных алгоритмов Дж. Макконнелл
Ни для кого не секрет, что от правильности выбора алгоритма для решения той или иной задачи зачастую зависит успешность реализации проекта. В этой книге автор рассматривает практически все наиболее известные алгоритмы для разного рода задач. В первой главе вы познакомитесь с основами анализа алгоритмов инеобходимыми для дальнейшей работы
92
математическими сведениями. В пос- стых параллельных операциях, а такледующем каждая из глав посвящена же о основных алгоритмах сортироводному из классов алгоритмов. Сре- ки и поиска. Достаточно подробно расди рассмотренных алгоритмов поиска сказано о недетерминированных али выборки: последовательный и дво- горитмах. Из приложения вы узнаеичный поиск. Алгоритмы сортировки: те о случайных и псевдослучайных пузырьковая, корневая, пирамидаль- числах, элементах теории алгоритная, сортировка Шелла. Не остались мов, оценки трудоемкости. В завербез внимания и сортировка вставка- шении каждой из глав, вашему вними, слиянием, а также быстрая сор- манию будут предложены упражнения тировка. Численные алгоритмы: вы- для самоконтроля усвоения материачисления значений многочленов, ум- ла. Ответы на все задания вы найденожение матриц, решение линейных те в приложении. Замечательная книуравнений. га, которую можно порекомендовать Рассмотрены алгоритмы срав- программистам. нения с образом. Алгоритмы на графах: основные понятия теории гра- Издательство: «Техносфера» фов, структуры и данные для пред- Год издания: 2004 ставления графов, алгоритмы обхода Количество страниц: 368 в глубину и по уровням, а также поис- ISBN: 5094836-005-9 ка кратчайшего пути. Из главы «Па- Цена: ≈ 200 руб. раллельные алгоритмы» вы узнаете Книга предоставлена издательством «Техо параллелизме, модели PRAM, про- носфера».
книжная полка
Oracle 9i. Программирование на языке PL/SQL Скотт Урман
Среди множества книг, посвященных PL/SQL, эту отличает хотя бы то, что она является официальным авторизованным изданием от Oracle. В первой части книги автор познакомит вас с начальными сведениями о PL/SQL, средами, в которых он выполняется и разрабатывается (SQL *Plus, Rapid SQL, SQL Navigator, TOAD, SQL-Programmer,
PL/SQL Developer). Этот материал будет триггеров, а также изменяющиеся табполезен прежде всего людям, которые лицы). В приложении вы найдете рукотолько начинают работать с PL/SQL. водство по работе со встроенными моЧасть, которая носит название «Ба- дулями и зарезервированные слова pl/ зовые свойства PL/SQL», представ- sql. Замечательное издание, которое лена следующим материалом: осно- окажется полезным как программисвы PL/SQL (лексические единицы, ти- там, так и администраторам DB Oracle. пы, выражения и операции, управля- Нельзя не отметить, что несмотря на доющие структуры), использование SQL статочную сложность излагаемого мав PL/SQL (DML, псевдостолбцы, при- териала, книга легко читается, и вся инвилегии, управление транзакциями), формация изложена в доступном виде. встроенные функции SQL (числовые, На прилагаемом к книге диске вы найдата и время, преобразования), курсо- дете примеры из книги, а также trialры (циклы выборки, переменные), об- версии некоторых из упомянутых в изработка ошибок (понятие исключитель- дании программ. ных ситуаций, а также рекомендации по их использованию), сборные конструк- Издательство: «Лори» ции. Освоив третью часть книги «До- Год издания: 2006 полнительные возможности PL/SQL», Количество страниц: 528 вы научитесь создавать и использовать ISBN: 5-85582-225-7 процедуры, функции и модули. Не оста- Цена: ≈ 380 руб. лись без внимания и триггеры (освеще- Книга предоставлена Издательским домом ны вопросы создания и использования «Вильямс».
Руководство по технологиям объединенных сетей Cisco system inc
Эта книга – четверное издание фундаментального труда, посвященного современным сетевым технологиям. В этой книге, носящей статус справочного издания, освещены фактически все сетевые протоколы и технологии, используемые в настоящее время. Нельзя не отметить, что книга грамотно структурирована и удачно поделена на части. Среди рассмот-
№7, июль 2006
ренных тем: основы теории объединенных сетей, технологии локальных сетей (Ethernet, FDDI), распределенные сети (рассмотрены протоколы Frame Relay, PPP, SDLC, X.25, технология ISDN). Раздел «Технологии мультисервисного доступа» представлен материалом о беспроводных технологиях, а также кабельных и оптических сетях, цифровых абонентских каналах, VoIP, протоколах динамической транспортировки пакетов. Мосты и переключатели (прозрачное соединение сетей, коммутируемые локальные сети и сети VLAN, MPLS, DLSw). Сетевые протоколы (IP, IPv6, NetWare, AppleTalk, DECnet). Очень подробно рассмотрены все основные протоколы маршрутизации (GP, EIGRP, IGRP, NSLP, OSPF, RIP, RSVP, SMRP). Управление сетями (технологии защиты сетей, сетевые ка-
талоги, сетевое кеширование, удаленный мониторинг, протокол SNMP, QoS). В конце каждой из глав находятся контрольные вопросы, которые помогут лучше усвоить прочитанный материал. В приложении вы найдете ответы на контрольные вопросы, а также краткую информацию о технологиях Token Ring, Xerox Network system и Banyan VINES. Хорошая книга, которая может послужить настольным справочником для широкого круга системных и сетевых администраторов.
Издательство: «Вильямс» Год издания: 2005 Количество страниц: 1040 ISBN: 5-8459-0787-X Цена: ≈ 950 руб. Книга предоставлена Издательским домом «Вильямс».
Обзор книжных новинок подготовил Александр Байрак
93
подписка на 2006 год Российская Федерация
Подписной индекс: годовой – 20780, полугодовой – 81655 Каталог агентства «Роспечать»
Подписной индекс: 87836 Объединенный каталог «Пресса России» Адресный каталог «Подписка за рабочим столом» Адресный каталог «Библиотечный каталог» Альтернативные подписные агентства: Агентство «Интер-Почта» (495) 500-00-60, курьерская доставка по Москве Агентство «Вся Пресса» (495) 787-34-47 Агентство «Курьер-Прессервис» Агентство «ООО Урал-Пресс» (343) 375-62-74 ЛинуксЦентр www.linuxcenter.ru Подписка On-line http://www.arzi.ru http://www.gazety.ru http://www.presscafe.ru
СНГ В странах СНГ подписка принимается в почтовых отделениях по национальным каталогам или по списку номенклатуры «АРЗИ»: Азербайджан – по объединенному каталогу российских изданий через предприятие по распространению
печати «Гасид» (370102, г. Баку, ул. Джавадхана, 21)
Казахстан – по каталогу «Российская Пресса» через ОАО «Казпочта» и ЗАО «Евразия пресс»
Беларусь – по каталогу изданий стран СНГ через РГО «Белпочта» (220050, г. Минск, пр-т Ф. Скорины, 10)
Узбекистан – по каталогу «Davriy nashrlar» российские издания через агентство по распространению печати «Davriy nashrlar» (7000029, г. Ташкент, пл. Мустакиллик, 5/3, офис 33) Армения – по списку номенклатуры «АРЗИ» через ГЗАО «Армпечать» (375005, г. Ереван, пл. Сасунци Давида, д. 2) и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул. Сарьяна, 22) Грузия – по списку номенклатуры «АРЗИ» через АО «Сакпресса» ( 380019, г. Тбилиси, ул. Хошараульская, 29) и АО «Мацне» (380060, г. Тбилиси, пр-т Гамсахурдия, 42) Молдавия – по каталогу через ГП «Пошта Молдавей» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134) по списку через ГУП «Почта Приднестровья» (МD-3300, г. Тирасполь, ул. Ленина, 17) по прайс-листу через ООО Агентство «Editil Periodice» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134) Подписка для Украины: Киевский главпочтамт Подписное агентство «KSS», тел./факс (044)464-0220
Подписные индексы:
20780* 81655** по каталогу агентства «Роспечать»
87836 по каталогу агентства «Пресса России» * **
№7, июль 2006
годовой полугодовой
95
СИСТЕМНЫЙ АДМИНИСТРАТОР №7(44), Июль, 2006 год УЧРЕДИТЕЛИ Владимир Положевец Александр Михалев РУКОВОДИТЕЛЬ ПРОЕКТА Петр Положевец РЕДАКЦИЯ Исполнительный директор Владимир Положевец Ответственный секретарь Наталья Хвостова sekretar@samag.ru Технический редактор Владимир Лукин Редактор Алексей Коршунов Внештатные редакторы Алексей Барабанов Сергей Супрунов РЕКЛАМНАЯ СЛУЖБА тел./факс: (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» Тираж 11000 экз. Журнал зарегистрирован в Министерстве РФ по делам печати, телерадиовещания и средств массовых коммуникаций (свидетельство ПИ № 77-12542 от 24 апреля 2002 г.). За содержание статьи ответственность несет автор. За содержание рекламного объявления ответственность несет рекламодатель. Все права на опубликованные материалы защищены.
ЧИТАЙТЕ В СЛЕДУЮЩЕМ НОМЕРЕ: Маленькая телекоммуникационная революция
ный подход со стандартными стартовыми скриптами. Рассмотрим, как это сделать на примере SUSE Linux.
Крупные конференции позволяют взглянуть на казалось бы давно знако- Аудит мых людей с другой стороны. На про- и дизассемблирование шедшем в конце июня мероприятии эксплоитов Interop Moscow представилась возмож- Эксплоиты, демонстрирующие налиность пообщаться со многими предста- чие дыры (proof-of-concept), обычно вителями ИТ-индустрии, прямым обра- распространяются в исходных текстах, зом повлиявшими на ее положение се- однако, основной функционал заклюгодня. Один из них – Марк Спенсер – чен в shell-коде, анализ которого предблагодаря своей увлеченности в от- ставляет весьма нетривиальную закрытом ПО и стечению обстоятельств дачу, требующую инженерного скласмог совершить маленькую револю- да ума, развитой интуиции, обширных цию в телекоммуникациях... Он пода- знаний и… знания специальных пририл миру мощную, а главное свобод- емов дизассемблирования, о которых ную, замену дорогостоящим коммер- и пойдет речь в следующем номере. ческим PBX – Asterisk. Марк поделился мыслями об этом продукте и об от- Windows Firewall: крытом ПО вообще в интервью «Сис- защищаем внутренние темному администратору» сразу после ресурсы сети своего выступления на Interop, завер- Современные средства защиты корпошившего конференцию по VoIP. ративных ресурсов от внешних угроз разнообразны, существуют как аппаратные и программные межсетевые экраСовременный Linux сервер: виртуализируем ны, так и системы обнаружения вторжесетевые устройства ния, разбирающие IP-пакеты до уровня Часть 2 приложений, а также шлюзовые антивиПеревод сетевых интерфейсов в кате- русы фильтрующие определенный вид горию виртуальных не выйдет за рам- трафика. А что происходит с защитой ки занимательного эксперимента ресурсов внутренней сети? Рассмотрим, без четкого практического алгорит- как защищать рабочие станции с помома, который позволяет сочетать дан- щью Windows Personal Firewall.
Уважаемые читатели! Спешите оформить подписку на второе полугодие 2006 года! Приобрести новые и старые номера журнала вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.
Доставка почтой в любую точку России.
96