FusionPBX a ACL

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.local

Vidí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á.

  1. 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.
  2. 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.local

ACL 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

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster