тел. 8 917 186 46 79  ICQ: 576942540   mail: support@it-advisor.ru



технология укладки тротуарной плитки плитка ванна плитка kerama

Squid: нещадно режем баннеры и проверяем на вирусы
(Пе­репе­чата­но из жур­на­ла "Ха­кер")

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

Black­list c ad­zapper

Squ­id пре­дос­тавля­ет нес­коль­ко ва­ри­ан­тов бло­киров­ки ре­сур­сов – по IP-ад­ре­су, URL или клю­чево­му сло­ву. Пер­вые два ме­тода дос­та­точ­но прос­то ре­али­зовать за счет па­роч­ки acl и http_ac­cess. Но тог­да ад­ми­нист­ра­тору при­дет­ся об­новлять спи­сок сай­тов и ад­ре­сов вруч­ную. Проб­ле­му мож­но пе­рело­жить на пле­чи про­ек­тов – от ис­поль­зо­вания бе­лых и чер­ных спис­ков с воз­можностью ав­то­мати­чес­ко­го об­новле­ния, до филь­тра­ции по клю­чевым сло­вам и при­мене­ния эв­ристи­чес­ко­го ана­лиза. Есть и ком­би­ниро­ван­ные ре­шения. Нап­ри­мер, Ban­nerFil­ter (phrog­gy.com/ban­nerfil­ter) расс­чи­тан на ис­поль­зо­вание из­вест­ных ад­ре­сов бан­нерных се­тей и шаб­ло­нов, од­на­ко пос­ледняя вер­сия да­тиро­вана 2004 го­дом, по­это­му об ав­то­мати­зации про­цеду­ры об­новле­ния black­list и ду­мать не сто­ит. Хо­тя име­ющиеся шаб­ло­ны впол­не мож­но ис­поль­зо­вать для бло­киров­ки бан­не­ров и всплы­ва­ющих окон. Ана­логич­но ра­бота­ет ufd­bGu­ard (www.url­fil­terdb.com), пред­ла­га­ющий бесп­лат­ное об­новле­ние баз в те­чение 60 дней. Есть и дру­гие ре­шения, но, к со­жале­нию, боль­шинс­тво про­ек­тов дав­но не об­новля­лись. По­это­му вы­берем то, что под­держи­ва­ет­ся и дос­тупно в ре­пози­тарии Ubun­tu.

Ре­дирек­тор ad­zapper (ad­zapper.sf.net) так­же ис­поль­зу­ет спис­ки URL, есть воз­можность ав­то­мати­чес­ко­го об­новле­ния. Ус­та­новить и наст­ро­ить его весь­ма прос­то:

$ apt-get ins­tall ad­zapper

Собс­твен­но, все. Па­кеты с по­доб­ны­ми ре­дирек­то­рами обыч­но не пре­выша­ют 100 Кб, по­это­му ус­та­нов­ка про­ходит быст­ро. Что­бы прик­ру­тить его к Squ­id, дос­та­точ­но до­бавить в squ­id.conf все­го од­ну стро­ку. Прав­да, в за­виси­мос­ти от вер­сии Squ­id, стро­ка бу­дет от­ли­чать­ся. Нап­ри­мер, в Squ­id 2.5, ко­торый ле­жит в ре­пози­тарии Ubun­tu 6.06, и в но­вой 3.0 сле­ду­ет ис­поль­зо­вать па­раметр re­direct_prog­ram:

re­direct_prog­ram /usr/bin/ad­zapper.wrap­per

В вер­сии Squ­id 2.6 ис­поль­зу­ет­ся url_rew­ri­te_prog­ram:

url_rew­ri­te_prog­ram /usr/bin/ad­zapper.wrap­per

Вот и все наст­рой­ки, но это­го впол­не хва­тит, что­бы пос­ле пе­реза­пус­ка Squ­id «su­do /etc/init.d/squ­id res­tart» часть бан­не­ров бы­ла за­мене­на над­писью «This is ad zap­ped». Бу­дут бло­киро­ваны так­же всплы­ва­ющие ок­на и флэш-ани­мация. Для ежед­невно­го об­новле­ния black­list (фак­ти­чес­ки са­мого скрип­та ad­zapper) дос­та­точ­но до­бавить но­вое за­дание cron­tab:

$ su­do cron­tab -e

0 0 * * * ro­ot /usr/sha­re/doc/ad­zapper/examp­les/up­da­te-zap­per

Ра­бота скрип­та об­новле­ния прос­та. С ад­ре­са ad­zapper.sf.net/scrips/squ­id_re­direct ска­чива­ет­ся скрипт, ко­торый за­тем ко­пиру­ет­ся на мес­то /usr/bin/ad­zapper. В са­мом кон­це ad­zapper, в об­ласти DA­TA, на­ходит­ся спи­сок шаб­ло­нов URL. Хо­тя опыт по­казы­ва­ет, что его об­новля­ют не очень час­то.

У кон­фи­гура­ци­он­но­го фай­ла /etc/ad­zapper.conf наст­ро­ек нем­но­го. Ес­ли ус­та­новить зна­чение:

ZAP_MO­DE="CLE­AR"

То бу­дет ис­поль­зо­вать­ся «ти­хая» бло­киров­ка, без вы­вода ука­зан­ной вы­ше над­пи­си. При же­лании текст лег­ко под­ме­нить сво­им. Ад­рес, от­ку­да заг­ру­жа­ют­ся кар­тинки, ука­зыва­ет­ся в двух пе­ремен­ных:

ZAP_BA­SE=http://ad­zapper.so­ur­ce­for­ge.net/zaps

ZAP_BA­SE_SSL=https://ad­zapper.so­ur­ce­for­ge.net/zaps

Ник­то не ме­ша­ет здесь ука­зать свой URL, раз­ра­бот­чи­ки да­же ре­комен­ду­ют та­кой ва­ри­ант. Для это­го, ес­тест­вен­но, не­об­хо­дим ра­бочий веб-сер­вер, нап­ри­мер, Apa­che. Пос­ле ус­та­нов­ки ad­zapper в ка­тало­ге /usr/sha­re/doc/ad­zapper/examp­les/zaps на­ходят­ся все нуж­ные шаб­ло­ны. Те­перь дос­та­точ­но в кон­фи­гура­ци­он­ном фай­ле апа­ча /etc/apa­che2/apa­che2.conf ука­зать али­ас на этот ка­талог:

$ su­do mce­dit /etc/apa­che2/apa­che2.conf

Ali­as /zaps /usr/sha­re/doc/ad­zapper/examp­les/zaps/

Op­ti­ons Fol­lowSym­Links In­de­xes

Al­lo­wOver­ri­de Li­mit

Or­der Al­low,De­ny

Al­low from all

И поп­ра­вить зна­чение ZAP_BA­SE:

ZAP_BA­SE=http://lo­cal­host/zaps

Не за­бывай пе­реза­пус­тить Apa­che и Squ­id. Ес­ли есть же­лание, мож­но из­ме­нить фай­лы, на­ходя­щи­еся внут­ри ка­тало­га zaps, на свои. Увы, часть рек­ла­мы все же про­рыва­ет­ся сквозь та­кой зас­лон. Что­бы не во­зить­ся с acl, мож­но до­бавить в эту схе­му Bfil­ter (bfil­ter.sf.net), где ис­поль­зу­ет­ся эв­ристи­чес­кий ал­го­ритм собс­твен­ной раз­ра­бот­ки, поз­во­ля­ющий об­на­ружи­вать боль­шую часть бан­не­ров и бло­киро­вать всплы­ва­ющие ок­на. Или до­бавить squ­id­Gu­ard (www.squ­id­gu­ard.org), речь о ко­тором пой­дет ни­же.

Борь­ба с ви­руса­ми

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

Для на­шей це­ли под­хо­дят, как ми­нимум, два про­ек­та. Ре­шение Squ­idC­la­mAv (sf.net/pro­jects/squ­idc­la­mav) яв­ля­ет­ся ре­дирек­то­ром, ра­бота­ющим с ан­ти­виру­сом Cla­mAV. Оно поз­во­ля­ет вы­бороч­но про­верять фай­лы, ос­но­выва­ясь на рас­ши­рении или кон­текс­те. Нес­коль­ко бо­лее прод­ви­нутый ва­ри­ант – HAVP (HTTP An­ti Vi­rus Pro­xy, www.ser­ver-si­de.de) – уме­ет про­верять тра­фик на ле­ту при по­мощи нес­коль­ких ан­ти­виру­сов (Cla­mAV, F-Prot, Kas­pers­ky, NOD32, Sop­hos, AVG, Dr.Web и не­кото­рых дру­гих). HAVP – не ре­дирек­тор и мо­жет ра­ботать как в связ­ке со Squ­id, так и в оди­ноч­ку, обес­пе­чивая проз­рачное прок­си­рова­ние.

Оба ре­шения дос­та­точ­но прос­ты, гиб­ки в наст­рой­ках и ра­бота­ют ста­биль­но. Ис­поль­зо­вав связ­ку Squ­id+HAVP, мож­но ре­али­зовать нес­коль­ко схем ра­боты: squ­id -> havp, havp -> squ­id, squ­id -> havp -> squ­id. Сю­да мож­но лег­ко до­бавить ad­zapper и bfil­ter. Кро­ме то­го, HAVP есть в ре­пози­тари­ях боль­шинс­тва дист­ри­бути­вов, что за­мет­но уп­ро­ща­ет про­цеду­ру ус­та­нов­ки, так как не нуж­но про­из­во­дить ряд опе­раций вруч­ную. По­это­му поз­на­комим­ся имен­но с ним.

Ста­вим:

$ su­do apt-get ins­tall havp cla­mav

В про­цес­се инс­тал­ля­ции бу­дет до­бав­лен сис­темный поль­зо­ватель и груп­па havp. Так­же бу­дет ус­та­нов­лен па­кет cla­mav-fresh­clam, ко­торый не­об­хо­дим для ав­то­мати­чес­ко­го об­новле­ния ан­ти­вирус­ных баз. В наст­рой­ках по умол­ча­нию HAVP про­веря­ет фай­лы на на­личие ви­русов при по­мощи libc­la­mav.

При боль­ших наг­рузках не­об­хо­димо до­пол­ни­тель­но инс­тал­ли­ровать па­кет cla­mav-da­emon и за­тем из­ме­нить наст­рой­ки в кон­фи­ге HAVP. Ес­ли в про­цес­се ус­та­нов­ки вы­лезет ошиб­ка вро­де «cl_lo­add­bdir(): Can't get sta­tus of /var/lib/cla­mav/ One or mo­re scan­ners fa­iled to ini­ti­ali­ze!», это оз­на­ча­ет, что libc­la­mav на мо­мент за­пус­ка HAVP не ус­та­нов­лен. Прос­то вве­ди «su­do apt-get –f ins­tall».

Сей­час HAVP и Squ­id ра­бота­ют каж­дый сам по се­бе. За­пус­тив «nets­tat», ты уви­дишь, что стал прос­лу­шивать­ся порт 8080 (на­пом­ню, что squ­id по умол­ча­нию ра­бота­ет на 3128).

Для про­вер­ки ра­ботос­по­соб­ности HAVP наст­ра­иваем веб-бра­узер на ра­боту че­рез ser­ver:8080, за­ходим на стра­ницу www.eicar.org/an­ti_vi­rus_test_fi­le.htm и про­бу­ем ска­чать тес­то­вый ви­рус. Ес­ли в от­вет по­луча­ем со­об­ще­ние, что файл заб­ло­киро­ван, идем даль­ше.

Сна­чала расс­мот­рим, как подк­лю­чить HAVP в ка­чест­ве Pa­rent pro­xy для Squ­id. То есть – кли­ент подк­лю­ча­ет­ся к Squ­id, а Squ­id че­рез HAVP уже вы­ходит в ин­тернет. Это весь­ма прос­той в ре­али­зации и к то­му же бо­лее ра­ци­ональ­ный ва­ри­ант, так как весь вхо­дящий тра­фик про­веря­ет­ся ан­ти­виру­сом, а стра­ницы из кэ­ша Squ­id вы­да­ют­ся без про­вер­ки. Отк­ры­ва­ем squ­id.conf и пи­шем:

$ su­do mce­dit /etc/squ­id/squ­id.conf

ca­che_pe­er 127.0.0.1 pa­rent 8080 0 no-que­ry no-di­gest no-netdb-exc­han­ge de­fa­ult

ca­che_pe­er_ac­cess 127.0.0.1 al­low all

# Бу­дем про­верять толь­ко HTTP

acl Scan_HTTP pro­to HTTP

ne­ver_di­rect al­low Scan_HTTP

Подк­лю­ча­ем­ся к сай­ту Eicar и про­веря­ем, как ра­бота­ет ука­зан­ная схе­ма. До­бав­ля­ем в cron­tab строч­ку для ав­то­мати­чес­ко­го об­новле­ния ан­ти­вирус­ных баз:

0 * * * * /usr/bin/fresh­clam -qui­et

В ито­ге мы по­лучи­ли пол­но­функ­ци­ональ­ную сис­те­му, кэ­ширу­ющую тра­фик, бло­киру­ющую ви­русы и рек­ла­му.

Кон­фи­гура­ци­он­ный файл HAVP

Как ви­дишь, в пре­дыду­щем при­мере мы да­же не заг­ля­нули в кон­фиг HAVP. Все долж­но ра­ботать и без на­шего вме­шатель­ства, с па­рамет­ра­ми по умол­ча­нию. Ес­ли по­надо­бит­ся ре­али­зовать об­ратную схе­му (ког­да в ка­чест­ве Pa­rent выс­ту­па­ет Squ­id), тог­да, на­обо­рот, все наст­рой­ки про­из­во­дят­ся в кон­фи­гура­ци­он­ном фай­ле HAVP – /etc/havp/havp.con­fig:

$ su­do mce­dit /etc/havp/havp.con­fig

# Порт и ад­рес, на ко­тором при­нима­ет со­еди­нения HAVP

PORT 8080

BIND_ADD­RESS 127.0.0.1

# Мож­но до­пол­ни­тель­но ука­зать IP-ад­рес ин­терфей­са для ис­хо­дящих па­кетов

#SO­UR­CE_ADD­RESS 1.2.3.4

# Ука­зыва­ем Squ­id в ка­чест­ве Pa­rent прок­си

PA­RENT­PRO­XY 127.0.0.1

PA­RENT­PORT 3128

Те­перь подк­лю­ча­ем­ся веб-бра­узе­ром к пор­ту 8080 и при подк­лю­чении к сер­ве­ру про­ходим це­поч­ку HAVP -> Squ­id -> Веб-сер­вер.

Есть нес­коль­ко мо­мен­тов в кон­фи­гура­ци­он­ном фай­ле, на ко­торые хо­телось бы об­ра­тить вни­мание. Нап­ри­мер, поль­зо­ватель и груп­па, от име­ни ко­торых ра­бота­ет HAVP, ука­заны в па­рамет­рах:

USER havp

GRO­UP havp

Havp дол­жен иметь пра­во чте­ния и за­писи во все ра­бочие ка­тало­ги. Кро­ме то­го, при ра­боте с ан­ти­виру­сом час­то по­яв­ля­ет­ся ошиб­ка «Per­missi­ons de­ni­ed». Что­бы в даль­ней­шем не бы­ло проб­лем с дос­ту­пом, я до­бав­ляю поль­зо­вате­ля havp в груп­пу cla­mav.

Ко­личест­во про­цес­сов, за­пус­ка­емых де­моном HAVP, оп­ре­деля­ет­ся дву­мя па­рамет­ра­ми:

SER­VERNUM­BER 8

MAX­SERVERS 100

Зна­чения по умол­ча­нию под­хо­дят для до­маш­не­го ис­поль­зо­вания или для не­боль­шой ор­га­низа­ции. SER­VERNUM­BER ус­та­нав­ли­ва­ет­ся в за­виси­мос­ти от ко­личест­ва кли­ен­тов.

Вот еще два не ме­нее цен­ных па­рамет­ра:

SCAN­TEMP­FI­LE /var/spo­ol/havp/havp-XXXXXX

TEMP­DIR /var/tmp

Здесь ука­зыва­ет­ся раз­ме­щение вре­мен­ных фай­лов HAVP и ка­талог для вре­мен­ных фай­лов ан­ти­виру­са. В ру­ководс­твах, дос­тупных в Се­ти, и до­кумен­та­ции HAVP ска­зано, что SCAN­TEMP­FI­LE дол­жен на­ходить­ся в раз­де­ле, смон­ти­рован­ном с ис­поль­зо­вани­ем па­рамет­ра mand. Май­нтей­нер па­кета уп­ростил нам за­дачу, и в стар­то­вом скрип­те /etc/init.d/havp есть все, что нуж­но. В этом мож­но убе­дить­ся, вве­дя ко­ман­ду «mo­unt» пос­ле заг­рузки HAVP:

$ mo­unt

/var/lib/havp/havp.lo­op on /var/spo­ol/havp ty­pe ext3 (rw,mand,lo­op=/dev/lo­op/0)

Хо­тя при боль­ших наг­рузках на сер­вер луч­ше вы­нес­ти этот ка­талог в ОЗУ:

$ su­do mo­unt -t tmpfs -o si­ze=100M,mand tmpfs /var/spo­ol/havp

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

TEMP­LA­TEPATH /etc/havp/temp­la­tes/ru

Кста­ти, мож­но подп­ра­вить html-фай­лы внут­ри это­го ка­тало­га по сво­ему вку­су.

В HAVP так­же под­держи­ва­ют­ся бе­лый и чер­ный спис­ки. Вся ин­форма­ция из пер­во­го про­ходит без про­вер­ки на ви­русы, а URL, за­несен­ные во вто­рой спи­сок, бло­киру­ют­ся:

WHI­TELIST­FIRST true

WHI­TELIST /etc/havp/whi­telist

BLACK­LIST /etc/havp/black­list

Внут­ри этих фай­лов со­дер­жатся шаб­ло­ны URL. Нап­ри­мер, ес­ли за­нес­ти в whi­telist стро­ку:

*/*.gif

– тог­да все GIF фай­лы бу­дут про­ходить без про­вер­ки. Не­кото­рые ти­пы ар­хи­вов Cla­mAV про­верять не уме­ет. Что­бы поль­зо­ватель не по­лучал со­об­ще­ние об ошиб­ке, раз­ре­шим про­пус­кать та­кие фай­лы, а за­од­но отк­лю­чим ска­ниро­вание изоб­ра­жений, ог­ра­ничим раз­мер про­веря­емых объек­тов и про­из­ве­дем не­боль­шую оп­ти­миза­цию:

FA­ILS­CA­NER­ROR fal­se

SCA­NIMA­GES fal­se

MAXS­CAN­SI­ZE 5000000

STRE­AMU­SERA­GENT Pla­yer Wi­namp iTu­nes Qu­ick­Ti­me Audio RMA/ MAD/ Fo­obar2000 XMMS

Те­перь раз­бе­рем, как подк­лю­ча­ет­ся к HAVP ан­ти­вирус Cla­mAV. По умол­ча­нию про­вер­ка про­из­во­дит­ся при по­мощи libc­la­mav:

ENAB­LECLAM­LIB true

CLAMD­BDIR /var/lib/cla­mav

При­чем, нуж­но прос­ле­дить, что­бы па­раметр CLAMD­BDIR ука­зывал на тот же ка­талог, что и па­раметр Da­taba­seDi­rec­to­ry в фай­ле /etc/cla­mav/clamd.conf. Впро­чем, ес­ли в жур­на­ле HAVP /var/log/havp/ac­cess.log ви­дим за­пись вро­де:

--- Ini­ti­ali­zing Cla­mAV Lib­ra­ry Scan­ner

Cla­mAV: Using da­taba­se di­rec­to­ry: /var/lib/cla­mav/

Cla­mAV: Lo­aded 244019 sig­na­tures (en­gi­ne 0.92)

Cla­mAV Lib­ra­ry Scan­ner pas­sed EICAR vi­rus test (Eicar-Test-Sig­na­ture)

--- All scan­ners ini­ti­ali­zed

Pro­cess ID: 8406

– зна­чит, все пу­тем, и ни­чего тро­гать не нуж­но. Да­лее в havp.con­fig идут па­рамет­ры, оп­ре­деля­ющие по­веде­ние Cla­mAV при ска­ниро­вании за­шиф­ро­ван­ных ар­хи­вов, мак­си­маль­ный раз­мер про­веря­емо­го фай­ла и др. Что­бы вмес­то libc­la­mav ис­поль­зо­вал­ся де­мон clamd, ком­менти­ру­ем пре­дыду­щие стро­ки и пи­шем:

ENAB­LECLAMD true

CLAMD­SOC­KET /var/run/cla­mav/clamd.ctl

Зна­чение вто­рого па­рамет­ра бе­рем из пе­ремен­ной Lo­cal­Socket фай­ла clamd.conf. Это как раз тот слу­чай, ког­да вклю­чение havp в груп­пу cla­mav бу­дет не лиш­ним.