a) Giới thiệu về Iptables
Iptables là một tường lửa ứng dụng lọc gói dữ liệu rất mạnh, miển phí và có sẵn trên linux. Iptables gồm hai phần là netfilter ở trong nhân linux và Iptables nằm ngoài nhân linux. Iptables chịu trách nhiệm giao tiếp giữa người dùng và Netfilter để đẩy các luật của người dùng vào Netfilter xử lý. Netfilter tiến hành lọc các gói dữ liệu ở mức IP. Netfilter làm việc trực tiếp trong nhân, nhanh và không làm giảm tốc độ của hệ thống.
Hình 2. 14. Mô hình Iptables trên Linux
Iptables do Netfilter organization viết ra để tăng tính bảo mật trên hệ thống Linux. Iptables cung cấp các tính năng sau:
• Tích hợp tốt với nhân kernel của Linux. • Có khả năng phân tích package hiệu quả.
• Lọc package dựa vào MAC và một số cờ hiệu trong TCP Header. • Cung cấp chi tiết các tùy chọn để ghi nhận sụ kiện hệ thống.
• Cung cấp kỹ thuật NAT và có khả năng ngăn chặn một số cơ chế tấn công theo kiểu từ chối dịch vụ.
Cấu trúc của Iptables:
Iptables được chia làm 4 bảng (table) • Bảng filter dùng để lọc gói dữ liệu
• Bảng nat dùng để thao tác với các gói dữ liệu được NAT nguồn hay NAT đích
• Bảng mangle dùng để thay đổi các thông số trong gói IP và bảng conntrack dùng để theo dõi các kết nối.
Mỗi table gồm nhiều mắc xích (chain). Chain gồm nhiều luật (rule) để thao tác với các gói dữ liệu. Rule có thể là ACCEPT (chấp nhận gói dữ liệu), DROP (thả gói), REJECT (loại bỏ gói) hoặc tham chiếu (reference) đến một chain khác.
b) Cơ chế xử lý package trong iptables
Iptables sẽ kiểm tra tất cả các package khi nó đi qua iptables host, quá trình kiểm tra này được thực hiện tuần tự từ entries đầu tiên đến entries cuối cùng.
Iptables tổ chưc phân loại dựa theo cách thức xử lý gói tin. Các gói tin này được xử lý qua các bảng, trong mổi bảng có phân biệt gói tin đi vào (INPUT), đi ra (OUTPUT) hoặc chuyển tiếp (FORWARD). Hay một số cách thức biến đổi địa chỉ nguồn, đích gọi là NAT bao gồm việc biến đổi địa chỉ nguồn thành đích gọi là PREROUTING, và đích thành nguồn gọi là POSTROUTING người ta gọi đó là các chain. Trong mổi chain sẽ có những luật để quyết định xử lý gói tin như thế nào: cho phép (accept), từ chối (reject), bỏ đi (drop).Trong thực thế người ta chủ yếu dùng cơ chế là Filter và NAT.
• Filter: Lọc gói tin vào ra trên server (đóng vai trò một firewall) • NAT: Cho phép ánh xạ một địa chỉ IP thành nhiều địa chỉ
• MANGLE: Biến đổi type of service bits trên header của gói tin TCP. • NAT table: thực thi chức năng NAT (Network Address Translation), bao gồm ba
loại built-in chains sau đây:
• Pre-routing chain: NAT từ ngoài vào trong nội bộ. Quá trình NAT sẽ thực hiện trước khi thực thi cơ chế routing. Điều này thuận lợi cho việc đổi địa chỉ đích để địa chỉ tương thích với bảng định tuyến của firewall, khi cấu hình ta có thể dùng khóa DNAT để mô tả kỹ thuật này.
• Post-routing chain: NAT từ trong ra ngoài. Quá trình NAT sẽ thực hiện sau khi thực hiện cơ chế định tuyến. Quá trình này nhằm thay đổi địa chỉ nguồn của gói tin. Kỹ thuật này được gọi là NAT one-to-one hoặc many-to-one, được gọi là Source NAT hay SNAT.
Hình 2. 15. Quá trình xử lý gói tin trong bảng NAT
• Filter table: chịu trách nhiệm thiết lập bộ lọc packet (packet filtering), có ba loại built-in chains :
- Forward chain: Cho phép packet nguồn chuyển qua firewall. - Input chain: Cho phép những gói tin đi vào từ firewall. - Output chain: Cho phép những gói tin đi ra từ firewall.
• Mangle table: chịu trách nhiệm biến đổi quality of service bits trong TCP header.
Hình 2. 17. Quá trình xử lý gói tin trong bảng Mangle
Cú pháp Iptables
Cú pháp của Iptables có dạng như sau:
iptable – t table –A chain [match][target]
Ví dụ:
Cho phép tất cả các gói tin tcp đi vào cổng 22:
#iptables –A INPUT –p tcp –dport 22 –j ACCEPT
Firewall chấp nhận cho bất kỳ gói tin TCP đi vào từ intafece eth0 đến địa chỉ 192.168.1.1:
#iptables –A INPUT –s 0/0 –i eth0 –d 192.168.1.1 –p TCP –j ACCEPT
Cấm máy tính có địa chỉ ip 192.168.1.2 ping tới server:
# A RH-Firewall-1-INPUT –s 192.168.1.2 –p icmp – icmp-type any –j REJECT
Table: filter, NAT, Mangle (mặc định là filter) - A chain: Đưa luật vào cuối ipables chain - D chain: xóa một luật
- R chain: thay thế luật
- I chain number: chèn một luật mới vào - L chain: xem các luật đã tạo
- F chain: xóa mọi luật hiện có - P chain: đặt chính sách cho chain - N chain: tạo chain mới
- X chain: xóa hết các luật đã tạo - Z: reset bộ đếm packet về 0
Target:
ACCEPT: chấp nhận gói tin đi qua
DROP: Không cho phép gói tin đi qua không có thông báo trả lại host nguồn.
LOG: thông tin của gói tin sẽ được ghi lại bởi syslog hệ thống, iptables tiếp tục xử lý gói tin bằng những rules tiếp theo.
REJECT: Không cho phép gói tin đi qua những có thông báo trả lại cho host nguồn.
QUEUE: chuyển gói tin vào hàng đợi queue.
RETURN: Trả về chain cấp trên hoặc default policy
DNAT: Dùng để viết lại địa chỉ đích khi gói tin đi qua, nó được dùng với PREROUTING đi kèm với –to –source ip_source có dạng như sau: -j DNAT -- to 192.168.1.2.
POSTROUTING đi kèm với –to –destination ip_destination có dạng như sau: -j DNAT --to 192.168.1.2
MASQUERADE: Dùng để thực hiện chuyển gói tin trên một máy khác, có dạng như sau: -j REDIRECT –to –ports 80
Match:
t: chỉ ra tên của bảng mà rule của bạn sẽ dược ghi vào (mặc định FILTER ). j: nhẩy đến một kiểu xử lý (target) tương ứng như đã định nghĩa ở trên nếu điều kiện so sánh thoả mãn.
A: ghi nối tiếp rule vào đuôi một chain.
--syn: xác định gói tin có phải là một yêu cầu tạo một kết nối TCP mới không. - p <protocol>: Chọn những giao thức packet dựa trên protocol.
- s <ip address>: Chọn những packet giựa trên địa chỉ nguồn. - d <ip address>: Chọn những packet giựa trên địa chỉ đích. - i <interface>: Chọn packet được nhận từ interface (input). - o <interface>: Chọn packet được nhận từ interface (output). -- sport [port][:port]: Chọn những packet có port nguồn xác định. -- dport [port][:port]: Chọn những packet có port đích xác định.
Mở rộng cho gói TCP và UDP:
-p tcp --sport [port][port-port]: gói tin TCP kèm theo địa chỉ nguồn -p tcp --dport [port][port-port]: gói tin TCP kèm theo địa chỉ đích -p tcp --syn: Nhận diện TCP kết nối mới
-p udp --sport [port][port-port]: gói tin UDP kèm theo địa chỉ nguồn -p udp --dport [port][port-port]: gói tin UDP kèm theo địa chỉ đích -p icmp -- icmp-type echo-request
-p icmp – icmp-type echo-reply
--icmp-type: xác định loại gói icmp (echo-reply hay echo-request).
-m multiport --sport < port, port >: xác định một loạt các giá trị port nguồn -m multiport --dport < port, port >: xác định một loạt các giá trị port đích.
-m multiport --port < port, port >: xác định một loạt các giá trị port (không phân biệt nguồn hay đích).
-m --state < state >: xác định trạng thái kết nối mà gói tin thể hiện ESTABLISHED: gói tin thuộc một kết nối đã được thiết lập. NEW: gói tin thể hiện một yêu cầu kết nối.
RELATED: gói tin thể hiện một yêu cầu kết nối thứ hai (có liên quan đến kết nối thứ nhất, thường xuất hiện ở những giao thức FPT hay ICMP).
INVALID: thể hiện một gói tin không hợp lệ.
c) Lưu giữ Iptables và thực thi Iptales
- Ta dùng lệnh sau để lưu iptables
#service iptables save
- Cấu trúc file /etc/sysconfig/iptables
Hình 2. 18. Cấu trúc file iptables
- Ta dùng lệnh #service iptable restart để thực thi câu lệnh iptable vừa thực hiện
- Phục hồi lại iptables trong trường hợp bị lỗi như sau:
#iptables-save > firewall-config
d) Một số mẫu scripts phân tích, mô tả cho cú pháp Iptables
- Iptables chấp nhận tất cả các gói tín đi vào từ cổng 80 trên card eth0
- Iptables xóa tất cả các gói tin đến cổng 23 có giao thức TCP trên card mạng eth0
#iptables – A INPUT –i eth0 –p tcp -- dport 23 –j DROP
- Iptables được cấu hình cho phép firewall chấp nhận các gói tin TCP có địa chỉ nguồn là bất kỳ và địa chỉ đích là 192.168.1.1 và có hướng đi vào là cổng interface eth0:
#iptables –A INPUT –s 0/0 –i eth0 –d 192.168.1.1 –p tcp –j ACCEPT
- Chấp nhận các gói tin TCP cho việc forward khi các gói tin có địa chỉ nguồn là bất kì đến từ interface eth0, source port nằm trong dãy 1024-65535 và có địa chỉ đích là 192.168.1.58, ngõ ra là interface eth1 với destination port 80
#iptables –A FORWARD –s 0/0 –i eth0 –d 192.168.1.158 –o eth1 –p tcp – sport 1024:65553 –dport 80 –j ACCEPT
- Chấp nhận cho firewall send ICMP và nhận ICMP
#iptables – A OUTPUT –p icmp --icmp-type echo-request –j ACCEPT #iptables – A INPUT -p icmp –icmp-type echo-reply –j ACCEPT
- Firewall chấp nhận các gói tin TCP sẽ được route khi chúng đi vào interface eth0 với địa chỉ nguồn là bất kỳ và có chiều đi ra là interface eth1 với địa chỉ đích là 192.168.1.58. Source post là dãy 1024-65535 có destination port là 80 và 443
#iptables – A FORWARD –s 0/0 -i eth0 –d 192.168.1.58 –o eth0 –p tcp –sport 1024:65553 –m multiport –dport 80,443 – j ACCEPT
- Iptables đổi IP nguồn cho các gói tin ra card mạng eth0 là 210.40.2.71. Khi nhận được gói tin vào từ internet, iptables sẽ tự động đổi IP đích 210.40.2.71 thành IP đích tương ứng của máy tính trong mạng LAN là 192,168.0.0/24
#Iptables – t nat –A POSTROUTING –o eth0 –j SNAT --to-source 210.40.2.71