FusionPBX i ACL

Moj članak nije potpuni opis proizvoda, već samo mala dorada dobre publikacije "FusionPBX, ili opet-sjajan, FreeSWITCH". Čini mi se da tema ACL-a u FusionPBX-u nije baš dobro otkrivena u njemu. Pokušaću da popunim ovu prazninu na osnovu sopstvenog iskustva sa FreeSWITCH/FusionPBX.

I tako, imamo instaliran FusionPBX sa registrovanim internim brojem 1010 u domenu domain.local i konfigurisanom rutom za eksterne pozive prema gradu. Koristimo ACL da zaštitimo naš telefonski sistem od neovlašćenih poziva koji će nam oduzeti novac. One. samo iz mreža opisanih u ACL-u dozvoljavaju odlazne pozive. I ovdje vam je potrebno potpuno jasno razumijevanje kako ACL radi u FusionPBX-u, njegovih karakteristika, logike i tačke sidrenja.

Poput uvaženog autora gornjeg članka, i ja sam nagazio na sve grablje vezane za ACL.

Počeću sa SipProfiles.
Oba profila (tako ću ih nazvati), i interni i eksterni, nalaze se u javnom kontekstu i to nije slučajno. Registracija brojeva se odvija u internom profilu i na to ćemo obratiti pažnju. U internom profilu, ACL domena je vezan kao apply-inbound-acl. Upravo je ova linija odgovorna za rad ACL-a na nivou profila. Za sada je to sve sa profilima.

kontekst

Kontekst se koristi, između ostalog, u usmjeravanju poziva. Sve dolazne rute su vezane za javni kontekst.

Odlazne (do grada, mobilne, međugradske, međunarodne i bilo koje druge) rute su (podrazumevano) u kontekstu naziva domene (nazovimo ga domain.local).

ACL

Sada se pozabavimo ACL-ovima. Podrazumevano, svježe instalirana FusionPBX ima dva ACL-a:

zadana akcija domena: deny - ovaj list je vezan za interni profil
lan zadana radnja: dozvoli

U ACL listi domena propisujemo mrežu (pa, na primjer, 192.168.0.0/24), dajemo dozvolu za ovu mrežu, koristimo reloadacl.

Zatim registrujemo telefon sa ove mreže i čini se da je sve u redu i po uputstvu i logično.
Počinjemo sa testiranjem, zovemo eksterni broj i ... dobijemo krofnu, odnosno rupu za krofnu. Odjednom!

Počinjemo analizirati dnevnik u konzoli ili kroz Log Viewer FusioPBX.

Vidimo naš izazov:

switch_channel.c:1104 New Channel sofia/internal/[email protected]

Vidimo ACL koji je radio:

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

I dalje:

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/[email protected] [CS_ROUTING] [NO_ROUTE_DESTINATION] 

Nema rute! Iako smo rutu pošteno registrirali.

Odgovor je zaista jednostavan.

Poziv je stigao. ACL je to propustio. A pošto je ACL vezan za interni profil, a ovaj profil je u javnom kontekstu, FreeSWITCH iskreno gleda na rutiranje u javnom kontekstu. Ali u javnom kontekstu, samo dolazno rutiranje, a sistem nam iskreno govori da tamo nema ruta do grada.

Postoje najmanje dva izlaza iz ove situacije.

  1. Prikačite ovaj ACL ne na profil, već na sam interni broj. Ovo je možda najispravniji način rješavanja, jer. Bolje je vezati ACL što je bliže moguće proširenju radi finijeg podešavanja. One. možete propisati određenu adresu/mrežnu adresu telefona sa koje može obavljati odlazni poziv. Nedostatak ove opcije je što će svako proširenje to morati učiniti.
  2. Popravite ACL tako da ispravno radi na nivou profila. Odabrao sam ovu opciju, jer mi se činilo da je lakše jednom dodati mrežu u ACL nego je propisati u svakom proširenju. Ali ovo je posebno za moj zadatak. Za druge zadatke možda će vam trebati drugačija logika donošenja odluka.

Dakle. Popravimo ACL domene na sljedeći način:

zadana radnja domena: dozvoli

U ACL listi domena registrujemo mrežu:

deny 192.168.0.0/24

Primijeniti, ponovo učitati.
Testiramo: ponovo biramo broj 98343379xxxx i ... kontrolni punkt dolazi ... ZDRAVO. Sve radi.
Hajde da vidimo šta se desilo u FreeSWITCH-u:
poziv počinje:

switch_channel.c:1104 New Channel sofia/internal/[email protected]

ACL nije propustio:

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

i dalje:

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

Rutiranje je prošlo, a onda dolazi do uspostavljanja veze, što je van okvira teme.

Ako promijenimo mrežnu adresu u ACL-u, ali dobijemo sliku iz prvog testa, tj. ACL će preskočiti poziv i usmjeravanje će reći NO_ROUTE_DESTINATION.

To je verovatno sve što sam želeo da dodam na ACL FusionPBX.

Nadam se da će nekome biti od koristi.

izvor: www.habr.com

Dodajte komentar