Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
19.83 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

ХАКЕР.PRO

 

BUY

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Выбор компонентов при установке

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

ВходящийвсоставHTTP-проксипоумолчаниютакжеактивирован,поэтому, помимоиспользованияNAT,клиентымогутвыходитьвинтернет,подключаясьчерез3128 йпортKerio.Егонастройкирасположенывовкладке«Content FilteringHTTPPolicyProxyServer».HTTP-проксиможетпонадобитьсяв случае,когданетпрямогосоединения.Например,твойпровайдериспользует прокси.WinRouteумеетпередаватьвсезапросыследующемупрокси-серверу, егоданныедостаточноуказатьвполеForwardtoparentproxyserver. Настройкакэшированиявеб-страницпроизводитсяв«HTTPPolicy Cache»,поумолчаниюэтафункциональностьотключена.Установка флажка«Enablecacheontransparentproxy»разрешиткэшированиестра-

ницприпрямомсоединении(порты80и443),а«Enablecacheonproxy server»—кешированиезапросов,произведенныхчерезпрокси.

Фильтрация контента

Какужеговорилось,вKWFзаложеныширокиевозможностипофильтрациитрафикапопротоколамHTTPиFTP.ВContentFilteringестьтри подпункта,отвечающихзасвоиучасткиработы:HTTPPolicy,FTPPolicy

иAntivirus.

ПодпунктFTPRulesивкладкаURLRulesвHTTPPolicyпопринципунастроекнескольконапоминаютзаданиеправилмежсетевогоэкрана.Для наглядностиостановлюсьнаURLRules.Так,вполеConditionsзадается URL,маскаилигруппаобъектов,указанныхвовкладкеURLGroup,а

вполеAction—действие,котороебудетвыполненоприсовпадении правила.Вариантамиреакциимогутбытьразрешение(Permit)иблокировка(Drop)ресурса.ВкладкаURLGroupсодержитсписокшаблонов, которыевстречаютсявопределеннойгруппевеб-страниц,например баннеры,поисковики,серверыобновлений.Этопозволяетустановить правиласразудляопределенноготипазапрашиваемыхстраниц. Некоторыеполяскрыты.Открывих,можноустановитьвременной интервал(ValidTime)иуказатьпользователей(UserList)илигруппу компьютеров(IPGroups),длякоторыхбудетдействоватьправило. ДополнительныепроверкиизапретыдляразрешающегоправилазадаютсявовкладкеContentRulesредакторасвойствправил.Здесьможно разрешить(Allow)илизаблокировать(Deny)активноесодержимоевеб-

страниц(ActiveX,JavaScripts,Java,referer).ПривыборевариантаDefault

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

вкорнеHTTPPolicy.Установкафлажка«Scancontentsforvirusesaccording toscanningrules»разрешитпроверкувсеготрафика,попадающегопод этоправило,антивируснойпрограммой.Аактивация«DenyWebpages containing...»будетблокироватьстраницы,вкоторыхсодержатсяслова,

Отключение конфликтующих сервисов

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

Осталасьлишьоднанепосещеннаявкладка—ISSOrangeWebFilter.Здесьдля определенияхарактераресурсаприменяетсясистемаоценкивеб-страниц ISS/Cobion.Этасистемаиспользуетединуюбазуданныхресурсов,рассорти- рованныхпокатегориям.Результатработыэтойсистемы—разрешениеили запретнапосещениевыбраннойвеб-страницы.Этотфильтртребуетотдель- нойлицензии,нобежатьвыкладыватьсвоикровныенестоит—эффектив- ностьэтойтехнологиивнеанглоязычныхресурсовкрайненизка.

Какужеотмечалосьранее,WinRouteумеетпроверятьфайлы,передаваемыепопротоколамHTTP,FTP,SMTPиPOP3,спомощьюантивируснойпрограммы.Поумолчаниюпроверкапроизводитсяспомощью интегрированногоантивирусаMcAfee.Поддерживаетсянесколько другихантивирусов,разрабатываемыхкомпаниямиEsetSoftware, Grisoft,F-Secureидругими,естьвспискеиClamAV.ВовкладкеAntivirus

выбираетсясамдвижокитиптрафика,вполеEnablefilesizelimitпри необходимостиможновыставитьмаксимальныйразмерпроверяемого файла,вIntegratedAntivirusEngineуказываетсяинтервалобновления базинтегрированногоантивируса.ВHTTP,FTPScanningдляHTTP-и FTP-протоколовможноуказать,какиетипыфайловследует,акакиене следуетсканироватьнавирусы.

БлокировкаP2P-сетейвынесенавотдельнуювкладку.Найтиееможно,

перейдяв«AdvancedOptionsP2PEliminator».Учитываяраспределен-

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

(Blocktrafficexceptthepredefinedservices).Привыборевтороговарианта нажатиемServicesследуетотобратьнеблокируемыепротоколы.Продолжительностьблокировкиуказываетсявполе«Blocktrafficfor...minutes», ачтобыпользовательзнал,почемуоннеможетвоспользоваться любимымОслом,следуетустановитьфлажок«Informtheuserbyemail». НажатиенаAdvancedпозволитустановитьпараметрыобнаружения пиринговыхсетей,здесьуказываютсяP2P-порты,авConnectioncount определяетсяминимальноечислоодновременныхсоединений,при превышениикоторыхначнетсяпроверканасоединениесP2P.

Мырассмотрелитолькосамыеосновныепараметры,позволяющие настроитьдоступвинтернет,иуделилиособоевниманиезащитесети ифильтрациитрафика.Закадромосталисьработаспользователями, настройкаVPN,сборстатистикиимногиедругиевопросы,разобратьсяс которымипоможетдокументация. z

xàêåð 09 / 105 / 07

149

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

w Click

to BUY

 

>>

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

ХаКЕР.Pro

ВлаДИМИР «tURbina» ляШкО

/ V.TURbINA@GMAIl.COM /

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

подчиненныесистемы

cacti: сИсТема мОнИТОрИнга раБОТы серВерОВ

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

проект CACtI

Спомощьюпоисковикаможнообнаружитьбольшоеколичествосистем мониторинга,распространяемыхполицензииGNUGPLиобладающих большойфункциональностью.На слуху,конечно же,Nagios,MRTG, RRDtool,множествоклоновNetMRG,Oreonит.д. К сожалению,чтобы настроитьнекоторыеизних,потребуетсяизряднопопотеть,изучаяпротоколы.Не каждомуэтопонравится.Поэтомудлямониторингавыберем Cacti(cacti.net).Приегоразработкеоднимиизосновныхтребований былиинтуитивностьинтерфейсаилегкостьвиспользовании.CactiявляетсяудобнойнадстройкойнадRRDTool,егоинтерфейснаписаннаPHP,а дляхраненияинформациислужитMySQL.

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

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

ставиМ

ДляработыCactiпотребуетсяналичиевеб-серверасподдержкойPHP (ApacheилиIIS),самPHP,MySQL,атакжеRRDToolиnet-snmpдля мониторинга.Для закачкидоступныархивыдляLinuxиWindows,есть ссылкинаRPM-пакеты,ebuildGentoo,OpenSUSE.Прижеланииможно использоватьCVSилиархивстекущейсборкой.Кромеэтого,можно поискатьнужныепакетыврепозитариисвоегодистрибутива.Так,в Debian/UbuntuдляустановкиCactiдостаточноввести:

$ sudo apt-get install cacti

НовданномслучаеяпредлагаюустанавливатьCactiизисходников.Так

150

xàêåð 09 / 105 / 07

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

ХАКЕР.PRO

 

BUY

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Так выглядит типичный запрос

мысможем,во первых,исправитьнайденныеошибки,накативдоступныепатчи,аво вторых,научитьCactiработатьсплагинами.Установку производимвUbuntu7.04.Находимспомощью«sudoapt-cachedepends cacti»всезависимостииустанавливаемих,сампакетcactiнеставим.

Качаемсырцысофициальногосайта:

$ wget -c www.cacti.net / downloads / cacti-0.8.6j.tar.gz

Распаковываем:

$ cd / var / www

$ tar -xzvf / tmp / cacti-0.8.6j.tar.gz

Ставимдоступныепатчи:

$ sudo cd cacti-0.8.6j

$ sudo wget www.cacti.net / downloads / patches / 0.8.6j / pi ng_php_version4_snmpgetnext.patch

$ sudo wget www.cacti.net / downloads / patches / 0.8.6j / tr ee_console_missing_hosts.patch

$ sudo wget www.cacti.net / downloads / patches / 0.8.6j / th umbnail_graphs_not_working.patch

$ sudo wget www.cacti.net / downloads / patches / 0.8.6j / gr aph_debug_lockup_fix.patch

$ sudo wget www.cacti.net / downloads / patches / 0.8.6j / sn mpwalk_fix.patch

$ sudo patch -p1 N < ping_php_version4_snmpgetnext. patch

$ sudo patch -p1 N < tree_console_missing_hosts.patch $ sudo patch -p1 N < thumbnail_graphs_not_working. patch

$ sudo patch -p1 N < graph_debug_lockup_fix.patch $ sudo patch -p1 N < snmpwalk_fix.patch

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

$ sudo mv cacti-0.8.6j cacti

ПоумолчаниюCactiплагиновнеподдерживает,ноэтуподдержкуреализовалиребятаизCactiUsers(cactiusers.org),предлагающие,кромепатча, ещесдесятокплагиновразличногоназначения.Кстати,наэтом же ресурсеимеетсядистрибутивCactiEZ,построенныйнаосновеCentOS. В немужеестьнастроенныйCactiсовсемиплагинами,плюс305полез-

ныхпакетов,средикоторыхNet-SNMP,Netflow,Webmin,eAcceleratorи

прочие.Патчим:

Настройка Cacti

$ cd cacti

$ wget — c cactiusers.org / downloads / cacti-plugin-arch. tar.gz

$ sudo tar -xzvf cacti-plugin-arch.tar.gz

$ sudo patch -p1 N < cacti-plugin-arch / cacti-plugin- 0.8.6j.diff

ЕслиMySQLещенеработает,запускаем:

$ sudo / etc / init.d / mysql start

Создаемновуюбазуданныхcacti:

$mysqladmin --user=root create cacti

Изаполняемее,используяподготовленныйшаблон:

$mysql -u root cacti < cacti.sql

Теперьпользователюcactiuserдаемвсеправанановуюбазу:

$ mysql -u root cacti

mysql> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY ‘cactipassword’;

Query OK, 0 rows affected (0.06 sec) mysql> flush privileges;

Query OK, 0 rows affected (0.03 sec) mysql> quit

Наэтомустановказакончена,переходимкнастройке.

Настройка Cacti

ВконфигурационномфайлеуказываеминформациюдлясоединениясБД:

$mcedit. / include / config.php

$database_type = "mysql"; $database_default = "cacti"; $database_hostname = "localhost"; $database_username = "cactiuser"; $database_password = "cactipassword"; $database_port = "3306";

Кстати,вUbuntuэтотучастоквынесенвотдельныйфайл,которыйподключенвconfig.phpспомощьюInclude.Еслиналоженпатч,включающийподдержкуплагинов,внутрипоявитсязапись:

xàêåð 09 / 105 / 07

151

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

w Click

to BUY

>>

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

ХАКЕР.PRO

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Добавление нового устройства

$config[‘url_path’] = " / ";

Этозначит,чтоприобращениикCactiдолжениспользоватьсяадресвида http://server.com / .В нашемслучаевводитсяhttp://server.com / cacti / ,

поэтомуменяемзаписьна:

$config[‘url_path’] = " / cacti / ";

Далеесоздаемвсистемепользователя,отименикоторогобудетработать

Cacti:

$ sudo adduser --no-create-home --disabled-password -- disabled-login cactiuser

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

$ sudo chown -R www-data:www-data cacti /

Новладельцемдвухподкаталоговдолженбытьcactiuser:

$ sudo chown -R cactiuser cacti / rra / cacti / log /

Создание графиков в Cacti

Набираемвстрокевеб-браузераhttp://server.com / cactiипопадаемвCacti InstallationGuide.ВыбираемNewInstallилиUpgradefrom0.8.xприобновле-

нии.Скриптпроверяетналичиевсехнеобходимыхутилит,найденныеотмечаютсяподписью«FOUND».Есличто тоненашлось,необходимовручнуюзадать полныйпутькутилите.ВэтойжевкладкеуказываемверсиюSNMP(NET- SNMP5.xилиUCD-SNMP4.x)иверсиюRRDTool(1.2или1.0).Затемвсена-

стройкиможнобудетизменитьвCactiSettings.Наэтомвсе,нажимаемFinish. Теперьможнопроверитьработускрипта,отвечающегозасборстатистики:

$ sudo php / var / www/cacti / poller.php

Есливыводнесодержитошибок,обеспечиваемпериодическийзапуск poller.phpспомощьюcron:

$ sudo mcedit / etc / crontab

* / 5 * * * * cactiuser php / var / www/cacti / poller.php > / dev / null \

2> / var / log / cacti / poller-error.log

Регистрируемся(adminспаролемadmin)ивследующемокнеизменяем пароль.В рабочемокнедвевкладки.В Consoleнастраиваютсяграфики,

Доступные шаблоны

параметрыCacti,пользователи;здесь жеможнонайтинекоторыеутилиты.В Graphsдоступнывсеграфики,созданныевConsole.

ПоумолчаниювCactiзаведенконтрольтолькочетырехпараметров локальнойсистемы:памяти,загрузкиCPU,пользователейипроцессов. Чтобыпродолжитьработу,следуетсоздатьновоесетевоеустройство. ДляэтоговыбираемвпервомокнессылкуCreatedevices.По умолчаниюприсутствуетlocalhostсостатусомEnable.Для добавлениянового устройстванажимаемвправомверхнемуглуAddивпоявившемсяокне заполняемописание(Description),имяилиIP-адресузла.В HostTemplate указываемшаблонипараметрыSNMP.ПосленажатиякнопкиCreate переходимвследующееокно.ЕслиCactiудалосьсоединитьсясуказаннымузлом,информацияонембудетвыведенавсамомверхустраницы. Иначепоявитсянадпись«SNMPFailed»,тогдавозвращаемсяипроверяемнастройки.

Впоявившемсяокнедолжнодобавитьсядваполя:AssociatedGraph TemplatesиAssociatedDataQueries.Обративниманиенастолбец

Debugging.НажавнассылкуVerboseQueryнапротивсформированногографика,тыувидишьзапросиегорезультат.Такимобразом,на этапенастройкиможновыяснить,будет лиработатьэтотграфик,и принеобходимостивнестиизменения.ПоследобавлениявAssociated GraphTemplatesвполеStatusпоявитсянадпись«NotBeingGraphed».Это означает,чтографикпоканесформированибеспокоитьсянеследует. Послепервого жезапросаздесьпоявится«IsBeingGraphed»,арядом будетнадпись«Edit».Нажатиенаэтуссылкупозволитотредактировать параметрыграфика.

ПоследобавленияшаблоновнажимаемCreateGraphsforthisHostи переходимнастраницусозданияграфиков,отмечаемнужныеиещераз нажимаемCreate.Здесьдляуточнениядоступныцветитипбудущихграфиков,максимальноезначениеконтролируемыхпараметров,подпись имногоедругое.Возвращаемсяобратновдеревоустройств,включаем новоеустройствои,выбраввтом жеспискеPlaceonatree,помещаемего вдеревоустройств.ТеперьновоеустройствоиегографикибудутдоступныдляпросмотравовкладкеGraphs.

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

ВSortingTypeзадаетсявидсортировки:поимениилипономеру.Изначальноустановленаручнаясортировка,дляперемещенияграфиковпо веткедеревапользуемсястрелками.

Обязательноследуетознакомитьсяспараметрамив«ConfigurationSetting»,гденаходится6вкладок:

1.General—настройкажурналируемойинформации,сюдатакжебудут заноситьсясобытия(файл / syslog);наэтапеотладкиследуетвключить

152

xàêåð 09 / 105 / 07

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

ХАКЕР.PRO

 

BUY

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Графики по умолчанию

PollerLoggingLevelвHIGHилиDEBUG,чтобыполностьюконтролиро-

ватьвсезапросы,здесь женастраиваютсяпараметрыSNMP.

2.Paths—указываютсяпутиковсемутилитам,используемымCacti.

3.Poller—настройкаработысистемысбораинформации,здесьможно преключатьсямеждуcmd.phpиcfctia,атакженастраиватьпроверку доступностиузлов.

4.GraphExport—настройкаэкспортаграфиков(втомчислеиавтомати- ческого)влокальныйфайлилипопротоколуftp,sftp.

5.Visual—параметрывыводаграфиков:ихколичество,строки,столб- цы,размершрифтаипрочее.

6.Authentication—аутентификацияпользователей,локальнаяилиLDAP. Специальногопояснениятребуетcmd.phpиcactid.Деловтом,чторазработчикипредлагаютзаменустандартномушеллуcmd.php,написанному наPHP.Пакетcactid,шеллвкоторомнаписаннаСи,следуетстандарту POSIXисвязансбиблиотекамиnet-snmp.Имрекомендуетсяподменять cmd.phpвтехслучаях,когдастандартныйвариантнесправляетсясбольшойнагрузкой.Кстати,дляпоклонниковPerlестьвариантcmdнаэтом языке(www.cacti.net / downloads / scripts / spine.pl.txt).

Вменю«UtilitiesSystemUtilities»можнопросмотретьжурналработы Cacti.Удобно,чтовзависимостиотрезультатазаписиимеютразный цвет.Этопомогаетвизуальноопределитьнеудачныезапросы,причем можносразу жеперейтипогиперссылкевнастройкуустройстваили отдельногографика.Отсюда жепросматриваютсяжурналзаходаполь- зователей,кэшPollerиSNMP-запросы.

ПоумолчаниювCactiсозданыдвапользователя:adminиguest.Последнийнеимеетпароляипозволяеттолькопросматриватьграфики загрузкилокальнойсистемы.Для добавленияпользователейследует перейтивUserManagementивыбратьAdd.Появитсяокноредактированиясвойствновогопользователя.На первойстраницевводимимя ипарольпользователя,вLoginOptionsуказываем,чтобудетвыведено послерегистрации.Установка«UserMustChangePasswordatNextLogin»

заставитпользователясменитьпарольприпервойрегистрации.

ВовкладкахRealmPermissions,GraphPermissionsиGraphSettingsболее тонконастраиваютсяпараметрыдоступапользователякграфикам.

В RealmPermissionsуказываемоперации,которыесможетосуществлять пользователь.ПослевыборанужныхпараметровнажимаемCreate. Созданныйаккаунтпоканеактивирован,следуетещеразвыбрать настройкупользователяиактивироватьего.

Установка плагинов Cacti

Теперьразберемустановкуплагинов.Каждыйимеетсвоиособенности. ОченьполезенплагинDiscovery,которыйспособеннаходитьнеизвестныеCactiустройства,поддерживающиеSNMP.Устанавливаетсяон следующимобразом.Переходимвподкаталогcacti / plugins,который былсозданприустановкепатча:

Типичные графики

$ cd cacti / plugins

Распаковываемархив:

$ wget — c cactiusers.org / downloads / discovery.tar.gz $ tar xzvf discovery-0.7.tar.gz

Создаемновыетаблицы:

$ mysql -u root -p cacti < discovery / discover.sql

Каждыйплагинподключаетсявмассиве$pluginsфайлаconfig.php.Изначальновнемнетзаписей:

$plugins = array();

Длятогочтобыдобавитькнемуплагин,встрокенижедописываем элементсназваниемкаталогаустановленногорасширения.Для большинстваплагиновэто,кстати,единственное,чтотребуетсясделатьдля установки.В нашемслучаекаталогназываетсяdiscovery:

$plugins[] = ‘discovery’;

Теперь в «Configuration Setting» появилась еще одна вкладка

Misc, предназначенная для настроек плагинов. Для Discovery в ней требуется указать подсеть для сканирования, метод сканирования

(ICMP, TCP, UDP), комьюнити SNMP и период. После этого Discovery

будет сообщать, если найдет узел, поддерживающий SNMP и непрописанный в Cacti.

Неплохплагинtools—послеегоустановкив«ConsoleUtilities»поя- витсяновоеменю,вкоторомможнобудетпроверятьработусервисовна указанномузлеилипросматриватьответSNMP.

Советую также установить плагин thold, с помощью которого можно отсылать сообщения. После его установки в Setting появится еще одна вкладка. В ней требуется указать лишь почтовый адрес, на который будут приходить сообщения, события (ошибки, тревоги и прочие), и способ отправки (php, smtp, sendmail) с необходимыми параметрами доступа.

НастраницеAdditionalScripts—www.cacti.net / additional_scripts.php

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

Итак, Cacti — очень простое в установке и использовании решение, с помощью которого человек, незнакомый со всеми тонкостями SNMP, может без проблем настроить систему мониторинга. Удачи. z

xàêåð 09 / 105 / 07

153

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

w Click

to BUY

>>

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

ХаКЕР.Pro

кРИс касПеРскИ

Операцияпо освобождению

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

БОрьБа с уТечкамИ ресурсОВ В реальнОм ВременИ БеЗ перекОмпИлЯЦИИ серВерных прИлОженИй

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

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

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

ныханализаторовтипаIBMRationalPurify,BoundsCheckerилиValgrind.

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

Мы желюдипростые.Администраторымелкокорпоративных,офисных илидажедомашнихсерверов,работающих,какправило,наоснове NT-basedсистем.Исходныхтекстовунаснет,даивремени/средств

наисправлениечужихошибок—тоже.Ноборотьсясутечкамивсе же приходится.Комунеслучалосьперегружатьзависшийсервер,нереаги- рующийдажена<Ctrl-Alt-Del>,идавитьнаResetсугрозойразрушения дисковоготомаипотерикучиоперативныхданных?

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

классиФикация утечек и причины их возникновения

Преждечемборотьсясутечками,необходиморазобраться,чтоэтовообщетакоеипочемуэтопроисходит.Кудаутекаетпамять?Риторический вопрос!Никудаонанеутекает,простонеудачныйтермин.Правильнее говоритьоб«отложении»или«пластовании»ресурсов,поаналогиис осадочнымислоями.Рассмотримследующий(вполнеклассический) пример:

ФрагменТИсхОДнОгОкОДа,ДемОнсТрИрующегО уТечкупамЯТИ

foo(char *x)

{

//выделяем буфер из динамической памяти (также

154

xàêåð 09 / 105 / 07

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

ХАКЕР.PRO BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Утилита для изменения размеров файла подкачки через командную строку

называемой кучей)

char *p = malloc(MAX_SIZE);

 / / если строка не влезает в буфер, возвращаемся из функции

if (strlen(x) >= MAX_SIZE) return ERR_STR_TOO_LONG;

 / / копируем строку в буфер strcpy(p, x);

 / / делаем с ней что нибудь полезное

/ / освобождаем выделенную память free(p);

return OK;

}

Программиствыделяетбуферподкопируемуюстрокуи,преждечем начатькопирование,заботливопроверяетеедлину.Еслистрокане помещаетсявбуфер,происходитнемедленныйвозвратизфункциис сообщениемобошибке,но!Выделеннаяпамятьнеосвобождается!И не освободитсяникогда!Лишьпризавершениипроцессасистемаавтоматическиосвободитвсе,чтоктомувременионуспелпонавыделять. Принимаякрассмотрениюто,чтосерверныеприложениянеперезапускаютсямесяцами(идажегодами),становитсяясно:утечкипредставляютсобойедва линеосновнуюпроблему;идажепотеряодногобайтав долговременнойперспективевыливаетсявсотнимегабайт«осадочной» памяти.

Приэтомотразработчиковсерверныхприложенийавторупостоянно приходитсяслышать,что,мол,проблемаутечекфундаментальнаичто, еслисервертеряетнеболее1Кбпамятивсекунду,этовполненормально.Количествоустановленнойфизическойпамятинеиграетникакой роли,ипадениепроизводительностизасчетутечекпрактическиполностьюнивелируетсятемфактом,чтооперационнаясистемавытесняет неиспользованныестраницынадисквфайлподкачки.Однакоадресное пространствопроцессанебезграничноина32 битныхплатформахпо умолчаниюсоставляетчутьменее2Гб(остальные2Гбзанимаютядро ОС,ядерныеструктурыданных,драйвераит. д.).

Легкорассчитать,чтоеслипамятьутекаетсоскоростью1Кбвсекунду, тоадресноепространствобудетполностьюисчерпаноза25дней,ана самомделенамногораньше,поскольку,помимодинамическойпамяти, вобозначенные2Гбвходятстек,образыисполняемыхфайловибиб­ лиотек,структурыданныхоперационнойсистемыприкладногорежима

Различные системные датчики

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

Утечкиделятсянадвекатегории:жесткие(hard)имягкие(soft).Мягкие утечки(такженазываемыелокальными)действуюттольковтечение определенногопериодавремени,азатемвозвращают«награбленные» ресурсывобщийпул.Вот,например,некоторыйсерверобрабатываетзапросыпользователейвотдельномпотокеиподкаждыйзапросвыделяет определенноеколичествопамяти,нонеосвобождаетеепослезавершенияобработкизапроса,однакоприотключенииклиентавсяпамять освобождаетсяодниммахом.Вотэтоиназываетсялокальнойутечкой. Жесткие(илиглобальные)утечкинеосвобождаются,покаадминистраторнеотправитсервервshutdownилинеперезагрузитОС.Последний моменточеньважен!Еслиприложениевыделяетблокисовместно используемойпамяти(sharedmemory),тоонинеосвобождаютсявместе сзавершениемвыделившегоихпроцессаипродолжаютболтатьсяв адресномпространствевплотьдополнойперезагрузки.

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

Утечка ресурсов как направленная атака

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

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

Ксожалению,разработчикииспециалистыпобезопасностисклонны недооцениватьэтотподклассатак,посколькуникзахватууправления, никутратеконфиденциальностионнеприводит,апотомузаплаткипод известныедырызачастуювообщеневыпускаются!

Можно лисправитьсястакимиатакамисамостоятельно?Имеяхороший

xàêåð 09 / 105 / 07

155

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

w Click

to BUY

>>

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

ХАКЕР.PRO

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Принудительное освобождение утекшей памяти мыщъх’иной утилитой

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

Схватка с утечками в рукопашную

Залогомуспешнойборьбысутечкамистановитсязаблаговременная подготовка.Преждевсего,постарайсядомаксимумаувеличитьобъем виртуальнойпамяти.Учти,чтоеслистартовыйобъемфайлаподкачки меньшеконечного,топридостижениипороговойвеличинысистема попытаетсяувеличитьразмерфайлаподкачки(еслидисковогоместа хватит).Причемвсезапросынавыделениепамятивэтовремябудут отклоняться,иприложениевместовалидногоуказателяполучитноль, авоткаконоотреагируетнаэто,сказатьсложно.Частьприложений завершитсвоюработуваварийномрежиме(спотерейнесохраненных данных),частьповедетсебянеадекватно,выдаваястранныерезультаты. Такчтолучшенемелочиться,нежертвоватьдисковымпространством,а еслиужвыделять,товыделять!Но сколько?

Допустим,унасестьkсерверныхприложений,ионипорождаютnпроцессов(ихлегкопосчитатьвдиспетчерезадач).Посколькуна32 битных платформахкаждыйпроцессвладеет4Гбоперативнойпамяти,нам потребуется4*(MAX(k,n) Гбпамятииещепарагигабайтподсистемные нужды.Однакоприизмененииразмерафайлаподкачкичерезграфическийинтерфейс(«МойкомпьютерСвойствасистемыДополнительноПараметрыбыстродействияВиртуальнаяпамятьИзменить») мыограниченычетырехразряднымполемвмегабайтах,тоестьнеможемполучитьболее10Гбвиртуальнойпамяти.Для большинстванужд этогоболеечемдостаточно,однакодлясерверовсмногодневнымаптаймом,накоторыхустановленакучасерверныхприложений,возможно, потребуетсяибольшийобъем.Установитьегопоможетбесплатная утилитаpagefileconfig.vbs(www.windowsfaq.ru / content / view / 116 / 57).

Однако,независимоотколичестваимеющейсявиртуальнойпамяти,каждыйпроцессвсвоераспоряжениеполучаетчутьменьшедвухгигабайт кучи,чегоприинтенсивныхутечкаххватаетсовсемненадолго.А потом бац—исервервдауне!Идиподнимайегопотом…

ОперационныесистемыWindowsXPProfessional,NTServer4.0 EnterpriseEdition,W2KAdvancedServer,W2KDatacenterServer,Server 2003 / EnterpriseEdition / DatacenterEditionпризагрузкеподдерживают специальныйключ‘ / 3G’,спомощьюкоторогоможноужатьсистему до1Гбивыделитьвысвободившеесяместовличноепользование каждогопроцесса,тоестьразмеркучивозрастаетдо3Гб(нуиличуть меньшезасчетстека,образаисполняемогофайлаидинамических библиотек).Подробнееобэтомможнопрочитатьнаsupport.microsoft. com / kb / 823440,анижеприводитсяпримерготовогофайлаboot.ini, приготовленногопоэтойтехнологии:

Пример локальной утечки памяти

Файлboot.ini,расширяющийразмеркучидо3Гб

[Boot Loader]

Timeout=30

Default=multi(0)disk(0)rdisk(0)partition(2) \ WINNT

[Operating Systems] multi(0)disk(0)rdisk(0)partition(2) \ WINNT="Windows Server 2003" / 3GB

Перезагрузка приложений

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

—периодическийперезапусксерверныхприложенийкомандойkill.exe (входитвбесплатнораспространяемыйнаборMicrosoftDebuggingTools, SupportTools,атакжевMicrosoftPlatformSDK),закинутойвсистемный планировщик(смотриописаниештатнойкомандыat).

Кстатиговоря,многиесерверыимеютсвоисобственныевстроенные планировщики,позволяющиеделатьмягкийshutdown,прикотором блокируетсяподключениеновыхклиентовивмомент,когдаотваливаетсяпоследнийизимеющихся,серверотправляетсебянаперезагрузку. Ссерверами,реализованнымикаксистемныеслужбы,делавнекотором смыслеобстоятнамноголучше,посколькувсякаяслужбаобязана(поусловиямспецификации)поддерживатьмягкуюперезагрузкубезпотерьоперативныхданных.Однакодалеконевсякаямягкаяперезагрузкавозвращает «осадочную»память,ктому жеисточникомутечеквполнеможетоказаться иголовнойпроцессSERVICES.EXE,которым«крышуются»всеслужбы (смотрилистингниже).Попытка«убийства»SERVICES.EXEлибозакончится сообщениемоневозможностисовершениятакойоперации,либовсе таки увенчаетсяуспехом,итогдасистематут жеобрушится.Воттакситуация!

ПроцессSERVICES.EXEвыступает«крышей» длямногихслужб

System Process (0) System (8)

SMSS.EXE (232) CSRSS.EXE (260)

WINLOGON.EXE (280) NetDDE Agent SERVICES.EXE (308)

svchost.exe (480) DLLHOST.EXE (1048)

Smc.exe (504) Sygate Personal Firewall ups.exe (536)

svchost.exe (568) MCI command handling window vmware-authd.ex (1240)

156

xàêåð 09 / 105 / 07

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

ХАКЕР.PRO BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Настройки Postfix при установке

Вопросиззала:аскакойчастотойследуетперегружатьсерверные процессы,илидажеоперационнуюсистемуцеликом,еслиперезагрузкаэтогопроцессаневозможна?Ответ:чтобынепривязыватьсяк конкретномурасписанию,будемпериодическивызыватьAPI-функцию VirtualQueryEx,возвращающуюразмервиртуальнойпамяти,потребляемыйкаждымпроцессом,и,кактолькоондостигнетопределенного пороговогозначения,выбранногонамизаранее,уходитьвreboot(естественно,дляэтогонеобходимохотьнемногоуметьпрограммировать). ФункцияVirtualQueryExпринимаетнагрудьдескрипторпроцессаи возвращаетследующиеданные:

Информация, возвращаемая функцией

VirtualQueryEx

typedef struct _MEMORY_BASIC_INFORMATION {  / / базовый адрес региона

PVOID BaseAddress;

/ / базовый адрес выделенного блока памяти

PVOID AllocationBase;  / / «первородные» атрибуты защиты

DWORD AllocationProtect;  / / размер региона в байтах

DWORD RegionSize;

 / / тип региона (выделен, закреплен, свободен) DWORD State;

 / / текущие атрибуты защиты

DWORD Protect;  / / тип страниц памяти

DWORD Type;

} MEMORY_BASIC_INFORMATION;

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

Деталиреализациимыоставимвстороне.Этосовсемнесложнаяутилита,которуюлегконаписатьменеечемзавечер,однакоонанеобыкновенноэффективнапри«разруливании»автопилотируемыхсерверов.

Принудительное освобождение памяти

А вот не хотим мы перезапускать ни серверное приложение, ни саму операционную систему. Не хотим и все! Что тогда? Вот тогда то нам и пригодится весьма продвинутая методика, дающая неплохой

Хороший сервер должен работать как часы

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

Подобный«сборщикмусора»представляетсобойдовольносложную программу,вынужденнуюучитыватьмногиенюансы.У мыщъх’апока чтоимеетсяpre-alphaверсия,предназначеннаядлясугубовнутреннего использования.

Каконаработает?Вместотогочтобыопределятьграницыстекакаждого изпотоков,мыщъхпростосканируетадресноепространствопроцесса (естественно,исключаяневыделенныеблоки),выцеживая32 битные значения,похожиенауказатели.Похожие—этонаходящиесявпределах динамическихблоковпамяти,полныйпереченькоторыхможнополу-

читьпосредствомследующихAPI-функций:CreateToolhelp32Snapshot \  Heap32First \ Heap32ListFirst \ Heap32ListNext \ Heap32Next.

Занятые блоки динамической памяти, в границах которых нет ни одного указателя, считаются «осадочными» и освобождаются. А вот как они освобождаются — это уже вопрос. Можно, конечно, вызывать API-функцию VirtualFreeEx, но! Компиляторы работают с динамической памятью не напрямую, а посредством своих собственных библиотек времени исполнения (Runtime Library, или сокращенно RTL). Любая работа с динамической памятью в обход RTL-менеджера неминуемо приводит к краху приложения. Поэтому мы должны впрыснуть свой код в подопытный процесс и вызывать RTL-функцию освобождения памяти. Например, в языке Си это функция free().

Имеются,естественно,идругиетрудности,ноихобсуждениевыходит зарамкиэтойстатьи.Главное,чтоосвобождение«потерянной»памяти все такивозможно!

Заключение

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

И хотя до «промышленного» внедрения этим методикам еще далеко, они работают. Мыщъх продолжает рыть землю в этом направлении, разрабатывая полностью автоматизированный «сборщик мусора», ориентированный на откомпилированные программы без исходных текстов. Желание принять участие в проекте всячески приветствуется. В общем, дорогу осилит идущий!z

xàêåð 09 / 105 / 07

157

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

P

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to BUY

 

>>

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

усТанаВлИВаемИнасТраИВаемсИсТемуучеТаТраФИкаNetaMs

Сегодня найти быструю, гибкую и мощную систему учета трафика не проблема. Жаль только, что учет нельзя назвать безошибочным, да и надежность оставляет желать лучшего. Что касается *nix-дистрибу- тивов, то здесь разработчики предоставили системным администраторам и программистам огромный простор для творческой фантазии, включив в ядра весь необходимый функционал. Но это не значит, что готовых систем учета трафика под *nix не существует. Как раз наоборот — они просто заполонили Сеть. Как выбрать из них самую лучшую?

лучшая систеМа учета

Чтобыответитьнаэтотвопрос,нужноразобраться,чтоподразумевается под«самойлучшейсистемойучета».Думаю,никтонебудетспорить, еслияскажу,чтотаковаядолжнабытьнадежной,быстрой,гибкой, удобной,расширяемойиработающейпопринципу«поставилизабыл». Похвастатьсятакимспискомвозможностейспособнадалеконекаждая системаучета.Еслибытьточным,сегоднятакихединицы.Ободнойиз нихипойдетречьвэтойстатье.

установка nEtAMs

NeTAMSпредназначендляподсчетаиуправлениятрафикомвлокальнойсети.ЭтотпрограммныйкомплексработаетподLinux,FreeBSD4.х, 5.х,6.х,OpenBSD,NetBSDиSolaris.Дляустановкинеобходимы:MySQL версии4.0.16ивыше,Apacheверсии1.3.27ивыше,libpcap0.7.1ивыше.

Всяустановкасводитсяквыполнениюследующихкоманд:

$ sh configure.sh $ make

$ sudo make install

Еслитыпланируешьиспользоватьограниченияпоскорости(unithost namePupkinip192.168.1.2bw256Kinacct-policyip),бинарникиследует скомпилироватьсподдержкойквот:«FLAGS=-DHAVE_BWmake».

НаподопытномдистрибутивеSuSE10.2сядромпоумолчаниювсеустановилосьбезпроблемилишнихвопросов.

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

именем/etc/netams.cfgнаосновешаблона/etc/netams.cfg.sample.Вка-

талоге/etc/rc.dскриптустановкисоздаетфайлnetams-linux-startup.sh.Если переименоватьеговnetamsисделатьисполняемым,тодемонможно будетзапускатьиостанавливатьизкоманднойстроки:

#service netams start

#service netams stop

запуск

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

впрограммуучета.ВнашемслучаецепочкабудетназыватьсяCounter:

#iptabes -A Counter -j QUEUE

Послеустановкистартовыйфайлnetamsможнонайтивкаталоге/usr/ local/sbin.Запускаем:

# /usr/local/sbin/netams -f /etc/netams.cfg

Netamsсоздаетtelnet-сессиюнапорту,указанномвконфигурационном файле(поумолчаниюэто20001).Подключаемся:

$ telnet localhost 20001

158

xàêåð 09 / 105 / 07

Соседние файлы в папке журнал хакер