Asterisk pjsip ACL

提供: VoIP-Info.jp
移動先: 案内検索

AsteriskのPjSIPでACLを使用する場合の挙動

ファイル

  • pjsip.conf
type=aclで定義されるACL
  • alc.conf
Asteriskの名前付きACL
'[ ]'で定義されるセクション名がACLの名前
PjSIPの各所(endpointなど)から'acl=名前'で参照される

pjsip.conf

  • グローバルなACLとして動作する
  • 他で設定されたACL(endpointなど)よりも優先使用される(BASELINE)
  • 何も設定されていない場合には『全許可』(ACLなし)

全拒否のACL

[acl]
type = acl
deny = 0.0.0.0/0.0.0.0

192.168.1.0/24だけ許可するACL

[acl]
type = acl
deny = 0.0.0.0/0.0.0.0
permit = 192.168.1.0/24

acl.confの名前付ACLをACLとして使用する場合

[acl]
type = acl
acl = inhouse-phones

acl.conf

Asteriskの名前付きACL

[inhouse-phones]
deny=0.0.0.0/0.0.0.0
permit=192.168.1.0/24

セクション名がACLの名前

既知の問題点

たぶん現時点(Asterisk 16.0.0)の仕様だと思われますが名前付きACLをendpoint等に定義した場合、CLIからリロードされません。

pjsip_wizard.confやpjsip.confのendpoint設定でendpoint/acl = myphonesあるいはacl = myphonesを定義する
Asteriskを再起動して有効にする(pjsip show endpoint なんとか)で確認
acl.confを編集する
CLIでmodule reload acl を実行する
CLIでacl show myphones を実行すると正しく変更されている
ところが挙動は正しくならない
解決するにはAsteriskを再起動するしかない

一番簡単な方法

グローバルのACLだけで定義します。
pjsip.confの中で以下の例のように書くだけです。

[acl]
type = acl
deny = 0.0.0.0/0.0.0.0
permit = 192.168.1.0/24
permit = 許可したいIPアドレス

この方法の場合にはCLIからmodule reload res_pjsip.soだけで反映されます。
どのみちこのACLを抜けてこないと各endpointなどのACLは参照されません。

全許可しておき各endpointでACLを定義する

pjsip.confにはACLを書かない。
acl.confに以下のようなものを書く。

[myphones]
type = acl
deny = 0.0.0.0/0.0.0.0
permit = 192.168.1.0/24

endpoint設定に以下のように書く

acl = myphones

この場合、Asteriskを再起動しないとACLの情報が更新されません。