FusionPBX և ACL

Իմ հոդվածը ապրանքի ամբողջական նկարագրություն չէ, այլ միայն «FusionPBX, կամ կրկին հիանալի, FreeSWITCH» լավ հրապարակման մի փոքր ճշգրտում: Ինձ թվում է, որ FusionPBX-ում ACL-ի թեման այնքան էլ լավ բացահայտված չէ դրանում: Ես կփորձեմ լրացնել այս բացը` հիմնվելով FreeSWITCH/FusionPBX-ի իմ սեփական փորձի վրա:

Եվ այսպես, մենք ունենք տեղադրված FusionPBX՝ գրանցված 1010 ներքին համարով domain.local տիրույթում և կոնֆիգուրացված երթուղի դեպի քաղաք արտաքին զանգերի համար։ Մենք օգտագործում ենք ACL-ը, որպեսզի ապահովենք մեր հեռախոսակապի համակարգը չարտոնված զանգերից, որոնք կխլեն մեր գումարը: Նրանք. միայն ACL-ում նկարագրված ցանցերից թույլ են տալիս ելքային զանգեր: Եվ այստեղ ձեզ անհրաժեշտ է լիովին հստակ պատկերացում, թե ինչպես է ACL-ն աշխատում FusionPBX-ում, դրա առանձնահատկությունները, տրամաբանությունը և խարիսխի կետը:

Ինչպես վերը նշված հոդվածի հարգարժան հեղինակը, ես նույնպես ոտք դրեցի ACL-ի հետ կապված բոլոր փոցխների վրա։

Ես կսկսեմ նրանից SipProfiles.
Երկու պրոֆիլներն էլ (ես այդպես կանվանեմ) և՛ ներքին, և՛ արտաքին, գտնվում են Հանրային համատեքստում, և դա պատահական չէ։ Համարների գրանցումը տեղի է ունենում ներքին պրոֆիլում, և մենք ուշադրություն կդարձնենք դրան։ Ներքին պրոֆիլում ACL տիրույթները կապված են որպես application-inbound-acl: Հենց այս գիծն է պատասխանատու ACL-ի աշխատանքի համար պրոֆիլի մակարդակով: Առայժմ պրոֆիլներով վերջ:

Կոնտեքստ

Համատեքստն օգտագործվում է, ի թիվս այլ բաների, զանգերի երթուղման մեջ: Բոլոր մուտքային երթուղիները կապված են Հանրային համատեքստի հետ:

Ելքային (դեպի քաղաք, դեպի բջջային, միջքաղաքային, միջազգային և ցանկացած այլ) երթուղիները (լռելյայն) տիրույթի անվան համատեքստում են (եկեք այն անվանենք domain.local):

ACL

Հիմա եկեք զբաղվենք ACL-ներով: Լռելյայնորեն, թարմ տեղադրված FusionPBX-ն ունի երկու ACL.

տիրույթների լռելյայն գործողություն. մերժել - այս թերթիկը կապված է ներքին պրոֆիլին
lan լռելյայն գործողություն. թույլ տալ

ACL տիրույթների ցանկում մենք սահմանում ենք ցանցը (լավ, օրինակ, 192.168.0.0/24), մենք թույլտվություն ենք տալիս այս ցանցի համար, մենք օգտագործում ենք reloadacl:

Հաջորդը, մենք գրանցում ենք հեռախոս այս ցանցից, և ամեն ինչ կարծես թե լավ է և ըստ հրահանգների և տրամաբանորեն:
Մենք սկսում ենք թեստավորում, զանգահարում ենք արտաքին համարին և ... ստանում ենք բլիթ, ավելի ճիշտ՝ բլիթ: Հանկարծ!

Մենք սկսում ենք վերլուծել գրանցամատյանը վահանակում կամ Log Viewer FusioPBX-ի միջոցով:

Մենք տեսնում ենք մեր մարտահրավերը.

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

Մենք տեսնում ենք 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/[email protected] [CS_ROUTING] [NO_ROUTE_DESTINATION] 

Երթուղի չկա։ Չնայած այն երթուղին, որը մենք ազնվորեն գրանցել ենք.

Պատասխանն իսկապես պարզ է.

Զանգը եկել է. ACL-ը բաց թողեց այն: Եվ քանի որ ACL-ը կապված է ներքին պրոֆիլում, և այս պրոֆիլը գտնվում է հանրային համատեքստում, FreeSWITCH-ը անկեղծորեն նայում է երթուղիներին հանրային համատեքստում: Բայց հանրային համատեքստում՝ միայն մուտքային երթուղի, և համակարգը մեզ անկեղծորեն ասում է, որ այնտեղ քաղաք տանող երթուղիներ չկան։

Այս իրավիճակից առնվազն երկու ելք կա.

  1. Կցեք այս ACL-ը ոչ թե պրոֆիլին, այլ հենց ներքին համարին: Սա կարող է լինել լուծման ամենաճիշտ ճանապարհը, քանի որ. Ավելի լավ է ACL-ը հնարավորինս մոտեցնել Extension-ին՝ ավելի լավ թյունինգի համար: Նրանք. դուք կարող եք սահմանել հեռախոսի կոնկրետ հասցե/ցանցային հասցե, որից այն կարող է կատարել ելքային զանգ: Այս տարբերակի թերությունն այն է, որ յուրաքանչյուր ընդլայնում պետք է դա անի:
  2. Ամրացրեք ACL-ը, որպեսզի այն ճիշտ աշխատի պրոֆիլի մակարդակում: Ես ընտրեցի այս տարբերակը, քանի որ ինձ թվում էր ավելի հեշտ էր ցանցը ACL-ին մեկ անգամ ավելացնել, քան այն սահմանել յուրաքանչյուր ընդլայնման մեջ: Բայց սա հատուկ իմ առաջադրանքի համար է։ Այլ առաջադրանքների համար ձեզ կարող է անհրաժեշտ լինել որոշումների կայացման այլ տրամաբանություն:

Այսպիսով. Եկեք շտկենք ACL տիրույթները հետևյալ կերպ.

տիրույթների լռելյայն գործողություն. թույլ տալ

ACL տիրույթների ցանկում մենք գրանցում ենք ցանցը.

հերքել 192.168.0.0/24

Կիրառել, վերաբեռնել:
Մենք փորձարկում ենք՝ կրկին հավաքում ենք 98343379xxxx համարը և ... անցակետը գալիս է ... ԲԱՐԵՎ։ Ամեն ինչ աշխատում է։
Տեսնենք, թե ինչ է տեղի ունեցել FreeSWITCH-ում.
զանգը սկսվում է.

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

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/[email protected] Regex (PASS) [Sity] destination_number(98343379xxxx) =~ /^9(8343[23]d{6})$/ break=on-false 

Երթուղիավորումն անցել է, հետո գալիս է կապի հաստատումը, որը թեմայի շրջանակներից դուրս է։

Եթե ​​մենք փոխենք ցանցի հասցեն ACL-ում, բայց նկարը ստանանք առաջին թեստից, այսինքն. ACL-ը բաց կթողնի զանգը, իսկ երթուղին կասի NO_ROUTE_DESTINATION:

Հավանաբար սա այն ամենն է, ինչ ես ուզում էի ավելացնել ACL FusionPBX-ում:

Հուսով եմ, որ դա օգտակար կլինի ինչ-որ մեկին:

Source: www.habr.com

Добавить комментарий