Выбрать главу

[мой_поставщик_услуг]

type=peer

host=10.251.55.100

fromuser=мой_уникальный_id

secret=мой_секретный пароль

context=incoming_calls

dtmfmode=rfc2833

disallow=all

allow=gsm

allow=ulaw

(обратно)

Конфигурация локального межсетевого экрана

Если межсетевой экран ip-таблиц используется на одном компьютере с сервером Asterisk, выполнив следующие команды, можно открыть порт 5060 для обмена сигналами по протоколу SIP и порты от 10000 до 20000 для RTP-трафика. Также диапазон RTP-портов можно сузить в файле rtp.conf, находящемся в папке /etc/asterisk. Замечательная книга по организации межсетевых экранов с помощью ip-таблиц - «Linux Firewalls» (издательство Novell Press) Стива Суэринга (Steve Suehring) и Роберта Циглера (Robert Ziegler).

# iptables -I RH-Firewall-1-INPUT -p udp --dport 5060 -j ACCEPT

# iptables -I RH-Firewall-1-INPUT -p udp --dport 10000:20000 -j ACCEPT

# service iptables save

Помните, что это откроет порты 5060 и от 10000 до 20000 для всего UDP-трафика из любого источника.

deny=0.0.0.0/0

permit=10.251.55.100/32

insecure=invite

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

Задавая тип peer, мы указываем Asterisk, что при получении сообщения INVITE (Приглашение) (когда поставщик присылает вызов) нужно сравнивать не имя [мой поставщик сервисов], а IP-адрес, указанный в этом сообщении. Параметр host - это IP-адрес, на который мы будем направлять наши вызовы, и этот IP-адрес будет сопоставляться при получении вызова от поставщика.

Параметр fromuser (от пользователя) влияет на то, как структурировано наше сообщение INVITE при отправке вызова поставщику сервисов.

(обратно)

Сопоставление имени пользователя, а не IP-адреса

Некоторые поставщики услуг для отправки своих вызовов могут использовать вместо протокола Session Initiation Protocol множество IP-адресов, требуя от вас создания отдельной учетной записи типа peer для каждого IP-адреса. Если известны не все IP-адреса, вероятно, придется сравнивать имена пользователей. В этом случае потребуется лишь немного изменить формат описания поставщика сервисов. Самое большое изменение, на которое следует обратить внимание, - то, что вам понадобится задать [заголовок_поставщика_услуг] как имя пользователя, которому ваш поставщик сервисов собирается направлять вызовы. Также мы изменили тип peer (равноправный) на friend (дружественный), что с точки зрения Asterisk создает типы и user (пользователь), и peer, где тип user будет сравниваться раньше peer: [мой_уникальный_id] type=friend host=10.251.55.100 fromuser=мой_уникальный_id secreЛ=мой_секретный пароль context=incoming_calls dtmfmode=rfc2833 disallow=all allow=gsm allow=ulaw insecure=invite

Обратите внимание, что удалены параметры deny (отклонить) и permit (разрешить), поскольку IP-адреса, с которых будут поступать вызовы, могут быть неизвестны. Если вдруг эти адреса известны и вы по-прежнему хотите сравнивать их, параметры deny и permit для IP-адресов можно восстановить.

Если имя пользователя задано в параметре fromuser, при отправке вызова поставщику меняются поля From: (От:) и Contact: (Контакт:) сообщения INVITE. Этого может требовать сам поставщик, если он использует эти поля в процедуре аутентификации. То, где Asterisk меняет заголовок, можно увидеть в следующих двух фрагментах кода.

Без параметра fromuser:

Audio is at 66.135.99.122 port 18154

Adding codec 0x2 (gsm) to SDP

Adding codec 0x4 (ulaw) to SDP

Adding non-codec 0x1 (telephone-event) to SDP

Reliably Transmitting (no NAT) to 10.251.55.100:5060:

INVITE sip:15195915119@10.251.55.100 SIP/2.0

Via: SIP/2.0/UDP 66.135.99.122:5060;branch=z9hG4bK32469d35;rport

From: "asterisk" <sip:asterisk@66.135.99.122>;tag=as4975f3ff

To: <sip:15195915119@10.251.55.100>

Contact: <sip:asterisk@66.135.99.122>

Call-ID: 58e3dfb2584930cd77fe989c00986584@66.135.99.122

CSeq: 102 INVITE

User-Agent: Asterisk PBX

Max-Forwards: 70

Date: Fri, 20 Apr 2007 14:59:24 GMT

Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY Supported: replaces Content-Type: application/sdp Content-Length: 265

С параметром fromuser:

Audio is at 66.135.99.122 port 11700

Adding codec 0x2 (gsm) to SDP

Adding codec 0x4 (ulaw) to SDP

Adding non-codec 0x1 (telephone-event) to SDP

Reliably Transmitting (no NAT) to 10.251.55.100:5060:

INVITE sip:15195915119@10.251.55.100 SIP/2.0

Via: SIP/2.0/UDP 66.135.99.122:5060;branch=z9hG4bK635b0b1b;rport

From: "asterisk" <sip:мой_уникальный_id@66.135.99.122>;tag=as3186c1ba

To: <sip:15195915119@10.251.55.100>

Contact: <sip:мой_уникальный_id@66.135.99.122>

Call-ID: 0c7ad6156f92e70b1fecde903550a12f@66.135.99.122

CSeq: 102 INVITE

User-Agent: Asterisk PBX

Max-Forwards: 70

Date: Fri, 20 Apr 2007 15:00:30 GMT

Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY Supported: replaces Content-Type: application/sdp Content-Length: 265

Параметры deny и permit используются для отклонения всех входящих вызовов к этому участнику сети от всех IP-адресов, кроме заданного параметром permit. Это просто мера безопасности, которая обеспечивает поступление к данному участнику сети трафика только с ожидаемого IP-адреса.