Bảng filter là bảng mặc định. Những bảng khác khi muốn sử dụng cần phải chỉ rõ khi viết lệnh. Những đặc điểm cơ bản của bảng này gồm:
Chuỗi (chain) các phép toán liên quan, từ ba chain xây dựng sẵn (INPUT, OUTPUT, và FORWARD) và những chain do ta tự tạo.
Trang 31
Hướng mục tiêu (target disposition) (ACCEPT hoặc DROP)
Kiểm tra được các trường trong header gói tin, hướng gói tin đi ra hay vào, phân mảnh gói tin.
Luồng các gói tin đi trong netfilter như sau. Gói tin sau khi qua chức năng định tuyến sẽ được quyết định là đi đến chain INPUT hay chain FORWARD. Nếu gói tin được chuyển đến chain INPUT sẽ tiếp tục xử lý và chuyển tiếp đến chain OUTPUT. Ngược lại nếu gói tin được chuyển qua chain FORWARD thì sẽ thì gói tin sẽ chỉ được lọc ở chain này.
Hình 2.1 Luồng gói tin trong bảng filter
Bảng filter có hai loại tính năng mở rộng là target và match. Tính năng match có thể hỗ trợ match những điều kiện sau:
Trạng thái kết nối hiện tại
Danh sách cổng (hỗ trợ match lệ nhiều cổng)
Địa chỉ MAC
Loại địa chỉ (unicast, multicast, broadcast), đoạn địa chỉ IP.
Loại gói tin ICMP
Độ dài của gói tin
Thời gian gói tin đến
Trang 32
Người, nhóm gửi gói tin
2.2.2. Bảng mangle
Bảng mangle có hai loại target. Module MARK hỗ trợ gán giá trị trường mark của gói tin mà iptables lưu. Module TOS hỗ trợ việc gán giá trị cho trường TOS trong header của gói tin IP.
2.2.3. Bảng nat
Bảng nat có những module dành cho ánh xạ địa chỉ nguồn và địa chỉ đích. Ngoài ra còn có module hỗ trợ ánh xạ số hiệu cổng. Cụ thể như sau:
SNAT, NAT địa chỉ nguồn
DNAT, NAT địa chỉ đích
MASQUERADE, một dạng đặt biệt của ánh xạ địa chỉ nguồn cho những kết nối có địa chỉ gán tạm thời, chuyển đổi động (chẳng hạn như kết nối quay số).
REDIRECT, một dạng đặt biệt của ánh xạ địa chỉ đích, như thế có thể chuyển hướng gói tin đến đến trạm cục bộ bất kể địa chỉ đích của gói tin.
Tất cả cờ trong header của gói tin đều có thể được kiểm tra và quyết định lọc gói tin dựa trên kết quả đó. Trạng thái kết nối TCP và những thông tin trao đổi của gói UDP có thể được lưu vết, như vậy giúp cho những gói tin chuyển đi có thể được nhận dạng thay vì một gói tin được gửi đi mà không biết trạng thái. Những gói tin được nhận cũng sẽ được nhận ra là một phần của một kết nối trước đó, như vậy ta có thể cho phép nhanh thay vì phải lặp lại việc kiểm tra danh sách luật cho từng gói tin.
Có thể cho phép lọc gói tin bằng địa chỉ MAC nguồn. Tuy nhiên lọc địa chỉ MAC lại chỉ có giới hạn trong cục bộ bởi địa chỉ MAC không chuyển được khi đi qua router.
Mỗi một thông báo ghi lại log đều có thể kèm với một chuỗi tiền tố do ta tùy chọn. Thông báo có thể gán vào mức ghi log của nhân và có thể định nghĩa trong
Trang 33
/etc/syslog.conf. Điều này cũng có nghĩa ta có thể thực hiện ghi log hoặc ngừng việc ghi log. Thêm vào đó tùy chọn ULOG có thể gửi log đến một trình ẩn ulogd, cho phép nhiều thông tin cần ghi log về gói tin đó.
Gói tin match lệ có thể bị giới hạn bởi một lượng ban đầu, sau đó số lượng gói sẽ bị hạn chế cho phép match tính trên một khoảng thời gian nào đó. Nói cách khác, nếu hệ thống bị làm lụt (flooded) với nhiều gói ping thì có thể 5 gói tin đầu có thể là match lệ, nhưng sau đó gói ping sẽ chỉ match lệ sau 20 phút một lần bất kể có bao nhiêu gói tin echo-request đến.
Với target REJECT có thể chỉ định thông điệp lỗi ICMP nào sẽ được gửi trả về. Mặc định iptables sẽ không gửi trả gì cả (drop).
RETURN cũng là một target đặc biệt khác. Mục đích của nó là trở về từ một chain do ta định nghĩa trước khi đến luật cuối cùng trong chain.
Những gói tin được chuyển đi có thể lọc dựa trên người dùng, nhóm, tiến trình, hoặc ID nhóm tiến trình của chương trình đã tạo ra gói tin.
2.3. Tính năng NAT
Có ba hình thức chính của NAT, bao gồm:
NAT theo kiểu truyền thống, đơn hướng (unidirectional), được sử dụng đối với địa chỉ private:
NAT địa chỉ cơ bản, được dùng để ánh xạ địa chỉ nguồn từ private sang một dải địc chỉ public.
NAPT (Network Address Port Translation) thường sử dụng để ánh xạ địa chỉ nguồn từ private sang duy nhất một địa chỉ public.
NAT song hướng (bidirectional), cho phép thực hiện kết nối cả từ bên trong đi ra hay từ bên ngoài đi vào. Thông thường kiểu ánh xạ này được dùng để ánh sạ giữa 2 không gian địa chỉ IPv4 và IPv6.
NAT hai lần (twice), là một loại ánh xạ địa chỉ song hướng cho cả địa chỉ nguồn và địa chỉ đích. NAT hai lần thường được sử dụng khi địa chỉ nguồn và đích cùng nằm trong một giải địa chỉ nhưng lại thuộc hai mạng khác nhau. Ví dụ, khi hai công ty thực hiện sát nhập thì dải địa chỉ private được sử dụng
Trang 34
của hai công ty là trùng nhau, nhưng sau khi sát nhập, quản trị viên không muốn thay đổi lại địa chỉ hoặc đã hết không gian địa chỉ.
Iptables hỗ trợ ánh xạ địa chỉ nguồn (SNAT) và ánh xạ địa chỉ đích (DNAT). Bảng nat cho phép ta thay đổi địa chỉ nguồn, đích, cổng của gói tin. Bảng nat có ba chain được xây dựng sẵn:
Chain PREROUTING chỉ ra cách thay đổi địa chỉ đích của gói tin đến trước khi gửi gói tin cho chức năng DNAT.
Chain OUTPUT chỉ ra cách thay đổi địa chỉ đích của gói tin xuất phát từ máy Firewall trước khi thực hiện việc định tuyến.
Chain POSTROUTING chỉ ra cách thay đổi địa chỉ nguồn của những gói tin đi đã được định tuyến (SNAT, MASQUERADE).
Hình 2.2 Sơ đồ duyệt gói trong iptables có đi qua NAT
2.4. Tính năng mangle
Bảng mangle cho phép ta đánh dấu, đính kèm vào gói tin một số thông tin mà netfilter sẽ sử dụng. Bảng mangle có 5 chain được xây dựng mặc định:
Chain PREROUTING chỉ ra cách thay đổi gói tin khi gói tin đến một interface nào đó trước khi gói tin được thực hiện những tính năng khác.
Chain INPUT chỉ ra cách thay đổi gói tin sau khi đã đi qua PREROUTING và trước khi gói tin được xử lý.
Trang 35
Chain OUTPUT chỉ ra cách thay đổi gói tin xuất phát từ máy Firewall.
Chain FORWARD chỉ ra cách thay đổi những gói tin được Firewall trung chuyển
Chain POSTROUTING chỉ ra cách thay đổi gói tin khi gói tin sắp đi ra khỏi Firewall.
Bảng này thường ít được sử dụng.
Trang 36
Hình 2.3 Sơ đồ duyệt gói tin trong Netfilter đầy đủ
Trang 37
Lệnh trong iptables cần phải theo một cấu trúc nhất định. Nhiều khi thứ tự của những tùy chọn cũng có thể làm cho câu lệnh trở thành đúng hoặc sai. Các dòng luật trong Firewall được duyệt từ trên xuống vì thế đôi khi một lệnh cho phép gói tin với một điều kiện nào đó đi sau một luật với điều kiện tương tự nhưng lại từ chối thì Firewall sẽ từ chối gói tin đó.
Cấu trúc lênh của iptables bắt đầu từ iptables sau đó là một hoặc nhiều tùy chọn, chain, tập điệu kiện match và cuối cùng là target. Nói một cách rõ hơn, cấu trúc lệnh iptables như sau:
Khi xây dựng Firewall, tùy chọn thường là –A (--append) sẽ thêm một luật mới vào cuối tập luật. Ngoài ra một vài tùy chọn phụ thuộc vào target.
Như ta đã biết, chain có thể là INPUT, OUTPUT, FORWARD của bảng filter hoặc cũng có thể là chain do ta tự định nghĩa. Đồng thời, chain của các bảng nat hay mangle cũng được sử dụng ở đây. Điều kiện match của luật iptables là một tập các điều kiện. Chẳng hạn như một điệu kiện có thể yêu cầu gói tin vừa sử dụng giao thức TCP và có cổng đích là 80. Cuối cùng target là hành động khi gói tin phù match với điều kiện của luât. Target có thể đơn giản là DROP hoặc chuyển gói tin vào một chain do tự định nghĩa, ...
2.5.1. Những lệnh thao tác bảng filter