Chức năng uRPF (Unicast Reverse Path Forwarding)

1. Overview

– Chức năng uRPF là một giải pháp sercurity, cho phép router hạn chế các luồng dữ liệu nguy hiểm vào mạng bằng cách kiểm tra tính hợp lệ địa chỉ đích (source address) của gói tin nhận được:
=> Nếu địa chỉ src-IP không hợp lệ => packet sẽ bị discard.
=> Điều này giúp người quản trị mạng chống được các cuộc tấn công bằng cách giả địa chỉ IP (IP Spoofing).

– Ngoài ra, uRPF cũng rất hữu ích khi lắp ở biên của mạng để filter các địa chỉ IP đặc biệt không được khuyến cáo sử dụng để định tuyến trên Internet (private IP – RFC1918, special IP – RFC3330). Nếu để hacker sử dụng những địa chỉ này tấn công vào mạng, sẽ rất khó để trace back về nguồn của gói tin.

Note: Trước khi bàn về các cách để xác định tính hợp lệ của packet, chúng ra xem xét 1 chút về khái niệm symmetric và asymmetric (đối xứng vs bất đối xứng). Theo đó, một gói tin đi từ node A đến node B “via” path 1 và từ node B về node A cũng via path 1 => Đó gọi là routing symmetric.
Ngược lại, nếu route từ A đến B và từ B về A là hai path khác nhau => Đây gọi là routing asymmetric.

2. Phương pháp xác định tính hợp lệ của packet

RFC3704 mô tả 3 chế độ hoạt động của uRPF để xác định tính hợp lệ của một packet, cụ thể:

– Strict mode: Mỗi packet đến từ một interface (tạm gọi là incoming-interface). Router sẽ tra cứu bảng FIB (tra cứu các active route) để tìm route đến src-IP trong packet => Nếu có ít nhất 1 route được tìm thấy để đi đến src-IP và route đó đi qua incoming-interface được sử dụng để đi đến Src-IP => Hợp lệ! => Packet được forward đi. Nếu không hợp lệ, packet sẽ bị discard.
+ Ưu điểm: Đơn giản, rẻ, nhanh và là bộ filter động => Được recommend sử dụng ở biên của mạng (edge network), dành cho các đường truyền đến single-user (chỉ có 1 link đến khách hàng).
+ Nhược điểm: Chỉ áp dụng cho symmetric-routing. Nếu sử dụng strict mode cho asymmetric-routing, nó sẽ drop packet do chiều ingress và egress đi theo các path khác nhau.

– Feasible mode: Là một trường hợp mở rộng của Strict mode. Packet đi đến vẫn sẽ được kiểm tra src-IP trong bảng FIB, nhưng thay vì chỉ kiểm tra best-route trong FIB, nó sẽ kiểm tra toàn bộ các tuyến có thể đi đến src-IP (feasible paths) có trong RIB, và tất nhiên các tuyến tìm được vẫn phải thỏa mãn đi qua incoming-interface.
=> Feasible mode khá linh hoạt và phần nào khắc phục được một số hạn chế của Strict mode trong vấn đề asymetric-routing.

– Loose mode:  Trong chế độ này, router sẽ tìm trong bảng FIB các prefix chứa src-IP. Packet chỉ pass khi router tìm thấy ít nhất một prefix chứa src-IP. Với chế độ này, router cũng sẽ không quan tâm đến việc route đến src-IP có qua incoming-interface hay không => Packet được coi là hợp lệ khi tìm được ít nhất 1 tuyến đến src-IP. Nếu không nó sẽ bị discard.
=>Trong nhiều  trường hợp, phương pháp này không phù hợp để chống address-spoofing, nhưng lại rất phù hợp để drop các spoofed-address là non-routable (VD: các địa chỉ được mô tả trong RFC1918).

Note: Không phải tất cả thiết bị mạng đều hỗ trợ đồng thời 3 chế độ này.

3. Cấu hình uRPF
Hiện nay, phiên bản IOS mới nhất của Cisco chỉ hỗ trợ Strict mode và Loose mode, trong khi đó với Junios của Juniper đã hỗ trợ thêm Feasible mode. Trong khuôn khổ bài viết, mình xin dẫn chứng cấu hình cho thiết bị của Cisco.
Việc cấu hình uRPF của Cisco có vẻ khá đơn giản, khi mà chúng ta chỉ việc sử dụng 1 câu lệnh trên mode interface. Nhưng với 1 lệnh này, router sẽ phải thực hiện khá nhiều việc phía sau. Cùng tìm hiểu một chút về cách thức hoạt động của Cisco cho uRPF xem như nào…
Khi Cisco router kiểm tra tính hợp lệ của packet, thay vì kiểm tra trong bảng FIB, nó sẽ thực hiện look-up path trong bảng CEF (CEF Table). Bảng CEF là một bảng tổng hợp từ FIB, nó chứa thông tin routing nhưng thay vì chỉ có địa chỉ đích, bảng CEF sẽ map luôn route với L2 information (MAC Address) để việc đóng gói gói tin được nhanh hơn. Vì vậy thông tin trong bảng CEF sẽ chứa đựng cả interface dùng cho route.
=> Thay vì phải tra cứu nhiều lần với FIB (Tra route rồi tìm xem route sẽ dùng interface nào để đi ra) thì chỉ cần tra bảng CEF 1 lần là đã có đủ thông tin rồi.
Note: CEF Table là một bảng được Cisco phát triển từ trước khi phát triển uRPF, vì vậy việc sử dụng bảng CEF là kế thừa chứ không có gì mới mẻ.
Hình dưới đây mô tả phương thức làm việc của Cisco router khi sử dụng CEF Table.
Chính vì sử dụng bảng CEF để tra cứu, nên trước khi cấu hình uRPF, chúng ta phải bật CEF lên bằng câu lệnh:
Router(config)# ip cef
hoặc lệnh: Router(config)# ip cef distributed
Tiếp theo, cùng xem cách kích hoạt uRPF trên Cisco router…
Từ góc nhìn của Cisco router, nó sẽ chỉ có 2 phương thức để kiểm tra tính hợp lệ của packet: cùng là tìm route, nhưng:
– Với cách 1, route tìm được phải là active và đi qua incoming-interface (tương đương Strict mode).
– Với cách 2, route tìm được thế nào cũng được, miễn là đi đến src-IP (tương đương Loose mode).
=> Trong cấu hình của Cisco router khi kích hoạt uRPF cũng sẽ cho chúng ta 2 lựa chọn như ở trên:
Router(config-if)# ip verify unicast source reachable-via {any | rx} [allow-default] [allow-self-ping]
Với câu lệnh trên, dễ thấy ta dùng any để dùng uRPF theo cách 2, rx theo cách 1. Mặc định nếu không nói gì thì Cisco router sẽ để default = any.
Lựa chọn allow-default cho phép người sử dụng yêu cầu thiết bị xem xét cả các tuyến default-route khi tìm path trong FIB. Nguyên nhân chính là do mặc định khi tìm kiếm path, uRPF sẽ bỏ qua các tuyến default-route.
Khi enable chức năng uRPF, thiết bị sẽ không cho phép ping đến interface từ local (loopback), điều này khiến cho một số dịch vụ có thể không sử dụng được. Vì vậy cisco cung cấp lựa chọn allow-self-ping, cho phép người sử dụng có thể ping đến interface đang được cấu hình từ local.
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s