Loading...

Iptable là một bộ công cụ được tích hợp trên hệ điều hành Linux để thực hiện chức năng tường lửa theo cơ chế lọc gói (packet filtering). Iptable còn có chức năng chuyển đổi địa chỉ mạng của các gói tin (NAT- Network Address Translation) hoặc thay đổi các thành phần của gói tin (packet mangling).

 

1. Giới thiệu chung về Iptable
Iptable là một bộ công cụ được tích hợp trên hệ điều hành Linux để thực hiện chức năng tường lửa theo cơ chế lọc gói (packet filtering). Iptable còn có chức năng chuyển đổi địa chỉ mạng của các gói tin (NAT- Network Address Translation) hoặc thay đổi các thành phần của gói tin (packet mangling).
Iptable sử dụng cấu trúc bảng để định nghĩa các tập luật và bao gồm các thành phần sau:
-  Các bảng (table): NAT, FILTER, MANGLE.
- Các chain: Là danh sách chứa các luật của Iptable, bao gồm: INPUT (chứa các luật để xử lý gói tin đi từ bên ngoài vào hệ thống); OUTPUT (chứa các luật để xử lý gói tin đi từ hệ thống ra bên ngoài); FORWARD (chứa các luật để xử lý gói tin đi qua hệ thống). Ngoài ra, còn có chain PREROUTING và POSTROUTING được dùng để chứa các luật chuyển đổi địa chỉ (NAT) hoặc thay đổi các thành phần của gói tin (mangle).
- Các luật (rule): xác định các điều kiện để xử lý gói tin như: cho phép qua (ACCEPT), chối bỏ (DROP, REJECT) hoặc chịu các tác động khác. Mỗi luật trong Iptable bao gồm các thành phần sau:
+ Tên của chain chứa luật: (INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING)
+  Các điều kiện xác định các nhận dạng của gói tin (match)
+  Các hành động tương ứng (target)
Ví dụ về một luật của Iptable:
Iptables –A FORWARD –d 192.168.1.1 –p tcp –j DROP
Hình 1 dưới đây là mô hình ví dụ về việc sử dụng Iptable trên Linux làm tường lửa để kiểm soát các truy cập từ mạng bên ngoài (Internet) vào mạng nội bộ cần bảo vệ và ngược lại. Hiệu quả của việc bảo vệ phụ thuộc vào việc thiết lập các tập luật cho Iptable trên hệ thống tường lửa này.



Hình 1: Mô hình sử dụng Iptable làm tường lửa

 

2. Xử lý gói tin IP trên hệ thống Linux có sử dụng Iptable
Việc xử lý gói tin IP trên hệ điều hành Linux thường được tiến hành tại Gateway với hai giao diện mạng tương ứng với địa chỉ IP của mạng nội bộ và mạng bên ngoài. Các thao tác xử lý có thể là định tuyến, lọc gói, thay đổi nội dung gói, can thiệp mật mã. Phần này xem xét mô hình xử lý gói IP trên Gateway Linux có tích hợp Iptable.
Hình 2 dưới đây mô tả các môđun xử lý gói tin IP trên Gateway có cài đặt hệ thống Linux với 2 card mạng.



Hình 2: Các môđun xử lý gói tin IP trên hệ thống Linux có 2 card mạng


Quá trình xử lý như sau:
Trường hợp 1: Gói tin xuất phát từ mạng. Gói tin sẽ được môđun PREROUTING xử lý, cụ thể là:
+ Nếu địa chỉ đích của gói tin trùng với địa chỉ của một trong 2 card mạng của Gateway, gói tin sẽ được chuyển cho môđun INPUT và đưa lên kernel để xử lý cục bộ (FORWARD=NO).
+ Nếu địa chỉ đích của gói tin khác với địa chỉ 2 card mạng của tường lửa (FORWARD=YES), gói tin sẽ được chuyển cho môđun FORWARD rồi sau đó chuyển tới môđun POSTROUTING để định tuyến lại và gửi ra mạng.
Trường hợp 2: Gói tin xuất phát Gateway gửi ra mạng Internet:
Gói tin được định tuyến, sau đó được xử lý bởi các môđun OUTPUT và POSTROUTING rồi gửi ra mạng. Khi Iptable được kích hoạt, sơ đồ xử lý các gói tin đi qua Iptable được mô tả trong Hình 3.



Hình 3: Sơ đồ xử lý các gói tin IP đi qua iptable


+ Trường hợp 1: Gói tin được gửi từ mạng (Nội bộ/Internet).
Gói tin sẽ đi qua chain PREROUTING trong bảng MANGLE (dùng để sửa đổi gói tin),  chain PREROUTING của bảng NAT, sau đó nó sẽ được định tuyến. Nếu là gói tin chuyển tiếp (FORWARD), nó sẽ được chuyển tới chain FORWARD của bảng MANGLE, FILTER, chain POSTROUTING của bảng MANGLE và NAT rồi gửi ra mạng. Nếu gói tin không phải chuyển tiếp, nó sẽ được chuyển vào các chain INPUT của bảng MANGLE và bảng FILTER rồi được đưa lên kernel để xử lý cục bộ.


+ Trường hợp 2: Gói tin đi từ tường lửa Iptable ra mạng.
Trường hợp này, các gói tin sau khi được định tuyến (Routing), sẽ được chuyển qua các chain OUTPUT của các bảng MANGLE, NAT, FILTER rồi qua các chain POSTROUTING của bảng MANGLE và NAT rồi đi ra ngoài.


3. Khả năng nhúng môđun mật mã vào hệ thống tường lửa Iptable
Việc sử dụng Iptable trên Linux làm tường lửa có nhiều ưu điểm về triển khai và chi phí thực hiện. Ngoài ra, Iptable còn cho phép tích hợp các môđun mã hóa nhằm bảo mật các thành phần gói IP khi chúng được chuyển qua hệ thống tường lửa.
Việc bổ sung chức năng mã hoá cho hệ thống tường lửa Iptable trên Linux có thể được thực hiện bằng cách phát triển một môđun mở rộng của tường lửa Iptable để thực hiện chức năng mã hoá các gói tin khi đi qua nó.
Trong sơ đồ ở Hình 3, ta thấy các bảng của Iptable (MANGLE, NAT, FILTER) đều có thể chứa danh sách các luật (chain) để xử lý các gói, tuy nhiên, ta có thể đặt các luật tại các chain phù hợp nhằm nâng cao hiệu suất của hệ thống. Trong trường hợp ta cần xử lý mã hóa/giải mã các gói tin thì vị trí để kết nối (hook) môđun mã hoá cần được tính toán để đảm bảo gói tin có độ trễ là thấp nhất.
Hình 4 mô tả 2 hệ thống tường lửa sử dụng Iptable có chức năng mã hoá để kiểm soát và bảo vệ giao dịch giữa 2 mạng cục bộ bên trong. Trong trường hợp này, các gói tin cần xử lý mã hóa/giải mã phải được kiểm soát bởi các luật trong bảng MANGLE. Vấn đề đặt ra ở đây là ta chọn chain nào trong bảng này (PREROUTING, FORWARD và POSTROUTING) để đặt luật xử lý môđun mã hóa. Chain PREROUTING sẽ là một lựa chọn thích hợp để đảm bảo quá trình can thiệp mật mã sớm nhằm làm giảm độ trễ của gói tin. Như vậy, môđun mã hoá/giải mã cần được kết nối với hệ thống tại cùng vị trí với môđun PREROUTING trong sơ đồ ở hình 2 và tương ứng, với sơ đồ ở hình 3 chức năng mã hoá/giải mã sẽ được thực hiện tại bảng MANGLE, ở trong chain PREROUTING.



Hình 4: Mô hình kiểm soát và bảo mật các gói tin khi sử dụng tường lửa có chức năng bảo vệ


Lúc này, việc thiết lập các luật cho tường lửa sẽ có thêm một target mới (ngoài các target chuẩn là DROPT, REJECT và ACCEPT) là mã hoá/giải mã các gói tin. Giả sử target này được đặt là ENCRYPT (mã hoá gói tin) và DECRYPT ( giải mã gói tin), ta sẽ có dạng luật để lọc và mã hoá các gói tin như sau:
Iptable -t mangle -A PREROUTING -j ENCRYPT —encrypt-with-secret $key
Iptable -t mangle -A PREROUTING -j DECRYPT —decrypt-with-secret $key
trong đó phần sẽ là các điều kiện để lọc gói tin. Trong hai luật trên, nếu các gói tin có điều kiện phù hợp với phần macth (địa chỉ nguồn, đích, giao thức sử dụng, cổng ứng dụng...) thì sẽ được chuyển tới target ENCRYPT hoặc DECRYPT thực hiện chức năng mã hoá hoặc giải mã.
Tuy nhiên, các vấn đề cần quan tâm tiếp theo khi thực hiện mã hoá/giải mã các gói tin là:
+ Chỉ mã hoá/giải mã phần dữ liệu (data) của gói tin mà không mã hoá phần thông tin điều khiển (header), do vậy phải xử lý gói tin để tách riêng phần dữ liệu làm đầu vào cho thuật toán mã hoá hoặc giải mã (có thể thực hiện trên hệ thống Linux kernel 2.4 và 2.6 thông qua cấu trúc sk_buff).
+ Lựa chọn thuật toán có tốc độ cao để giảm độ trễ của hệ thống (sử dụng các thuật toán mã khối).
+ Vấn đề phân phối khoá: có thể xây dựng các ứng dụng phân phối khoá độc lập tại tầng ứng dụng  để phân phối khoá đến từng tường lửa có chức năng mã hoá.
Với giải pháp này, việc xây dựng một môđun mã hoá và tích hợp vào Iptable là hoàn toàn có thể thực hiện được. Tuy nhiên, khả năng ứng dụng, việc đánh giá độ về khía cạnh an toàn hệ thống còn nhiều vấn đề cần phải bàn và phụ thuộc rất nhiều vào sự thiết kế và thực hiện giải pháp.


4. Kết luận:
Xây dựng giải pháp an toàn có tích hợp nhiều chức năng bảo mật trên một hệ thống đã được rất nhiều công ty cung cấp sản phẩm ATTT trên thế giới thực hiện. Việc nghiên cứu cơ chế quản lý, xử lý gói tin trên Tường lửa Iptable của hệ điều hành mã nguồn mở Linux cho phép chúng ta thiết kế và xây dựng sản phẩm Firewall có chức năng bảo mật dùng kỹ thuật mật mã.

 

ThS. Nguyễn Thanh Sơn

 

Ý kiến của bạn

Mã bảo vệ
Làm mới

Hãy đăng quảng cáo trên TuHocAnNinhMang.com

Bài xem nhiều nhất

Tự học lập trình C - Bài 1: Một số khái niệm cơ bản

Khái niệm tên rất quan trọng trong quá trình lập trình, ...

MySQL – Bài 8: Khóa chính (primary key) và khóa ngoại (foreign key) của table

Với ràng buộc này thì, việc người sử dụng vô tình hay cố ...

Tự học lập trình C - Bài 10: Mảng một chiều

Mảng 1 chiều là tập hợp các phần tử có cùng kiểu dữ ...

Tự học lập trình JAVA – Bài 1: Bước đầu với Java

Một chương trình java có thể được định nghĩa như là một ...

Tự học lập trình C - Bài 2: Cấu trúc chương trình C

Một chương trình bao gồm một hoặc nhiều hàm, mỗi hàm ...

Hướng dẫn in ấn trong Word 2007/2010 – Step by Step

[Tự học] - Tiêu đề đầu trang (Header)/tiêu đề cuối ...

Tự học lập trình Assembly - Bài 1: Bước đầu với lập trình Assembly trên vi xử lý Intel 8086/8088

Như đã biết, lệnh ngôn ngữ máy là một dãy các con số 0, ...

Hãy đăng quảng cáo trên TuHocAnNinhMang.com

Về đầu trang Hỏi - Đáp