Artikulli im nuk është një përshkrim i plotë i produktit, por vetëm një sqarim i vogël mbi një publikim të mirë 'FusionPBX, ose sërish-hello, FreeSWITCH'. Më duket se tematika e ACL në FusionPBX nuk është trajtuar mirë aty. Do të përpiqem ta mbush këtë boshllëk, duke u bazuar në përvojën time me FreeSWITCH/FusionPBX.
Pra, kemi instaluar FusionPBX me numrin e brendshëm të regjistruar 1010 në domenin domain.local dhe një rrugë të konfiguruar për thirrjet ekstern në qytet. ACL përdoret për të mbrojtur sistemin tonë të telefonisë nga thirrjet e paautorizuara, të cilat mund të na shkaktojnë kosto. Kjo do të thotë se thirrjet e jashtme lejohet vetëm nga rrjetet e përshkruara në ACL. Këtu është e nevojshme një kuptim të qartë se si funksionon ACL në FusionPBX, veçoritë e saj, logjika dhe pika e saj e lidhjes.
Siç është autor i nderuar për artikullin e përmendur më sipër, edhe unë kam hasur në të gjitha pengesat që lidhen me ACL.
Do ta filloj me SipProfiles.
Të dy profilet (do t'i quaj kështu), si internal ashtu edhe external ndodhen në kontekstin Public, dhe kjo nuk është rastësi. Regjistrimi i numrave ndodh në profilin internal, ndaj do t'i kushtojmë vëmendje atij. Në profilin internal është lidhur lista e ACL-ve domains si apply-inbound-acl. Kjo rresht është ajo që përgjigjet për funksionimin e ACL në nivelin e profilit. Për momentin, me profilat gjithçka është në rregull.
Context
Konteksti, përveç të gjitha gjërave të tjera, përdoret në rrethimin e thirrjeve. Të gjitha rrugët e ardhshme janë të lidhura me kontekstin Public.
Rrugët e jashtme (në qytet, në celularë, ndërqytet, ndërkombëtarë, dhe çdo e tjetër) ndodhen (për default) në kontekstin e emrit e domenit (ta quajmë domain.local).
ACL
Tani le t'i hedhim një sy ACL. Në FusionPBX që sapo është instaluar, ka dy lista ACL-sh për default:
domains veprimi për default: deny — kjo listë është e lidhur me profilin internal
lan veprimi për default: allow
Në ACL-listën domains, shkruajmë rrjetin (p.sh. 192.168.0.0/24), e japim lejen allow këtij rrjeti dhe aplikojmë reloadacl.
Më pas regjistrojmë një telefon nga ky rrjet dhe duket se gjithçka është mirë dhe sipas udhëzimeve.
Fillojmë testimin, bëjmë një thirrje në një numër të jashtëm dhe… marrim një boshllëk, saktësisht një vrimë nga boshllëku. Papritur!
Fillojmë të analizojmë logun në konsolë ose përmes Log Viewer FusioPBX.
E shohim thirrjen tonë:
switch_channel.c:1104 New Channel sofia/internal/1010@domain.localE shohim ACL-në që është aktivizuar:
sofia.c:10208 IP 192.168.0.150 Miratuar nga acl "domains[]". Qasja e Lejuar.Dhe më pas:
mod_dialplan_xml.c:637 Po obr обработаем 1010 ->98343379xxxx në kontekstin publik
switch_core_state_machine.c:311 Nuk ka rrugë, duke abortuar
switch_core_state_machine.c:312 Mbylle sofia/internal/1010@domain.local [CS_ROUTING] [NO_ROUTE_DESTINATION] Nuk ka rrugë! Edhe pse ruta është e shkruar qartë.
Përgjigjja është në të vërtetë e thjeshtë.
Thirrja ka ardhur. ACL e ka lejuar. Dhe pasi ACL është lidhur me profilin internal, dhe ky profil ndodhet në kontekstin publik, FreeSWITCH e shqyrton me ndershmëri rrugëtimin në kontekstin publik. Por në kontekstin publik vetëm rrugëtimi hyrës është i mundur, dhe sistemi na tregon me ndershmëri se nuk ka rrugë për në qytet.
Nga situata e krijuar, ka të paktën dy zgjidhje.
- Të lidhemi këtë ACL jo me profilin, por me vetë numrin e brendshëm. Kjo mund të jetë mënyra më e saktë për të zgjidhur, sepse është më mirë të lidhet ACL sa më afër Extension për një konfigurim më të sakte. Pra, mund të shënojmë një adresë specifike/adresë rrjeti telefoni, nga e cila mund të bëhet thirrje dalëse. Disavantazhi i kësaj mundësie është se në çdo Extension duhet bërë kjo.
- Të rregullojmë ACL në mënyrë që ai të punojë në nivelin e profilit. Unë zgjodha pikërisht këtë variant, sepse të shtosh një herë rrjetin në ACL më dukej më e thjeshtë sesa ta shënohesh në çdo Extension. Por kjo është specifike për detyrën time. Për detyra të tjera, ndoshta është e nevojshme një logjikë tjetër vendimmarrëse.
Pra, le t'i rregullojmë ACL domains në këtë mënyrë:
domains veprimi nga e drejta: lejo
Në listën e ACL domains shënojmë rrjetin:
ndalo 192.168.0.0/24
Aplikojmë, reloadacl.
Testojmë: japim përsëri numrin 98343379xxxx dhe… fillon KBV… ALLO. Gjithçka funksionon.
Shikojmë çfarë ka ndodhur në FreeSWITCH:
fillon thirrja:
switch_channel.c:1104 New Channel sofia/internal/1010@domain.localACL nuk e lejoj:
[DEBUG] sofia.c:10263 IP 192.168.0.150 Refuzuar nga acl "domains". Kthehu në autentikim Digest.dhe për më tej:
mod_dialplan_xml.c:637 Po obr обработаем 1010 ->98343379xxxx në kontekst domain.local
sofia/internal/1010@domain.local Regex (KALON) [Sity] destination_number(98343379xxxx) =~ /^9(8343[23]d{6})$/ break=on-false Rrugëtimi ka kaluar, dhe më pas fillon vendosja e lidhjes, e cila është jashtë temës.
Nëse ne ndryshojmë adresën e rrjetit në ACL, por marrim pamjen nga testimi i parë, dmth. ACL do e lejojë thirrjen dhe rrugëtimi do të thotë NO_ROUTE_DESTINATION.
Kjo ndoshta është gjithçka që doja të shtoja rreth ACL FusionPBX.
Shpresoj të jetë e dobishme për dikë.
Burimi: habr.com
