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

 

 

 

 

 

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

 

 

phreakingw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ПЛАТФОРМАНАГУСЕНИЦАХ

ВОТТАКОЙРОБОТПОЛУЧИЛСЯУМЕНЯ, ТОЛЬКО

 

СДРУГИМИДАТЧИКАМИ

СХЕМАРОБОТА

 

PORTC.0 = 0xFF;

PORTC.1 = 0x00;

PORTC.2 = 0xFF;

PORTC.3 = 0x00;

«0xFF» означает, чтонавыходебудетлог. «1», а«0x00» — лог. «0». Этойконструкциеймыпроверяем, естьлипередроботомпрепятствиеи скакойоностороны:

if (!(PINB & (1<<PINB.0)))

{

...

}

Еслинафототранзисторпопадаетсветотик-диода, тонаногемикроконтроллераустанавливается«0», ироботначинаетдвижениеназад, чтобы отъехатьотпрепятствия. Потомразворачивается, чтобыснованестолкнутьсяспреградой, изатемопятьедетвперед. Таккакунасдвадатчика, томыпроверяемналичиепреградыдвараза— справаислева, ипотому можемузнать, скакойстороныпрепятствие. Команда«delay_ms(1000)»

XÀÊÅÐ 08 /128/ 09

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

СОБРАТЬТЕРМИНАТОРА

Ярассмотрелбольшинствоаспектов, которыепомогуттебесобрать первогоробота. Нонаэтомробототехниканезаканчивается. Если справишьсяспервымэтапом, тоутебяпоявитсякучановыхвозможностей. Можноусовершенствоватьалгоритмробота, — например, что делать, еслипрепятствиенескакой-тостороны, апрямопередроботом? Такженепомешаетустановитьэнкодер— простоеустройство, котороепоможетточнознатьрасположениероботавпространстве. Для наглядностивозможнаустановкацветногоилимонохромногодисплея, которыйбудетпоказыватьуровеньзарядааккумулятора, расстояние допрепятствияиразличнуюотладочнуюинформацию. Непомешает усовершенствоватьдатчики— установитьTSOP (этоик-приемники, которыевоспринимаютсигналтолькоопределеннойчастоты) вместо обычныхфототранзисторов. Помимоинфракрасныхдатчиковсуществуютультразвуковые; стоятподорожеитоженелишенынедостатков, новпоследнеевремянабираютпопулярностьуроботостроителей. Чтобыроботмогреагироватьназвук, былобынеплохоустановить микрофонысусилителем. Нопо-настоящемукласснымясчитаюуста- новкукамерыипрограммированиенаееосновемашинногозрения! ЕстьнаборспециальныхбиблиотекOpenCV, спомощьюкоторыхможно запрограммироватьраспознаваниелиц, движенияпоцветныммаякам имноговсегоинтересного. Всезависит только от твоих фантазии и умений. z

109

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

w Click

to

 

 

 

 

phreaking

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

АЛЕКСЕЙ «CLUSTER» АВДЮХИН / CLUSTERRR@CLUSTERRR.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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>> phreaking

Делаемфаршизмикроконтроллеровироутера

Вэтойстатьеярасскажуисториюсозданиясобственного«умного дома». Идеястара, какмир, носвойагрегатяподружилсбытовым роутеромотASUS! Этодалополноценныйконтрольнадустройствами посетиспомощьюпрограммногообеспечениядляLinux. Хочешь узнать, каквыжатьиз«железа» роутерамаксимум?

СЧЕГОВСЕНАЧИНАЛОСЬ…

Сдетствауменябыложеланиеавтоматизироватьвсвоейкомнате все, чтотолькоможно. Инымисловами, сделать«умныйдом». И чемумнее, темлучше. Основнаяцель— этодистанционновключать ивыключатьразличныеустройства: лампы, люстру, розеткиипр. Когда-тоянебылзнакомсмикроконтроллерамииделалвсечерез LPT-порткомпьютера. Сказать, чтоэтобылонеудобно— несказать ничего. Компьютеряневыключалникогда, прикаждойперезагрузке вкомнатеначиналась«дискотека», априпереустановкесистемы

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

Решениевполнеочевидно. Устройствамиуправляетмикроконтроллер ATmega16, которыйсвязываетсяскомпьютеромчерезCOM-порт. Для включенияивыключенияустройствявзялнесколькоэлектромагнитных реле. Использоватьихоченьпросто: подаемпитание, ионизамыкают контакты. Думаю, тебеужеизвестно, чтологическаяединицананоге микроконтроллераAVR — этопримерно+5 вольт, алогическийноль— соответственно, 0 вольт. Однакоподключатьреленапрямуюнельзя. Во-первых, 5 вольтможетбытьмало. Во-вторых, нельзя, чтобычерезногу микроконтроллерашелслишкомбольшойток. Надоиспользоватьпромежуточныерелеилитранзисторы; соответствующаясхемаприведенана рисунке. Сточкизренияпрошивкиэтосамаяпростаячасть. Записываем логическуюединицувбитсоответствующейноги(врегистреPORTx, гдеx

— буквапорта), исветвкомнатевключается. Записываемноль— выключается. Прощеужточнонекуда. Теперьпросвязьскомпьютеромчерез COM-порт— дляэтогоиспользуетсявстроенныйвмикроконтроллер USART-порт. Примерработыснимподробнорассматривалсявпрошлом

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

ПРАВДА, КРУТО?

Ияэтосделал. Затемначалипоявлятьсядругиеидеи: ДУприемник дляуправленияспультаотлюбоготелевизора, термодатчикидля отображениятемпературынаулицеивкомнате; датчикдвижения дляавтоматическогоотключениясвета, когдаменянет. Проекточень активноразвивался. Протоколдлявзаимодействияскомпьютером усложнился. ДляWindows быларазработанасоответствующаяпрограмма, котораякомандовалаустройствувключать/выключатьлюстру принажатии«горячих» клавишнаклавиатуре, ставилаваське/мирке статус«отошел», еслидатчикдвижениядолгоменянезамечал, выво- дилатекстсообщенийизтойжеаськи/миркинаЖК-дисплей. Атакже делаламногиедругиефишки.

ПОДВОДНЫЕКАМНИ, ИЛИИСПОЛЬЗУЕМСЕТЬ

Привсемэтомначалипроявлятьсядругиетраблы. «Умныйдом» взаимодействовалскомпьютером, нотолькосодним. Амнехотелось, чтобыямогуправлятьвсемслюбогоустройствапосети, будьтомобильныйтелефон, Nintendo DS илижепростоудаленныйкомпьютер. Первоерешение, котороепришловголову, былодостаточнобаналь-

110

XÀÊÅÐ 08 /128/ 09

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

phreakingw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

РОУТЕРНАСТЕНЕ. ДЛЯCOM-ПОРТАЯВЫВЕЛНЕИС- ПОЛЬЗУЕМЫЕПРОВОДАИЗВИТОЙПАРЫ

СЕТЕВАЯРОЗЕТКАСТАЛАЕЩЕИCOM-РОЗЕТКОЙ

УПРАВЛЯЕМ«УМНЫМДОМОМ» СМОБИЛКИ ВНЕШНИЙВИДУСТРОЙСТВА

ным. Ядоработалпрограмму, котораяобщаетсячерезCOM-портс «умнымдомом», так, чтобыонапринималаподключенияпосети, позволяяуправлятьвсемудаленно.

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

Мною были рассмотрены различные способы работы с последовательным портом через сеть. Решение нашлось, когда я приобрел роутер ASUS WL-500gP. Дело в том, что в этом замечательном устройстве крутится Linux, а внутри роутера есть два UART-порта, которые используются на заводе для отладки.

Один из них позволяет работать с системной консолью, а второй совсем никак не используется. Именно это нам и надо! Ничто не мешает превратить UART в COM-порты, используя микросхему MAX3232. Именно так я и сделал. Подробнее фича рассматривалась совсем недавно, в z№ 125 (статья Сергея Долина «Великий и могучий UART»). Итак, мыполучилироутер, гдеестьLinux, сетьи COM-порты— идеальноеустройстводлямоихцелей, таккакработает круглосуточно, нешумитиэлектричествакушаетмало. Саппаратной точкизрениярешениенайдено, нокакбытьссофтом? Иязадался вопросомпрограммированияподроутер.

XÀÊÅÐ 08 /128/ 09

111

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

w Click

to

 

 

 

phreaking

 

 

 

 

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

 

 

 

 

АЛЬТЕРНАТИВНЫЕ

МЕТОДЫ

Еслитынехочешьразбиратьсвойроутер, томожешьпростокупитьUSBCOM шнурокивоткнутьеговUSB-порт. ВпрошивкеОлегаужеестьдрайверадлятакихустройствнаосновечипа«pl2303». Достаточнозагрузить модуликомандами«insmod usbserial.o» и«insmod pl2303.o». Врезультате появитсяещеодинпорт«/dev/usb/tts/0».

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

УСТАНОВКАIPKG

mount /dev/scsi/host0/bus0/target0/lun0/

part1 /opt ipkg.sh update

ipkg.sh install ipkg-opt ipkg update

Обративнимание, что«/dev/scsi/host0/bus0/target0/ lun0/part1» — этоEXT3-разделнамоейфлешке. Онауже разбитаиотформатирована; соответственно, утебяпуть можетотличаться. Полагаю, тыужезнаешь, какисполь-

ПЛАТАДЛЯMAX3232

DVD

dvd

Надискетынайдешь исходникимоейпрограммыдляроутера. Используйее вкачествепримера.

«ОЛЕГОВСКИЕ» ПРОШИВКИ

Многие роутеры от ASUS стали популярны благодаря так называемым «олеговским» прошивкам, которые разрабатывает наш соотечественник Олег (увы, фамилию свою он нигде не упоминает). Эти прошивки позволяют получить полноценный доступ к Линуксу, а на продвинутых моделях еще и устанавливать дополнительный софт. Скачать это чудо можно на официальном сайте: http://oleg.wl500g.info. Когда я впервые поставил такую прошивку на свой WL-500gP, счастью не было предела. После небольших манипуляций установка софта свелась к простому использованию менеджера пакетов «ipkg». Эта тема подробно рассматривалась в статье Step’а (z №106, статья «Level-up для точки доступа»), поэтому

зовать«fdisk» и«mke2fs»; яопущуэтиинструкции. Да, и незабывай, чтоприэтомуроутерадолженбытьдоступв интернет, — онбудетсамкачатьпакеты. Чтобымонтированиепроизводилосьавтоматическипослезагрузки, я выполнилещенесколькокоманд:

АВТОМАТИЧЕСКОЕМОНТИРОВАНИЕФЛЕШКИ echo "#!/bin/sh" > /usr/local/sbin/post-

mount

echo "mount /dev/scsi/host0/bus0/target0/ lun0/part1 /opt" >> /usr/local/sbin/postmount

chmod +x /usr/local/sbin/post-mount flashfs save

112

XÀÊÅÐ 08 /128/ 09

 

 

 

 

 

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

 

 

phreakingw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ВНУТРИРОУТЕРА

flashfs commit flashfs enable

Файл«post-mount» выполняетсясистемойнаавтоматепослемонтированиядисков, апоследниетристрокисохраняютизмененияво встроеннойпамятироутера. Незабывайвыполнятьих, иначерискуешьпотерятьданныепослеперезагрузки! Затемможноустанавливатьпакетыизрепозитория, используяпростуюкоманду«ipkg install <имя_пакета>».

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

кет«buildroot». Делаетсяэтооднойкомандой«ipkg install buildroot»,

еслиipkg утебяужеустановленинастроен. Далеестановятсядоступныgcc, g++, make ивсестандартныебиблиотеки. Надеюсь, тыуже знаешь, какихиспользовать? Япервымделомнаписалпростейшую программу:

HELLO WORLD

[Cluster@CLUSTER Cluster]$ cat hello.c #include <stdio.h>

«НАССТОБОЙИНТЕРЕСУЮТ

ВИНДОВЫЙКЛИЕНТВДЕЙСТВИИ

 

НЕЧУЖИЕПРОГРАММЫ,

 

АСВОИ! КАКЖЕИХПИСАТЬ?

 

ЭТООКАЗАЛОСЬПРОЩЕ, ЧЕМ

 

ЯОЖИДАЛ: ЛИНУКС, ОН

ИВАФРИКЕЛИНУКС. ИЕСЛИ ТЫУМЕЕШЬПИСАТЬПРОГРАММЫДЛЯНЕГО, ТОСМОЖЕШЬ ПИСАТЬИХИДЛЯРОУТЕРА».

ПИШЕМПРОГРАММЫДЛЯРОУТЕРА

Нонасстобойинтересуютнечужиепрограммы, асвои! Какжеих писать? Этооказалосьгораздопроще, чемяожидал. Линукс, они вАфрикеЛинукс. Иеслитыумеешьписатьпрограммыдлянего, то сможешьписатьихидляроутера. Разницыникакой. Чтодляэтого нужно? Конечно, компилятор. Якомпилируюсырцыпрямонароуте-

XÀÊÅÐ 08 /128/ 09

113

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

w Click

to

 

 

 

phreaking

 

 

 

 

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

 

 

 

 

 

UART-ВЫВОДЫВНУТРИWL-500GP ОТASUS

 

 

 

ТАКОЙВОТПОЛУЧИЛСЯКОЛХОЗ

 

 

 

 

int main()

 

 

{

int fd;

 

printf("Hello world!\n");

struct termios options;

 

}

fd = open(UARTPORT, O_RDWR | O_NOCTTY | O_NDELAY);

 

[Cluster@CLUSTER Cluster]$ gcc hello.c -o hello

if (fd == -1)

 

[Cluster@CLUSTER Cluster]$ ./hello

{

 

Hello world!

perror("Can’t open port");

 

 

exit(1);

 

 

Просто, ноэффектно. Осталосьвоплотитьвжизньмоюидею. Дляэто-

 

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

 

портамиисетевымисокетами. Алгоритмнесложен. Прослушиваем

 

TCP-порт, принимаемвходящиеподключенияпосети. Еслиотлюбого

 

изсетевыхклиентовприходятданные, топересылаемихнаUART-

 

порт. Если, наоборот, изпоследовательногопортапришлиданные, то

 

рассылаемихвсемсетевымклиентам.

 

ПоследовательныепортывтамошнемЛинуксеимеютимена«/dev/

 

usb/tts/0» и«/dev/usb/tts/1». Первый, какяужеговорил, используется

 

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

 

егодлясвоихцелей. Помнишь, впрошломномеремырассматривали

 

подключениеЖК-дисплеякCOM-портукомпьютерачерезмикрокон-

 

троллер? Этоустройстволегкоподключитькроутеру, чтобывыводить

 

данныенаэкран, икомпьютердляэтогоужененужен. Ятакисделал,

 

азатемнабралвконсолидвепростыекоманды:

}

}

tcflush(fd, TCIFLUSH); tcgetattr(fd, &options); options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; options.c_cflag &= ~CRTSCTS;

options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); cfsetospeed(&options, B9600);

tcsetattr(fd, TCSANOW, &options); fcntl(fd, F_SETFL, FNDELAY);

printf("UART (%s) port opened\n", UARTPORT); return fd;

ПРОВЕРКАПОРТА

Тутконстанта«UARTPORT» — путькфайлу-устройству, который

stty -crtscts 9600 < /dev/tts/1

 

ассоциируетсяспортом. Вданномслучаеэто«/dev/tts/1». Собствен-

echo "Hello world!" > /dev/tts/1

 

нофункция«fopen()» открываетпорт, далеепростоидетизменение

 

 

 

различныхпараметров. Впримереиспользуетсяскоростьв9600

 

 

Перваякоманда— установкапараметровпорта. Вторая— выводтекс-

бод, одинстоповыйбит; контроляпередачиданныхнет. Записьи

та. Экспериментудался, ияувиделнаэкранесоответствующийтекст. А

чтениепроизводятсяфункциями«write()» и«read()». Какработать

воткакэтосделатьизсвоейпрограммы? РаботатьспортамивЛинуксе

ссокетами, наверное, многиеужезнают, — дляостальныхприведу

мнепришлосьвпервые, получилосьдалеконесразу, ипришлосьдолго

функцию, котораяоткрываетпортиподготавливаетегодляпринятия

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

соединений:

ции, котораяоткрываетпортдлячтенияизаписи:

 

 

 

СОЗДАЕМСОКЕТИПРОСЛУШИВАЕМЕГО

ОТКРЫВАЕМПОСЛЕДОВАТЕЛЬНЫЙПОРТ

 

int StartListen()

 

 

 

int open_uart_port()

 

 

{

{

 

 

int sock;

 

 

 

 

 

 

 

 

 

114

XÀÊÅÐ 08 /128/ 09

 

 

 

 

 

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

 

 

phreakingw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ГРАФИКТЕМПЕРАТУРЫЗАСУТКИ

СХЕМАПОДКЛЮЧЕНИЯРЕЛЕКМИКРОКОНТРОЛЛЕРУ

int i = 1;

if ((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0)

{

perror("Can’t create socket"); return -1;

}

bzero(&sa, sizeof(sa)); sa.sin_family = AF_INET; sa.sin_port = htons(CCPORT);

sa.sin_addr.s_addr = htonl(INADDR_ANY);

if (bind(sock, (struct sockaddr *)&sa, sizeof sa))

{

perror("Can’t bind port"); close(sock);

return -1;

}

if (listen(sock, 15))

{

perror("Can’t listen port"); close(sock);

return -1;

}

if (ioctl(sock, FIONBIO, &i))

{

perror("Can’t set non-blocking mode"); close(sock);

return -1;

}

printf("Listening on port %u\n", CCPORT); return sock;

}

Константа«CCPORT» — этономерпорта, накоторыйбудутприниматьсясоединения. Обративнимание, чтояперевожусокетв неблокирующийрежим(хочумаксимальноупроститькод). Вызовом этихдвухфункцийяначинаюработупрограммы. Теперьвбесконечномцикленеобходимопроверятьналичиеданныхсобеихсторони передаватьихдальше. Кодпростой, нослишкомдлинныйдлястатьи, поэтомуищиегонадиске. Витогероутерсталсвоеобразнымпере- ходникоммеждусетьюиCOM-портом.

XÀÊÅÐ 08 /128/ 09

КЛИЕНТСКИЕПРОГРАММЫ

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

БОНУСЫРОУТЕРА

ЕсливсеэтобезобразиеработаетподЛинуксом, значит, можноиспользоватьмножестводругихутилит, портированныхнаэтотроутер. Самоеочевидное— этовеб-сервер! Яиспользую«lighttpd», ондостаточнолегкийиумеетвсе, чтонужно. ЕгонетрудноподружитьсPHP.

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

Такжеявоспользовалсяутилитой«rrdtool», — этооченьинтересная программа, котораяпозволяетзаноситьинформациювсвоеобразную базуданныхирисоватьпонейграфики. Мнебылолюбопытно, ия реализовалвыводграфиковсданнымиотемпературезапрошедшиесутки, неделюит.д. Получилосьвесьмасимпатично. Планирую ещесделать, чтобыотслеживалосьдвижениевкомнате, ироутер присылалмнеSMS, есливдругвкомнатукто-товошел. Своеобразная самодельнаясигнализация.

КОФЕВПОСТЕЛЬ

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

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

115

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

w Click

to

 

 

 

 

SYN/ACK

 

 

 

 

 

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

 

 

 

 

>> SYN/ACK

_SSH3R1FF-

/ SSH3R1FF@GMAIL.COM /

Серпом поаськам

РежемIM, Skype, P2P ивсеостальное

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

 

ИЗУЧАЕМ ВОПРОС Вообще говоря, процесс

Теперь в расставленные сети будет попадаться

 

-j REJECT

 

 

блокировки доступа пользователей к IM-сетям

только то, что нужно. Аналогично отлавливают-

 

iptables -A OUTPUT -d id.rambler.ru

 

 

довольно прост: достаточно указать в пакет-

сяданныеипоостальнымIM-сетям.Всеклиенты

 

-j REJECT

 

 

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

ICQ,втомчислеирамблеровские,дляподключе-

 

 

 

 

 

 

 

 

сможет подключиться к серверу. Такой метод

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

Использование доменного имени с одной сторо-

 

помогает только в 90% случаев, остальные 10%

login.icq.com и порт 5190. В асечных рекоменда-

ны более универсально, так как IP всегда может

 

приходятся на умников, знающих о том, что се-

циях сказано, что в случае недоступности 5190

измениться,носдругойстороны—«влет»найти

 

годняпредлагаетсябольшоеколичествоутилит

подключаться можно и к порту 443. Продолжаем

всеалиасысложновато,поэтомунелишнейбудет

 

исервисов,задачакоторых—помочьзадавлен-

исследование и смотрим, что мы можем узнать о

блокировкаипоадресу.Темболее,разработчики

 

ному админскими правилами пользователю

домене:

 

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

 

вырваться на свободу. Для этого используется

 

 

 

сервисы вроде www.icq.com/icq2go, позволяю-

 

подключение через стандартный http-порт

 

$ host login.icq.com

 

щиеобщатьсячерезвеб-интерфейс.Хотяименно

 

или шифрование соединения, что не позволяет

 

login.icq.com is an alias for login.

 

этот вариант легко блокируется, достаточно за-

 

просто взять и отбросить пакет или просмот-

 

messaging.aol.com.

 

крыть доступ к диапазону IP (он виден в выводе

 

ретьегосодержимое.Универсальногорешения,

 

login.messaging.aol.com has address

 

dig):

 

скорее всего, не будет никогда. Это даже дела-

 

64.12.161.153

 

 

 

 

 

ет нашу работу интереснее. Так как мы пока не

 

 

 

 

iptables -A OUTPUT -d 64.12.0.0/16

 

 

 

 

 

 

 

 

знаем,чтоконкретноискать,запускаемtcpdump

Вывод показывает, что login.icq.com является

 

-j REJECT

 

 

безпараметров:

 

псевдонимом для другого имени, и, подозреваю,

 

iptables -A OUTPUT -d 205.188.0.0/16

 

 

 

 

далеконеединственным.Еготакженемешаетза-

 

-j REJECT

 

 

$ sudo tcpdump -i eth0

 

блокировать в правилах. Как видишь, ситуацию

 

 

 

 

 

 

 

 

 

 

с ICQ и многими другими сервисами немного

Но даже неискушенный юзверь найдет в

 

 

 

 

Авотинашааська:

усложняет наличие большого количества алиа-

интернете еще с десяток реализаций icq2go

 

 

 

сов и подсервисов, поэтому приходится искать и

(à-ëÿ www.meebo.com), предлагающих кон-

 

21:33:55.687042 IP 10.10.10.10.33018

 

прикрывать все возможные варианты. Еще одна

нект к IM-системе в обход ограничений. Вот

 

> 64.12.26.150.aol: . ack 11334 win

 

полезнаякоманда—dig—дастнаиболееполную

здесь уже придется повозиться. Не буду му-

 

63920

 

инфуполюбомудомену(diglogin.icq.com).

чить детальным выводом tcpdump'а, скажу

 

 

 

В первом случае заблокировать доступ очень

только, что Yahoo! Messenger использует

 

 

 

 

Вывод нам дал, как минимум, два полезных па-

просто. Сначала режем по порту и затем для вер-

TCP-порты: 5000-5001,5050,5100 и UDP-пор-

 

раметра—IP-адрессервераICQ,ккоторомупод-

ностидобавляемправилодлядомена,есликто-то

òû: 5000-5010, MSN — 1863, Jabber/Gtalk

 

ключаетсяклиент,иназваниепротокола.Номер

захочет нас надуть (все примеры буду приводить

— 5222, 5223, IRC обычно 6667-6669, Ìail-

 

нужногопортаможноузнатькомандой«grepaol

дляiptables,нопринеобходимостиихлегкомож-

Агент работает по портам: 2041, 2042. Особо

 

/etc/protocols», запустив tcpdump с ключом '-n'

но переписать для любого другого пакетного

не раздумывая, сделай запрет на все! Помни,

 

или просто спросив у гугла. Мы ищем аську, по-

фильтра):

что некоторые сервисы (например, узкопро-

 

этомупишем:

 

 

 

фильные IRC и т.п.) могут менять порты по

 

 

 

 

iptables -A FORWARD -p TCP --dport

 

умолчанию. Правила для этих сетей строим

 

$ sudo tcpdump -i eth0 dst portrange

 

 

5190 -j DROP

 

по аналогии с предыдущим. Например, для

 

5190

 

 

iptables -A OUTPUT -d login.icq.com

 

Yahoo Messenger:

 

 

 

 

 

 

 

 

 

116

 

 

 

 

 

XÀÊÅÐ 08 /128/ 09

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

SYN/ACKw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

iptables -A FORWARD -p TCP --dport 5000:5001 -j REJECT iptables -A FORWARD -p TCP --dport 5050 -j REJECT iptables -A FORWARD -p TCP --dport 5100 -j REJECT iptables -A FORWARD -p UDP --dport 5000:5010 -j REJECT iptables -A FORWARD -d cs.yahoo.com -j REJECT iptables -A FORWARD -d scsa.yahoo.com -j REJECT

Из дополнительных мер можно посоветовать перенастроить свой DNS-сервер, чтобы пользователь вместо правильного адреса получал изначально нерабочий. К слову, анализ DNS-запросов в сети может дать не меньше информации к размышлению, чем отлов пакетов с tcpdump. Поскольку мой DNS-сервер крутится на OpenBSD, приведу пример для BIND 9.3.4:

$ sudo vim /var/named/etc/named.conf logging {

// определяем канал — место назначения журнальных записей

channel queries_ch {

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

file "/log/queries.log" versions 5 size 10m;

// устанавливаем уровень журналирования (нам подойдет debug, либо info)

severity debug;

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

print-category yes; print-severity yes; print-time yes;

};

// фиксируем клиентские обращения category queries { queries_ch; }; category resolver { queries_ch; };

};

MIPKO EMPLOYEE MONITOR

Представим такую ситуацию: политикой компании разрешено использовать ICQ только менеджеру по продажам, но он целый день болтает в аське с друзьями, вместо того, чтобы разводить клиентов на заказы. При помощи программ, описанных в статье, это определить нельзя. Поэтому возможен и альтернативный подход — наблюдение. На рабочем месте устанавливается программа, которая перехватывает все вводимые сообщения, контролирует запуск приложений и работу в интернете. Начальство в этом случае получает отчеты по всем действиям пользователя, включая снимки рабочего стола, и может оценить эффективность работы сотрудника. Пример такой программы — MIPKO Employee Monitor (www.mipko.ru). Она разработана российской компанией, имеет локализованный интерфейс и довольно проста в использовании. Программа может бытьзапущенавскрытомрежиме.Вэтомслучаеотследитьееработу штатными системными средствами невозможно.

ЦЕПКИЙЗАХВАТ

По умолчанию l7-filter просматривает лишь первые 10 пакетов или 12 Кб каждого соединения, чего обычно более чем достаточно. При необходимости можно указать свое значение, прописав его в /proc/ net/layer7_numpackets:

$ sudo sh -c "echo 16 > /proc/net/layer7_numpackets"

Пример блокировки ICQ для packet filter

$ sudo vim /etc/pf.conf

table <ICQDests> const { 64.12.0.0/16, 205.188.0.0/16 }

block out log quick on $ext_if proto { tcp, udp } \ from any to <ICQDests>

block out log quick on $ext_if proto { tcp, udp } \ from any to any port { 4000, 5190 }

XÀÊÅÐ 08 /128/ 09

117

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

w Click

to

 

 

 

SYN/ACK

 

 

 

 

 

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

 

 

 

 

 

d

f

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ИСПОЛЬЗУЕМHOST ИDIG, ЧТОБЫПОЛУЧИТЬИНФОРМАЦИЮ ОСЕРВЕРАХICQ

Перезапускаем демон named и включаем журналирование DNS-запросов:

INFO

$ sudo rndc reload $ sudo rndc querylog

 

info

Смотримвлоги:

• Подробнееона-

 

 

стройкеSquid можно

 

$ sudo tail -f /var/named/log/queries.log

прочитатьвномерах

 

30-Jun-2009 16:22:15.036 resolver: debug 1:

z замай-июль2008

 

createfetch: ns.mail.ru A

года.

 

30-Jun-2009 16:22:35.179 queries: info: client

 

 

 

 

 

192.168.1.21#64773: view internal: query: www.

• Чтобызаставить

 

meebo.com IN A +

Netfilter глубже

 

30-Jun-2009 16:22:35.868 queries: info: client

заглянутьвнутрь

 

192.168.1.21#63341: view internal: query:

пакетов, необходи-

 

js.meebo.com IN A +

моустановитьпатч

 

 

 

 

l7-filter.

Вдальнейшемборьбабудетвестисьпопринципу«увиделчто-

 

 

 

 

тоновоевnetstat/tcpdump/queries.log,проанализировалидо-

 

 

 

 

бавилправило».Врепозиторияхдистрибутивовполновсяких

 

 

 

 

полезных утилит. Например, iptstate выводит TOP-образную

 

 

 

 

таблицу по соединениям. Чтобы упростить задачу, можно ис-

 

HTTP://WWW

 

 

пользоватьфильтрпортовилиадресов:

 

links

 

 

 

 

$ sudo iptstate --dstpt-filter=5190

• Netfilter/Iptables —

 

 

 

 

netfilter.org.

Такмыувидимвсепопыткиподключениякасечномупорту.

• Squid — www.squid-

 

 

cache.org.

ПЕРЕКРЫВАЕМ КИСЛОРОД СРЕДСТВАМИ КАЛЬМАРА

• l7-filter — l7-filter.

Как только основные порты для связи с IM-сервером будут пе-

sf.net.

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

IPP2P — ipp2p.org. ный порт 80/443 или через прокси. Здесь iptables в том виде, в

P2PWall — www. котором он есть, нам уже не поможет, но не забываем о сущес- lowth.com/p2pwall. твованииSquid'а—онработаетнаприкладномуровнеиумеет

анализироватьпередаваемуюинформацию.Надеюсь,кэтому временикальмарутебяуженастроен,ивсепользователичерез неговыходятвинтернет(подробнееонастройкеSquidсмотри влетнихномерахzза2008год).Сампринципблокировокостается тем же — запрещаем доступ к определенным адресам. Итак,открываемsquid.confидописываем:

ВЕБ-АСЬКАICQ2GO

$ sudo vim /etc/squid/squid.conf

//Указываем свой адрес acl admin src 192.168.10.10

//aim/http — MIME-òèï ICQ

acl aim_http rep_mime_type -i ^aim/http$

//Блокируем всех, кроме себя любимого http_reply_access deny aim_http !admin

//Ну и чтобы наверняка, перекрываем доступ к серверам ICQ

acl ICQ-Mess dst 64.12.200.89/32 205.188.153.121/32 205.188.179.233/32 64.12.161.153/32 64.12.161.185/32 http_access deny ICQ-Mess !admin

Учитывая, что резать придется и другие IM-сети, а также бесплатные почтовики вроде mail.ru, проще для всех блокируемых адресов создать отдельный файл, подключив его в правиле:

acl im_nets src "/usr/local/etc/squid/icq_ nets.acl"

http_acces deny im_nets !admin

Остается только почаще заглядывать в отчеты Sarg (анализа- торлог-файловSquid)ипроверять,вселилазейкиприкрыты.

ДОПИЛИВАЕМ IPTABLES Все сделано правильно, нужные порты и адреса заблокированы, но хитрые пользователи все равно нашли способ обойти преграды. Снова возвращаемся на нижний уровень OSI к нашему iptables. Начиная с версии 2.6.14, в состав ядра включен модуль (ранее он был в patch- o-matic-ng),позволяющийзаглянутьвнутрьпакетаипостро- итьправило,опираясьнаналичие/отсутствиеопределенных строк. Модуль называется string (xt_string). В большинстве современныхдистрибутивоввсенеобходимоеужеесть,ипересобирать ничего не придется. Чтобы проверить, достаточ- нопросмотретьсписокфайловвкаталогемодулей:

$ ls /lib/modules/2.6.24-24-generic/kernel/ net/netfilter/xt_string.ko

Сегопомощьюзадаватьправиладовольнопросто:

$ sudo iptables -A FORWARD -m string --string "icq.com" \

--algo kmp --to 65535 -j DROP

Теперь, если в пакете обнаружится соответствующая строка, в доступе будет отказано. Так же можно резать и все остальное, к чему не лежит душа начальства/админа. Например,

118

XÀÊÅÐ 08 /128/ 09

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