FusionPBX ๋ฐ ACL

์ œ ๊ธฐ์‚ฌ๋Š” ์ œํ’ˆ์— ๋Œ€ํ•œ ์ „์ฒด์ ์ธ ์„ค๋ช…์ด ์•„๋‹ˆ๋ผ, ์ข‹์€ ์ถœํŒ๋ฌผ์ธ "FusionPBX, ๋˜๋Š” FreeSWITCH"์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. FusionPBX์˜ ACL ์ฃผ์ œ๋ฅผ ์ž˜ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ €๋Š” FreeSWITCH/FusionPBX์— ๋Œ€ํ•œ ์ €์˜ ๊ฒฝํ—˜์„ ํ† ๋Œ€๋กœ ์ด๋Ÿฌํ•œ ์ฐจ์ด๋ฅผ ๋ฉ”์šฐ๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ domain.local ๋„๋ฉ”์ธ์— ๋“ฑ๋ก๋œ ๋‚ด๋ถ€ ๋ฒˆํ˜ธ 1010์ด ์žˆ๋Š” FusionPBX๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋„์‹œ๋กœ์˜ ์™ธ๋ถ€ ํ†ตํ™”๋ฅผ ์œ„ํ•œ ๊ฒฝ๋กœ๋ฅผ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์Šน์ธ๋˜์ง€ ์•Š์€ ์ „ํ™”๋กœ ์ธํ•ด ๋ˆ์„ ํ›”์ณ๊ฐ€๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ACL์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ €๊ฒƒ๋“ค. ACL์— ์„ค๋ช…๋œ ๋„คํŠธ์›Œํฌ์—์„œ๋งŒ ๋ฐœ์‹  ํ†ตํ™”๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” FusionPBX์—์„œ ACL์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹, ๊ธฐ๋Šฅ, ๋…ผ๋ฆฌ ๋ฐ ์—ฐ๊ฒฐ ์ง€์ ์— ๋Œ€ํ•ด ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ๊ธฐ์‚ฌ๋ฅผ ์“ด ์กด๊ฒฝํ•˜๋Š” ์ €์ž์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ € ์—ญ์‹œ ACL๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋ถ€์ƒ์„ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. SipProfiles.
๋‘ ๊ฐ€์ง€ ํ”„๋กœํ•„(์ €๋Š” ์ด๋ ‡๊ฒŒ ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค)์€ ๋ชจ๋‘ ๋‚ด๋ถ€์ , ์™ธ๋ถ€์  ์ธก๋ฉด์—์„œ ๋Œ€์ค‘์  ๋งฅ๋ฝ์— ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์šฐ์—ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ˆซ์ž์˜ ๋“ฑ๋ก์€ ๋‚ด๋ถ€ ํ”„๋กœํ•„์—์„œ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ํ”„๋กœํ•„์—์„œ ๋„๋ฉ”์ธ ACL์€ apply-inbound-acl๋กœ ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ผ์ธ์€ ํ”„๋กœํ•„ ์ˆ˜์ค€์—์„œ ACL์˜ ์ž‘๋™์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ํ”„๋กœํ•„์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋ชจ๋‘ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

๋ฌธ๋งฅ

ํ†ตํ™” ๋ผ์šฐํŒ…์—์„œ๋Š” ์ปจํ…์ŠคํŠธ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ˆ˜์‹  ๊ฒฝ๋กœ๋Š” ๊ณต๊ฐœ ์ปจํ…์ŠคํŠธ์— ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค.

๋ฐœ์‹  ๊ฒฝ๋กœ(๋„์‹œ, ํœด๋Œ€์ „ํ™”, ์žฅ๊ฑฐ๋ฆฌ, ๊ตญ์ œ ๋“ฑ)๋Š” (๊ธฐ๋ณธ์ ์œผ๋กœ) ์ด๋ฆ„ ์ปจํ…์ŠคํŠธ ๋‚ด์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ (์ด ๋„๋ฉ”์ธ์„ domain.local์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.)

ACL

์ด์ œ ACL์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒˆ๋กœ ์„ค์น˜๋œ FusionPBX์—๋Š” ๋‘ ๊ฐœ์˜ ACL์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋„๋ฉ”์ธ ๊ธฐ๋ณธ ์ž‘์—…: ๊ฑฐ๋ถ€ - ์ด ์‹œํŠธ๋Š” ๋‚ด๋ถ€ ํ”„๋กœํ•„์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
lan ๊ธฐ๋ณธ ๋™์ž‘: ํ—ˆ์šฉ

ACL ๋ชฉ๋ก ๋„๋ฉ”์ธ์— ๋„คํŠธ์›Œํฌ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: 192.168.0.0/24). ์ด ๋„คํŠธ์›Œํฌ์— ํ—ˆ์šฉ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ณ  reloadacl์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ์ด ๋„คํŠธ์›Œํฌ์—์„œ ์ „ํ™”๋ฅผ ๋“ฑ๋กํ–ˆ๋Š”๋ฐ, ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ง„ํ–‰๋˜๊ณ  ์žˆ๊ณ  ์ง€์‹œ์™€ ๋…ผ๋ฆฌ์— ๋งž๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์™ธ๋ถ€ ๋ฒˆํ˜ธ๋กœ ์ „ํ™”๋ฅผ ๊ฑธ์—ˆ๊ณ ... ๋„๋„›์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ, ๋„๋„›์— ๊ตฌ๋ฉ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ฐ‘์ž๊ธฐ!

์ฝ˜์†”์ด๋‚˜ FusioPBX ๋กœ๊ทธ ๋ทฐ์–ด๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ ๋ถ„์„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ์˜ ๊ณผ์ œ๋ฅผ ๋ด…๋‹ˆ๋‹ค:

switch_channel.c:1104 New Channel sofia/internal/1010@domain.local

ํŠธ๋ฆฌ๊ฑฐ๋œ ACL์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

sofia.c:10208 IP 192.168.0.150 Approved by acl "domains[]". Access Granted.

๊ทธ๋ฆฌ๊ณ  ๋” :

mod_dialplan_xml.c:637 Processing 1010 <1010>->98343379xxxx in context public
switch_core_state_machine.c:311 No Route, Aborting 
switch_core_state_machine.c:312 Hangup sofia/internal/1010@domain.local [CS_ROUTING] [NO_ROUTE_DESTINATION] 

๊ฒฝ๋กœ ์—†์Œ! ์šฐ๋ฆฌ์˜ ๊ฒฝ๋กœ๋Š” ๋ช…ํ™•ํ•˜๊ฒŒ ๊ธฐ๋ก๋˜์–ด ์žˆ์ง€๋งŒ์š”.

๋Œ€๋‹ต์€ ์ •๋ง ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

์ „ํ™”๊ฐ€ ์™”์Šต๋‹ˆ๋‹ค. ACL์ด ๋†“์ณค์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ACL์ด ๋‚ด๋ถ€ ํ”„๋กœํ•„์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ์žˆ๊ณ , ์ด ํ”„๋กœํ•„์ด ๊ณต๊ฐœ ์ปจํ…์ŠคํŠธ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— FreeSWITCH๋Š” ๊ณต๊ฐœ ์ปจํ…์ŠคํŠธ์—์„œ ๋ผ์šฐํŒ…์„ ์ •์งํ•˜๊ฒŒ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณต๊ณต์˜ ๋งฅ๋ฝ์—์„œ๋Š” ๋“ค์–ด์˜ค๋Š” ๊ฒฝ๋กœ๋งŒ ์žˆ๊ณ , ์‹œ์Šคํ…œ์€ ์ •์งํ•˜๊ฒŒ ๋„์‹œ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—†๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

์ด ์ƒํ™ฉ์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์ ์–ด๋„ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ด ACL์„ ํ”„๋กœํ•„์ด ์•„๋‹Œ ๋‚ด๋ถ€ ๋ฒˆํ˜ธ ์ž์ฒด์— ์ฒจ๋ถ€ํ•˜์„ธ์š”. ์ด๊ฒƒ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋”์šฑ ์„ธ๋ฐ€ํ•œ ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ์œ„ํ•ด ACL์„ ํ™•์žฅ ๊ธฐ๋Šฅ์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊น๊ฒŒ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ €๊ฒƒ๋“ค. ๋ฐœ์‹  ํ†ตํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ „ํ™”๊ธฐ์˜ ํŠน์ • ์ฃผ์†Œ/๋„คํŠธ์›Œํฌ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์˜ ๋‹จ์ ์€ ๊ฐ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  2. ACL์„ ์ˆ˜์ •ํ•˜์—ฌ ํ”„๋กœํ•„ ์ˆ˜์ค€์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์„ ํƒํ•œ ์ด์œ ๋Š” ๊ฐ ํ™•์žฅ์— ๋„คํŠธ์›Œํฌ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ACL์— ๋„คํŠธ์›Œํฌ๋ฅผ ํ•œ ๋ฒˆ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฑด ํŠน๋ณ„ํžˆ ์ œ ์—…๋ฌด๋ฅผ ์œ„ํ•œ ๊ฑฐ์˜ˆ์š”. ๋‹ค๋ฅธ ์ž‘์—…์—๋Š” ๋‹ค๋ฅธ ์˜์‚ฌ๊ฒฐ์ • ๋…ผ๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ. ACL ๋„๋ฉ”์ธ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋„๋ฉ”์ธ ๊ธฐ๋ณธ ๋™์ž‘: ํ—ˆ์šฉ

ACL ๋ชฉ๋ก ๋„๋ฉ”์ธ์—์„œ ๋„คํŠธ์›Œํฌ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ฑฐ๋ถ€ 192.168.0.0/24

์šฐ๋ฆฌ๋Š” ์žฌ๋กœ๋”ฉ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
ํ…Œ์ŠคํŠธํ•ด ๋ด…์‹œ๋‹ค: 98343379ั…ั…ั…ั… ๋ฒˆํ˜ธ๋กœ ๋‹ค์‹œ ์ „ํ™”๋ฅผ ๊ฑธ์–ด๋ณด์„ธ์š”. ๊ทธ๋Ÿฌ๋ฉด ๋‹ค์ด์–ผ ํ†ค์ด "์•ˆ๋…•ํ•˜์„ธ์š”"๋กœ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
FreeSWITCH์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
ํ†ตํ™”๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค:

switch_channel.c:1104 New Channel sofia/internal/1010@domain.local

ACL์ด ํ†ต๊ณผ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค:

[DEBUG] sofia.c:10263 IP 192.168.0.150 Rejected by acl "domains". Falling back to Digest auth.

์ดํ›„ :

mod_dialplan_xml.c:637 Processing 1010 <1010>->98343379xxxx in context domain.local
sofia/internal/1010@domain.local Regex (PASS) [Sity] destination_number(98343379xxxx) =~ /^9(8343[23]d{6})$/ break=on-false 

๋ผ์šฐํŒ…์ด ์ด๋ฃจ์–ด์กŒ๊ณ  ์ด์ œ ์—ฐ๊ฒฐ์ด ์„ค์ •๋˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด๋Š” ์ด ์ฃผ์ œ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค.

ACL์—์„œ ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ์ฒซ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ์˜ ์ƒํ™ฉ๊ณผ ๊ฐ™์ด ACL ํ˜ธ์ถœ์€ ํ†ต๊ณผํ•˜๊ณ  ๋ผ์šฐํŒ…์€ NO_ROUTE_DESTINATION์ด๋ผ๊ณ  ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์ด๊ฒƒ์ด ์ œ๊ฐ€ ACL FusionPBX์— ๋Œ€ํ•ด ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ์ „๋ถ€์ผ ๊ฒ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์œ ์šฉํ–ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€