TỔNG QUAN
Công cụ triển khai QoS
Để có thể triển khai được một hệ thống hỗ trợ QoS thì hệ thống đó phải có 05 thành phần cơ bản bao gồm: Classifiers, Meter, Marker, Shapper, Droper [4]
Hình 2 - 1: Các thành phần cơ bản để triển khai QoS
Classifiers là công cụ quan trọng để phân loại gói tin dựa trên thông tin trong phần đầu gói tin Có hai loại Classifiers chính là BA (Behavior Aggregate) và
Trong chương này, tác giả sẽ nghiên cứu và đánh giá các công cụ triển khai QoS, so sánh khả năng đáp ứng của chúng và phân tích những hạn chế của các công cụ mã nguồn mở Mục tiêu là chỉ ra các vấn đề mà đề tài sẽ tập trung nghiên cứu và giải quyết.
Trong phần cuối cùng của chương, tác giả sẽ tiến hành khảo sát thực tế các thiết bị hỗ trợ kiểm soát lưu lượng và QoS, tập trung vào việc phân tích tính năng và giá thành sản phẩm Mục tiêu của cuộc khảo sát là chứng minh rằng việc “giảm chi phí sản phẩm” trong đề tài là có cơ sở và hoàn toàn khả thi.
MF (Multi-Field) là phương pháp phân loại gói tin dựa trên nhiều thông tin trong header fields, bao gồm địa chỉ nguồn, địa chỉ đích, giá trị trường DSCP và giao thức Trong khi đó, BA Classifier chỉ phân loại gói tin dựa vào thông tin trường DSCP.
ID, giá trị port nguồn, giá trị port đích và một số thông tin khác
Classifiers được sử dụng để định hướng các gói tin theo những quy tắc nhất định đến bộ điều khiển lưu lượng (Traffic Conditioners), nhằm tiếp tục quá trình xử lý các gói tin đó.
Traffic Conditioners bao gồm các thành phần sau: meter, marker, Shaper, và dropper
Trên hệ điều hành Linux, việc phân loại gói tin có thể được thực hiện thông qua các công cụ như Netfilter Framework với Iptables, và TC filter Linux cho phép kết hợp các công cụ này thành một bộ công cụ mạnh mẽ, đáp ứng nhu cầu phân loại gói tin hiệu quả Tất cả các công cụ này đều miễn phí và được cung cấp bởi cộng đồng Linux.
Mỗi luồng dữ liệu trong hệ thống mạng được gán các đặc tính như tốc độ truyền, độ bùng phát và độ trễ, tạo thành một traffic profile Meters là công cụ đo lường luồng dữ liệu để so sánh với traffic profile đã cấu hình Kết quả trả về từ Meters cho một gói tin sẽ là In-Profile hoặc Out-Of-Profile, ảnh hưởng trực tiếp đến các hành vi như Marking, Droping và Shaping.
Công cụ Meter thường sử dụng một trong hai thuật toán là Leak Bucket hoặc Token Bucket Trong TC Linux, hàng đợi TBF và HTB hỗ trợ hiệu quả cho thuật toán Token Bucket, đóng vai trò quan trọng trong việc kiểm soát tốc độ của các luồng dữ liệu khi triển khai QoS trên hệ điều hành Linux.
Makers là công cụ dùng để đánh dấu gói tin với một codepoint riêng biệt trong trường DiffServ, nhằm gộp các luồng dữ liệu thành một nhóm để đảm bảo thống nhất trong việc xử lý Chúng có thể được cấu hình để đánh dấu tất cả gói tin với một codepoint duy nhất hoặc nhiều codepoints để lựa chọn một PHB trong nhóm PHB dựa trên trạng thái của Meter Khi thông tin codepoint trong gói tin được thay đổi, quá trình này được gọi là “Re-Maker”.
Với TC Linux, người dùng có thể sử dụng hàng đợi DSMARK Queuing để đánh dấu gói tin thông qua trường TOS, cho phép thiết lập đến 64 lớp khác nhau, bao gồm cả PBH và non-AF/EF/default PBH Bên cạnh đó, công cụ Netfilter/Iptables tại table mangle trên Linux cũng hỗ trợ việc thiết lập các giá trị cho trường DSCP.
Shaper là công cụ giúp điều chỉnh tốc độ truyền tải dữ liệu bằng cách làm trễ một phần hoặc toàn bộ gói tin trong luồng dữ liệu, nhằm đảm bảo luồng này đáp ứng các yêu cầu của Traffic profile Công cụ này thường đi kèm với một bộ đệm có kích thước giới hạn, và nếu bộ đệm đầy, các gói tin sẽ bị hủy bỏ để giải phóng không gian.
Bản chất của các bộ Shaper chính là các hàng đợi Shaper chỉ là một thành phần trong cơ chế Shaping (Traffic Conditioners)
TC Linux cung cấp nhiều cơ chế hàng đợi để cấu hình Shaper dữ liệu, bao gồm hai loại chính: Classless Qdisc và Classfull Qdisc Trong đó, HTB Qdisc là một loại hàng đợi thuộc nhóm Classfull Qdisc, rất phù hợp cho việc thiết lập chức năng Shaping dữ liệu.
Droper là công cụ dùng để hủy bỏ một số hoặc tất cả các gói tin trong luồng dữ liệu nhằm đảm bảo rằng luồng dữ liệu đó tuân thủ các tham số của Traffic profile Quá trình này thường được gọi là Policing Đặc biệt, một bộ Droper có thể được xây dựng từ một bộ Shaper với kích thước bộ đệm bằng không gói tin.
TC Linux hỗ trợ quản lý hàng đợi bằng cách sử dụng phương pháp tail-drop để loại bỏ gói tin, đồng thời cho phép áp dụng các thuật toán Drop ngẫu nhiên như RED và WRED Qdisc Ngoài ra, chức năng Policing có thể được triển khai trên Linux thông qua công cụ TC filter tại hàng đợi ngõ vào của card mạng (ingress qdisc).
Khả năng đáp ứng của các công cụ mã nguồn mở
TC Linux cung cấp các công cụ cần thiết để triển khai QoS hiệu quả Hệ thống này, được biên dịch trực tiếp vào nhân Linux, giúp tối ưu hóa việc tiêu thụ tài nguyên trong quá trình xử lý gói tin, từ đó nâng cao hiệu suất tổng thể.
Mặt hạn chế của TC Linux là cơ chế lọc chặn không linh hoạt và không hỗ trợ phân loại gói tin theo lớp ứng dụng Để khắc phục những hạn chế này, cần có giải pháp cải tiến.
TC Linux kết hợp với Netfilter/Iptables cho phép hệ thống thiết lập các chính sách lọc linh hoạt dựa trên nhiều tiêu chí khác nhau Bên cạnh đó, việc tích hợp công cụ Layer 7 Filtering của Iptables giúp thực hiện lọc dữ liệu theo lớp ứng dụng một cách hiệu quả.
Khảo sát các dòng thiết bị thương mại
Thêm một chút giới thiệu chung ở đây về các hãng
Packeteer, được sáng lập bởi Robert Packer và Brett Galloway vào năm 1996, là một thiết bị phần cứng tích hợp với ứng dụng Sau này, Packeteer đã được công ty BlueCoast mua lại, phát triển thêm và đổi tên thành PacketShaper.
Tính năng của một số dòng sản phẩm packetShaper
Traffic classification is a feature that enables devices to reorganize network traffic based on various parameters, including application protocols, port numbers, URLs, host names, LDAP host lists, DiffServ settings, ISL, 802.1p/q, MPLS tags, IP precedence bits, IP or MAC addresses, and traffic direction (inbound/outbound) Additionally, it takes into account source and destination details, host speed ranges, MIME types, web browsers, Oracle databases, Citrix published applications, and VLANs.
Phân tích và quản lý thời gian phản hồi là chức năng giúp thiết bị giám sát hiệu suất mạng bằng cách phát hiện các client và server có hiệu năng kém Chức năng này tự động phân tích nguyên nhân gây ra tình trạng này, có thể do nguồn gửi quá nhiều lưu lượng hoặc đích nhận quá tải Ngoài ra, nó còn cho phép phát hiện phần trăm băng thông bị lãng phí trên đường truyền Ví dụ về khả năng phân tích này có thể thấy rõ qua packetShaper.
Top Talkers for web Traffic: yahoo.com, nasdaq.com, cnn.com, and espn.com
Top Listeners: CfoPC, VpMarketingPC, DirEngineeringPC
12% of bandwidth goes to retransmissions; jumps to 68% for a particularly overburdened server
Hợp đồng Cấp Dịch Vụ (SLA) đóng vai trò quan trọng trong việc giám sát hiệu suất dịch vụ của nhà cung cấp, với các tham số như băng thông, độ trễ, độ jitter và tỷ lệ mất gói PacketShaper tự động theo dõi và phân tích mức độ đáp ứng SLA, đồng thời cung cấp cảnh báo khi có sự cố xảy ra Dưới đây là ví dụ về khả năng giám sát SLA mà PacketShaper mang lại.
SLA states that 98% of JD Edwards' OneWorld transactions should complete in 1,100ms Actual response time averages 867ms But only 95% complete within limits, so SLA is in violation.
Top 10: Thu thập 10 loại Traffic chiếm tỷ trọng lớn nhất đi qua packetShaper Điều này sẽ cho phép người quản trị nhanh chóng phát hiện ra các sự cố bất thường trong hệ thống mạng để có thể đưa ra các phương án khắc phục kịp thời
Per-App Minimum cho phép người dùng thiết lập băng thông bảo vệ cho tất cả lưu lượng trong một lớp nhất định Ví dụ, có thể cấu hình băng thông bảo vệ cho ứng dụng Microsoft Exchange chiếm tối thiểu 20% băng thông WAN, đồng thời cho phép tăng vượt mức nếu băng thông hệ thống còn dư, nhưng không được vượt quá 60% tổng băng thông.
Per-App Maximum cho phép người dùng thiết lập băng thông tối đa cho từng ứng dụng, ví dụ như giới hạn tổng băng thông cho ứng dụng tải xuống FTP ở mức 1Mbps.
Chức năng Per-Session Minimum cho phép thiết lập băng thông bảo vệ cho một session cụ thể trong một Class Traffic, giúp đảm bảo chất lượng dịch vụ Ví dụ, chúng ta có thể thiết lập băng thông chính xác 21Kbps cho một session VoIP.
Per-Session Maximum: Chức năng thiết lập giới hạn băng thông cực đại cho một session trong một Traffic Class cụ thể
Dynamic Per-User Minimum & Maximum cho phép quản lý băng thông cho từng người dùng mà không cần cấu hình từ phía người dùng Băng thông không sử dụng của một người dùng có thể được chia sẻ và mượn bởi người dùng khác, giúp tối ưu hóa hiệu suất mạng.
Kiểm soát tốc độ TCP là chức năng giúp giảm thiểu sự biến động tốc độ của các luồng TCP PacketShaper can thiệp để điều chỉnh kích thước cửa sổ của gói tin dựa trên các thông số đo được trên mạng, từ đó giúp các luồng TCP hạn chế độ trễ trong cả hai hướng.
UDP Rate Control: Cho phép đảm bảo chính xác một lượng băng thông và kiểm soát độ jitter cho các flow UDP
The price of packetShaper consists of two main components: hardware and software (including licenses) Additionally, the company offers a 24/7 technical support package For the Serial 6500 model, prices range from $17,000 to $34,000.
NETaXcel là sản phẩm thương mại của XRoads Networks, tương tự như packetShaper Thiết bị này bao gồm phần cứng kết hợp với ứng dụng và hoạt động trên hệ điều hành EdgeXOS.
Các tính năng nổi bật về kiểm soát lưu lượng của thiết bị NETaExcel bao gồm:
Hỗ trợ 12 mức ưu tiên
Hỗ trợ 10 sub-level để đánh dấu ToS/DiffServ Ưu tiên theo ứng dụng Ưu tiên theo URL Đảm bảo tốc độ cho từng lớp dịch vụ
Gộp các luồng dữ liệu khác nhau vào cùng một Class
In addition, NETaExcel offers a wide range of features including advanced routing capabilities, NAT, Proxy, site-to-site VPN, load balancing, WAN reliability, and firewall support.
Giá sản phẩm NETaExcel dao động từ 3.000 USD đến 10.000 USD, tùy thuộc vào các tùy chọn đi kèm như phần cứng, phần mềm, gói hỗ trợ và thời gian bảo hành.
Kết luận
Trong chương này, chúng ta đã phân tích các thành phần cần thiết để triển khai hệ thống hỗ trợ chức năng QoS và so sánh khả năng đáp ứng của các công cụ mã nguồn mở, đặc biệt là TC Linux Kết quả cho thấy TC Linux hoàn toàn đủ khả năng thực hiện các chức năng QoS cần thiết.
Chức Năng Khả năng đáp ứng của TC Linux
Shaping Sử dụng TC Class kết hợp với HTB Classfull Qdisc
Mỗi Traffic Control (TC) Qdisc hoạt động như một bộ lập lịch, trong đó FIFO là hình thức đơn giản nhất Bằng cách sử dụng hàng đợi HTB kết hợp với các Class, chúng ta có thể tạo ra các Classless Qdisc bên trong các Class để xây dựng một chức năng lập lịch hoàn chỉnh.
Classifying Để phân loại gói tin chúng ta có thể thực hiện theo hai cách
Cách thứ nhất là sử dụng TC filter kết hợp với các bộ selector tích hợp sẵn trong TC như u32 để phân loại
Cách thứ hai là sử dụng TC filter kết hợp với Netfilter để phân loại
Netfilter/Iptables là công cụ mạnh mẽ cho việc lọc gói tin, trở thành lựa chọn lý tưởng để triển khai phân loại các gói tin hiệu quả.
Policing Chức năng policing có thể được triển khai như một phần của TC filter
Dropping Để thực hiện việc drop các gói tin chúng ta có thể thực hiện bằng
TC filter … policer Hoặc cũng có thể sử dụng Netfilter để thực hiện việc drop gói tin
Việc đánh dấu gói tin có thể được thực hiện qua hai phương pháp: sử dụng hàng đợi TC Qdisc dsmark hoặc sử dụng Iptables với bảng mangle để đánh dấu trường DS.
Bảng 2 - 1: Khả năng đáp ứng của TC Linux
CƠ SỞ LÝ THUYẾT
Công cụ TC
3.1.1 Nguyên lý hoạt động của TC
Nguyên lý hoạt động của TC Linux được mô tả như sau
Trong chương này, tác giả sẽ giới thiệu chi tiết về lý thuyết cơ bản của công cụ TC trên Linux, bao gồm nguyên lý hoạt động và cách cấu hình các tham số liên quan Mỗi phần sẽ được phân tích để làm rõ ưu và nhược điểm của từng phương pháp cấu hình.
Tác giả sẽ trình bày các lý thuyết cơ bản về công cụ netfilter/iptables, nhằm làm nền tảng cho việc kết hợp TC Linux với iptables, phục vụ cho các yêu cầu của đề tài.
Hình 3 - 1: Nguyên lý hoạt động của TC
Gói tin được đưa vào hệ thống thông qua giao diện kết nối, với phần cứng chủ yếu là các Network Card Bộ phân loại gói tin ở ngõ vào (Ingress Classification) sẽ phân loại gói tin và chuyển chúng vào hàng đợi ngõ vào (Ingress Qdisc) Tại đây, hệ thống thực hiện quá trình policing dữ liệu nhằm đảm bảo rằng tốc độ gói đến không vượt quá mức quy định.
Gói tin sẽ được chuyển vào kernel để tiếp tục xử lý, nơi kernel sẽ đọc các trường thông tin trong phần mào đầu để xác định đích đến của gói tin Nếu gói tin được gửi đến một địa chỉ khác, kernel sẽ thực hiện routing hoặc bridging để chuyển gói đến một interface khác Nếu gói tin được gửi đến hệ thống, nó sẽ được đẩy lên các lớp cao hơn trong mô hình OSI Gói tin phản hồi từ hệ thống (nếu có) sẽ được gửi ngược trở lại giao diện mà gói tin vừa đến.
Trong cả hai trường hợp, các gói tin sẽ được đưa đến ngõ ra (Egress) của giao diện kết nối Bộ phân loại gói tin tại ngõ ra sẽ phân loại chúng và đưa vào các hàng đợi phù hợp Quá trình Shaper dữ liệu sẽ diễn ra tại đây, trước khi gói tin được chuyển đến Network Card để truyền đi.
Ingress Classification, Ingress Qdisc, Egress Classification và Egress Qdisc là bốn thành phần quan trọng trong TC Linux, được tích hợp trực tiếp vào nhân Linux để cấu hình kiểm soát lưu lượng Quá trình kiểm soát lưu lượng bao gồm nhiều bước khác nhau nhằm quản lý và tối ưu hóa lưu lượng mạng.
SHAPING là quá trình làm chậm gói tin để kiểm soát tốc độ luồng dữ liệu, giúp hạn chế tốc độ dữ liệu thấp hơn băng thông hiện có Khi dữ liệu được Shaper, tốc độ phát gói tin ra khỏi card mạng sẽ được quản lý, giúp tối ưu hóa việc truyền dữ liệu qua hệ thống mạng Quá trình Shaping diễn ra ở ngõ ra (egress) của card mạng, nhằm hạn chế các dữ liệu truyền theo kiểu bùng phát.
SCHEDULING là quá trình tổ chức các gói tin đi ra khỏi card mạng, cho phép ưu tiên và sắp xếp lại các gói tin có thứ tự ưu tiên cao được gửi đi trước.
POLICING là quá trình xảy ra tại ngõ vào của card mạng, xử lý các gói tin đến Khác với SHAPING, POLICING không thể lưu trữ các gói tin, do đó, những gói tin vượt quá tốc độ quy định sẽ bị loại bỏ ngay lập tức.
DROPPING: Là quá trình hủy gói tin không vận chuyển qua network card do truyền vọt lố so với tốc độ được thiết lập
Quá trình xử lý Traffic được kiểm soát bởi ba thành phần là: Qdisc, Class, Filter
Các lớp (Class) trong hệ thống được tổ chức theo dạng cây ngược, trong đó mỗi lớp có một lớp cha và lớp cha có thể có nhiều lớp con Một số loại hàng đợi (Qdisc) như CBQ và HTB cho phép thêm các lớp con, trong khi các loại hàng đợi khác như PRIO chỉ cho phép tạo ra một số lớp con nhất định.
Qdisc có thể cho phép tạo thêm các Class hoặc không cần Class nào bên trong nó để sắp xếp các gói tin vào hàng đợi
Mỗi Class trong hệ thống có thể có một hàng đợi con để sắp xếp các gói tin ra, gọi là Scheduler Mặc định, hàng đợi pfifo được gán khi khởi tạo Class, nhưng người dùng có thể thay thế bằng các loại hàng đợi khác Hàng đợi thay thế này có thể chứa nhiều Class, nhưng mỗi Class chỉ được phép có một leaf Qdisc duy nhất.
Khi một gói tin được gửi vào Classfull Qdisc, nó sẽ được phân loại vào một trong các Class bên trong Việc phân loại này có thể được thực hiện theo ba phương pháp khác nhau, tuy nhiên không phải tất cả các Qdisc đều áp dụng cả ba kiểu phân loại này.
TC filters are prioritized when assigned to a class, allowing them to inspect all fields in the packet header and match packets marked by the firewall (Iptables) Additionally, certain built-in Qdisc rules classify packets based on the Type of Service (ToS).
SKB – PRIORITY (SocKet Buffer – PRIORITY) cho phép các ứng dụng trong Userspace mã hóa Class-ID thành skb – priority Tuy nhiên, trong khuôn khổ đề tài này, chúng tôi sẽ không đi sâu vào nghiên cứu phương pháp phân loại gói tin này.
Mỗi node trong mô hình cây ngược của Class có thể sở hữu một bộ filter riêng Các bộ filter ở lớp cao hơn có khả năng chỉ định trực tiếp đến các Class ở lớp thấp hơn.
Hình 3 - 2: Mô Hình Cây Ngược Của TC Class
Công cụ Netfilter - Iptables
3.2.1 Giới thiệu về Netfilter /Iptables
Netfilter là một framework lọc gói tin tích hợp trong nhân Linux từ phiên bản Kernel 2.4 trở đi, cho phép quản trị viên thực hiện các tác vụ như lọc gói tin, chuyển đổi địa chỉ mạng, chuyển đổi port và xử lý gói tin một cách hiệu quả.
Iptables là thành phần nổi bật nhất trong Netfilter, đóng vai trò quan trọng trong việc quản lý và kiểm soát lưu lượng mạng Ngoài Iptables, Netfilter còn bao gồm các công cụ hữu ích khác như ebtables, arptables và Ip6tables, giúp mở rộng khả năng bảo mật và quản lý mạng.
…v.v Iptables được kế thừa và thực hiện tái thiết kế lại dựa trên Ipchains của Linux 2.2 và Ipfwadm của Linux 2.0 [9]
Các tính năng của Netfilter/Iptables bao gồm:
Lọc gói không nhớ - Stateless packet filtering (IPv4 and IPv6)
Lọc gói có nhớ - Stateful packet filtering (IPv4 and IPv6)
Chuyển đổi các loại địa chỉ mạng và port e.g NAT/NAPT (IPv4 only)
Mềm dẻo và dễ mở rộng
Hỗ trợ API của nhiều 3rd party
Hỗ trợ một lượng lớn các module dạng plugin
Với Netfilter/Iptables chúng ta có thể:
Xây dựng một hệ thống Internet firewalls dựa trên 2 cơ chết stateless và stateful packet filtering
Sử dụng NAT và masquerading để chia sẽ kết nối internet trong trường hợp không có đủ địa chỉ IP public
Sử dụng NAT để triển khai transparent proxies
Kết hợp với Iproute2/TC để triển khai QoS và policy routers
Tương ta, xử lý gói tin, chỉnh sửa thông tin các trường TOS/DSCP/ECN bits trong IP header
Netfilter hỗ trợ đánh dấu gói tin dưới dạng metadata trong không gian kernel, điều này rất quan trọng để kết hợp với TC Linux, vốn cũng xử lý gói tin dạng metadata Nhờ đó, chúng ta có thể sử dụng Netfilter để đánh dấu gói tin, và TC Filter sẽ xử lý các gói tin metadata, phân loại chúng vào các class Qua đó, chúng ta tận dụng được sức mạnh toàn diện của Netfilter-Iptables.
Iptables là một firewall có 03 loại bảng với chains và chức năng tương ứng như sau:
Chains Chức năng của các chains
FILTER Lọc gói FORWARD Filters các gói tin có đích đến là firewall tin nhưng đến từ một NIC khác
INPUT Filters các gói có đích đến là firewall OUTPUT Filter các gói có source từ firewall gửi đi
NAT Chuyển đổi địa chỉ
PREROUTING Chuyển đổi địa chỉ trước khi Routing
Dùng cho DNAT POSTROUTING Chuyển đổi địa chỉ trước khi Routing
OUTPUT Chuyển đổi địa chỉ cho các gói được tạo bởi Firewall MANGLE Thay đổi thông tin trong Header gói tin
Thay đổi thông tin trường TCP header và các bits QoS
Bảng 3 - 8: Cấu trúc và nhiệm vụ của các bảng trong Iptables
Quá trình xử lý gói tin trong Iptables
Hình 3 - 22: Hành trình của gói tin trong Kernel
Sơ đồ trên cho thấy quá trình xử lý các gói tin qua các chain và table khi module NAT và Mangle được tải vào Kernel Khi gói tin đến Linux box, nó sẽ được phân tích tại chain PREROUTING của mangle table, cho phép chúng ta thực hiện một số thay đổi nhỏ trên IP header như thay đổi trường TOS hoặc đánh dấu gói tin trước khi tiến hành quá trình Routing.
Tiếp theo, paket flow sẽ đi tiếp qua PRE-ROUTING chain của bảng NAT table tại đây chúng ta có thể thực hiện DNAT và port redirection …v.v
Quá trình DNAT (Địa chỉ mạng chuyển đổi) chỉ có thể diễn ra trước khi thực hiện Routing, vì DNAT thay đổi địa chỉ IP công cộng thành địa chỉ IP riêng Cụ thể, quá trình này thay đổi địa chỉ IP đích trong tiêu đề IP Netfilter cần thực hiện DNAT trước khi quyết định routing, do đó, Kernel sẽ sử dụng địa chỉ IP đích mới để đưa ra quyết định routing chính xác.
Sau khi vượt qua hai chain, Linux Kernel sẽ quyết định routing bằng cách phân tích địa chỉ IP đích trong header IP Việc này không thuộc về Netfilter; thông qua quá trình này, hệ thống Linux sẽ xác định được nơi chuyển gói tin hoặc nhận gói tin gửi đến chính nó.
Khi gói tin hướng đến Linux box, nó sẽ được chuyển đến chain INPUT của mangle tables để thực hiện quá trình packet mangling, tức là thay đổi thông tin trong IP header mà không ảnh hưởng đến hệ thống Tiếp theo, gói tin sẽ vào chain INPUT của filter table, nơi sẽ quyết định chấp nhận, từ chối hoặc loại bỏ gói tin Nếu gói tin được chấp nhận, Linux box sẽ tạo ra một phản hồi, và gói tin phản hồi này sẽ đi qua chain OUTPUT của mangle table trước khi được gửi đi.
The packet will first pass through the NAT table's OUTPUT chain and the filter table's OUTPUT chain At this stage, the packet will be processed by the mangle table's POSTROUTING chain and the NAT table's POSTROUTING chain, where it will be analyzed and sent out through the corresponding interface.
The chains discussed here are predefined chains for tables such as filter, nat, and mangle; however, it is possible to create custom chains with unique names By directing packets from the corresponding predefined chains to these custom chains, we can establish specific rules For instance, to allow SSH access to a Linux box, we can rename the chain to "SSH" and insert a rule into the INPUT chain that instructs the kernel to analyze the SSH chain for incoming packets on port 22/TCP.
Các predefned chains không thể xóa hay đổi tên được
3.2.3 Thao tác cấu hình với Iptables
Iptables có cấu trúc tương đối giống so với Ipchains (Netfilter cho Kernel 2.2) tuy nhiên, concept của Netfilter cho Kernel 2.4+ hoàn toàn khác so với Netfilter cho Kernel 2.2
Các operation của Iptables cho các chain như sau:[2]
List the rules in a chain (Iptables –L CHAIN)
Change the policy of a chain (Iptables –P CHAIN ACCEPT)
Create a new chain (Iptables –N CHAIN)
Flush a chain; delete all rules (Iptables –F CHAIN)
Delete a chain (Iptables –D CHAIN), only if the chain is empty
The command "Iptables -Z CHAIN" resets the counters that track the number of packets and bytes matched by each rule in a chain For operations such as -L, -D, -F, and -Z, if the chain name is not specified, the command defaults to applying to the entire filter table To specify a particular table for an operation, the -t option can be used, for example, "Iptables -t filter."
Các operation của Iptables cho các rules bao gồm:
Append rules to a chain (Iptables –A)
Insert rules in a chain (Iptables –I)
Replace a rule from a chain (Iptables –R)
Delete a rule from a chain (Iptables –D)
Trong thiết kế firewalls, hai operation thường được sử dụng là –A và –I Chúng ta thường sử dụng operation –I hơn –A vì nó cho phép gán các rule tạm vào đầu chain, trong khi –A chỉ đặt rule vào cuối chain Việc sử dụng iptables –I cho phép chèn một rule vào bất kỳ vị trí nào trong chain, ví dụ như iptables –I CHAIN 4 sẽ chèn rule vào vị trí thứ 4 của chain mong muốn.
Iptables –D cũng có thể dụng bằng cách chỉ ra vị trí của rule trong chain hoặc chỉ ra entire rule để xóa rule ra khỏi chain
Câu lệnh để add rule vào chain có dạng
Iptables –A …… -j
Filtering specifcations là 1 phần của Iptables rule nó được Kernel sử dụng để nhận dạng các gói IP và Kernel sẽ thực hiện một action cụ thể theo TARGET
3.2.4 Tiêu chí lọc gói tin
Tiêu chí thực hiện lọc gói tin có thể chia thành hai kiểu là Generic Matchs Implicit matches, và Explicit matches [9]
Lọc gói tin dựa vào protocol (TCP/UDP/ICMP):
Lọc gói tin dựa vào địa chỉ IP nguồn/đích
Match -s/-d hoặc source, destination hoặc –src,
Lọc gói tin dựa vào chiều gói tin in/out
Match -i, in-interface, -o, out-interface
Lọc gói tin dựa vào port number: dùng cho cả TCP và UDP
Match sport, source-port, dport, destination-port Example Iptables -A INPUT -t tcp sport 80
Lọc gói tin dựa vào trạng thái cờ TCP (SYN,FIN,ACK SYN, RST…v.v)
Example Iptables -p tcp tcp-flags SYN,FIN,ACK SYN
Lọc gói theo giá trị TCP Option
Example Iptables -p tcp tcp-option 16
Example Iptables -A INPUT -p icmp icmp-type 8
Lọc gói tin IPSEC dựa vào thông tin trường AH/ESP
Example Iptables -A INPUT -p 50 -m esp espspi 500
Lọc gói theo trạng thái kết nối TCP (INVALID, ESTABLISED, NEW, RELATED, SNAT, DNAT)
Match -m conntrack [ ctstate, ctproto, ctorigsrc, ctorigdst, ctreplsrc, ctrepldst, ctstatus, ctexpire]
Example Iptables -A INPUT -p tcp -m conntrack ctstate RELATED
Lọc gói dựa vào thông tin trường DSCP
Match -m dscp [ dscp, dscp-class]
Example Iptables -A INPUT -p tcp -m dscp dscp 32
Iptables -A INPUT -p tcp -m dscp dscp-class
Lọc gói dựa vào thông tin trường ECN
Match -m ecn [ ecn-tcp-cwr, -m ecn ecn-tcp-ece,
Example Iptables -A INPUT -p tcp -m dscp dscp 32
Iptables -A INPUT -p tcp -m dscp dscp-class
Lọc gói theo một dải địa chỉ IP
Match -m iprange [ src-range, dst-range]
Example Iptables -A INPUT -p tcp -m iprange src- range 192.168.1.13-192.168.2.19
Lọc gói tin theo kích thước
Example Iptables -A INPUT -p tcp -m length length
Lọc gói theo địa chỉ MAC
Example Iptables -A INPUT -m mac mac-source
Lọc gói tin kéo dài trong một khoảng thời gian giới hạn
Example Iptables -A INPUT -m limit limit 3/hour
Lọc gói tin được đánh dấu metadata
Example Iptables -t mangle -A INPUT -m mark mark 1
Lọc gói tin theo nhiều port number
Match -m multiport [ source-port , destination- port, port ] Example Iptables -A INPUT -p tcp -m multiport destination-port 22,53,80,110
Lọc theo loại gói tin (unicast, multicast hay broadcast)
Example Iptables -A OUTPUT -m owner pkttype unicast
Lọc gói tin theo thông tin trường ToS
Trong iptables, lệnh "-A INPUT -p tcp -m tos tos 0x16" được sử dụng để thêm quy tắc vào bảng filter Mục tiêu chính của các quy tắc trong bảng filter là hai hành động: DROP và ACCEPT Nếu một gói tin khớp với quy tắc có mục tiêu là DROP, gói tin đó sẽ bị hủy mà không xem xét các quy tắc khác Ngược lại, nếu mục tiêu là ACCEPT, gói tin sẽ được cho phép đi qua mà không cần quan tâm đến các quy tắc khác.
Instead of using the DROP target, we can opt for REJECT In this case, packets will still be dropped, but the Linux box will send an ICMP message back to the source, typically an ICMP port unreachable message However, we can customize the response message by using the " reject-with" operation to specify a different type of ICMP message.
Trong quy tắc Iptables, mục tiêu (target) có thể được sử dụng để chuyển một gói tin đến một chuỗi (chain) do người dùng định nghĩa Ví dụ, khi tạo một chuỗi mang tên "Iptables –N SSH", cần thông báo cho Kernel rằng tất cả các kết nối TCP trên cổng 22 phải được chuyển đến chuỗi SSH.
Iptables -A INPUT -p TCP dport 22 -j SSH
Another useful targeting method is LOG We can log all packets that match the filter specifications in the Kernel log, which can then be read using dmesg or syslogd The LOG target comes with several options.
log-level level: mức loging có thể gán theo tên hoặc theo số info, notice, warning, err, crit, alert, and emerg tương ứng số từ 0-7
log-prefix prefix: Tiếp đầu ngữ của tên mà file log tạo ra Có thể dài 29 ký tự
log-TCP-sequence: Logs số TCP sequence number
log-TCP-options: Logs lại trường option trong TCP header
log-ip-options: Logs lại trường option trong IP header
log-uid: Logs lại User-ID của process tạo ra gói IP
Layer 7 Filtering
Trong mô hình OSI và TCP/IP, lớp Application bao gồm các giao thức như HTTP, FTP và SSH Việc phân loại và ưu tiên ứng dụng có vẻ đơn giản nhưng thực tế lại phức tạp Ví dụ, để ưu tiên Traffic HTTP, chúng ta thường phân loại gói tin dựa vào TCP header, cụ thể là giá trị source và destination port Tuy nhiên, nếu webserver sử dụng port không chuẩn thay vì port 80, việc matching gói tin HTTP sẽ gặp khó khăn Giải pháp cho vấn đề này là phân loại dựa vào thông tin từ lớp ứng dụng.
Trên hệ điều hành Linux, L7 filter là một công cụ mạnh mẽ giúp phân loại gói tin dựa trên thông tin dữ liệu của lớp ứng dụng, thay vì chỉ dựa vào giao thức hay cổng của lớp vận chuyển.
L7 filter là một phần không thể tách rời của Netfilter/Iptables Danh sách các protocol được L7 Filter hỗ trợ được đính kèm trong phụ lục
3.3.2 Nguyên tắc hoạt động của L7 Filter
L7 filter cung cấp một phương pháp để Iptables match gói tin dựa vào thông tin của lớp ứng dụng mà nó thuộc về
Mô hình TCP/IP bao gồm bốn lớp, và trước khi có bộ lọc L7, Netfilter chỉ có khả năng lọc dữ liệu ở ba lớp như đã nêu trong các phần trước của bài viết.
Layer 7 filter tạo thêm cho Netfilter một tính năng mới, là cho phép matching gói tin thuộc về một ứng dụng được tìm thấy ở lớp 4 của mô hình TCP/IP Nói khác đi, Layer 7 Filter chính là một tùy chọn cho việc matching gói tin, các thao tác khác để đối xử với gói tin hoàn toàn không thay đổi
Iptables -A CHAIN -m layer7 l7proto [http|ftp| ]
Tham số [http|ftp| ] là một trong những giao thức được Netfilter hỗ trợ Để lọc dữ liệu theo ứng dụng, Netfilter sẽ phân tích sâu vào nội dung gói tin thay vì chỉ xem xét header Tuy nhiên, dữ liệu trong payload không chỉ rõ ứng dụng mà nó thuộc về, vì vậy Netfilter sẽ đối chiếu payload với các biểu thức chung của các dạng dữ liệu khác nhau Những biểu thức này là phần quan trọng nhất của bộ lọc L7 và được gọi là định nghĩa giao thức.
Tóm lại, Dự án L7 Filter của Netfilter bao gồm 3 phần quan trong nhất
Một bản vá (patch) cho Kernel, cung cấp cho Kernel cách để nhìn vào bên trong gói tin IP
Một bản vá cho Netfilter/Iptables, cung cấp thêm tùy chọn khi thực hiện việc lọc gói tin như một tùy chọn trong Iptables
Tập hợp của các file mẫu trong đó có chứa các “biểu thức chung” của các protocol gọi là protocol definitions được hỗ trợ
3.3.3 Các giao thức lớp ứng dụng được hỗ trợ bởi Layer7 Filter
Layer 7 Filter hỗ trợ việc lọc gói tin theo các giao thức lớp ứng dụng có thể chia thành các nhóm ứng dụng như sau:
Chi tiết các giao thức được hỗ trợ được liệt kê trong bảng sau
Nhóm ứng dụng Giao thức Mô tả
Messaging/Chat aim AIM - AOL instant messenger (OSCAR and TOC)
Messaging/Chat aimwebcontent AIM web content - ads/news content downloaded by AOL Instant Messenger
Messaging/Chat chikka Chikka - SMS service which can be used without phones - http://chikka.com
Messaging/Chat cimd Computer Interface to Message Distribution, an SMSC protocol by Nokia
Messaging/Chat irc IRC - Internet Relay Chat - RFC 1459
Messaging/Chat jabber Jabber (XMPP) - open instant messenger protocol - RFC 3920 - http://jabber.org
Messaging/Chat msn-filetransfer MSN (Micosoft Network) Messenger file transfers (MSNFTP and MSNSLP)
Messaging/Chat msnmessenger MSN Messenger - Microsoft Network chat client
Messaging/Chat qq Tencent QQ Protocol - Chinese instant messenger protocol - http://www.qq.com
Messaging/Chat yahoo Yahoo messenger - an instant messenger protocol - http://yahoo.com
Document Retrieval aimwebcontent AIM web content - ads/news content downloaded by AOL Instant Messenger Document Retrieval ftp FTP - File Transfer Protocol - RFC 959
Document Retrieval gopher Gopher - A precursor to HTTP - RFC 1436
Document Retrieval http HTTP - HyperText Transfer Protocol - RFC 2616
Document Retrieval msn-filetransfer MSN (Micosoft Network) Messenger file transfers (MSNFTP and MSNSLP)
Nhóm ứng dụng Giao thức Mô tả
Document Retrieval smb Samba/SMB - Server Message Block - Microsoft Windows filesharing
Document Retrieval uucp UUCP - Unix to Unix Copy
File Types exe Executable - Microsoft PE file format
File Types flash Flash - Macromedia Flash
File Types gif GIF - Popular Image format
File Types html (X)HTML - (Extensible) Hypertext Markup Language - http://w3.org
File Types jpeg JPEG - Joint Picture Expert Group image format
File Types mp3 MP3 - Moving Picture Experts Group Audio Layer III
File Types ogg Ogg - Ogg Vorbis music format (not any ogg file, just vorbis)
File Types pdf PDF - Portable Document Format - Postscript-like format by Adobe
File Types perl Perl - A scripting language by Larry Wall
File Types png PNG - Portable Network Graphics, a popular image format
File Types postscript Postscript - Printing Language
File Types rar RAR - The WinRAR archive format
File Types rpm RPM - Redhat Package Management packages
File Types rtf RTF - Rich Text Format - an open document format
File Types tar Tar - tape archive Standard UNIX file archiver, not just for tapes
File Types zip ZIP - (PK|Win)Zip archive format
Mail biff Biff - new mail notification
Mail imap IMAP - Internet Message Access Protocol (A common e-mail protocol)
Mail pop3 POP3 - Post Office Protocol version 3 (popular e-mail protocol) - RFC 1939 Mail smtp SMTP - Simple Mail Transfer Protocol - RFC 2821 (See also RFC 1869)
Monitoring gkrellm Gkrellm - a system monitor - http://gkrellm.net
Nhóm ứng dụng Giao thức Mô tả
Monitoring hddtemp hddtemp - Hard drive temperature reporting
Networking bgp BGP - Border Gateway Protocol - RFC 1771
Networking dhcp DHCP - Dynamic Host Configuration Protocol - RFC 1541
Networking dns DNS - Domain Name System - RFC 1035
Networking ident Ident - Identification Protocol - RFC 1413
Networking nbns NBNS - NetBIOS name service
Networking ncp NCP - Novell Core Protocol
Networking smb Samba/SMB - Server Message Block - Microsoft Windows filesharing
Networking snmp SNMP - Simple Network Management Protocol - RFC 1157
Networking socks SOCKS Version 5 - Firewall traversal protocol - RFC 1928
Networking ssdp SSDP - Simple Service Discovery Protocol - easy discovery of network devices Networking stun STUN - Simple Traversal of UDP Through NAT - RFC 3489
Networking tor Tor - The Onion Router - used for anonymization - http://tor.eff.org
Networking whois Whois - query/response system, usually used for domain name info - RFC 3912 Networking zmaap ZMAAP - Zeroconf Multicast Address Allocation Protocol
Peer-to-Peer 100bao 100bao - a Chinese P2P protocol/program - http://www.100bao.com
Peer-to-Peer applejuice Apple Juice - P2P filesharing - http://www.applejuicenet.de
Peer-to-Peer ares Ares - P2P filesharing - http://aresgalaxy.sf.net
Peer-to-Peer bittorrent Bittorrent - P2P filesharing / publishing tool - http://www.bittorrent.com
Peer-to-Peer direcTConnect Direct Connect - P2P filesharing - http://www.neo-modus.com
Peer-to-Peer edonkey eDonkey2000 - P2P filesharing - http://edonkey2000.com and others
Peer-to-Peer fasttrack FastTrack - P2P filesharing (Kazaa, Morpheus, iMesh, Grokster, eTC)
Peer-to-Peer gnucleuslan GnucleusLAN - LAN-only P2P filesharing
Nhóm ứng dụng Giao thức Mô tả
Peer-to-Peer gnutella Gnutella - P2P filesharing
Peer-to-Peer imesh iMesh - the native protocol of iMesh, a P2P application - http://imesh.com
Peer-to-Peer kugoo KuGoo - a Chinese P2P program - http://www.kugoo.com
Peer-to-Peer napster Napster - P2P filesharing
Peer-to-Peer openft OpenFT - P2P filesharing (implemented in giFT library)
Peer-to-Peer poco POCO and PP365 - Chinese P2P filesharing - http://pp365.com http://poco.cn Peer-to-Peer pplive PPLive - Chinese P2P streaming video - http://pplive.com
Skype is set to retire in May 2025, transitioning users to Microsoft Teams Free starting March 2025 Users can sign in with their Skype credentials, retaining their chats and contacts Teams will offer beloved Skype features like free calling and messaging, along with new functionalities such as meetings and communities Skype Credit will remain usable, and users can export their data if they choose not to migrate However, it is important to note that Skype has limited emergency calling capabilities and is not a substitute for traditional telephone services.
Peer-to-Peer soribada Soribada - A Korean P2P filesharing program/protocol - http://www.soribada.com Peer-to-Peer soulseek Soulseek - P2P filesharing - http://slsknet.org
Peer-to-Peer thecircle The Circle - P2P application - http://thecircle.org.au
Peer-to-Peer xunlei Xunlei - Chinese P2P filesharing - http://xunlei.com
Printing IPp IP printing - a new standard for UNIX printing - RFC 2911
Printing lpd LPD - Line Printer Daemon Protocol (old-style UNIX printing) - RFC 1179 Remote Access ciscovpn Cisco VPN - VPN client software to a Cisco VPN server
Remote Access radmin Famatech Remote Administrator - remote desktop for MS Windows
Remote Access rdp RDP - Remote Desktop Protocol (used in Windows Terminal Services)
Remote Access rlogin rlogin - remote login - RFC 1282
Remote Access ssh SSH - Secure SHell
Remote Access telnet Telnet - Insecure remote login - RFC 854
Remote Access vnc VNC - Virtual Network Computing Also known as RFB - Remote Frame Buffer
Nhóm ứng dụng Giao thức Mô tả
Remote Access x11 X Windows Version 11 - Networked GUI system used in most Unices
Security Protocols ssh SSH - Secure SHell
Security Protocols ssl SSL and TLS - Secure Socket Layer / Transport Layer Security - RFC 2246 Security Protocols validcertssl Valid certificate SSL
Streaming Audio http-rtsp RTSP tunneled within HTTP
Streaming Audio shouTCast ShouTCast and Icecast - streaming audio
Streaming Video http-rtsp RTSP tunneled within HTTP
Streaming Video pplive PPLive - Chinese P2P streaming video - http://pplive.com
Streaming Video rtp RTP - Real-time Transport Protocol - RFC 3550
Streaming Video rtsp RTSP - Real Time Streaming Protocol - http://www.rtsp.org - RFC 2326
Time Synchronization ntp (S)NTP - (Simple) Network Time Protocol - RFCs 1305 and 2030
Time Synchronization tsp TSP - Berkely UNIX Time Synchronization Protocol
Version Control cvs CVS - Concurrent Versions System
Version Control subversion Subversion - a version Control system
Video Games armagetron Armagetron Advanced - open source Tron/snake based multIPlayer game
Video Games battlefield1942 Battlefield 1942 - An EA game
Video Games battlefield2 Battlefield 2 - An EA game
Video Games battlefield2142 Battlefield 2142 - An EA game
Video Games counterstrike-source Counterstrike (using the new "Source" engine) - network game
Video Games dayofdefeat-source Day of Defeat: Source - game (Half-Life 2 mod) - http://www.valvesoftware.com
Video Games doom3 Doom 3 - computer game
Half-Life 2 Deathmatch - popular computer game
Nhóm ứng dụng Giao thức Mô tả
Video Games mohaa Medal of Honor Allied Assault - an Electronic Arts game
Video Games quake-halflife Half Life 1 engine games (HL 1, Quake 2/3/World, Counterstrike 1.6, eTC.) Video Games runesofmagic Runes of Magic - game - http://www.runesofmagic.com
Video Games teamfortress2 Team Fortress 2 - network game - http://www.valvesoftware.com
Video Games worldofwarcraft World of Warcraft - popular network game - http://blizzard.com/
VoIP, or Voice over Internet Protocol, utilizes the Session Initiation Protocol (SIP) for internet telephony, as outlined in RFC 3261 and 3265 Skype offers two primary services: SkypeOut, which allows users to make UDP voice calls from Skype to traditional POTS phones, and Skype-to-Skype, enabling direct UDP voice calls between users of the Skype program For more information, visit [skype.com](http://skype.com).
VoIP teamspeak TeamSpeak - VoIP application - http://goteamspeak.com
VoIP ventrilo Ventrilo - VoIP - http://ventrilo.com
Worm/Virus code_red Code Red - a worm that attacks Microsoft IIS web servers
Worm/Virus nimda Nimda - a worm that attacks Microsoft IIS web servers, and MORE!
Bảng 3 - 10: Danh sách các giao thức mà layer 7 filter hỗ trợ
Layer 7 Filter, mặc dù hỗ trợ số lượng giao thức còn hạn chế so với các sản phẩm thương mại, nhưng nhờ tính chất nguồn mở, người dùng có thể tự phát triển các mẫu định nghĩa giao thức khác Thông tin chi tiết về việc phát triển các giao thức tự định nghĩa này có thể được tìm thấy tại trang web của dự án.
Kết Luận
Sau khi nghiên cứu công cụ TC Linux và Netfilter/Iptables, chúng tôi đưa ra một số kết luận cho việc thiết kế hệ thống Để giới hạn băng thông ở tốc độ xác định, có thể sử dụng HTB với child Class(es) kết hợp với TBF hoặc SFQ làm Subqdisc Để giới hạn băng thông cho một user, service hoặc client, HTB Classes có thể được áp dụng cùng với TC filter hoặc Iptables Để tối đa hóa TCP throughput trên link bất đối xứng, ưu tiên truyền các gói ACK là một giải pháp khả thi Cuối cùng, để dự trữ băng thông cho ứng dụng cụ thể, việc sử dụng HTB Qdisc với children Classes và phân loại bằng TC filter là cần thiết.
Iptables Để ưu tiên các Traffic nhạy cảm về độ trễ trong một Class (ưu tiên theo session) chúng ta có thể dụng PRIO bên trong một HTB Class
Quản lý tận dụng tối đa tài nguyên mạng nhưng vẫn đảm bảo cam kết với khác hàng chúng ta co thể sử dụng HTB cơ chế borrowing
Cho phép phân phối công bằng băng thông không hạn chế thông qua HTB với cơ chế borrowing Đảm bảo rằng từng loại traffic cụ thể sẽ bị giới hạn băng thông khách hàng ngay tại ngõ vào nhờ vào chức năng policer của TC filter với hành động drop.