Asterisk pjsip ACL
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は参照されません。