Môj článok nie je plnohodnotným popisom produktu, ale iba malým doplnením k dobrej publikácii „FusionPBX, alebo znova zdraví, FreeSWITCH“. Myslím si, že téma ACL v FusionPBX nie je veľmi dobre rozvinutá. Pokúsim sa túto medzeru zaplniť na základe vlastných skúseností s FreeSWITCH/FusionPBX.
Takže máme nainštalovaný FusionPBX so zaregistrovaným interným číslom 1010 v doméne domain.local a nastavenou trasou pre externé volania do mesta. ACL používame na bezpečné zamedzenie neautorizovaných volania, ktoré by nás mohli vyjsť draho. To znamená, že len z popísaných v ACL sietí sú povolené odchádzajúce volania. A tu je potrebné úplne jasné pochopenie, ako funguje ACL v FusionPBX, jeho vlastností, logiky a priesečníka.
Ako aj ctihodný autor vyššie uvedeného článku, aj ja som narazil na všetky prekážky spojené s ACL.
Začnem s SipProfiles.
Oba profily (budem ich tak nazývať), a internal i external, sa nachádzajú v kontexte Public, a to nie je náhoda. Registrácia čísel prebieha v profile internal, na ktorý sa zameriame. V profile internal je pripojený ACL-list domains ako apply-inbound-acl. Tento riadok zodpovedá za fungovanie ACL na úrovni profilu. Doteraz je to so profilmi všetko.
Context
Kontext, okrem všetkého iného, sa používa v trasovaní hovorov. Všetky prichádzajúce trasy sú viazané na kontext Public.
Odchádzajúce (do mesta, na mobilné, medzištátne, medzinárodné a akékoľvek iné) trasy sú (podľa predvoleného nastavenia) v kontexte s názvom domény (nazvime ho domain.local).
ACL
Teraz sa pozrime na ACL. Podľa predvoleného nastavenia, v práve nainštalovanom FusionPBX sú dva ACL-listy:
domains akcia podľa predpokladu: deny – tento list je pripojený k profilu internal
lan akcia podľa predpokladu: allow
V ACL-list domains zapíšeme sieť (napríklad 192.168.0.0/24), nastavíme tejto sieti povolenie allow, aplikujeme reloadacl.
Ďalej registrujeme telefón z tejto siete, a zdá sa, že všetko je v poriadku, tak ako v návode a logicky.
Začneme testovať, urobíme hovor na externé číslo a… dostaneme prázdny signál, alebo presnejšie, dieru od prázdneho signálu. Prekvapujúce!
Začneme analyzovať log v konzole alebo cez Log Viewer FusioPBX.
Vidíme náš hovor:
switch_channel.c:1104 Nový kanál sofia/internal/1010@domain.localVidíme aktivovaný ACL:
sofia.c:10208 IP 192.168.0.150 Schválené acl "domains[]". Prístup povolený.A potom:
mod_dialplan_xml.c:637 Spracovanie 1010 ->98343379xxxx v kontexte public
switch_core_state_machine.c:311 Žiadna trasa, zrušenie
switch_core_state_machine.c:312 Zrušenie sofia/internal/1010@domain.local [CS_ROUTING] [NO_ROUTE_DESTINATION] Žiadna trasa! Aj keď máme trasu správne uvedenú.
Odpoveď je v skutočnosti jednoduchá.
Hovor prišiel. ACL ho pustilo. A pretože je ACL pripojený k profilu internal, a tento profil sa nachádza v kontexte public, FreeSWITCH s určitosťou kontroluje trasovanie v kontexte public. Ale v kontexte public existuje iba prichádzajúce trasovanie, a systém nám úprimne hovorí, že tam nie sú žiadne trasy do mesta.
Z tejto situácie existujú minimálne dve východiská.
- Pripojiť tento ACL nie k profilu, ale k samotnému internému číslu. To môže byť najlepší spôsob riešenia, pretože ACL je lepšie pripojiť čo najbližšie k Extension pre jemnejšie nastavenie. T.j. je možné uviesť konkrétnu adresu/adresu siete telefónu, z ktorého bude môcť uskutočniť odchádzajúci hovor. Nevýhodou tejto možnosti je, že to bude potrebné urobiť v každom Extension.
- Upraviť ACL tak, aby správne fungoval na úrovni profilu. Vybral som práve túto možnosť, pretože pridať raz sieť do ACL sa mi zdalo jednoduchšie, ako ju uviesť v každom Extension. Ale to je konkrétne pod moju úlohu. Pre iné úlohy možno bude potrebná iná logika rozhodovania.
Takže. Upravené ACL domains nasledujúcim spôsobom:
domains predvolené akcie: allow
V ACL zozname domains uvádzame sieť:
deny 192.168.0.0/24
Uplatňujeme, reloadacl.
Testujeme: znovu voláme číslo 98343379xxxx a… ide CPV… HALÓ. Všetko funguje.
Pozrieme sa, čo sa dialo v FreeSWITCH:
začína hovor:
switch_channel.c:1104 Nový kanál sofia/internal/1010@domain.localACL nepustilo:
[DEBUG] sofia.c:10263 IP 192.168.0.150 Odmietnuté acl "domains". Prechádzanie na Digest auth.a ďalej:
mod_dialplan_xml.c:637 Spracovanie 1010 ->98343379xxxx v kontexte domain.local
sofia/internal/1010@domain.local Regex (PASS) [Mesto] destination_number(98343379xxxx) =~ /^9(8343[23]d{6})$/' break=on-false Trasovanie prešlo, a dalej prebieha nadväzovanie spojenia, ktoré prechádza za rámec témy.
Ak zmeníme adresu siete v ACL, ale dostaneme obraz z prvého testovania, t.j. ACL hovor pustí a trasovanie povie NO_ROUTE_DESTINATION.
Asi je to všetko, čo som chcel doplniť k ACL FusionPBX.
Dúfam, že to niekomu bude užitočné.
Zdroj: habr.com
