ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Метки статьи: ‘VoIP’

Добро пожаловать в блог! Надеемся, что Вы еще вернетесь.

В продолжении статьи Настройка Cisco AS5350 в качестве VoIP-шлюза.

Имеем:

  • Cisco AS5350 (VoIP-шлюз)
  • Сервер FreeBSD с установленным freeradius

Прикручиваем RADIUS к AS5350 для сохранения информации о совершаемых VoIP-звонках. log voip calls, log ip voip calls

Основная задача это обеспечение возможности однозначного сопоставления IP-шной и TDM-ной частей (legs) VoIP-звонка, а также логирование IP-адресов, с которых производятся звонки через наш VoIP-шлюз, что по умолчанию не делается.

Я не буду подробно на этом останавливаться и просто приведу настройки Cisco в части акаутинга и radius:

aaa new-model
aaa authorization exec h323 group radius local
aaa authorization exec sip group radius local
aaa authorization network default group radius local
aaa authorization network h323 group radius local
aaa accounting delay-start
aaa accounting exec default start-stop group radius
aaa accounting exec h323 start-stop group radius
aaa accounting exec sip start-stop group radius
aaa accounting network default start-stop group radius
aaa accounting network h323 start-stop group radius
aaa accounting network sip start-stop group radius
aaa accounting connection h323 start-stop group radius
aaa accounting connection sip start-stop group radius
aaa nas port extended
aaa session-id common
gw-accounting aaa

ip radius source-interface FastEthernet0/0
radius-server host 1.1.1.2 auth-port 1812 acct-port 1813
radius-server timeout 30
radius-server key 7 10491D54261E210823493A2A373B
radius-server vsa send accounting

Обратите внимание на команду на VoIP-шлюзе Cisco:

radius-server vsa send accounting

Благодаря ей VoIP-шлюз будет передавать нужные нам атрибуты, определенные производителем (так называемые Vendor-Specific Attributes), а именно:

  • h323-incoming-conf-id — ID звонка
  • h323-remote-address — IP, с которого/на который был звонок
  • iphop — этот атрибут заполняется при исходящих из IP-сетей звонках количеством хопов до IP-адреса звонящего и их IP-адресами.

Увидеть что Cisco отдает Radius`у можно выполнив в её консоли команды:

terminal monitor
debug radius

Вот пример вывода:

RADIUS(000B0086): Send Accounting-Request to 1.1.1.2:1813 id 1646/229, len 1084
RADIUS:  authenticator 44 55 FD 7F DC D2 19 C3 - 3D 1B D2 B1 82 E6 C4 52
RADIUS:  Acct-Session-Id     [44]  10  "001069EA"
RADIUS:  Calling-Station-Id  [31]  9   "3332211"
RADIUS:  Called-Station-Id   [30]  13  "89259998877"
RADIUS:  Vendor, Cisco       [26]  66
RADIUS:   Cisco AVpair       [1]   60  "call-id=93FA01A7-1FD111E0-B101EAE7-244362EB@1.1.1.194"
RADIUS:  Vendor, Cisco       [26]  21
RADIUS:   Cisco AVpair       [1]   15  "iphop=count:1"
RADIUS:  Vendor, Cisco       [26]  33
RADIUS:   Cisco AVpair       [1]   27  "iphop=hop1:1.1.1.194"
RADIUS:  Vendor, Cisco       [26]  56
RADIUS:   h323-setup-time    [25]  50  "h323-setup-time=14:29:41.703 MSK Sat Jan 15 2011"
RADIUS:  Vendor, Cisco       [26]  28
RADIUS:   h323-gw-id         [33]  22  "h323-gw-id=as5350."
RADIUS:  Vendor, Cisco       [26]  56
RADIUS:   Conf-Id            [24]  50  "h323-conf-id=93F51D6D 1FD111E0 99AD0014 F26ABCA0"
RADIUS:  Vendor, Cisco       [26]  31
RADIUS:   h323-call-origin   [26]  25  "h323-call-origin=answer"
RADIUS:  Vendor, Cisco       [26]  27
RADIUS:   h323-call-type     [27]  21  "h323-call-type=VoIP"
RADIUS:  Vendor, Cisco       [26]  65
RADIUS:   Cisco AVpair       [1]   59  "h323-incoming-conf-id=93F51D6D 1FD111E0 99AD0014 F26ABCA0"
RADIUS:  Vendor, Cisco       [26]  26
RADIUS:   Cisco AVpair       [1]   20  "subscriber=Unknown"
RADIUS:  Vendor, Cisco       [26]  30
RADIUS:   Cisco AVpair       [1]   24  "session-protocol=sipv2"
RADIUS:  Vendor, Cisco       [26]  44
RADIUS:   Cisco AVpair       [1]   38  "gw-rxd-cdn=ton:0,npi:0,#:89259998877"
RADIUS:  Vendor, Cisco       [26]  148
RADIUS:   Cisco AVpair       [1]   142 "feature-vsa=fn:TWC,ft:01/15/2011 14:29:41.703,cgn:3803234,cdn:89259998877,frs:0,fid:730309,fcid:93F51D6D1FD111E099AD0014F26ABCA0,legID:B3920"
RADIUS:  Vendor, Cisco       [26]  58
RADIUS:   h323-connect-time  [28]  52  "h323-connect-time=14:29:52.352 MSK Sat Jan 15 2011"
RADIUS:  Acct-Input-Octets   [42]  6   144960
RADIUS:  Acct-Output-Octets  [43]  6   167360
RADIUS:  Acct-Input-Packets  [47]  6   906
RADIUS:  Acct-Output-Packets [48]  6   1046
RADIUS:  Acct-Session-Time   [46]  6   18
RADIUS:  Vendor, Cisco       [26]  61
RADIUS:   h323-disconnect-tim[29]  55  "h323-disconnect-time=14:30:10.517 MSK Sat Jan 15 2011"
RADIUS:  Vendor, Cisco       [26]  32
RADIUS:   h323-disconnect-cau[30]  26  "h323-disconnect-cause=10"
RADIUS:  Vendor, Cisco       [26]  42
RADIUS:   h323-remote-address[23]  36  "h323-remote-address=1.1.1.194"
RADIUS:  Vendor, Cisco       [26]  24
RADIUS:   Cisco AVpair       [1]   18  "release-source=3"
RADIUS:  Vendor, Cisco       [26]  28
RADIUS:   h323-voice-quality [31]  22  "h323-voice-quality=0"
RADIUS:  Vendor, Cisco       [26]  43
RADIUS:   Cisco AVpair       [1]   37  "remote-media-address=1.1.1.194"
RADIUS:  Vendor, Cisco       [26]  50
RADIUS:   Cisco AVpair       [1]   44  "gw-rxd-cgn=ton:0,npi:0,pi:0,si:0,#:3332211"
RADIUS:  User-Name           [1]   9   "3332211"
RADIUS:  Acct-Status-Type    [40]  6   Stop                      [2]
RADIUS:  Service-Type        [6]   6   Login                     [1]
RADIUS:  NAS-IP-Address      [4]   6   1.1.1.3
RADIUS:  Acct-Delay-Time     [41]  6   0
RADIUS: Received from id 1646/229 1.1.1.2:1813, Accounting-response, len 20

Что ж, для решения основной поставленной перед нами задачи достаточно выполнить следующее:
в /usr/local/etc/raddb/radiusd.conf в секции preprocess указать, что нам нужно преобразовывать VSA :

preprocess {
       with_cisco_vsa_hack = yes
}

Radius разбирает Vendor-Specific Attributes благодаря словарям, которые расположены в папке /usr/local/share/freeradius, в частности файл-словарь по cisco.

dictionary.cisco:

VENDOR          Cisco                           9

#
#       Standard attribute
#
BEGIN-VENDOR    Cisco

ATTRIBUTE       Cisco-AVPair                            1       string
ATTRIBUTE       Cisco-NAS-Port                          2       string

#
#  T.37 Store-and-Forward attributes.
#
ATTRIBUTE       Cisco-Fax-Account-Id-Origin             3       string
ATTRIBUTE       Cisco-Fax-Msg-Id                        4       string
ATTRIBUTE       Cisco-Fax-Pages                         5       string
ATTRIBUTE       Cisco-Fax-Coverpage-Flag                6       string
ATTRIBUTE       Cisco-Fax-Modem-Time                    7       string
ATTRIBUTE       Cisco-Fax-Connect-Speed                 8       string
ATTRIBUTE       Cisco-Fax-Recipient-Count               9       string
ATTRIBUTE       Cisco-Fax-Process-Abort-Flag            10      string
ATTRIBUTE       Cisco-Fax-Dsn-Address                   11      string
ATTRIBUTE       Cisco-Fax-Dsn-Flag                      12      string
ATTRIBUTE       Cisco-Fax-Mdn-Address                   13      string
ATTRIBUTE       Cisco-Fax-Mdn-Flag                      14      string
ATTRIBUTE       Cisco-Fax-Auth-Status                   15      string
ATTRIBUTE       Cisco-Email-Server-Address              16      string
ATTRIBUTE       Cisco-Email-Server-Ack-Flag             17      string
ATTRIBUTE       Cisco-Gateway-Id                        18      string
ATTRIBUTE       Cisco-Call-Type                         19      string
ATTRIBUTE       Cisco-Port-Used                         20      string
ATTRIBUTE       Cisco-Abort-Cause                       21      string

#
#  Voice over IP attributes.
#
ATTRIBUTE       h323-remote-address                     23      string
ATTRIBUTE       h323-conf-id                            24      string
ATTRIBUTE       h323-setup-time                         25      string
ATTRIBUTE       h323-call-origin                        26      string
ATTRIBUTE       h323-call-type                          27      string
ATTRIBUTE       h323-connect-time                       28      string
ATTRIBUTE       h323-disconnect-time                    29      string
ATTRIBUTE       h323-disconnect-cause                   30      string
ATTRIBUTE       h323-voice-quality                      31      string
ATTRIBUTE       h323-gw-id                              33      string
ATTRIBUTE       h323-incoming-conf-id                   35      string

ATTRIBUTE       h323-credit-amount                      101     string
ATTRIBUTE       h323-credit-time                        102     string
ATTRIBUTE       h323-return-code                        103     string
ATTRIBUTE       h323-prompt-id                          104     string
ATTRIBUTE       h323-time-and-day                       105     string
ATTRIBUTE       h323-redirect-number                    106     string
ATTRIBUTE       h323-preferred-lang                     107     string
ATTRIBUTE       h323-redirect-ip-address                108     string
ATTRIBUTE       h323-billing-model                      109     string
ATTRIBUTE       h323-currency                           110     string
ATTRIBUTE       subscriber                              111     string
ATTRIBUTE       gw-rxd-cdn                              112     string
ATTRIBUTE       gw-final-xlated-cdn                     113     string
ATTRIBUTE       remote-media-address                    114     string
ATTRIBUTE       release-source                          115     string
ATTRIBUTE       gw-rxd-cgn                              116     string
ATTRIBUTE       gw-final-xlated-cgn                     117     string
ATTRIBUTE       iphop                                   118     string

# SIP Attributes
ATTRIBUTE       call-id                                 141     string
ATTRIBUTE       session-protocol                        142     string
ATTRIBUTE       method                                  143     string
ATTRIBUTE       prev-hop-via                            144     string
ATTRIBUTE       prev-hop-ip                             145     string
ATTRIBUTE       incoming-req-uri                        146     string
ATTRIBUTE       outgoing-req-uri                        147     string
ATTRIBUTE       next-hop-ip                             148     string
ATTRIBUTE       next-hop-dn                             149     string
ATTRIBUTE       sip-hdr                                 150     string

#
#       Extra attributes sent by the Cisco, if you configure
#       "radius-server vsa accounting" (requires IOS11.2+).
#
ATTRIBUTE       Cisco-Multilink-ID                      187     integer
ATTRIBUTE       Cisco-Num-In-Multilink                  188     integer
ATTRIBUTE       Cisco-Pre-Input-Octets                  190     integer
ATTRIBUTE       Cisco-Pre-Output-Octets                 191     integer
ATTRIBUTE       Cisco-Pre-Input-Packets                 192     integer
ATTRIBUTE       Cisco-Pre-Output-Packets                193     integer
ATTRIBUTE       Cisco-Maximum-Time                      194     integer
ATTRIBUTE       Cisco-Disconnect-Cause                  195     integer
ATTRIBUTE       Cisco-Data-Rate                         197     integer
ATTRIBUTE       Cisco-PreSession-Time                   198     integer
ATTRIBUTE       Cisco-PW-Lifetime                       208     integer
ATTRIBUTE       Cisco-IP-Direct                         209     integer
ATTRIBUTE       Cisco-PPP-VJ-Slot-Comp                  210     integer
ATTRIBUTE       Cisco-PPP-Async-Map                     212     integer
ATTRIBUTE       Cisco-IP-Pool-Definition                217     string
ATTRIBUTE       Cisco-Assign-IP-Pool                    218     integer
ATTRIBUTE       Cisco-Route-IP                          228     integer
ATTRIBUTE       Cisco-Link-Compression                  233     integer
ATTRIBUTE       Cisco-Target-Util                       234     integer
ATTRIBUTE       Cisco-Maximum-Channels                  235     integer
ATTRIBUTE       Cisco-Data-Filter                       242     integer
ATTRIBUTE       Cisco-Call-Filter                       243     integer
ATTRIBUTE       Cisco-Idle-Limit                        244     integer
ATTRIBUTE       Cisco-Account-Info                      250     string
ATTRIBUTE       Cisco-Service-Info                      251     string
ATTRIBUTE       Cisco-Command-Code                      252     string
ATTRIBUTE       Cisco-Control-Info                      253     string
ATTRIBUTE       Cisco-Xmit-Rate                         255     integer

VALUE   Cisco-Disconnect-Cause          Unknown                 2
VALUE   Cisco-Disconnect-Cause          CLID-Authentication-Failure 4
VALUE   Cisco-Disconnect-Cause          No-Carrier              10
VALUE   Cisco-Disconnect-Cause          Lost-Carrier            11
VALUE   Cisco-Disconnect-Cause          No-Detected-Result-Codes 12
VALUE   Cisco-Disconnect-Cause          User-Ends-Session       20
VALUE   Cisco-Disconnect-Cause          Idle-Timeout            21
VALUE   Cisco-Disconnect-Cause          Exit-Telnet-Session     22
VALUE   Cisco-Disconnect-Cause          No-Remote-IP-Addr       23
VALUE   Cisco-Disconnect-Cause          Exit-Raw-TCP            24
VALUE   Cisco-Disconnect-Cause          Password-Fail           25
VALUE   Cisco-Disconnect-Cause          Raw-TCP-Disabled        26
VALUE   Cisco-Disconnect-Cause          Control-C-Detected      27
VALUE   Cisco-Disconnect-Cause          EXEC-Program-Destroyed  28
VALUE   Cisco-Disconnect-Cause          Timeout-PPP-LCP         40
VALUE   Cisco-Disconnect-Cause          Failed-PPP-LCP-Negotiation 41
VALUE   Cisco-Disconnect-Cause          Failed-PPP-PAP-Auth-Fail 42
VALUE   Cisco-Disconnect-Cause          Failed-PPP-CHAP-Auth    43
VALUE   Cisco-Disconnect-Cause          Failed-PPP-Remote-Auth  44
VALUE   Cisco-Disconnect-Cause          PPP-Remote-Terminate    45
VALUE   Cisco-Disconnect-Cause          PPP-Closed-Event        46
VALUE   Cisco-Disconnect-Cause          Session-Timeout         100
VALUE   Cisco-Disconnect-Cause          Session-Failed-Security 101
VALUE   Cisco-Disconnect-Cause          Session-End-Callback    102
VALUE   Cisco-Disconnect-Cause          Invalid-Protocol        120

END-VENDOR      Cisco

Далее, будем формировать уникальный ID звнока в виде MD5 хэша на основании атрибута h323-incoming-conf-id:

acct_unique {
       key = "h323-incoming-conf-id"
}

Однозначние сопоставление IP-шной и TDM-ной частей (legs) VoIP-звонка возможно по полю AcctUniqueId таблицы radacct — оно будет у них одинаковым.

Далее, указываем, что перед аккаунтингом следует данные преобразовать (с использованием словарей):

preacct {
     preprocess
     acct_unique
}

Теперь в /usr/local/etc/raddb/sql.conf мы можем использовать полученные нами данные, которые содержатся в переменных, которые, в свою очередь, определяются в словаре (/usr/local/share/freeradius/dictionary.cisco):

%{h323-remote-address} — в этой переменной содержится IP, с которого/на который был звонок.

Все бы хорошо, но у атрибута iphop есть одна тонкость — он может содержать множественные значения, например:

iphop=count:2
iphop=hop1:192.168.68.4
iphop=hop2:10.10.255.7

и если в sql.conf использовать переменную %{iphop}, то в нее будет попадать только первая строка iphop=count.

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

В нашем примере:

  • %{iphop[0]} — будет содержать значение «count:2»
  • %{iphop[1]} — будет содержаться «hop1:192.168.68.4»
  • %{iphop[2]} — будет «iphop=hop2:10.10.255.7»

Добавив в таблицу radacct поля:

  • remote-address
  • hopcount
  • hop1
  • hop2

можно добавить их в SQL запрос в sql.conf:

accounting_stop_query = "UPDATE ${acct_table2} SET AcctStopTime = '%S', \
AcctSessionTime = '%{Acct-Session-Time}', \
AcctInputOctets = '%{Acct-Input-Octets}', \
AcctOutputOctets = '%{Acct-Output-Octets}', \
AcctTerminateCause = '%{h323-disconnect-cause}', \
AcctStopDelay = '%{Acct-Delay-Time}', \
ConnectInfo_stop ='%{Connect-Info}', \
`remote-address`='%{h323-remote-address}', \
`hopcount`='%{iphop[0]}', \
`hop1`='%{iphop[1]}', \
`hop2`='%{iphop[2]}' \
WHERE AcctSessionId = '%{Acct-Session-Id}' \
AND UserName = '%{SQL-User-Name}' \
AND NASIPAddress = '%{NAS-IP-Address}'"

По итогу таблица radacct выглядит так:

CREATE TABLE IF NOT EXISTS `radacct` (
  `RadAcctId` bigint(21) NOT NULL auto_increment,
  `AcctSessionId` varchar(32) NOT NULL default '',
  `AcctUniqueId` varchar(32) NOT NULL default '',
  `UserName` varchar(64) NOT NULL default '',
  `Realm` varchar(64) default '',
  `NASIPAddress` varchar(15) NOT NULL default '',
  `NASPortId` varchar(15) default NULL,
  `NASPortType` varchar(32) default NULL,
  `AcctStartTime` datetime NOT NULL default '0000-00-00 00:00:00',
  `AcctStopTime` datetime NOT NULL default '0000-00-00 00:00:00',
  `AcctSessionTime` int(12) default NULL,
  `AcctAuthentic` varchar(32) default NULL,
  `ConnectInfo_start` varchar(50) default NULL,
  `ConnectInfo_stop` varchar(50) default NULL,
  `AcctInputOctets` bigint(12) default NULL,
  `AcctOutputOctets` bigint(12) default NULL,
  `CalledStationId` varchar(50) NOT NULL default '',
  `CallingStationId` varchar(50) NOT NULL default '',
  `AcctTerminateCause` varchar(32) NOT NULL default '',
  `ServiceType` varchar(32) default NULL,
  `FramedProtocol` varchar(32) default NULL,
  `FramedIPAddress` varchar(15) NOT NULL default '',
  `AcctStartDelay` int(12) default NULL,
  `AcctStopDelay` int(12) default NULL,
  `proc` smallint(1) NOT NULL default '0',
  `remote-address` varchar(15) NOT NULL default '',
  `hopcount` varchar(16) default NULL,
  `hop1` varchar(20) default NULL,
  `hop2` varchar(20) default NULL,
  PRIMARY KEY  (`RadAcctId`),
  KEY `UserName` (`UserName`),
  KEY `FramedIPAddress` (`FramedIPAddress`),
  KEY `AcctSessionId` (`AcctSessionId`),
  KEY `AcctUniqueId` (`AcctUniqueId`),
  KEY `AcctStartTime` (`AcctStartTime`),
  KEY `AcctStopTime` (`AcctStopTime`),
  KEY `NASIPAddress` (`NASIPAddress`),
  KEY `import` (`NASPortType`,`AcctSessionTime`,`AcctStartTime`),
  KEY `proc` (`NASPortType`,`proc`,`AcctSessionTime`)
) TYPE=MyISAM;

Таким образом мы получаем, что в sql складывается информация о совершенных VoIP звонках и с каких IP-адресов они совершены.

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Пожалуйста, уважайте чужой труд.

Автор: Панфилов Алексей (lehis (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 3, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Кто то уже знает, кто-то нет и спит спокойно, точнее пока что спит спокойно.

Как давно вы читали логи своего Asterisk сервера ?

Некоторые из вас или уже видели или ещё увидят в логах строчки:

  • Registration from ‘»100″<sip:100@sip.mydomain.ru>’ failed for ‘188.165.215.79’ — No matching peer found
  • Registration from ‘»111″ <sip:111@sip.mydomain.ru>’ failed for ‘188.165.215.79’ — Wrong password

Догадываетесь к чему они ведут ? К тому что вас сканят и пытаются подобрать пароль к вашим SIP аккаунтам.

Большинство пользователей безалаберно относятся к своим паролям, это факт, а раз так то проверте что на ваших SIP номерах не стоят пароли аля 123 или 1234.

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

Давайте разберемся как они это делают и попробуем усложнить им жизнь помимо смены паролей к своим SIP аккаунтам.

В сети есть набор утилит sipvicious:

The 4 tools that you should be looking at are:svmapsvwarsvcracksvreportsvcrash

The tools: svmap — this is a sip scanner. When launched against ranges of ip address space, it will identify any SIP servers which it finds on the way. Also has the option to scan hosts on ranges of ports.

svwar — identifies working extension lines on a PBX. A working extension is one that can be registered. Also tells you if the extension line requires authentication or not.

svcrack — a password cracker making use of digest authentication. It is able to crack passwords on both registrar servers and proxy servers. Current cracking modes are either numeric ranges or words from dictionary files.

svreport — able to manage sessions created by the rest of the tools and export to pdf, xml, csv and plain text.

svlearnfp — allows you to generate new fingerprints by simply running the tool against a host. It will attempt to guess most values and allow you to save the information to the local fingerprint db. Then you can choose to upload it to the author so that it can be added to the database.

svcrash — responds to svwar and svcrack SIP messages with a message that causes old versions to crash.

Так вот с их помощью нас и сканят.  Эти же утилиты помогут нам просканить самих себя и  усложнить жизнь уродам жаждущих халявы.

Начнем с того что скачаем этот набор утилит (сохраненная у нас копия).

Распакуйте архив в какую нить папку и можно приступать к скану.

Будет считать что IP-адрес нашего Asterisk сервера это 192.168.1.1  и запустим сканер:

cd /home/virus/sipvicious

./svmap.py -p5060 192.168.1.1 -m INVITE

Получаем результат:

| SIP Device        | User Agent   | Fingerprint |
--------------------------------------------------
| 192.168.1.1:5060 | Asterisk PBX | disabled    |

Идем далее, посканим теперь на аккаунты:

./svwar.py —force -e100-999 192.168.1.1

Ответ может быть таким:

| Extension | Authentication |
------------------------------
| 210       | reqauth        |
| 300       | reqauth        |
| 666       | reqauth        |
| 241       | reqauth        |
| 242       | reqauth        |
| 222       | reqauth        |

Можно ли как то обломать их ? Можно. Для этого отредактируем /usr/local/etc/asterisk/sip.conf и добавим или раскоментируем строчку в секции [general]:

alwaysauthreject = yes

Описание:

When an incoming INVITE or REGISTER is to be rejected, for any reason, always reject with ‘401 Unauthorized’ instead of letting the requester know whether there was a matching user or peer for their request.

Т.е. наш сервер будет всегда при любых ошибках авторизации будет отвечать «401 Unauthorized» и не сообщать подробностей.

После изменения sip.conf зайдите в консоль Asterisk`а:

asterisk -r

и примените изменения:

asterisk*CLI> sip reload

Теперь посканим снова:

./svwar.py —force -e100-999 192.168.1.1

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

WARNING:TakeASip:Bad user = SIP/2.0 401  - svwar will probably not work!
WARNING:TakeASip:We got an unknown response
ERROR:TakeASip:Response: 'SIP/2.0 401 Unauthorized\r\n
Via: SIP/2.0/UDP 192.168.1.1:5061;branch=z9hG4bK-3613016185;received=192.168.1.1;rport=5061\r\n
From: "100"; tag=31303001333430333334313736\r\n
To: "100";tag=as47e73e29\r\nCall-ID: 2008271273\r\n
CSeq: 1 REGISTER\r\n
User-Agent: Asterisk PBX\r\n
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO\r\n
Supported: replaces\r\n
WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="3b652f8d"\r\n
Content-Length: 0\r\n\r\n'

Как видите списка с номерами более не выдается, то что нам и надо.

Что ещё мы можем сделать ?

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

Добавим в  /usr/local/etc/asterisk/extensions.conf в секцию где у вас происходит выход в город:

exten => _810X.,1,playback(pbx-invalid)

exten => _810X.,n,Hangup()

B. Так же мы можем скриптом анализировать логи Asterisk сервера и всех уродов, подбирающих пароль, банить фаирволом (ipfw) сервера.

Нашу версию подобного скрипта можно увидеть пройдя по ссылке: http://subnets.ru/files/protect_aster.txt

Инсталляция скрипта:

1. Сохраните код скрипта на своем сервере

2. Переименуйте файл в protect_aster.sh

3. Сделайте скрипт исполняемым:

chmod a+x protect_aster.sh

4. Добавте в ваш firewall ipfw правило:

ipfw add XXX reject ip from «table(56)» to me

где ХХХ это номер правила.

Будьте внимательны размещая данное правило, не забаньте сами себя ! Обеспечьте allow правила для своих IP-адресов выше этого правила, чтобы избежать неожиданностей.

5. Добавте скрипт на исполнение по crontab, отредактируйте /etc/crontab:

*/5    *       *       *       *       root    /full/path/to/script/protect_aster.sh

Забаненый IP-адрес попадает в таблицу ровно на сутки, через сутки он автоматически будет удален из таблицы.

C. В /usr/local/etc/asterisk/sip.conf, описывая секции пользователей (их номера) указывайте:

type=user

Пароли ставте минимум из 6-ти знаков с использованием букв и цифр.

Если известно с каких адресов будет авторизовываться пользователь, то будет совсем не лишним указать ACL с перечислением IP-адресов/подсетей из которых разрешено подключение, например:

[111]
type=user
context=users
disallow=all
allow = alaw
reinvite=no
canreinvite=no
callerid=User 111
language=ru
secret=Xm32rQ
mailbox=111
host=dynamic
deny=0.0.0.0/0
permit=217.172.16.74/30
nat=yes

В данном примере пользователю разрешено подключаться только из подсети 217.172.16.74/30 и запрещено из всех остальных. Не забудьте прописать пароль (secret=Xm32rQ) и в /usr/local/etc/asterisk/users.conf.

D. Измените план набора номеров для исходящих звонков. Добавте к номеру какой нибудь префикс, например 004 и «отрезайте» его (в моем примере это получается 3 цифры) перед тем как отправить своему провайдеру:
exten => _0048X.,1,Dial(SIP/${EXTEN:3}@sip-provider,60,rT)

Т.е. что бы набрать городской номер, пользователь должен набрать 00484951234567, халявщик этого точно знать не может, потому обломится, а мы ему поможем, дописав:
exten => _8X.,1,playback(pbx-invalid)

Тут же вы можете оставить свое «доброе» голосовое пожелание для таких уродов. Я так и сделал. высказал все что я о них думаю.

Надеемся, что эти не хитрые приемы помогут вам остаться при деньгах и сэкономить ваши нервы.

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Пожалуйста, уважайте чужой труд.

З.Ы.Ы. Ваши комментарии и дополнения к статье приветствуются.

Авторы: Панфилов Алексей (lehis (at) subnets.ru) и Николаев Дмитрий (virus (at) subnets.ru)

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Назрел вопрос о реконфигурации AS5350, являющейся пограничным VoIP-шлюзом для существующей скромной (до 100 пиров) VoIP-сети.

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

Задачи

  1. Прием входящего трафика на свою номерную емкость через потоки Е1 от разных операторов.
  2. Пропуск исходящего трафика на Е1 разных операторов (например, в зависимости от ценовой политики).
  3. Формирование АОНа на основе префикса, подставленного перед набираемым номером, присланным из IP сети.
  4. Блокировка исходящих звонков с АОНами, не прописанными на AS5350.
  5. Блокировка входящих звонков на номера, не прописанные на AS5350.

Немного теории

Звонок, с точки зрения AS5350, состоит из двух частей (legs) — voip и pots. Если при поступлении звонка на AS5350 не находятся диалпиры, под которые могут попасть voip и pots части звонка, то будут использоваться системные диалпиры, отображаемые под номером ноль. Ниже приведены две схемы порядка прохождения звонков:

Входящий звонок из Е1

Входящий звонок из Е1

Исходящий звонок на Е1

Посмотреть распределение активных leg-ов по диалпирам можно командой:

show voice call status

CallID     CID  ccVdb      Port             DSP/Ch  Called #   Codec    Dial-peers
0x2B       12F1 0x6640CB84 3/0:D.30         1/3:1  *0007536    14400     66/2
0x32       1256 0x6640CB84 3/1:D.31         1/3:4  *0000579536 g711alaw  0/3

Раз так, то поехали перенастраивать железку. Я буду описывать настройку только наших вышеперечисленных требований.

Настройка

pots-диалпир для входящего трафика из потоков Е1:

dial-peer voice 7 pots
description INBOUND-CALLS-VIA-E1
huntstop                                             //Нашли подходящий диалпир и останавливаем "охоту" на остальных :)
preference 10
incoming called-number .T        //Благодаря этой строке (.Т – любые набираемые номера) этот
//диалпир выбирается в качестве наиболее подходящего для входящего звонка из Е1
direct-inward-dial
no register e164

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

pots-диалпир для пропуска исходящего МГ/МН трафика (начинающегося с 8-ки: 8.Т) в поток Е1 (3/1) первого провайдера:

dial-peer voice 2 pots
description OUTBOUND-MGMN-CALL-VIA-E1-1
huntstop
destination-pattern 8.T
progress_ind setup enable 3
progress_ind progress enable 8
direct-inward-dial
port 3/1:D
no register e164

pots-диалпир для пропуска оставшегося исходящего трафика в поток Е1 (3/0) второго провайдера:

dial-peer voice 3 pots

description OUTBOUND-REMAINING-CALLS-VIA-E1-0
huntstop
preference 8
destination-pattern .T
progress_ind setup enable 3
progress_ind progress enable 8
direct-inward-dial
port 3/0:D
no register e164

Замечание:

Преференс этого диалпира должен быть больше, чем pots-диалпира 1001 (описание которого будет дано ниже), иначе входящие со стороны Е1 звонки будут пытаться выйти через Е1 3/0 (и получим мы isdn-switching, который в данном случае никому не нужен).

Тааакс… с pots-leg’ами разобрались, продолжим с voip-leg’ами.

voip-диалпир для «приема» входящего из IP-сети номера с префиксом 009901 перед набранным номером:

dial-peer voice 94 voip
description inbound_peer_4_380-00-01
translation-profile incoming CUT-PREFIX
codec g711alaw
incoming called-number 009901.T

Создадим профиль преобразования АОНа и набираемого номера:

voice translation-profile CUT-PREFIX
translate calling 121
translate called 120

Создадим правило преобразования набираемого (called) номера – «отрежем» лидирующий префикс 009901:

voice translation-rule 120
rule 8 /^009901\(.*\)/ /\1/ type any unknown

Создадим правило преобразования АОНа — заменим любой присланный АОН на нужный нам 380-00-01:

voice translation-rule 121
rule 12 /^.*/ /3800001/

Пример типичного voip-диалпира:

dial-peer voice 78 voip
description TYPICAL-VOIP-PEER
max-conn 2
answer-address 84953800000     // answer-address служит для выбора диалпира в качестве наиболее
// подходящего на основе АОНа звонка, пришедшего из IP-сети.
//В данном случае у нас АОН будет 89453800000
destination-pattern 3800000       // destination-pattern служит для выбора диалпира в качестве
//наиболее подходящего на основе набранного номера звонка, пришедшего из Е1.
session protocol sipv2
session target ipv4:192.168.68.6
dtmf-relay rtp-nte
codec g711alaw
no vad

Все, что нужно мы разрешили-описали, осталась блокировка «левых» звонков, т.е. тех звонков, что не подходят ни под один dial-peer описанные выше, для чего создадим voip-диалпир:

dial-peer voice 1001 voip
description BAD-AON-AND-CALLED-NUM
call-block translation-profile incoming BLOCK    //блокируем звонок из IP сети
huntstop
preference 7
destination-pattern .T
codec g711alaw
session target ipv4:10.10.10.10

По итогу отправляем входящий звонок из Е1 на адрес 10.10.10.10, который маршрутизируется в никуда.
М.б. кто-то предложит лучшее решение ? С удовольствием послушаем.

Маршрутизируем адрес в «/dev/null»:

ip route 10.10.10.10 255.255.255.255 Null0

Создадим профиль и правило трансляции для блокировки «левых» АОНов:

voice translation-profile BLOCK
translate calling 42
!
voice translation-rule 42
rule 1 reject /^.*/

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

debug voice dialpeer all

Будьте аккуратны – ее вывод может быть очень объемным !

В «отслеживании» звонков в/из IP-сети вам поможет команда:

debug ccsip calls

В трассировке звонка через ISDN вам поможет команда:

debug isdn q931

Увидеть логирование отработки правил трансляции номеров вам поможет команда:

debug voice translation

Замечание:

не забывайте давать команду:

terminal monitor

для того, чтобы вывод дебага отображался у вас в консоли (если вы сидите на циске через telnet), иначе он будет тихо складироваться в буфер логов AS5350 и все 🙂

Выражаю благодарность за помощь в написании статьи Сергею Бабичеву ( ака zaikini )

Ссылки

http://www.cisco.com/en/US/docs/ios/12_2t/12_2t11/feature/guide/ftgwrepg.html

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Панфилов Алексей (lehis (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 11, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Всем привет!

Очередная практическая задача по реализации транскодинга на AS5350xm.

Что такое транскодирование коротко можно прочитать здесь: http://en.wikipedia.org/wiki/Transcode

А сама задача появилась из цели экономии средств отдаваемых поставщикам услуг.

Существующая схема услуг:

Поставщик А <—> Е1 <—> Арендованный канале Е1 у поставщика Б <—> Е1 <—> Cisco AS5350xm <—> VoIP (SIP, g711) <—> SIP SERVER <—> Клиенты

Посчитав затраты, было решено отказаться от арендованного канала Е1 поставщика Б, а услуги от поставщика А решено было получать по VoIP.  После того как вопрос был согласован, постащик А выдал ТУ на подключение услуги, в связи с чем новая схема должна было стать такой:

Поставщик А <—> VoIP (H323, g729) <—> Cisco AS5350xm <—> VoIP (SIP, g711) <—> SIP SERVER <—> Клиенты

Просмотрев сайт www.cisco.com, было обнаружено, что необходимое транскодирование g729 <->  g711 можно реализовать без каких либо проблем при наличии IOS версий выше 12.4(20)Т3, 12.4(22)YB и 15.0(1)М (номера 13 и 14 для  IOS компанией Cisco не используются, т.к.  эти числа считаются «не счастливыми» в культурах разных  стран).  Но при отсутствии оной пришлось реализовать следующую схему:

Поставщик А <—> VoIP (H323, g729) <—> Cisco AS5350xm <—> Е1 (loop) <—> Cisco AS5350xm <—> VoIP (SIP, g711) <—> SIP SERVER <—> Клиенты

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

Для начала нам потребуется кабель с разъемами RJ-45 и следуюзщей «распиновкой»:

E1 —- E1

1  —- 4

2 —- 5

На моем маршрутизаторе были свободны порты E1 3/2 и 3/3. Соединяем порты созданным кабелем и приступаем к настройкам.

Задаем параметры физических интерфейсов Е1:
!
controller E1 3/2
framing NO-CRC4
pri-group timeslots 1-31
!
controller E1 3/3
framing NO-CRC4
pri-group timeslots 1-31

Затем настройки D-каналов:

!
interface Serial3/2:15
no ip address
encapsulation hdlc
isdn switch-type primary-net5
isdn protocol-emulate network
isdn incoming-voice modem
!
interface Serial3/3:15
no ip address
encapsulation hdlc
isdn switch-type primary-net5
isdn incoming-voice modem

И проверяем состояние наших Е1:

#show  controllers e1

E1 3/2 is up.
Applique type is Channelized E1 — balanced
No alarms detected.
alarm-trigger is not set
Version info of slot 3:  HW: 519, PLD Rev: 6
Framer Version: 0x9

E1 3/3 is up.
Applique type is Channelized E1 — balanced
No alarms detected.
alarm-trigger is not set
Version info of slot 3:  HW: 519, PLD Rev: 6
Framer Version: 0x9

Далее настраиваем необходимые пиры (сразу будут указаны различные pattern направлений, объяснение будет ниже):

POTS:

Настройки пиров для нашей «петли»

!
dial-peer voice 3 pots
description ###INCOMING FROM OUR VoIP###
incoming called-number .
direct-inward-dial
port 3/2:D
no register e164
!
dial-peer voice 4 pots
description ###INCOMING FROM PROVIDER-A###
incoming called-number .
direct-inward-dial
port 3/3:D
no register e164

! — этот пир «отправляет» звонки из нашей VoIP сети в loop

!
dial-peer voice 800 pots
description ###FROM OUR VoIP TO LOOP###
destination-pattern 011.T
progress_ind setup enable 3
progress_ind alert enable 8
port 3/2:D

! — этот пир «отправляет» звонки из сети VoIP Поставщика А в loop

!
dial-peer voice 801 pots
description ###FROM PROVIDER-A TO LOOP###
destination-pattern 022.T
progress_ind setup enable 3
progress_ind alert enable 8
port 3/3:D

VoIP:

! — этот пир «принимает и отправляет» звонки из сети/в сеть VoIP Поставщика А

!
dial-peer voice 888 voip
description ###VoIP PROVIDER A###
translation-profile incoming FROM-PROVIDER-A-TO-LOOP
! —- подставляем необходимый префикс
destination-pattern 033.T
codec g729r8
session target ras ! —- наш шлюз регистрируется на гэйткипере постащика А (об этих настройках в другой статье)

incoming called-number 7…… ! —- для того чтобы звонок на наши номера прошел через этот пир и мы смогли подставить префикс
dtmf-relay h245-signal rtp-nte
fax-relay ecm disable
fax protocol t38 ls-redundancy 0 hs-redundancy 0 fallback none
no vad

! — этот пир «принимает и отправляет» звонки из нашей сети/в наше сеть VoIP

!
dial-peer voice 700 voip
description ###OUR VOIP###
translation-profile incoming FROM-OUR-VoIP-TO-LOOP
! —- подставляем необходимый префикс

answer-address 4957……
! —- необходимо для того чтобы звонки от наших абонентов прошли через этот пир и мы подставили необходимый префикс
destination-pattern 4957……
session protocol sipv2
session target sip-server
codec g711alaw
fax-relay ecm disable
fax protocol t38 ls-redundancy 0 hs-redundancy 0 fallback none
no vad

!
voice-port 3/3:D
translation-profile incoming FROM-LOOP-TO-PROVIDER-A
! —- подставляем необходимый префикс
disc_pi_off
input gain 3
echo-cancel coverage 32
cptone RU
music-threshold -45
bearer-cap Speech

Теперь собственно сама логика работы и ее реализация.

Входящие звонки со стороны Провайдера А мы принимаем и отправляем в поток 3/3, со стороны нашей сети все входящие звонки мы отправляем в поток 3/2.

При входящем звонке (направление звонка рассматриваем относительно AS5350xm) со стороны Провайдера А к набираемому номеру нам необходимо подставить префикс 022495, 022 — чтобы однозначно определить необходимый нам поток  3/3, а 495 приходится подставлять из-за того, что в нашей сети используются 10-ти значные АОНы, а провайдер присылает звонки на 7-ми значные.  Для однозначного определения входящего voip пира для звонка со стороны провайдера в пире 888 voip используется команда incoming called-number.  Звонок уходит в порт 3/3 согласно пиру 801, 022 при этом отрежется и из потока 3/2 придет вызов на номер 4957…… который смаршрутизируется согласно пиру 700 voip.

При входящем звонке со стороны нашей сети подставляем префикс 011 для отправки звонка в поток 3/2. Звонок уходит в порт 3/2 согласно пиру 800 pots. Чтобы однозначно определить входящий пир для нашей VoIP сети используется команда answer-address в пире 700 voip. Далее этот звонок «выходит» из 3/3 и для того, чтобы точно его отправить в сторону Поставщика А мы подставляем префикс 033 (возможно это излишне, но мы сразу предположим, что таких провайдеров может быть несколько) и звонок будет смаршрутизирован согласно пиру 888 voip.

Правила трансляции:

voice translation-rule 2
rule 1 /^7495\.*/ /011/
rule 2 /^\.*/ /011/
!
voice translation-rule 3
rule 1 /^\.*/ /022495/
!
voice translation-rule 4
rule 1 /^\.*/ /033/
!
voice translation-profile FROM-PROVIDER-A-TO-LOOP
translate called 3
!
voice translation-profile FROM-OUR-VOIP-TO-LOOP
translate called 2
!
voice translation-profile FROM-LOOP-TO-PROVIDER-A
translate called 4

На этом все, если, кому-то будет это полезным, буду рад. Жду Ваших комментариев и замечаний. Всех благ)

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Пожалуйста, уважайте чужой труд.

Автор:  zaikini

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 8, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Перед нами стояла задача реализовать на Addpac (например: Addpac AP200B или Addpac 1100B)  следующие функции:

  1. Звонков между портами.
  2. Перехвата и перевода звонков.
  3. Блокировка 8-ки ( номеров начинающихся с 8 ) на одном из портов.
  4. Выход в город.

Рассмотрим реализацию задач.

Немного теории:

FXS (Foreign Exchange Station или Subscriber) — голосовой интерфейс, эмулирующий расширение интерфейса PBX, для подключения обычного телефона.
Аббревиатура FXS применима к любому оборудованию, которое, с точки зрения телефона, является АТС.

Для порядка в нашем IT хозяйстве подписываем нужные нам FXS порты (в которые подключены телефонные аппараты):

! FXS
voice-port 0/0
description Panasonic-DECT#999

! FXS
voice-port 0/1
description Red-Phone#555

Создаем dial-peer’ы, принимающие звонки на внутренние номера 999 и 555,

dial-peer voice 10 pots
destination-pattern 999F
port 0/0

!
dial-peer voice 11 pots
destination-pattern 555F
port 0/1

Создаем dial-peer’ы, принимающие звонки на выданный нам по VoIP нашим оператором городской телефонный номер (например, 1234567):

dial-peer voice 5 pots
destination-pattern 1234567F
port 0/0

!
dial-peer voice 6 pots
destination-pattern 1234567F
port 0/1
preference 1

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

dial-peer call-pickup 11
dial-peer call-hold h
dial-peer call-transfer h

Теперь для перехвата звонка надо будет нажать 11,  для перевода звонка — короткий отбой или флеш и телефонный номер.

Реализуем функцию блокировки 8:

dial-peer voice 20 voip
description Block_out_8*
destination-pattern 8T
huntstop
out-barred-group 1

Создаем группу 1, в которой будет прописан номер (например, 999), с которого запрещен набор 8-ки:

dialpattern-group 1
pattern 1 999F

И в конце разрешаем исходящие звонки в ТфОП через шлюз (в примере это IP-адрес 192.168.57.23) нашего VoIP провайдера:

dial-peer voice 30 voip
description out_calls
destination-pattern .T
session target 192.168.57.23
session protocol sip
codec g729
dtmf-relay rtp-2833
no vad

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: neona

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 3, среднее: 4,33 из 5)
Загрузка...
Отправить на почту Отправить на почту