Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
15.82 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

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Sergey Jaremchuk feat. Andrey Matveev

Делаемденьги назвездах

КАКСЭКОНОМИТЬИЗАРАБОТАТЬСПОМОЩЬЮASTERISK

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

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

ТОНКОЕСОПРЯЖЕНИЕУ средней и, тем более, крупной организации часто есть филиалы в разных городах или странах. Если в удаленных офисах существует возможность воздвигнуть IP-PBX сервера на базе Asterisk, то почему не объединить их в единую сеть? Этим мы убьем сразу нескольких зайцев: сведем на нет стоимость звонков между «точками», обеспечим безопасное голосовое соединение (путем применения IPsec-шифрования

êпотоку голосовых данных), создадим все условия для проведения аудио- и видеоконференций. А также получим все дополнительные телефонные свойства, присущие VoIP: запись телефонных разговоров, IVR (система предварительно записанных голосовых сообщений, выполняющая функцию маршрутизации звонков внутри call-центра), альтернативный GSM-роуминг и т.д. Продемонстрировав начальству выгоду от внедрения подобного решения, можно в корне изменить отношение

êIT-подразделению (сотрудников которого зачастую считают вечными нахлебниками) и получить щедрые премиальные.

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

Подружить два Asterisk'a можно по протоколу установления сессии SIP (Session Initiation Protocol, RFC 3263), либо по IAX2 (Inter-Asterisk eXchange protocol, протокол обмена VoIP-данными между IP-PBX Asterisk, RFC 5456). Мы выберем второй вариант, так как IAX2 лучше адаптирован для работы из-за NAT. Он использует единственный порт (4569/UDP) для передачи сигнальных

данных и медиапотока (т.е. меньше проблем

ñнастройкой файеров на шлюзах и проблем

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

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

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

$ sudo nano /etc/asterisk/iax.conf

;Подключаемся ко второму Asterisk [general]

;register => <username>:<password>@<имя или IP адрес>

register => userB:password@synack. ru

;Данные для подключения

[synack]

type=friend

user=username

secret=password

host=synack.ru

context=synack

Теперь необходимо добавить в диалплан описание нового маршрута:

$ sudo nano /etc/asterisk/extensions.conf

[synack]

exten => _5XXX,1,NoOp() exten => _5XXX,n,Dial(IAX2/ synack/${EXTEN})

exten => _5XXX,n,Hangup()

Вот, собственно, и все настройки на первом сервере.

На другой стороне описание в iax.conf и настройки практически аналогичны. Учитывая, что этот сервер принимает подключение, убираем параметр register.

$ sudo nano /etc/asterisk/iax.conf

[office]

type=friend

user=user

secret=password

host=dynamic

; В целях безопасности разрешим подключения только с нужного IP-адреса deny=0.0.0.0/0

permit=11.22.33.44

context=office

А в конфиге extensions.conf задаем второй пул номеров:

exten => _8XXX,1, Dial(IAX2/office/ ${EXTEN})

XÀÊÅÐ 03 /134/ 10

119

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY

 

 

 

 

 

SYN/ACK

 

 

 

 

 

 

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

 

 

 

 

Если в подчинении несколько IP-PBX Asterisk, то добавляем их так же, как и первый сервер.

Необходимый минимум для подключения выполнен. Далее наращиваем эту схему, изменяя диалплан в зависимости от ситуации и потребностей. Например, в экстеншенах Asterisk можно указывать время действия правила. Чтобы звонить в удаленный офис можно было только в рабочее время, используем такую конструкцию:

exten => 3000,1,GotoIfTime(9:00-18:00|mon- fri|*|*?OUT,s,1)

Вариантов действительно много, экспериментируй!

ПОДКЛЮЧАЕМСЯКSIP-ПРОВАЙДЕРУЗа последние несколько лет SIP-провайдеров, предлагающих свои услуги по весьма демократичным ценам, наплодилось предостаточно. Используя их возможности, можно существенно сэкономить на междугородных и

международных звонках. Для Asterisk нет принципиальной разницы, подключаться к одному или нескольким SIP-провайдерам сразу, но для нас второй вариант подключения предпочтительнее, поскольку в диалплане можно предписать ранжирование операторов связи по каждому направлению на основе критерия «цена-качество». Можно звонить по разным направлениям, исходя из требуемого качества и установленных провайдерами расценок. Кстати, именно на этом подходе основана работа китов современного SIP'остроения вроде sipnet.ru.

Принцип настройки подключения и создания диалплана практически полностью совпадает с IAX2. Все установки для SIP производятся в файле sip.conf.

$ sudo nano /etc/asterisk/sip.conf

[general]

...

useragent=SipPhone

register=myusername:mypassword@sipnet.ru/2223322 ; Используемые кодеки

disallow=all

allow=ulaw

allow=alaw

allow=gsm

[sipnet]

type=friend

username=myusername

secret=mypassword

callerid=sipnet

host=sipnet.ru

nat=yes

fromuser=sipnet

fromdomain=sipnet.ru

dtmfmode=rfc2833

insecure=invite

context=sipnet

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

Далее разбираемся с входящими и исходящими звонками:

$ sudo nano /etc/asterisk/extensions.conf

[sipnet-in]

exten => 101,1,Set(CALLERID(name)="Sipnet call") exten => 101,n,Dial(SIP/101,20)

exten => 101,n,Playback(vm-nobodyavail) exten => 101,n,Voicemail(101)

exten => 101,n,Hangup()

[sipnet-out-moscow]

exten => _749[59]ZXXXXXX,1,Set(CALLERID(all)="SipPhon e" <2223322>)

exten => _749[59]ZXXXXXX,n,Dial(SIP/sipnet/${EXTEN},20) exten => _749[59]ZXXXXXX,n,Hangup()

НАСТРАИВАЕМCALLBACK Сегодня не редкость, что менеджеры работают далеко за пределами офиса, связываясь при необходимости с руководством или работниками по мобильному. В итоге,

120

XÀÊÅÐ 03 /134/ 10

 

 

 

 

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

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

d

f

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A2BILLING ПРЕДОСТАВЛЯЕТШИРОКИЕ ВОЗМОЖНОСТИПОУЧЕТУЗВОНКОВ

в месяц за переговоры приходится платить достаточно приличную сумму. А если таких сотрудников в офисе не один десяток? Затраты на переговоры будут значительны. Но выход есть: приобрести безлимитный пакет и при поступлении звонка перезванивать вызывающему, который далее уже сам выбирает, что ему нужно — звонить кому-нибудь в офисе, делать еще один исходящий звонок, например, междугородний, оставить или прослушать голосовое сообщение и т.д. При помощи Asterisk организовать это достаточно просто, причем существует сразу несколько вариантов. Самый простой способ — создание в каталоге / var/lib/asterisk/outgoing специального .call-файла, который подхватывается и обрабатывается Asterisk на лету. Создаем в extensions.conf описание нового диалплана:

$ sudo nano /etc/asterisk/extensions.conf

[IncomingCall]

;Проверяем номер звонящего, если совпадает, запускаем скрипт

exten => s,1,GotoIf($["${CALLERID(num)}" = "9151234567"]?callback)

;Аналогично описываются и остальные номера, на которые должен осуществляться перезвон

exten => s,n,Goto(normal) ; Если номер в списке отсутствует, обрабатываем вызов обычным образом

exten => s,n(callback),System(/etc/asterisk/ scripts/callback 8${CALLERID(num)} &)

exten => s,n,Hangup() exten => s,n(normal)

;Экстеншен, с которого будет производиться звонок

[InternalCall]

exten => 123,1,Dial(SIP/123) exten => 123,n,Hangup()

exten => _89X.,1,Dial(SIP/${EXTEN}@GW_IP) exten => _89X.,n,Hangup()

Теперь собственно скрипт, который создаст нужный callфайл. Напомним, что, используя директиву System, можно создать файл на лету:

exten => h,6,System(echo Channel: SIP/${CALLERID(num)} > /tmp/${CALLERID(num)}. call)

Но отдельный скрипт нагляднее и проще редактируется:

$ sudo nano /etc/asterisk/scripts/callback

#!/bin/sh sleep 5

НАСТРОЙКАCALLBACK ВДИСТРИБУТИВЕELASTIX

cat << EOF > /tmp/$NUMBER.call

#Получаем номер, переданный в качестве параметра

NUMBER=$1

#Канал, используемый для исходящего звонка echo "Channel: SIP/$NUMBER@InternalCall

#Количество повторных попыток (т.е. при значе- нии 1 звонить будет 2 раза)

MaxRetries: 1

#Время в секундах, через которое будет произведена вторая попытка

RetryTime: 30

#Ожидание ответа на вызов

WaitTime: 30

Context: InternalCall # Контекст Extension: 777 # Экстеншен Priority: 1

AlwaysDelete: Yes" >/var/spool/asterisk/ tmp/$NUMBER

EOF # Закончили формировать файл

# Теперь копируем файл

chown asterisk:asterisk /tmp/$NUMBER.call mv /tmp/$NUMBER.call /var/spool/asterisk/ outgoing/

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

Создавать файл сразу в каталоге outgoing нельзя; если Asterisk его успеет прочитать до того, как он будет полностью записан, произойдет сбой в работе скрипта. Поэтому рекомендуется в outgoing перемещать уже готовый файл. Далее развиваем идею, подключая нужные функции. Напомним, что Callback можно организовать и средствами web, когда пользователь набирает свой номер телефона в специальном поле браузера, а call-файл создает CGI-скрипт. Схема будет полезной и в службе поддержки. Пользователи не очень любят тратить свои кровные на переговоры с подобными сервисами, и здесь Callback будет весьма кстати. В таком варианте в экстеншен лучше жестко забить номер (например, службы поддержки или менеджера), с которым Asterisk будет соединять удаленного абонента. Для этого достаточно добавить в InternalCall вызов нужного номера.

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

INFO

info

Ещеоднимвариантом созданияcall-файла являетсяиспользо-

ваниеAMI(Asterisk ManagerInterface)—

интерфейсауправ-

ленияAsterisk.До-

статочнопослатьвсе необходимыекоманды в5038порт.

Онастройкебиллинговойсистемы AstBillчитайвстатье «Звездныесчета», опубликованнойв февральскомномере zза2008год.

XÀÊÅÐ 03 /134/ 10

121

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

w Click

to

 

 

 

 

 

SYN/ACK

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ИНТЕРФЕЙСFREEPBX ПОЗВОЛЯЕТВУДОБ-

НОЙФОРМЕНАСТРОИТЬБОЛЬШИНСТВО АНАЛИЗCDR-ЗАПИСЕЙВASTERISK QUEUE/CDR LOG ANALYZER

ПАРАМЕТРОВASTERISK

HTTP://WWW

links

Биллинговыесис-

темыдляAsterisk

— A2billing (www. asterisk2billing.org), Asterisell (asterisell. profitoss.com).

Программы

дляанализа CDR записей—

Asterisk Queue/ CDR Log Analyzer (www.micpc.com/ qloganalyzer), Asterisk-Stat (www. areski.net/asterisk- stat-v2).

• Примерыконфигурационных файловAsterisk

asteriskpbx.ru/ browser/astpbx/etc/ asterisk.

направлении. В этом случае после перезвона абоненту Asterisk запрашивает PIN-код, извлекает из БД текущий баланс и выводит его звонившему (о биллинговой системе мы поговорим чуть ниже). Далее абонент указывает номер, на который он хотел бы позвонить.

А вообще, событие (триггер) для Сallback может генерировать SMS-сообщение, e-mail, сигнал от системы видеонаблюдения (за подробностями обращайся к статье «Звездное попурри», опубликованной в апрельском номере zза 2009 год), событие на сервере (допустим, пропадание питания в электросети) и так далее. Например, при недостатке средств на счету автоматически генерируется .call-файл, обеспечивающий дозвон до клиента с напоминанием о необходимости пополнения счета.

ПРОСТЕНЬКИЙБИЛЛИНГЕсли ты решил немного подзаработать с Asterisk, то без системы учета звонков не обойтись. В интернете можно найти не одно готовое решение вроде A2billing (www.asterisk2billing. org), Asterisell (asterisell.profitoss.com), astCDRview (astcdrview.berlios.de), AstBill (astbill.com), но в 9 случаях из 10 его придется адаптировать к конкретным условиям. Как бы странно ни прозвучало, зачастую проще

Продаю Украину, Белоруссию, Казахстан

Ещеодинвариантзаработка:можнопродавать свободныетелефонныелиниинаразныенаправления.Допустим,центральныйофискомпании находитсявРоссии(Москве),адилерскиеотделы наУкраине,вБелоруссиии Казахстане.Вкаждом филиале,естественно,естьтелефонныелинии местныхоператоров.Админцентральногоофиса можетпродаватьзнакомымзвонкивэтистраны подешевымтарифам.«Знакомый»регистрирует- сянаAsteriskизвонитчерезVoIP-сетьпопре- доставленнымнаправлениям.Дляконторыэто будутместныезвонки,которыенетарифицируют- ся,аадмину—лишняякопеечка.

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

Asterisk сохраняет данные о каждом вызове в CDR-файл (Call Detail Record). Такие записи содержат — CallerID, направление, канал, время начала вызова, ответа абонента

èокончания, продолжительность переговоров, результат

èнекоторые другие сведения. По умолчанию Asterisk генерирует отчет в CSV-файл, но очень просто подклю- чить вывод CDR в базы MySQL, PostgreSQL, unixODBC, RADIUS. Если ранее этого не было сделано, то для импорта записей из CSV-файла в MySQL используй скрипт, который найдешь на прилагаемом к журналу диске (сам скрипт размещен по адресу www.voip-info.org/wiki/view/ Asterisk+CDR+csv+mysql+import).

Для поддержки MySQL Asterisk нужно собрать с поддержкой этой СУБД. По лицензионным соображениям соответствующий модуль вынесли в AddOns. При установке Asterisk из репозитария своего дистрибутива достаточно добавить в систему нужный пакет. В Debian/Ubuntu команда для этого проста:

$ sudo apt-get install asterisk-mysql

Затем создаем базу данных и наполняем ее таблицами:

$ mysql -uroot -p

mysql> CREATE DATABASE asterisk;

mysql> GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY 'astpassw';

Пример для создания таблиц БД можно найти в документации Asterisk в файле cdr_mysql.txt (в Ubuntu он лежит в /usr/share/doc/asterisk-mysql).

Подключаем вывод CDR в MySQL, указав параметры подключения к серверу и базе данных «asterisk»:

$ sudo nano /etc/asterisk/cdr_mysql.conf

[global]

hostname=localhost

dbname=asterisk

table=cdr

password=astpassw

user=asteriskcdruser

port=3306

122

XÀÊÅÐ 03 /134/ 10

 

 

 

 

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

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

СМОТРИМВОЗМОЖНОСТИASTERISK

sock=/tmp/mysql.sock

запись о загрузке модуля и подключе-

 

нии к БД, просмотреть его состояние

 

Загрузим нужный модуль через консоль

можно при помощи команды «cdr mysql

Asterisk:

status». Чтобы модуль загружался ав-

 

томатически после рестарта Asterisk,

$ asterisk -r

добавим в /etc/asterisk/modules.conf

CLI> module load cdr_addon_mysql.so

строку:

 

 

Все, теперь ведется протоколирование звонков и можно управлять выборкой по своему усмотрению. Чтобы дать задание MySQL, следует использовать в диалплане одноименную команду. Примерно так:

$ sudo nano /etc/asterisk/extensions.conf

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

load = cdr_addon_mysql.so

 

 

 

 

 

 

 

 

 

Управление компьютером при помощи Asterisk

ИспользованиевдиалпланефункцииSystem()открываетпоистинеширокиевозможностипоуправлениюлюбымсерверомспомощьютелефона.Процесспрост— набираемномер,затемпароль,иAsteriskвыполняетзаранееопределенную команду.Например,оченьпростореализовать«краснуюкнопку»,полностью удаляющуюданныесхарда(работодатели,ведущиечерныеисерыезарплаты, будуттебеоченьпризнательны:)).Программдля«очистки»дискавинтернете можнонайтиневероятноеколичество.Алинуксоваяутилитаwinexe(eol.ovh. org/winexe)позволяетудаленновыполнятькомандывWindowsNT/2k/XP/2k3. СтавимеевLinux-систему,накоторойработаетAsterisk,исоздаемпростенький диалплан:

exten => s,n,Read(auth||4||1|5)

exten => s,n,GotoIf($["${auth}" = "000"]?yes:no) ; пароль

exten => s,n(yes),System(winexe -U <DOMAIN>/<user>%<password> //<host> "c:\script.bat" >>/var/log/asterisk/win.log)

exten => s,n(no),Hangup()

Наудаленномхостебудутвыполненывсекоманды,описанныевфайлеscript.bat.

;Подключаемся к базе данных exten => _X.,1,MYSQL(Connect

connid localhost asterisk astpassw asterisk)

;Суммируем все звонки, произведенные абонентом (в billsec они хранятся в секундах), результат запроса сохраняется в переменной ${resultid} exten => _X.,2,MYSQL(Query resultid ${connid} SELECT SUM(billsec) FROM cdr WHERE src=\'${CALLERID(num)}\')

;Сохраняем результат в billing, в found будет 1, если запрос возвратил результат

exten => _X.,3,MYSQL(Fetch found ${resultid} billing)

;Очищаем переменную

exten => _X.,4,,MYSQL(Clear ${resultid})

;Проверяем, выполнен ли запрос, если нет — выходим

exten => _X.,5,GotoIf($["${found}" = "1"]?true:false)

;Проверяем количество времени и, если оно меньше определенного значе- ния, разрешаем позвонить

XÀÊÅÐ 03 /134/ 10

123

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY

 

 

 

 

 

SYN/ACK

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

exten => _X.,6,GotoIf($["${billing}" < "время"]?call:end)

exten => _X.,7,n(call),Dial(звоним) exten => _X.,8,,MYSQL(Clear ${resultid}) exten => _X.,9,n,Hangup()

exten => _X.10,n(false),Playback(end) exten => _X.1,n,Hangup()

; Обязательно отключаемся от БД, иначе процесс будет висеть в памяти, и быстро исчерпается лимит подключений к MySQL

exten => h,1,MYSQL(Disconnect ${connid})

Формат данных можно посмотреть, выполнив SQL-запрос. Скажем, для номера 123:

SELECT SUM(billsec) FROM `asterisk`.`cdr` WHERE src='123'

Пример, конечно, самый простой. SQL-запрос в более сложном биллинге будет содержать большее количество полей. Кроме того, для хранения промежуточных результатов лучше использовать дополнительные таблицы. Вариантов достаточно много, но главное — понять процесс. За основу своей системы можно взять существующие системы биллинга. Чтобы не включать SQL-запросы в экстеншен, проще записать их в AGI-скрипт, который и выполнять в случае необходимости. Также не забываем о специальных анализаторах CDR-записей. Например, Asterisk Queue/CDR Log Analyzer (www.micpc.com/qloganalyzer) èëè Asterisk-Stat (www.areski.net/asterisk-stat-v2).

ЭКОНОМИЯ НА ТЕЛЕФОНАХ Asterisk позволяет программно эмулировать функции, доступные в более дорогих моделях телефонов. За счет этого можно немного сэкономить при покупке аппаратов, а если ими уже завален офис, то сделать работу пользователей удобнее. Например, чтобы не мучить сотрудников компании запоминанием длинных номеров, используют сокращенный набор (speed dial), то есть назначают длинному и, как правило, часто используемому номеру, короткую комбинацию из 2-3 цифр. Примерно, так:

exten => *01,1,Dial(SIP/нужный_номер@${TRUNK},20)

Кстати, многие софтофоны поддерживают буквенный набор:

exten => lenok,1,Dial(SIP/server2/79101234567,20)

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

Лимитируем пустые разговоры

Еслимызнаем,чтосекретаршалюбитзасчетконторыпотрепатьсясосвоейподругойизВладивостока(телефонныйкод 4232),топривызовенабираемномерподружки(допустим, 102030),ноограничиваемпродолжительностьзвонкадесятьюминутами(600000мс).Предупреждаемвызывающего абонента(секретутку)оразрывесоединениячерез5минут (300000мс)иповторяемоповещениекаждуюминуту(60000 мс):

exten => _84232102030,1,Dial(SIP/8${EXTEN}@${OUTGOING}, ,L[600000:300000:60000])

124

СОЕДИНЕНИЕДВУХСЕРВЕРОВASTERISK ПОПРОТОКОЛУSIP

которому скажет все, что думает о работе сервиса. Телефон с АОН или софтофон позволяет увидеть номер звонившего и набрать его (recall), простые же аппараты часто лишены такой функции. Используя возможность записи в базу Asterisk из диалплана, легко реализовать все самому.

Для примера обеспечим возможность вызова последнего звонившего абонента комбинацией «*22», или организуем ему Callback при нажатии «*21».

$ sudo nano /etc/asterisk/extensions.conf

[IncomingCall]

;Запоминаем номер звонившего exten => _5XX,1,Set(_To=${EXTEN})

exten => _5XX,n,Set(_From=${CALLERID(num)})

;Сохраняем номер для быстрого вызова комбинацией *22 exten => _5XX,n,Set(DB(${To}/LastCaller)=${From})

;Сохраняем для вызова *21

exten => _5XX,n,Set(DB(${From}/LastCalled)=${To}) ; Звоним

exten => _5XX,n,Dial(SIP/${EXTEN},20) exten => _5XX,n,Hangup()

;По *22 услышим номер, после чего звоним exten => *22,1,Set(tmp=${DB(${CALLERID(num)}/ LastCaller})

exten => *22,n,SayDigits(${tmp}) exten => *22,n,Dial(${tmp},1)

;Теперь номер *21

exten => *21,1,Set(tmp=${DB(${CALLERID(num)}/ LastCalled)})

exten => *21,n,SayDigits(${tmp}) exten => *21,n,Set(DB(${tmp}/ CallBack)=${CALLERID(num)}) exten => *21,n,Hangup()

А вот так можно реализовать возможность повторного набора номера последнего вызванного абонента (re-dial):

[default]

include => macro-recall

exten => _X.,1,Macro(recall,${EXTEN})

exten => *0,1,DBget(toCall=redial/${CALLERID}) exten => *0,2,Macro(recall,${toCall})

exten => *0,102,Hangup()

[macro-recall]

exten => s,1,DBput(redial/${CALLERID}=${ARG1}) exten => s,1,Dial(SIP/${ARG1},20)

exten => s,2,Goto(s-${DIALSTATUS},1) exten => s-NOANSWER,1,Voicemail(u${ARG1})

XÀÊÅÐ 03 /134/ 10

 

 

 

 

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

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

d

f

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КОМАНДА«MAKE MENUSELECT» ПОКАЖЕТНАЛИЧИЕAPP_FAX

php), которые позволяют работать с факсами как через телефонную линию, так и по IPсети. Подключение к одной факсовой линии бесплатно, за дополнительные нужно платить (каждая лицензия по $38.50). К версии 1.8 планируется полностью перевести Asterisk на Fax For Asterisk (код которого в настоящее время открыт), заменив модуль app_fax. Как видишь, вариантов реализации несколько, что уже вызывает путаницу. Рассмотрим, что идет в стандартной поставке. В репозитариях дистрибутивов, вероятно, уже имеется модуль для работы с факсом, но, чтобы свести к минимуму количество возможных ошибок, лучше использовать последнюю версию Asterisk и SpanDSP. Последний ставится обычным образом (потребуется libtiff), затем нужно собрать Asterisk с параметром «--with-spandsp». На этапе «make menuselect» можно просмотреть наличие модуля app_fax (в Applications). После установки смотрим список приложений:

exten => s- BUSY,1,Voicemail(b${ARG1})

exten => _s-.,1,Goto(s-NOANSWER,1)

Примеры, конечно, несколько упрощены, но главное понять суть и возможности Asterisk. Не забываем о функциях парковки вызова (Call Parking) и перехвата вызова другому абоненту (Call Pickup), которые поддерживаются в стандартной инсталляции Asterisk. Экстеншен для Call Parking можно узнать, просмотрев значения parkext и parkpos в файле features.conf:

[general]

;Экстеншен для парковки parkext => 700

;Слоты для парковки parkpos => 701-720

Причем парковку вызова можно использовать и не по прямому назначению, например, чтобы поставить звонок на удержание (Сall hold) для короткой консультации с другим специалистом. Для вызова Call Pickup обычно используется комбинация «*8».

ЭКОНОМИМНАФАКСИМИЛЬНЫХ АППАРАТАХКазалось бы, чего проще — отсканировать документ и отправить по e-mail! Ан нет, факсимильная связь жива и, судя по всему, жить будет еще долго. Причины банальны: распространенность оборудования, доступность линий связи и сложившиеся привычки. Поэтому приходится подстраиваться. Для передачи факса по IP-сетям (FoIP, Fax over IP) используются две технологии: Т.37 и T.38. Первая определяет формат данных и процесс передачи сообщения посредством e-mail с предварительным его сохранением. Второй стандарт описывает процесс передачи факса в реальном времени. Технология T.38 интересу-

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

взгляд: кодеки, адаптированные для работы с голосом, и функции подавления шумов искажают сигнал факса, а задержки, характерные для IP-сетей, не дают нормально принять сигнал (аппараты просто не адаптированы для этого). В рекомендациях к Т.38 сказано, что можно использовать как UDP, так и TCP протокол. Однако во избежание издержек чаще применяют именно UDP, компенсируя возможные потери введением избыточности.

Âкачестве кодека при передаче по VoIP настоятельно рекомендуется использовать G.711.

ÂAsterisk поддержка Т.38 появилась далеко не сразу: вначале были доступны отдельные патчи, затем некоторые функции включили в исходный код. В результате Asterisk 1.4.20.1 поддерживает только прозрачные T.38-сессии на SIP-каналах. Поэтому до недавнего времени были популярны следующие варианты реализации: использование модулей RxFAX/ TxFAX, их аналог SendFAX/ReceiveFAX (оба используют SpanDSP, soft-switch.org) или HylaFax + iaxmodem (как вариант, Т.37). Затем в asterisk-addons был добавлен код для работы с библиотекой SpanDSP, позволяющей отправлять и получать факсы по G711-каналу. А уже с 1.6.0 код для работы с библиотекой SpanDSP был включен в основную ветку (реализовано посредством модуля app_fax). Правда, первое время его использование вызывало множество ошибок, но большую

часть из них разработчики устранили в версии 1.6.2. Помимо этого, был перепроектирован сам процесс установления связи по T.38, и в результате Asterisk может получать и принимать факсы по G711 и T.38. В начале апреля 2009 компания Digium представила модули Fax

For Asterisk (res_fax è res_fax_digium, digium. com/en/products/software/faxforasterisk.

$ sudo asterisk -r

CLI>core show applications like fax ReceiveFAX: Receive a FAX

SendFAX: Send a FAX

Переходим к настройке.

$ sudo nano /etc/asterisk/sip.conf

[general] t38pt_udptl = yes

Пишем экстеншены:

$ sudo nano /etc/asterisk/ extensions.conf

exten => _5,n,Dial(${TRUNK_SIP}/

õõõ,120,M(sendfax))

;Отправка [macro-sendfax]

exten => _X.,1,Set(FAXFILE=//var/ spool/asterisk/fax/fax)

exten => _X.,n,SendFAX(${FAXFILE}. tif)

exten => _X.,n,Hangup

;Прием

[macro-receivefax] exten => _X.,1,Answer() exten => _X.,n,Wait(3) exten =>

_X.,n,ReceiveFAX(faxfilename)

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

ЗАКЛЮЧЕНИЕНемного отойдя от стандартной схемы использования Asterisk, можно сделать много чего полезного и интересного, в том числе, и с финансовой точки зрения. Конечно, придется экспериментировать и подбирать оптимальные настройки, но зато потом дирекция будет в восторге. z

XÀÊÅÐ 03 /134/ 10

125

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

w Click

to

 

 

 

 

 

 

SYN/ACK

 

 

 

 

 

 

 

m

Сергей «grinder» Яремчук grinder@synack.ru

 

 

 

 

 

 

 

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

 

 

 

 

Незримое

присутствие

СПОСОБЫУДАЛЕННОГОУПРАВЛЕНИЯИВЫПОЛНЕНИЯКОМАНДНА

WINDOWS ХОСТАХ

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

АДМИНДОЛЖЕНБЫТЬЛЕНИВ! Функции удаленного управления, реализованные в WinNT, были весьма ограничены и нагоняли тоску даже на прыткого админа. Большинство операций приходилось выполнять за локальной консолью, и это, кстати, во времена, когда в Unix вообще не чувствовалось разницы, с каким сервером ты сейчас работаешь — удаленным или локальным. Но с каждой новой версией и сервис-паком возможности ОС расширялись, и в настоящее время количество доступных решений возросло на порядок. Администратор может управлять системами при помощи сценариев WSH (Windows Script Host) и PowerShell, командной строки WinRS (Windows Remote Shell), консоли MMC (Microsoft Management Console), программного интерфейса WMI (Windows Management Instrumentation), групповых политик и средств удаленного доступа к рабочему столу RDP (Remote Desktop Protocol). Этот список можно дополнить инструментами и утилитами сторонних разработчиков, но сегодня хотелось бы подробно остановиться именно на штатных возможностях, поскольку заложенного функционала с головой хватает для решения большинства административных задач в малых и средних сетях, и, что немаловажно, за них не нужно отдельно платить.

CАМЫЙПРОСТОЙВАРИАНТПОДКЛЮЧЕНИЯ

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

держки 32 разрядной картинки, появилась очень удобная функция растягивания рабо- чего стола удаленного компьютера на все мониторы, подключенные к локальной системе (mstsc /span). Версия RDP 7, анонсированная

âWin7/2k8R2, добавила еще ряд возможностей, например, появилась поддержка Aero, Direct2D и Direct3D в приложениях. Клиенты для подключения по RDP имеются в

большинстве популярных ОС — они встроены

âWindows (в том числе Windows CE и Mobile), Linux, xBSD, Mac OS X и некоторые другие. В частности, терминальный клиент rdesktop (rdesktop.org) официально поддерживает все ОС вплоть до Win2k8 (с подключением

к Win2k8R2 проблем также не будет). В Linux в паре с rdesktop удобнее использовать графическую оболочку Gnome-RDP или KDE Remote DesktopClient.Ещеоднанадстройка— SeamlessRDP(www.cendio.com/seamlessrdp)— фактически позволяет «встроить» в рабочий стол Linux приложения из Windows. При его использовании вместо традиционной рамки

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

В режиме администрирования клиентские версии ОС поддерживают работу только одного пользователя (локального или удаленного). Для его активации достаточно

â«Свойства» компьютера — «Удаленные сеансы» установить флажок «Разрешить удаленный доступ к этому компьютеру» и указать учетные записи, которым разрешен доступ. При подключении к системе администратора пользователь будет отключен. То есть пока-

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

Серверные версии поддерживают два удаленных подключения, плюс локальное. Режим работы Terminal Server mode уже требует дополнительного лицензирования и предназна- чен для удаленной работы с приложениями, а не администрирования систем.

В Win2k8 появились новые вкусности для обеспечения доступа к удаленной системе по RDP. К ним можно отнести службы TS RemoteApp (удаленные приложения RemoteApp служб терминалов) и Terminal Services Web Access (обеспечивает и контролирует доступ к RemoteApp программам или рабочим столам компьютеров офисной

сети через браузер). Первая устанавливается как часть роли сервера терминалов Win2k8. Администратор создает и распространяет специальный RDP-файл, щелчком по которому пользователь может запустить удаленное приложение (поддерживается Win2k3SP1, WinXPSP2 и выше). Это приложение будет выполняться в отдельном окне и внешне ничем не отличаться от локальной программы. Чтобы избавить удаленных пользователей от необходимости подключения к RDP через VPN, администратор может настроить Terminal Services Gateway.

126

XÀÊÅÐ 03 /134/ 10

 

 

 

 

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

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ПОПУРРИИЗКОНСОЛЕЙИТУЛКИТОВВо времена Win2k для удаленного администрирования по безопасному каналу Microsoft предлагала использовать службу Remote Command Service (Rcmd.exe). Серверная часть Rcmdsvc.exe устанавливалась в качестве службы и обеспечивала одновременное подключение до 10 клиентов, а управление производилось при помощи командной консоли Rcmd.exe.

Для Win2k3 стал доступен Administration Tools Pack, в состав которого вошли 3 ММС консоли, предназначенные для выполнения специфи- ческих административных задач: ADMgmt.msc (управление Active Directory), PKMgmt.msc (сертификаты и ключи), IPAddrMgmt.msc (IPадреса, DHCP, DNS, WINS). Активация пункта Remote Administration (HTML) в настройках IIS дает возможность удаленно управлять сервером при помощи веб-браузера (порт 8098). В Win2k8 появился новый инструмент управления сервером — Server Manager, являющийся, по сути, универсальным центром, куда добавляются все роли и функции по настройке сервера. Правда, возможность подключения к другому серверу появилась в Server Manager лишь в Win2k8R2. Оснастки MMC

âWin2k8, предназначенные для удаленного управления, объединены

âкомпонент Средства удаленного администрирования сервера (RSAT, Remote Server Administration Tools), и большая часть из них в Win2k8 по умолчанию не устанавливается. Кроме этого, свой RSAT есть и для Vista/Win7, он в свободном доступе лежит на сайте Microsoft. C его помощью можно управлять из Vista/Win7 ролями и компонентами на серверах, работающих под управлением Win2k3/2k8/2k8R2. Напомню, что консоль MMC позволяет подключаться, управлять удаленной системой и следить за ее состоянием. Для этого необходимо лишь добавить оснастку Управление компьютером (Computer Management) и затем в новом окне выбрать управление другим компьютером (Another Computer). Кстати, многие консольные утилиты, входящие в стандартную поставку Windows, умеют выполнять команды на удаленных системах. Например, запустим утилиту SC и получим список сервисов на компе \\synack:

> SC \\synack query type= service state= all

Планировщик заданий (Task Scheduler) также имеет параметр «/s», при помощи которого задается целевая машина, где будет выполнено задание, что делает его весьма полезным инструментом.

СЛУЖБАУДАЛЕННОГОУПРАВЛЕНИЯWINRM Первая версия службы удаленного управления WinRM появилась в Vista/Win2k8 и является Microsoft-вариантом реализации протокола Web Services for

Management (WS-Management Protocol), позволяющего управлять локальными и удаленными системами посредством XML-сообщений. Запущенная служба WinRM предоставляет доступ ко всем WMI-дан- ным (о них ниже), но в более удобной форме. Первая версия использовала стандартные порты HTTP/HTTPS, что делало ее дружелюбной для брандмауэров и позволяло подключиться к удаленной системе практически с любого компьютера, имеющего доступ к сети. В WinRM 2.0 по умолчанию для удаленного доступа используются порты с номерами 5985/5986, плюс для локального — 47001/TCP. Хотя при необходимости можно достаточно просто вернуть стандартные 80/443.

Âцелях безопасности весь трафик по умолчанию шифруется, поэтому команды и пароли нельзя подсмотреть, аутентификация производится с использованием Kerberos (возможно CredSSP). Причем все компьютеры должны входить в домен.

ÂWin2k8R2 и Win7 включен последний релиз WinRM 2.0. Для WinXPSP3/2k3SP2/VistaSP1/2k8/2k8SP2 эту версию можно установить при помощи пакета Windows Management Framework Core (Windows PowerShell 2.0, WinRM 2.0, BITS 4.0, support.microsoft.com/ kb/968929). Установка тривиальна и не должна вызвать трудностей. Чтобы служба WinRM могла принимать сетевые запросы, ее нужно предварительно настроить:

> winrm quickconfig

Отвечаем на ряд вопросов, после чего сервис WinRM устанавливается в автозапуск, активируется прослушивание портов 5985/5986, а также перестраиваются правила Windows Firewall. Чтобы WinRM прослушивал порты 80/443, просто изменим его настройки:

>winrm set winrm/config/service @{EnableCompatibilityH ttpListener="true"}

>winrm set winrm/config/service @{EnableCompatibilityH ttpsListener="true"}

Еcли в последствии будут обнаружены проблемы с подключением, смотрим вывод команд «winrm enumerate winrm/config/listener» и «winrm get winrm/config». Кстати, веб-сервер и WinRM, прослушивающие 80 порт, не будут друг другу мешать: все дело в том, что для WinRM зарезервировано размещение «/wsman», поэтому на веб-сервере следует избегать использования такого URL.

Другим вариантом настройки является использование групповых политик. Нужные установки найдешь в «Конфигурация компью-

XÀÊÅÐ 03 /134/ 10

127

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

w Click

to

 

 

 

 

SYN/ACK

 

 

 

 

 

 

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

 

 

 

 

 

d

f

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

INFO

info

ОPowerShellчитай встатье«Капитан

PowerShell

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

PowerShell2.0по умолчаниювходит всоставWin2k8R2и Win7.

Впервыеподдержка протоколаRDP(порт 3389)появиласьв

WinNT4.0Terminal Server.

Существуетреали- зацияRDP-сервераи дляUnixсистем—Xrdp (xrdp.sf.net).Однако проектнепользуется популярностью,

иболеедвухлетне обновлялся.

Подключениепо RDPработаетдажепо медленнымканалам, приработечерезNATустройства,поддерживающиетехнологию

UPnP.

ПрииспользованиипротоколаRDP 6ивышеможно подключатьсянек виртуальнойконсоли, анепосредственнок консоли0,дляэтого следуетзапустить терминальныйклиент сключом«/console».

СлужбаTerminal ServicesWebAccess

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

ПОДКЛЮЧАЕМСЯВMMC КОНСОЛИКУДАЛЕННОЙСИСТЕМЕ

тера — Политики — Административные шаблоны — Компоненты Windows — Удаленное управление Windows» (Computer Configuration — Administrative Templates — Windows Components — Windows Remote Management). Здесь два подпункта, в которых производятся соответственно настройки клиентов WinRS и сервера WinRM. Например, в «Разрешить автомати-

ческую настройку прослушивателей» (Allow automatic configuration of listeners) можно задать диапазон IPадресов, с которых разрешены подключения.

В консоли такие системы добавляются в TrustedHosts:

> winrm set winrm/config/client @ {TrustedHosts="synack"}

Соответственно, чтобы просмотреть настройки, используем аргумент get:

> winrm get winrm/config/client

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

>winrs -r:synack cmd.exe

>hostname

synack

>ipconfig

Âитоге мы получаем нечто вроде SSH-сессии, отлично защищенной и позволяющей управлять удаленным компьютером. Утилита WinRS использует оболочку cmd, в чем нетрудно убедиться, просмотрев список доступных команд по «winrs help».Конечно же, команду можно задать и сразу, не вызывая напрямую оболочку cmd:

>winrs -r:synack "dir C:"

По умолчанию используется протокол HTTP, но перейти на HTTPS очень просто:

> winrs -r:https://synack "tasklist"

POWERSHELLREMOTINGОднимизглавныхнововведений команднойоболочкиPowerShellверсии2.0сталоудаленное выполнениекоманд—Remoting.Восновеэтойфичилежит

АКТИВИРУЕМУДАЛЕННОЕУПРАВЛЕНИЕВ

POWERSHELL

WinRM2.0,всевозможностикоторогоиспользуютсяпополной программе:подключениексистемамчерезпрокси-сервера, работапостандартнымпортамHTTP/HTTPS,шифрованиепередаваемыхданныхсиспользованиемSSLит.д.Чтоинтересно, PowerShellRemotingпозволяетнепростовыполнятькоманды наодномилимножествеудаленныххостов(параллельноили последовательно),ноиотслеживатьихвыполнение,получать результатыихработы.ПрипервомзапускеPowerShell-скрип- та,скореевсего,появитсясообщениеотом,чтовыполнение PowerShellскриптовнаданнойсистемезаблокировано,и даетсярекомендациянабрать«get-helpabout_signing».Вседело вполитиках.Смотримтекущееположениедел:

PS C:\> Get-ExecutionPolicy

Restricted

В таком варианте сможем запускать лишь отдельные команды, выполнение сценариев запрещено. Установим «RemoteSigned»:

PS C:\> Set-ExecutionPolicy RemoteSigned

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

PS C:\> Enable-PSRemoting

Будет запрошено подтверждение на выполнение ряда операций (ключ '-Force' запустит без подтверждений). После этого автоматически будет сконфигурирован сервис WinRM на автозапуск, созданы исключения в правилах WF (аналогичные «winrs quickconfig», точнее Set-WSManQuickConfig), создан прослушиватель HTTP для приема WS-Management на любом из IP-адресов компьютера. При необходимости отключить возможность удаленного управления также просто:

PS C:\> Disable-PSRemoting

Для проверки работы удаленного управления можно использовать, например, командлет Test-WSMan:

PS C:\> Test-WSMan -ComputerName synack.ru\

Теперь у нас два варианта выполнения PS-командлетов на удаленной системе: интерактивный и командный. В

128

XÀÊÅÐ 03 /134/ 10

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