FusionPBX και ACL

Το άρθρο μου δεν είναι μια πλήρης περιγραφή του προϊόντος, αλλά μόνο μια μικρή βελτίωση της καλής δημοσίευσης "FusionPBX, ή πάλι-εξαιρετικό, FreeSWITCH". Μου φαίνεται ότι το θέμα του ACL στο FusionPBX δεν αποκαλύπτεται πολύ καλά σε αυτό. Θα προσπαθήσω να καλύψω αυτό το κενό με βάση τη δική μου εμπειρία με το 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.

Ελπίζω να είναι χρήσιμο σε κάποιον.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο