FusionPBX và ACL

Bài viết của tôi không phải là mô tả đầy đủ về sản phẩm mà chỉ là một sự sàng lọc nhỏ về ấn phẩm hay "FusionPBX, hay một lần nữa-tuyệt vời, FreeSWITCH". Đối với tôi, có vẻ như chủ đề về ACL trong FusionPBX không được trình bày rõ ràng trong đó. Tôi sẽ cố gắng lấp đầy khoảng trống này dựa trên trải nghiệm của bản thân với FreeSWITCH/FusionPBX.

Và như vậy, chúng tôi đã cài đặt FusionPBX với số nội bộ đã đăng ký 1010 trong miền domain.local và tuyến được định cấu hình cho các cuộc gọi bên ngoài đến thành phố. Chúng tôi sử dụng ACL để bảo mật hệ thống điện thoại của mình khỏi các cuộc gọi trái phép sẽ lấy đi tiền của chúng tôi. Những thứ kia. chỉ từ các mạng được mô tả trong ACL mới cho phép cuộc gọi đi. Và ở đây bạn cần hiểu hoàn toàn rõ ràng về cách ACL hoạt động trong FusionPBX, các tính năng, logic và điểm neo của nó.

Giống như tác giả đáng kính của bài viết trên, tôi cũng đã giẫm phải tất cả những cào cào liên quan đến ACL.

Tôi sẽ bắt đầu với SipProfiles.
Cả hai cấu hình (tôi sẽ gọi chúng như vậy), cả bên trong và bên ngoài, đều ở trong bối cảnh Công khai và điều này không phải ngẫu nhiên. Việc đăng ký số diễn ra trong hồ sơ nội bộ và chúng tôi sẽ chú ý đến nó. Trong cấu hình nội bộ, các miền ACL bị ràng buộc là apply-inbound-acl. Chính dòng này chịu trách nhiệm về hoạt động của ACL ở cấp độ hồ sơ. Cho đến nay, đó là với hồ sơ.

Bối cảnh

Bối cảnh được sử dụng, trong số những thứ khác, trong định tuyến cuộc gọi. Tất cả các tuyến đường đến đều bị ràng buộc với bối cảnh Công khai.

Các tuyến đi (đến thành phố, tới di động, đường dài, quốc tế và bất kỳ tuyến nào khác) là (theo mặc định) trong bối cảnh của một tên miền (hãy gọi nó là domain.local).

ACL

Bây giờ hãy giải quyết ACL. Theo mặc định, FusionPBX mới cài đặt có hai ACL:

Hành động mặc định của tên miền: từ chối - trang tính này được liên kết với hồ sơ nội bộ
hành động mặc định của lan: cho phép

Trong danh sách ACL tên miền, chúng tôi quy định mạng (ví dụ: 192.168.0.0/24), chúng tôi cấp quyền cho phép đối với mạng này, chúng tôi sử dụng tải lại.

Tiếp theo, chúng tôi đăng ký một điện thoại từ mạng này và mọi thứ có vẻ ổn, theo hướng dẫn và hợp lý.
Chúng tôi bắt đầu thử nghiệm, thực hiện cuộc gọi đến một số bên ngoài và ... chúng tôi nhận được một chiếc bánh rán, hay đúng hơn là một cái lỗ bánh rán. Đột nhiên!

Chúng tôi bắt đầu phân tích nhật ký trong bảng điều khiển hoặc thông qua Trình xem nhật ký FusioPBX.

Chúng tôi thấy thách thức của mình:

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

Chúng tôi thấy ACL đã hoạt động:

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

Và hơn nữa:

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] 

Không có lộ trình! Dù lộ trình chúng tôi đã đăng ký thành thật.

Câu trả lời thực sự đơn giản.

Cuộc gọi đã đến. ACL đã bỏ lỡ nó. Và vì ACL bị ràng buộc trong hồ sơ nội bộ và hồ sơ này nằm trong bối cảnh công khai nên FreeSWITCH xem xét một cách trung thực việc định tuyến trong bối cảnh công khai. Nhưng trong bối cảnh công cộng, chỉ có định tuyến đến và hệ thống cho chúng tôi biết một cách trung thực rằng không có tuyến đường nào đến thành phố ở đó.

Có ít nhất hai cách để thoát khỏi tình huống này.

  1. Đính kèm ACL này không phải vào hồ sơ mà vào chính số nội bộ. Đây có thể là cách giải quyết đúng đắn nhất, bởi vì. Tốt hơn là nên liên kết ACL càng gần với Tiện ích mở rộng càng tốt để tinh chỉnh tốt hơn. Những thứ kia. bạn có thể chỉ định một địa chỉ / địa chỉ mạng cụ thể của điện thoại mà từ đó nó có thể thực hiện cuộc gọi đi. Nhược điểm của tùy chọn này là mỗi Tiện ích mở rộng sẽ phải thực hiện việc này.
  2. Sửa ACL để nó hoạt động chính xác ở cấp hồ sơ. Tôi đã chọn tùy chọn này vì đối với tôi, việc thêm mạng vào ACL một lần dễ dàng hơn là quy định mạng đó trong mỗi Tiện ích mở rộng. Nhưng điều này đặc biệt dành cho nhiệm vụ của tôi. Đối với các nhiệm vụ khác, bạn có thể cần logic ra quyết định khác.

Vì thế. Hãy sửa các miền ACL như sau:

hành động mặc định của tên miền: cho phép

Trong danh sách ACL tên miền, chúng tôi đăng ký mạng:

từ chối 192.168.0.0/24

Áp dụng, tải lại.
Chúng tôi đang kiểm tra: chúng tôi quay lại số 98343379xxxx và ... trạm kiểm soát sắp đến ... XIN CHÀO. Mọi thứ đang hoạt động.
Hãy xem điều gì đã xảy ra trong FreeSWITCH:
cuộc gọi bắt đầu:

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

ACL đã không bỏ lỡ:

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

và xa hơn:

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 

Quá trình định tuyến đã hoàn tất và sau đó là quá trình thiết lập kết nối, điều này nằm ngoài phạm vi của chủ đề.

Nếu chúng tôi thay đổi địa chỉ mạng trong ACL nhưng lấy được hình ảnh từ lần kiểm tra đầu tiên, tức là. ACL sẽ bỏ qua cuộc gọi và định tuyến sẽ là NO_ROUTE_DESTINATION.

Đó có lẽ là tất cả những gì tôi muốn thêm vào ACL FusionPBX.

Tôi hy vọng nó sẽ hữu ích cho ai đó.

Nguồn: www.habr.com

Thêm một lời nhận xét