...
Требуется, чтобы 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. Синхронизация переменных между плечами вызова.
Схема:
"TRUNK_IN(MODTABLE_IN)" нужно заменить на "TRUNK_IN(MODTABLE_IN_TRUNK_IN)", "TRUNK_OUT" заменить на "TRUNK_OUT(MODTABLE_OUT_TRUNK_OUT)"
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Из TRUNK_IN приходит INVITE с заголовком Route. Требуется, используя только переменную var1, скопировать значение заголовка Test_header из INVITE на первом плече, вставить его в заголовок Test_header_INVITE в ответе 180 на втором плече и , скопировать значение заголовка Test_header из ответа 200 на втором плече и вставить его в заголовок Test_header_200 в запрос BYE на первом плече.
| Блок кода | ||
|---|---|---|
| ||
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. |
...
Поведение при перенаправлении
| Якорь | ||||
|---|---|---|---|---|
|
Настройка поведения при перенапрвлении перенаправлении позволяет использовать разные режимы обработки сообщений 3XX.
...
| Информация |
|---|
Если к user-interface привязан sip profile с включенным игнорированием OPTIONS, то при получении OPTIONS от зарегистрированных абонентов ESBC будет обрабатывать эти запросы и отвечать 200 OK (только если в запросе указан заголовок Contact). Если OPTIONS приходят не с зарегистрированных абонентов, то такие запросы игнорируются. |
Таймеры SIP-сессий (RFC 4028)Якорь rfc_4028 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 |
...
- Offer SDP фильтруется согласно разрешённым кодекам на плече A.
- Offer SDP фильтруется согласно разрешённым кодекам на плече B.
- Если в медиапрофиле на плече А включен транскодинг, и во входящем SDP присутствуют кодеки из списка разрешенных, то в конец Offer SDP добавляются недостающие кодеки, транскодинг которых включен в media profile на плече B.
- Answer SDP фильтруется согласно разрешённым кодекам на плече B.
- В конец Answer SDP добавляются недостающие кодеки, транскодинг которых включен в media profile на плече A.
- Перед отправкой 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-пакета.
...
| Блок кода | ||
|---|---|---|
| ||
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 отключена.
...
| Блок кода | ||
|---|---|---|
| ||
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 включена.
| Блок кода | ||
|---|---|---|
| ||
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. |
...
| Блок кода | ||
|---|---|---|
| ||
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
| security | |
| security |
В данном разделе описаны методы защиты и примеры настройки ESBC для защиты от различных SIP-атак.
Для более надежной защиты рекомендуется использовать дополнительные механизмы защиты от прочих сетевых атак, описанные в разделе Рекомендации по безопасной настройке.
Настройка профилей безопасностиЯкорь security_profile security_profile
| security_profile | |
| security_profile |
...
Профиль безопасности может использоваться использоваться в транках, транк-группах и абонентских интерфейсах.
...
Описание всех команд для настройки профилей безопасности приведено в разделе Настройки профиля безопасности.
Общий принцип работы модуля fail2banЯкорь fail2ban 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.
...


