Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

Требуется, чтобы ESBC для передачи/приема сигнальных сообщений на встречную сторону использовал IP-адрес 192.168.16.113, порт 5065.

Решение:

Перейти к настройкам модуля управления конфигурацией ESBC:

...

Используем это правило в TRUNK_OUT в кочестве качестве OUT:

Блок кода
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# trunk sip TRUNK_OUT 
vesbc(config-esbc-trunk-sip)# mod-table sip out MOD_TABLE 
vesbc(config-esbc-trunk-sip)# do commit 
vesbc(config-esbc-trunk-sip)# do confirm 

...

Модифицированный запрос BYE, отправленный с TRUNK_IN На на TRUNK_OUT, содержит заголовок INVITE_Route со значением заголовка Route из запроса INVITE:

...

Пример 3. Синхронизация переменных между плечами вызова.

Схема:

Image Removed

"TRUNK_IN(MODTABLE_IN)" нужно заменить на "TRUNK_IN(MODTABLE_IN_TRUNK_IN)", "TRUNK_OUT" заменить на "TRUNK_OUT(MODTABLE_OUT_TRUNK_OUT)"

Image AddedВ конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Из TRUNK_IN приходит INVITE с заголовком Route. Требуется, используя только переменную var1, скопировать значение заголовка Test_header из INVITE на первом плече, вставить его в заголовок Test_header_INVITE в ответе 180 на втором плече и , скопировать значение заголовка Test_header из ответа 200 на втором плече и вставить его в заголовок Test_header_200 в запрос BYE на первом плече.

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создание таблицы модификаторов MODTABLE_IN_TRUNK_IN для модификаций на первом плече:
vesbc(config-esbc)# mod-table sip MODTABLE_IN_TRUNK_IN
vesbc(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила copy для копирования значения заголовка Route в переменную route:
vesbc(esbc-mod-table)# mod 0 copy
vesbc(esbc-mod-table-modification)# 

#Выбор запроса, в котором будет использоваться модификатор copy (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite

#Указать название заголовка, из которого необходимо копировать значение (в данном случае Test_header):
vesbc(esbc-mod-table-modification)# sip header-pattern Test_header

#Указать содержимое заголовка, при совпадении с которым будет выполнено копирование в переменную. В переменную будет скопирована та часть отбора, которая указана в скобках:
vesbc(esbc-mod-table-modification)# value-pattern '(.+)'

#Указать переменную, в которую будет скопировано значение, указанное в скобках, в примере - (.+):
vesbc(esbc-mod-table-modification)# variable-str 'var1'
vesbc(esbc-mod-table-modification)# exit

#Добавление в таблицу модификаторов правила add для добавления заголовка Test_header_180 в BYE:
vesbc(esbc-mod-table)# mod 1 add

#Выбор запроса, в котором будет использоваться модификатор add (в данном случае BYE):
vesbc(esbc-mod-table-modification)# sip method type Bye

#Название добавляемого заголовка:
vesbc(esbc-mod-table-modification)# header name Test_header_200

#Указать значение заголовка (переменная var1):
vesbc(esbc-mod-table-modification)# header value '${var1}'
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesbc(config-esbc)# trunk sip TRUNK_IN 
vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN_TRUNK_IN
vesbc(config-esbc-trunk-sip)# exit

#Создание таблицы модификаторов MODTABLE_IN_TRUNK_OUT для модификаций на втором плече:
vesbc(config-esbc)# mod-table sip MODTABLE_IN_TRUNK_OUT
vesbc(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила copy для копирования значения заголовка Test_header в переменную var1:
vesbc(esbc-mod-table)# mod 0 copy
vesbc(esbc-mod-table-modification)# 

#Выбор ответа, в котором будет использоваться модификатор copy (в данном случае 200):
vesbc(esbc-mod-table-modification)# sip response-pattern 200

#Указать название заголовка, из которого необходимо копировать значение (в данном случае Test_header):
vesbc(esbc-mod-table-modification)# sip header-pattern Test_header

#Указать содержимое заголовка, при совпадении с которым будет выполнено копирование в переменную. В переменную будет скопирована та часть отбора, которая указана в скобках:
vesbc(esbc-mod-table-modification)# value-pattern '(.+)'

#Указать переменную, в которую будет скопировано значение, указанное в скобках, в примере - (.+):
vesbc(esbc-mod-table-modification)# variable-str 'var1'
vesbc(esbc-mod-table-modification)# exit

#Добавление в таблицу модификаторов правила add для добавления заголовка Test_header_INVITE в 180:
vesbc(esbc-mod-table)# mod 1 add

#Выбор ответа, в котором будет использоваться модификатор add (в данном случае 180):
vesbc(esbc-mod-table-modification)# sip response-pattern '180'

#Название добавляемого заголовка:
vesbc(esbc-mod-table-modification)# header name Test_header_INVITE

#Указать значение заголовка (переменная var1):
vesbc(esbc-mod-table-modification)# header value '${var1}'
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

#Привязать таблицу модификаторов к входящему транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip TRUNK_OUT 
vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN_TRUNK_OUT

#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

...

Поведение при перенаправлении
Якорь
redirect
redirect
 

Настройка поведения при перенапрвлении перенаправлении позволяет использовать разные режимы обработки сообщений 3XX.

...

Информация

Если к user-interface привязан sip profile с включенным игнорированием OPTIONS, то при получении OPTIONS от зарегистрированных абонентов ESBC будет обрабатывать эти запросы и отвечать 200 OK (только если в запросе указан заголовок Contact).

Если OPTIONS приходят не с зарегистрированных абонентов, то такие запросы игнорируются.

Таймеры SIP-сессий (RFC 4028)
Якорь
rfc_4028
rfc_4028

Использование таймеров SIP-сессий (RFC 4028) предназначено для контроля состояния сеансов связи и предотвращения зависания разговорных сессий, в случае возникновения каких-либо проблем, например с сетью. 

Обновление сессии поддерживается путем передачи запросов  rere-INVITE или UPDATE в течении течение сеанса связи.

Запрашиваемый период контроля сессии (Session Expires) — это период времени в секундах, по истечении которого произойдет принудительное завершение сессии в случае, если сессия не будет вовремя обновлена. Принимает значения от 90 до 64800 с, значение по умолчанию 1800 с.

Минимальный период контроля сессии (Min SE) — это минимальный интервал проверки работоспособности соединения. Принимает значения от 90 до 32000 с, значение по умолчанию — 90 с. Данное значение не должно превышать таймаут принудительного завершения сессии Sessions expires.

Сторона обновления сессии (Refresher) — определяет сторону, которая будет осуществлять обновление сессии (uac — сторона клиента (вызывающая), uas — сторона сервера (вызываемая)). Значение по умолчанию - uac.

Поведение по умолчанию - поддержка таймеров SIP-сессий отключена. Для включения используется команда - session  session timer enable.

Описание всех команд для настроки настройки таймеров SIP-сессий приведено в разделе разделе Настройки SIP-профиля Справочника команд CLI.

...

Включить поддержку таймеров SIP-сессий на транке TRUNK_2 с параметрами Session Expires - 120, Min SE - 120, Refresher - UAS. На транке TRUNK_1 таймеры не используются.

...

При исходящем вызове в транк TRUNK_2, в сообщение INVITE будут добавлены заголовки в соответствии с настройкой. Если сторона Б также поддерживает RFC 4028, то будет включен контроль сессии:

Т. к. refresher=uas, то в  в данном примере, сторона Б будет отправлять сообщения UPDATE каждые 60 сек. Если по истечении 90 сек. от стороны Б не будет получено сообщение UPDATE, вызов будет разрушен (ESBC отправит BYE в обе стороны).

Примечание

При использовании таймеров SIP-сессий на одном из плечь плеч вызова, запросы re-INVITE или UPDATE, полученные от удаленной стороны, в рамках контороля контроля сессии , будут передавться передаваться на второе плечо, не зависимо независимо от настроек таймеров на этом плече.

...

Для транзита SDP c ISUP требуется включение данной опции на обоих (входящем и исходящем) направлениях (транках/пользовательских интерфейсах), через которые будет осуществляться маршрутизация сигнализации SIP.

...

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

Управление типом медиаданных и кодеками

Обработка медиапотоков осуществляется в двух режимах: проксирование и транскодирование. 

...

В результате конфигурация медиапрофиля будет выглядеть следующим образом:

Блок кода
  media profile FOR_TRUNK_2
    codec allow AMR
    codec allow CLEARMODE
    codec allow CN
    codec allow G72
    codec allow G722/ 9
    codec allow G728 15
    codec allow G729/ 18
    codec allow GSM 3
    codec allow ILBC
    codec allow L16/44100 11
    codec allow L16/44100/2 10
    codec allow OPUS
    codec allow PCMA 8
    codec allow PCMU 0
    codec allow SPEEX
    codec allow T38 t38
    codec allow telephone-event
  exit

...

  1. Offer SDP фильтруется согласно разрешённым кодекам на плече A.
  2. Offer SDP фильтруется согласно разрешённым кодекам на плече B.
  3. Если в медиапрофиле на плече А включен транскодинг, и во входящем SDP присутствуют кодеки из списка разрешенных, то в конец Offer SDP добавляются недостающие кодеки, транскодинг которых включен в media profile на плече B.
  4. Answer SDP фильтруется согласно разрешённым кодекам на плече B.
  5. В конец Answer SDP добавляются недостающие кодеки, транскодинг которых включен в media profile на плече A.
  6. Перед отправкой Answer SDP в плечо А производится согласование кодеков. 

В результате , транскодирование включается, если самые приоритетные кодеки из Offer и Answer SDP на двух плечах не совпадают. В таком случае в Answer SDP будет выбран наиболее приоритетный кодек, который был получен в Offer SDP, и для которого включена поддержка транскодирования в медиапрофиле на плече А.

Иначе , при совпадении приоритетных кодеков в Offer SDP и Answer SDP, будет использоваться проксирование медиаданных.

...

Если в вызове, который был установлен через транк NEW_TRUNK, в течении течение 1 минуты , в ESBC не будут приходить RTP-пакеты , с любой из сторон, то вызов будет принудительно завершён.

Таймаут ожидания RTP-пакетов после получения Comfort Noise

Это Эта функция является дополнением кфункции к функции "Таймаут ожидания RTP-пакетов" с учетом контроля учетом контроля состояния разговора по наличию RTP-трафика при использовании пакетов Comfort Noise в RTP-потоке.

Данный таймаут является множителем для rtp timeout. Множитель - это коэффициент, который определяет, во сколько раз значение данного таймаута больше, чем таймаут ожидания RTP-пакетов. Принимает значения из диапазона 2-302–30.

Контроль осуществляется следующим образом: если в течение данного времени от встречного устройства не поступает ни одного RTP-пакета и последний пакет был пакетом CN (Comfort Noise), то вызов завершается. 

...

Если в вызове, который был установлен через транк NEW_TRUNK, в течении течение 1 минуты , в ESBC не будут приходить RTP-пакеты , с любой из сторон, а последний пакет был пакетом CN, то таймаут ожидания RTP-пакетов увеличится в 5 раз. Таким образом, если в течении течение 5 минут с момента получения CN-пакета  пакета не поступает ни одного RTP-пакета, то вызов будет принудительно завершён.

...

Если в вызове, который был установлен через транк NEW_TRUNK, в течении течение 30 секунд , в ESBC не будут приходить RTСP-пакеты , с любой из сторон, то вызов будет принудительно завершён.

Примечание

Рекомендуется настраивать таймауты ожидания RTP и RTCP-пакетов совместно.

Остутствие Отсутствие RTP-пакетов не является явным признаком неисправности на сети передачи данных, т. к. разговорный канал может быть деактивирован временно какой-либо из сторон, например, через согласование SDP a=inactive. При этом пакеты RTCP будут передаваться сторонами в этом состоянии. 

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

Логика совместной работы таймеров.

Если время потери RTP-пакетов больше, чем RTP-таймаут, то проверяется RTCP-таймаут. Если RTCP-таймаут не настроен или время ожидания RTCP-пакетов истекло, то сессия завершается, иначе сессия останется активной, пока не истечёт RTCP-таймаут.  Если Если в это время придёт RTP-пакет, то таймаут ожидания RTP перезапустится. Таким же образом происходит проверка RTP-таймаута, если истекает RTCP-таймаут.

...

Если в вызове, который был установлен через транк NEW_TRUNK,  в течении течение 1 минуты не будут приходить RTP-пакеты, а таймаут ожидания RTCP-пакетов ещё не истёк, то сессия не завершится. Таким образом, соединение будет поддерживаться, пока встречная сторона отправляет RTCP-пакеты. Если за это время придёт RTP-пакет, таймаут ожидания RTP-пакетов перезапустится. Иначе, если RTCP-пакеты также перестанут приходить, и ни один RTP-пакет так и не поступит, сессия завершится через 120 секунд с момента последнего  пришедшего RTCP-пакета.

...

Блок кода
languagec#
Session Description Protocol
    Session Description Protocol Version (v): 0
    Owner/Creator, Session Id (o): 100 3932018917 3932018917 IN IP4 192.168.23.199
    Session Name (s): Talk
    Connection Information (c): IN IP4 192.168.23.199
    Time Description, active time (t): 0 0
    Session Attribute (a): rtcp-xr:rcvr-rtt=all:10000 stat-summary=loss,dup,jitt,TTL voip-metrics
    Session Attribute (a): record:off
    Media Description, name and address (m): audio 8064 RTP/SAVP 96 97 98 0 8 18 101 99 100
    Media Attribute (a): rtpmap:96 opus/48000/2
    Media Attribute (a): fmtp:96 useinbandfec=1
    Media Attribute (a): rtpmap:97 speex/16000
    Media Attribute (a): fmtp:97 vbr=on
    Media Attribute (a): rtpmap:98 speex/8000
    Media Attribute (a): fmtp:98 vbr=on
    Media Attribute (a): fmtp:18 annexb=yes
    Media Attribute (a): rtpmap:101 telephone-event/48000
    Media Attribute (a): rtpmap:99 telephone-event/16000
    Media Attribute (a): rtpmap:100 telephone-event/8000
    Media Attribute (a): rtcp-fb:* trr-int 5000
    Media Attribute (a): rtcp-fb:* ccm tmmbr
    Media Attribute (a): crypto:1 AES_256_CM_HMAC_SHA1_80 inline:FGdOolKfBlrQzUIedHcIqs9uauWEnUbqxXpop9PaI1dPIHVnO/vdb7JJHRLBLw==
    Media Attribute (a): crypto:2 AES_256_CM_HMAC_SHA1_32 inline:Galc9UfOqBFNmr3ICc3Fiuc3HgEXlj+p1dRw85LavzjWR1sGZUr1nsLQjfaTQA==
    Media Attribute (a): crypto:3 AES_CM_128_HMAC_SHA1_80 inline:jEjWFKpqdf6d94g/ddSjj1i08dEWQA1tTI75Hqx3
    Media Attribute (a): crypto:4 AES_CM_128_HMAC_SHA1_32 inline:uFYI2UDA/+woJJY4fWljfoxRROffXNtEO81bBnHJ
    [Generated Call-ID: 503d40e930910767a2dd95f88b483189]

Контроль источника RTP

Контроль источника RTP позволяет принимать медиатрафик только с IP-адреса и порта, указанного в SDP встречной стороны, повышая безопасность взаимодействия при использовании публичной сети передачи данных.

...

Примечание

При использовании опции "Контроль источника RTP" совместно с включенной опцией "nat comedia" в транке или абонентском интерфейсе, RTP-трафик будет передаваться на IP-адрес и порт из входящего потока.

Scroll Pagebreak

Поддержка RFC5168 (PFU)

Picture Fast Update (PFU) — это механизм быстрого восстановления видеоизображения, за счет обновления поврежденных кадров, обеспечивая минимальные задержки и стабильное качество видео даже при потере пакетов.

...

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, маршрутизируется через  через TRUNK_OUT.  На обоих транках в настройках медиапрофиля поддержка использования RFC5168 отключена.

...

Блок кода
languagec#
eXtensible Markup Language
    <?xml
        version="1.0"
        encoding="utf-8"
        ?>
    <media_control>
        <vc_primitive>
            <to_encoder>
                <picture_fast_update/>
                </to_encoder>
            </vc_primitive>
        </media_control>

Т. к. поддержка  RFC5168 RFC5168 отключена, ESBC ответит 200 ОК и отправит сообщение INFO с XML, в котором содержится "Unsupported picture fast update":

...

В конфигурации есть два транка, настроена маршрутизация. На них обоих транках используется один видеокодек (например, VP8). Вызов, который приходит из TRUNK_IN, маршрутизируется через  через TRUNK_OUT. На обоих транках , в настройках медиапрофиля указываем, что поддержка использования RFC5168 включена.

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

 #Создание медиапрофиля MEDIA_PROFILE_TRUNK_IN с включенной поддержкой RFC5168:
vesbc(config-esbc)# media profile MEDIA_PROFILE_TRUNK_IN 
vesbc(config-esbc-media-profile)# rfc5168 enable 
vesbc(config-esbc-media-profile)# exit
vesbc(config-esbc)#

#Создание медиапрофиля MEDIA_PROFILE_TRUNK_OUT с включенной поддержкой RFC5168:
vesbc(config-esbc)# media profile MEDIA_PROFILE_TRUNK_OUT
vesbc(config-esbc-media-profile)# rfc5168 enable
vesbc(config-esbc-media-profile)# exit
vesbc(config-esbc)#

 #Привязать медиапрофиль к транку TRUNK_IN:
vesbc(config-esbc)# trunk sip TRUNK_IN
vesbc(config-esbc-trunk-sip)# media profile MEDIA_PROFILE_TRUNK_IN
vesbc(config-esbc-trunk-sip)#  

#Привязать медиапрофиль к транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip TRUNK_OUT
vesbc(config-esbc-trunk-sip)# media profile MEDIA_PROFILE_TRUNK_OUT
vesbc(config-esbc-trunk-sip)#  

#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

...

Блок кода
languagec#
eXtensible Markup Language
    <?xml
        version="1.0"
        encoding="utf-8"
        ?>
    <media_control>
        <vc_primitive>
            <to_encoder>
                <picture_fast_update/>
                </to_encoder>
            </vc_primitive>
        </media_control>

Т. к. поддержка  RFC5168 RFC5168 включена, ESBC прокидывает сообщение INFO на второе плечо (в TRUNK_OUT):

...

Встречная сторона (TRUNK_OUT) отвечает, поддерживает ли она INFO с XML PFU или нет.

...

В конфигурации есть два транка, настроена маршрутизация. На транках используются разные видеокодеки, т. е. ESBC работает в режиме транскодирования видео (в примере примере TRUNK_IN использует VP8, а TRUNK_OUT H264). Вызов, который приходит из TRUNK_IN, маршрутизируется через  через TRUNK_OUT.  На обоих транках в настройках медиапрофиля указываем, что поддержка использования RFC5168 включена.

...

Т. к. используется транскодирование, то ESBC самостоятельно обрабатывает INFO отправляет 200 ОК.

Управление безопасностью системы
Якорь
security
security

В данном разделе описаны методы защиты и примеры настройки ESBC для защиты от различных SIP-атак.

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

Настройка профилей безопасности
Якорь
security_profile
security_profile

...

Профиль безопасности может использоваться  использоваться в транках, транк-группах и абонентских интерфейсах. 

...

Описание всех команд для настройки профилей безопасности приведено в разделе Настройки профиля безопасности.  

Общий принцип работы модуля fail2ban
Якорь
fail2ban
fail2ban

Модуль занимается анализом возникающих ошибок для дальнейшей блокировки источников "подозрительного SIP-трафика". При возникновении ошибки в модуль отправляется информация о типе ошибки и об источнике. При накоплении достаточного количества ошибок источник блокируется. 

...

  • ACCOUNT HACKING — превышен лимит по количеству ошибок с одинаковым AOR/User-Agent;

  • PACKET FLOODING — превышен лимит по количеству ошибок с одного IP-адреса;

  • BURST ERRORS — превышен глобальный лимит по количеству ошибок в секунду;

  • GLOBAL RPS LIMIT — превышен глобальный лимит по количеству заблокированных запросов в секунду;

  • IP RPS LIMIT — превышен лимит по количеству заблокированных запросов в секунду c одного IP-адреса;

  • MONITORED ADDRESSES LIMIT — превышено максимальное количество IP-адресов с ошибками;

  • DISTRIBUTED SPAM — превышено максимальное количество IP-адресов с одинаковым заблокированным атрибутом (AOR, User-Agent);

  • BLOCKED ATTRIBUTES LIMIT — превышено максимальное количество заблокированных атрибутов (AOR, User-Agent);

  • IP BLOCKED ATTRIBUTES LIMIT — превышено максимальное количество заблокированных атрибутов (AOR, User-Agent) с одного IP-адреса.

Фильтрация SIP-флуда

ESBC поддерживает создание флуд-фильтров для механизма конфигурируемой защиты от SIP-flood, а также для фильтрации клиентских приложений. Фильтр применяется ко всему SIP-сообщению (включая тело — SDP, XML и т. д.).

...

  • времени блокировки (security block-timeout), которое используется при блокировке IP-адреса.
  • времени прощения (security forgive-time), которое используется при блокировке атрибутов (AOR, user-agent и sip-user).
  • времени хранения ошибок (security errors-window) – время, в течении течение которого накапливаются ошибки по каждому объекту блокировки.
Информация

По умолчанию, время блокировки составляет 1440 минут, время прощения - 60 минут, время хранения ошибок - 3600 секунд.

Описание всех команд выше приведено в разделе Общие настройки ESBC

...