Thursday, November 21, 2024

SIP-ALG trên thiết bị Fortigate

-

Bài viết này nói về cách tắt chức năng kiểm tra SIP trên thiết bị FortiGate và giải thích những hậu quả khi làm điều này. Fortinet khuyên bạn nên sử dụng chức năng SIP/SCCP proxy/ALG trong hầu hết các trường hợp. Tuy nhiên, một số trường hợp có thể yêu cầu tắt kiểm tra SIP trên FortiGate, nhưng bạn cần lưu ý cập nhật các phiên bản hoặc thiết bị FortiGate cụ thể, vì thông tin này có thể lỗi thời.

Việc tắt chức năng kiểm tra VoIP có thể ảnh hưởng đến các hệ thống production đang chạy và khi bạn cần bật lại SIP-ALG, bạn sẽ phải khởi động lại thiết bị.

Nhưng nếu bạn không tắt SIP-ALG (Application Layer Gateway) hoặc cấu hình nó không đúng cách, có thể xảy ra các vấn đề liên quan đến cuộc gọi VoIP (Voice over IP) trên mạng của bạn. SIP-ALG thường được thiết kế để kiểm tra và điều chỉnh luồng SIP trong giao tiếp VoIP, nhưng đôi khi nó có thể gây ra các vấn đề không mong muốn, bao gồm:

  • Không kết nối được: SIP-ALG có thể làm thay đổi thông điệp SIP và làm mất kết nối với máy chủ VoIP hoặc trình điều khiển PBX.
  • Cuộc gọi thất bại: SIP-ALG có thể làm thay đổi thông tin liên quan đến địa chỉ IP và cổng, gây ra lỗi trong cuộc gọi và làm cuộc gọi thất bại.
  • Lỗi âm thanh: Nếu cuộc gọi được thiết lập nhưng bạn gặp sự cố về âm thanh hoặc không có âm thanh, SIP-ALG có thể là nguyên nhân.

Vì vậy, nếu bạn gặp các vấn đề về cuộc gọi VoIP khi sử dụng FortiGate, tắt SIP-ALG hoặc cấu hình nó một cách đúng cách có thể là một giải pháp. Tuy nhiên, hãy lưu ý rằng việc tắt SIP-ALG có thể yêu cầu kiểm tra và cấu hình lại mạng của bạn để đảm bảo tính an toàn và hoạt động đúng của giao tiếp VoIP.

SIP-ALG (Application Layer Gateway) là một tính năng trong FortiGate giúp kiểm tra và thay đổi thông tin trong luồng giao tiếp VoIP (Voice over IP) khi bạn sử dụng chế độ NAT (Network Address Translation). Điều này đặc biệt hữu ích khi bạn muốn cho phép cuộc gọi âm thanh đi qua tường lửa mạng. SIP-ALG cung cấp các lợi ích sau:

  • Thay đổi địa chỉ IP: Khi bạn sử dụng NAT, địa chỉ IP trong thông điệp VoIP có thể thay đổi. SIP-ALG giúp điều này xảy ra một cách đúng đắn để đảm bảo cuộc gọi vẫn kết nối đúng cách.
  • Mở cổng dữ liệu cần thiết: Cuộc gọi âm thanh thường yêu cầu mở các cổng dữ liệu (port) cụ thể để cho phép âm thanh đi qua. SIP-ALG có thể tự động mở các cổng này khi cần.

Tuy nhiên, đôi khi SIP-ALG có thể gây ra các vấn đề trong giao tiếp VoIP, như khi cuộc gọi thất bại hoặc gặp sự cố về âm thanh. Do đó, nếu bạn gặp sự cố cụ thể, bạn có thể tắt SIP-ALG. Tuy nhiên, việc này chỉ nên được thực hiện khi bạn đang xử lý một vấn đề cụ thể và cần tắt SIP-ALG để giải quyết nó.

Lưu ý rằng FortiGate cung cấp nhiều tùy chọn cấu hình cho SIP-ALG để điều chỉnh hành vi của nó hoặc xử lý các trường hợp không tiêu chuẩn trong giao tiếp SIP, vì vậy bạn có thể tinh chỉnh cài đặt theo nhu cầu của bạn.

Hình vẽ dưới đây mô tả quy trình gọi SIP tổng quan trên thiết bị FortiGate.

Khi bạn tắt toàn bộ chức năng kiểm tra VoIP trên thiết bị FortiGate, điều này sẽ ngừng FortiGate khỏi việc mở phiên RTP và dẫn đến việc không có âm thanh nào được truyền qua cuộc gọi VoIP. Đặc biệt, khi bạn sử dụng tính năng NAT (Network Address Translation) để cho phép các thiết bị ở trong mạng nội bộ kết nối với mạng Internet, FortiGate phải thực hiện một trong ba tùy chọn sau:

  • SIP Server Cần Được Cấu Hình Đúng: Nếu bạn đang sử dụng NAT để đẩy giao thức SIP từ mạng nội bộ ra Internet, máy chủ VOIP (SIP Server) cần được cấu hình để sử dụng địa chỉ IP công cộng (Public IP). Điều này đảm bảo rằng thông điệp SIP được gửi và nhận qua đúng địa chỉ IP công cộng của tường lửa hoặc router.
  • Thiết Bị VOIP Khác Cần Kết Nối Bằng IP Công Cộng: Tất cả các thiết bị VoIP khác nếu kết nối đến máy chủ VOIP của bạn cũng cần thực hiện kết nối bằng địa chỉ IP công cộng. Điều này đảm bảo rằng họ có thể giao tiếp với máy chủ VOIP thông qua tường lửa hoặc router.
  • Cấu Hình Policy Firewall Cho Mở Cổng UDP: Policy Firewall (Chính sách tường lửa) bây giờ cần phải cho phép mở tất cả các cổng UDP để cho phép dữ liệu âm thanh đi qua, cũng như cổng UDP dành cho tín hiệu SIP (thường là cổng 5060). Điều này đảm bảo rằng cả âm thanh và thông điệp SIP có thể di chuyển qua tường lửa.

Lưu ý:

  • Khi bạn áp dụng một voip-profile cho một policy firewall, SIP-ALG sẽ được sử dụng thay vì SIP session-helper, ngay cả khi bạn đã tắt SIP-ALG. Voip-profile là một cách để cấu hình cụ thể cho luồng VoIP.
  • Việc tắt SIP session-helper chỉ cần thiết khi bạn muốn loại bỏ hoàn toàn chức năng kiểm tra SIP. Các lệnh liên quan đến SIP-helper không còn có tác dụng nếu FortiGate sử dụng SIP-ALG.
  • Nếu bạn đang sử dụng nhiều VDOM (Virtual Domains), thì SIP-helper là một cài đặt toàn cầu (global setting) và nó không phụ thuộc vào từng VDOM cụ thể. Nếu bạn xóa SIP-helper ở một cấp toàn cầu, nó sẽ không thể truy cập cho tất cả các VDOM. SIP-ALG mặc định được bật và có thể tắt độc lập cho từng VDOM.

Dưới đây là các bước để tắt chức năng SIP session-helper:

  • Xóa session helper tương ứng cho SIP:
    • Bạn cần kiểm tra ID của session helper cho SIP bằng các lệnh sau:
config system session-helper
show

Bạn sẽ thấy một cài đặt tương tự như sau trong danh sách hiển thị:

edit 13
    set name sip
    set protocol 17
    set port 5060
next

Ở đây, mục 13 chỉ đến luồng SIP, sử dụng cổng UDP 5060 cho tín hiệu. Trong ví dụ này, bạn chạy các lệnh sau để xóa mục tương ứng:

delete 13
end

Chạy lệnh sau để yêu cầu FortiGate tắt SIP-ALG (dựa trên proxy) và sử dụng SIP-helper (dựa trên kernel-helper):

config system settings
    set default-voip-alg-mode kernel-helper-based
end

Hiểu rõ về các lệnh và cách chúng hoạt động trong cấu hình FortiGate có thể khá phức tạp. Để giải thích rõ hơn, hãy xem xét hai lệnh cụ thể:

  • Lệnh ‘set sip-helper enable | disable’: Đây không phải là lệnh để bật hoặc tắt SIP-helper mà thay vào đó nó được sử dụng để kiểm soát việc tạo hoặc không tạo “pinhole” (một loại quy tắc tường lửa tạm thời để cho phép dữ liệu qua) để giảm số lượng “pinhole” được tạo ra bởi SIP-helper. “Pinhole” có thể được tạo ra để cho phép luồng dữ liệu qua tường lửa một cách an toàn. Lệnh này giúp bạn kiểm soát cách FortiGate xử lý việc tạo các “pinhole” trong việc kiểm tra luồng SIP.
  • Lệnh ‘sip-nat-trace enable | disable’: Lệnh này cũng không phải là để bật hoặc tắt SIP-helper. Nó chỉ có hiệu lực khi SIP session-helper đang hoạt động (khi bạn đã chọn chế độ ‘kernel-helper-based’ và SIP session-helper đang được sử dụng). Lệnh này được sử dụng để bật hoặc tắt việc ghi lại địa chỉ IP nguồn gốc của luồng SIP khi dữ liệu đi qua NAT. Điều này có thể hữu ích trong việc theo dõi và xác định nguồn gốc của luồng SIP qua NAT.

Nhưng quan trọng là, cả hai lệnh này không phải là cách chính để bật hoặc tắt SIP-helper. Để tắt SIP-helper và chuyển sang kiểm tra SIP dựa trên kernel-helper, bạn cần thay đổi chế độ mặc định của voip-alg-mode từ ‘proxy-based’ sang ‘kernel-helper-based’ như đã giải thích trong các phần trước đó của văn bản.

Để đảm bảo các thay đổi có hiệu lực, bạn có thể lựa chọn một trong hai cách sau:

  • Xóa sessions hoặc khởi động lại FortiGate:
    • Để xóa sessions, bạn có thể chọn phiên kiểm soát (cổng 5060) sẽ bị xóa. Sau khi phiên kiểm soát kết thúc, phiên RTP cũng sẽ kết thúc.
diagnose sys session filter dport 5060

Lệnh xóa sessions này sẽ áp dụng cho tất cả các phiên, trừ khi áp dụng bộ lọc (như trên) và do đó sẽ làm gián đoạn toàn bộ lưu lượng.

diagnose sys session clear

Hoặc bạn có thể khởi động lại FortiGate.

execute reboot

Lưu ý trong một số trường hợp đặc biệt, bạn có thể tắt chức năng SIP-ALG từ profile VoIP nếu cần.

SIP-ALG (Application Layer Gateway) là một tính năng được sử dụng để kiểm tra và điều chỉnh giao thức SIP trong luồng truyền qua tường lửa hoặc thiết bị mạng. Tuy nhiên, nó có thể gây ra sự cản trở không mong muốn trong việc xử lý giao tiếp SIP đặc biệt là khi có sự kết hợp với giao thức khác như SCCP (Skinny Call Control Protocol).

Trong trường hợp bạn có cả SCCP và SIP đi qua tường lửa và bạn muốn SCCP tiếp tục hoạt động bình thường trong khi tắt SIP-ALG, bạn có thể thực hiện việc sau:

  • Đảm bảo rằng SIP-ALG đã được tắt từ profile VoIP. Điều này có thể thực hiện bằng cách đặt trạng thái của SIP-ALG thành “disable” trong profile VoIP.
  • Khi bạn đã tắt SIP-ALG từ profile VoIP, luồng SIP sẽ không còn được kiểm tra và điều chỉnh bởi SIP-ALG. Thay vào đó, nó sẽ được xử lý bởi SIP-helper, ngay cả khi chế độ mặc định của FortiGate là ‘proxy-based’ (nghĩa là SIP-ALG đang hoạt động).

Điều này đảm bảo rằng luồng SIP vẫn hoạt động đúng cách trong khi bạn tắt chức năng kiểm tra SIP-ALG để tránh xung đột với SCCP và đảm bảo sự ổn định của cả hai giao thức.

config voip profile
    edit default
        config sip
            set status disable
        end
    end
end
  • “Session Helper” là một tính năng quan trọng trong FortiGate để kiểm tra và kiểm soát giao tiếp mạng, và khi bạn sử dụng VDOM, việc tắt hoặc điều chỉnh nó thường được thực hiện ở cấp toàn cầu và áp dụng cho tất cả các môi trường ảo. Tuy nhiên, có thể có trường hợp đặc biệt khi bạn muốn cấu hình nó riêng cho một VDOM cụ thể.
    • VDOM là gì?: VDOM (Virtual Domain) là một tính năng trong FortiGate cho phép chia tường lửa thành nhiều môi trường ảo, mỗi môi trường có thể được quản lý riêng biệt như một tường lửa riêng biệt. Điều này giúp tổ chức phân tách và quản lý mạng của họ dễ dàng hơn.
    • Session Helper là gì?: Session Helper là một tính năng trong FortiGate cho phép nó hiểu và kiểm tra các giao thức mạng khác nhau để đảm bảo giao tiếp mạng là an toàn và hiệu quả. Một trong những giao thức phổ biến mà nó kiểm tra là giao thức SIP (Session Initiation Protocol) được sử dụng cho VoIP.
    • Global Configuration và VDOM: Khi bạn bật chế độ VDOM trên FortiGate, bạn có thể cấu hình nhiều môi trường ảo độc lập, và mỗi môi trường này có các cài đặt riêng của nó. Tuy nhiên, “Session Helper” không phải là một tính năng có sẵn trong từng môi trường ảo (VDOM). Thay vào đó, nó là một cài đặt toàn cầu, có nghĩa là nó áp dụng cho tất cả các VDOM trên thiết bị.
    • Trường hợp đặc biệt: Tuy nhiên, có thể có trường hợp đặc biệt trong một môi trường VDOM cụ thể (ví dụ, VDOM-A) mà bạn muốn cấu hình “Session Helper” cho giao thức SIP hoặc VoIP. Trong trường hợp này, bạn có thể muốn tắt hoặc điều chỉnh “Session Helper” theo cách riêng biệt cho VDOM đó.

Trong những trường hợp như vậy hoặc tương tự, bạn có thể sử dụng các thiết lập sau:

Tạo một dịch vụ tùy chỉnh (custom service) với session-helper được tắt:

config firewall service custom
(custom) edit SIP-Helper-disable
(Helper-disable) set udp-portrange 5060
(Helper-disable) set helper disable
(Helper-disable) next

Sau khi đã tạo dịch vụ tùy chỉnh trên với session-helper bị tắt, bạn cần áp dụng nó trong chính sách (policy) tương ứng cho luồng SIP. Điều này đảm bảo rằng tường lửa sẽ không xử lý luồng SIP, miễn là luồng traffic phù hợp với chính sách đã áp dụng dịch vụ tùy chỉnh có tên là “Helper-disable.”

Lưu ý rằng trong một số trường hợp cụ thể, phương pháp cuối cùng này có thể không phải là cách tiếp cận tốt nhất, vì session-helper có thể được kích hoạt bởi luồng traffic, ngay cả khi session-helper đã được tắt cho dịch vụ SIP-Helper-disable.

Để đảm bảo rằng các thay đổi trong cài đặt tắt session-helper trên cổng 5060 có hiệu lực, bạn cần phải xóa tất cả các phiên (sessions) hiện tại đang được duyệt qua FortiGate trên cổng 5060. Xóa các phiên này sẽ đồng nghĩa với việc ngắt toàn bộ các cuộc gọi (calls) đang hoạt động thông qua FortiGate. Đầu tiên, bạn cần xóa bất kỳ bộ lọc (filters) session nào đang được áp dụng để đảm bảo rằng không có bộ lọc nào ảnh hưởng đến việc xóa phiên.

Lệnh sau xóa bất kỳ bộ lọc nào đang tồn tại:

diag sys session filter clear

Tiếp theo, bạn cần áp dụng một bộ lọc để chỉ lọc ra các phiên liên quan đến cổng đích (destination port) 5060. Lệnh sau này thiết lập một bộ lọc để xóa các phiên với cổng đích 5060:

diag sys session filter dport 5060

Sau khi đã thiết lập bộ lọc, bạn cần xóa tất cả các phiên đã được lọc bằng cách sử dụng lệnh sau:

diag sys session clear

Tương tự, bạn cũng có thể áp dụng bộ lọc để xóa các phiên liên quan đến cổng nguồn (source port) 5060 và sau đó xóa chúng bằng cách sử dụng các lệnh tương tự:

diag sys session filter sport 5060
diag sys session clear

Nhớ rằng việc xóa các phiên này sẽ đồng nghĩa với việc ngắt tất cả các cuộc gọi đang diễn ra thông qua FortiGate trên cổng 5060, vì vậy hãy thực hiện nó cẩn thận và chỉ khi cần thiết để tránh ảnh hưởng đến các cuộc gọi.

Tóm tắt lại là để tắt chức năng kiểm tra SIP và NAT PORT RTP khi bạn muốn chuyển SIP và RTP ra ngoài Internet trên FortiGate, bạn cần thực hiện các bước sau:

Tắt chức năng kiểm tra SIP trên FortiGate. Điều này thường được thực hiện bằng cách đổi chế độ mặc định của SIP-ALG từ proxy-based sang kernel-helper-based.

config system settings
    set default-voip-alg-mode kernel-helper-based
end

Đảm bảo rằng tất cả các phiên (sessions) hiện tại trên cổng 5060 được xóa. Điều này có thể thực hiện thông qua các lệnh sau:

diag sys session filter clear
diag sys session filter dport 5060
diag sys session clear

Đảm bảo rằng bạn đã cấu hình NAT để chuyển tiếp cổng RTP ra ngoài Internet. Cài đặt NAT sẽ thay đổi dựa trên mô hình mạng và thiết lập cụ thể của bạn, nhưng bạn cần xác định các quy tắc NAT để chuyển tiếp cổng RTP (thường là một loạt cổng) ra ngoài và xác định địa chỉ IP công cộng cho máy chủ SIP.

Đảm bảo rằng các tường lửa và quy tắc cho phép luồng SIP và RTP ra và vào FortiGate được cấu hình đúng. Điều này bao gồm việc tạo các chính sách tường lửa cho phép giao tiếp qua cổng SIP (thường là 5060) và cho phép luồng RTP ra và vào các cổng được cấu hình.

Với các bước này, bạn sẽ có thể tắt kiểm tra SIP trên FortiGate và chuyển tiếp cổng RTP và SIP ra ngoài Internet theo yêu cầu. Hãy đảm bảo bạn đã cấu hình NAT và tường lửa một cách đúng đắn để đảm bảo tính an toàn và hoạt động của hệ thống.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories