iptables và Lọc Dữ Liệu Chi Tiết

Tổng quan về Tường lửa

Tường lửa là một tập hợp các thành phần được thiết đặt giữa các mạng khác nhau hoặc các vùng mạng an toàn, giúp tăng cường bảo mật cho mạng nội bộ của tổ chức. Thông qua cơ chế kiểm soát truy cập, tường lửa xác định dịch vụ nội bộ nào cho phép truy cập từ bên ngoài và yêu cầu bên ngoài nào có thể truy cập dịch vụ nội bộ. Nó có thể quyết định gói IP có được truyền vào hoặc ra khỏi mạng nội bộ dựa trên loại truyền mạng.

Tường lửa kiểm tra từng gói dữ liệu đi qua, xác xem có quy tắc lọc nào khớp, so sánh lần lượt theo thứ tự quy tắc cho đến khi thỏa mãn một quy tắc. Sau đó, nó thực hiện hành động tương ứng dựa trên cơ chế kiểm soát. Nếu không quy tắc nào khớp, gói dữ liệu sẽ bị loại bỏ, từ đó bảo vệ an ninh mạng.

Tường lửa có thể được xem như một cặp cơ chế: một cơ chế chặn luồng truyền đi, và một cơ chế cho phép luồng truyền đi. Một số tường lửa tập trung vào việc chặn luồng truyền, trong khi những tường lửa khác lại tập trung vào việc cho phép luồng truyền đi.

Sử dụng tường lửa có thể đạt được các chức năng sau: bảo vệ các dịch vụ dễ bị tấn công; kiểm soát truy cập giữa mạng nội bộ và mạng bên ngoài; quản lý tập trung an ninh mạng nội bộ, giảm chi phí quản lý; tăng cường bảo mật và riêng tư của mạng; ghi nhận trạng thái sử dụng mạng, cung cấp cơ sở cho quy hoạch an ninh và bảo trì mạng.

Phân loại Tường lửa

Công nghệ tường lửa được chia thành nhiều loại dựa trên phương thức và trọng điểm phòng thủ khác nhau, nhưng nói chung có thể chia thành tường lọc gói và máy chủ proxy.

Nguyên lý hoạt động của Tường lửa

1. Nguyên lý hoạt động của Tường lọc gói

2. Nguyên lý hoạt động của Tường lửa dịch vụ proxy

Tường lửa dịch vụ proxy thực hiện chức năng tường lửa ở tầng ứng dụng. Nó cung cấp một phần trạng thái liên quan đến truyền tải, hoàn toàn cung cấp trạng thái liên quan đến ứng dụng và một phần thông tin truyền tải, đồng thời có thể xử lý và quản lý thông tin.

Giới thiệu về iptables

netfilter/iptables (viết tắt là iptables) tạo thành tường lọc gói trên nền tảng Linux. Giống như hầu hết các phần mềm Linux, tường lọc gói này là miễn phí, có thể thay thế các giải pháp tường lửa thương mại đắt tiền, hoàn thành các chức năng như lọc gói, chuyển hướng gói và chuyển đổi địa chỉ mạng (NAT).

Nền tảng iptables

Quy tắc (rules) thực chất là các điều kiện được định nghĩa trước bởi quản trị viên mạng. Quy tắc thường được định nghĩa là "nếu phần đầu gói dữ liệu phù hợp với điều kiện này, hãy xử lý gói dữ liệu như vậy". Quy tắc được lưu trong bảng lọc gói trong không gian kernel, các quy tắc này chỉ định địa chỉ nguồn, địa chỉ đích, giao thức truyền tải (như TCP, UDP, ICMP) và loại dịch vụ (như HTTP, FTP và SMTP). Khi gói dữ liệu khớp với quy tắc, iptables sẽ xử lý các gói dữ liệu này theo phương pháp được định nghĩa trong quy tắc, chẳng hạn như cho phép (accept), từ chối (reject) và loại bỏ (drop). Công việc chính để cấu hình tường lửa là thêm, sửa đổi và xóa các quy tắc này.

Chuỗi (chains) là đường truyền của gói dữ liệu, mỗi chuỗi thực chất là danh sách kiểm tra của nhiều quy tắc, mỗi chuỗi có thể có một hoặc nhiều quy tắc. Khi một gói dữ liệu đến một chuỗi, iptables sẽ bắt đầu kiểm tra từ quy tắc đầu tiên trong chuỗi, xem gói dữ liệu có đáp ứng điều kiện được định nghĩa trong quy tắc không. Nếu đáp ứng, hệ thống sẽ xử lý gói dữ liệu theo phương pháp được định nghĩa trong quy tắc; nếu không, iptables sẽ tiếp tục kiểm tra quy tắc tiếp theo. Nếu gói dữ liệu không khớp với bất kỳ quy tắc nào trong chuỗi, iptables sẽ xử lý gói dữ liệu theo chính sách mặc định được định nghĩa trước cho chuỗi đó.

Bảng (tables) cung cấp các chức năng cụ thể, iptables có sẵn 4 bảng, là bảng filter, bảng nat, bảng mangle và bảng raw, được sử dụng để thực hiện lọc gói, chuyển đổi địa chỉ mạng, sửa đổi gói và xử lý theo dõi dữ liệu.

Quy trình truyền gói dữ liệu của iptables

① Khi một gói dữ liệu vào card mạng, nó đầu tiên vào chuỗi PREROUTING, kernel dựa vào IP đích của gói dữ liệu để quyết định có cần chuyển đi hay không.

② Nếu gói dữ liệu là đến máy bản thân, nó sẽ di chuyển xuống theo hình, đến chuỗi INPUT. Sau khi gói dữ liệu đến chuỗi INPUT, bất kỳ tiến trình nào cũng sẽ nhận được nó. Các chương trình chạy trên máy bản thân có thể gửi gói dữ liệu, các gói dữ liệu này sẽ đi qua chuỗi OUTPUT, sau đó đến chuỗi POSTROUTING để xuất ra.

③ Nếu gói dữ liệu cần chuyển tiếp đi, và kernel cho phép chuyển tiếp, gói dữ liệu sẽ di chuyển sang phải như hình, đi qua chuỗi FORWARD, sau đó đến chuỗi POSTROUTING để xuất ra.

Định dạng lệnh iptables

Định dạng lệnh iptables khá phức tạp, định dạng chung như sau:

iptables [-t bảng] lệnh [chuỗi] [quy tắc] [-j hành động]

bảng——chỉ định tên bảng
lệnh——lệnh thao tác trên chuỗi
chuỗi——tên chuỗi
quy tắc——quy tắc
hành động——cách thức thực hiện hành động

Tùy chọn bảng

Tùy chọn bảng được sử dụng để chỉ định lệnh áp dụng cho bảng iptables nào, iptables có sẵn bao gồm bảng filter, bảng nat, bảng mangle và bảng raw.

Tùy chọn lệnh iptables

LệnhGiải thích
-P hoặc –policy <tên chuỗi>Định nghĩa chính sách mặc định
-L hoặc–list <tên chuỗi>Xem danh sách quy tắc iptables
-A hoặc—append <tên chuỗi>Thêm 1 quy tắc vào cuối danh sách quy tắc
-I hoặc–insert <tên chuỗi>Chèn 1 quy tắc vào vị trí chỉ định
-D hoặc–delete <tên chuỗi>Xóa 1 quy tắc khỏi danh sách quy tắc
-R hoặc–replace <tên chuỗi>Thay thế 1 quy tắc trong danh sách quy tắc
-F hoặc–flush <tên chuỗi>Xóa tất cả quy tắc trong bảng
-Z hoặc–zero <tên chuỗi>Đặt lại bộ đếm gói dữ liệu và bộ đếm lưu lượng về 0

Tùy chọn khớp

Tùy chọnGiải thích
-i hoặc–in-interface <tên giao diện mạng>Chỉ định gói dữ liệu vào từ giao diện mạng nào, như ppp0, eth0 và eth1
-o hoặc–out-interface <tên giao diện mạng>Chỉ định gói dữ liệu ra từ giao diện mạng nào, như ppp0, eth0 và eth1
-p hoặc—proto <loại giao thức>Chỉ định giao thức khớp của gói dữ liệu, như TCP, UDP và ICMP
-s hoặc–source <địa chỉ nguồn hoặc mạng con>Chỉ định địa chỉ nguồn khớp của gói dữ liệu
–sport <cổng nguồn>Chỉ định cổng nguồn khớp của gói dữ liệu, có thể sử dụng định dạng "cổng bắt đầu:cổng kết thúc" để chỉ định một dải cổng
-d hoặc–destination <địa chỉ đích hoặc mạng con>Chỉ định địa chỉ đích khớp của gói dữ liệu
–dport <cổng đích>Chỉ định cổng đích khớp của gói dữ liệu, có thể sử dụng định dạng "cổng bắt đầu:cổng kết thúc" để chỉ định một dải cổng

Tùy chọn hành động

Hành độngGiải thích
ACCEPTChấp nhận gói dữ liệu
DROPLoại bỏ gói dữ liệu
REDIRECTTương tự như DROP, nhưng khác biệt là ngoài việc chặn gói, nó còn trả về thông báo lỗi cho người gửi
SNATChuyển đổi địa chỉ nguồn, tức là thay đổi địa chỉ nguồn của gói dữ liệu
DNATChuyển đổi địa chỉ đích, tức là thay đổi địa chỉ đích của gói dữ liệu
MASQUERADEGiả mạo IP, tức là công nghệ NAT thông thường, MASQUERADE chỉ có thể sử dụng để giả mạo IP cho các kết nối ADSL, tức là IP của máy chủ được ISP cấp phát động; nếu IP của máy chủ là tĩnh cố định, thì cần sử dụng SNAT
LOGChức năng ghi nhật ký, ghi thông tin liên quan đến gói dữ liệu phù hợp quy tắc vào nhật ký, để quản trị viên phân tích và khắc phục sự cố

Cú pháp iptables

1. Định nghĩa chính sách mặc định

Khi gói dữ liệu không khớp với bất kỳ quy tắc nào trong chuỗi, iptables sẽ xử lý gói dữ liệu theo chính sách mặc định được định nghĩa trước cho chuỗi đó. Định dạng định nghĩa chính sách mặc định như sau:

iptables [-t tên_bảng] <-P> <tên_chuỗi> <hành động>

Giải thích tham số:
[-t tên_bảng]: chỉ định chính sách mặc định sẽ được áp dụng cho bảng nào, có thể sử dụng filter, nat và mangle, nếu không chỉ định bảng nào, iptables sẽ mặc định sử dụng bảng filter.
<-P>: định nghĩa chính sách mặc định.
<tên_chuỗi>: chỉ định chính sách mặc định sẽ được áp dụng cho chuỗi nào, có thể sử dụng INPUT, OUTPUT, FORWARD, PREROUTING, OUTPUT và POSTROUTING.
<hành động>: hành động xử lý gói dữ liệu, có thể sử dụng ACCEPT (chấp nhận gói dữ liệu) và DROP (loại bỏ gói dữ liệu).

2. Xem quy tắc iptables

Định dạng lệnh xem quy tắc iptables là:

iptables [-t tên_bảng] <-L> [tên_chuỗi]

Giải thích tham số:
[-t tên_bảng]: chỉ định xem danh sách quy tắc của bảng nào, tên bảng có thể sử dụng filter, nat và mangle, nếu không chỉ định bảng nào, iptables sẽ mặc định xem danh sách quy tắc của bảng filter.
<-L>: xem danh sách quy tắc của bảng và chuỗi chỉ định.
[tên_chuỗi]: chỉ định xem danh sách quy tắc của chuỗi nào trong bảng chỉ định, có thể sử dụng INPUT, OUTPUT, FORWARD, PREROUTING, OUTPUT và POSTROUTING, nếu không chỉ định chuỗi nào, sẽ xem danh sách quy tắc của tất cả chuỗi trong bảng.

3. Thêm, chèn, xóa và thay thế quy tắc

Định dạng quy tắc liên quan là:

iptables [-t tên_bảng] <-A | I | D | R> tên_chuỗi [số_thứ_tự_quy_tắc] [-i | o tên_card_mạng] [-p loại_giao thức] [-s địa chỉ_IP_nguồn | mạng_con_nguồn] [–sport cổng_nguồn] [-d địa chỉ_IP_đích | mạng_con_đích] [–dport cổng_đích] <-j hành động>

Giải thích tham số:
[-t tên_bảng]: định nghĩa chính sách mặc định sẽ được áp dụng cho bảng nào, có thể sử dụng filter, nat và mangle, nếu không chỉ định bảng nào, iptables sẽ mặc định sử dụng bảng filter.
-A: thêm một quy tắc mới, quy tắc này sẽ được thêm vào cuối danh sách quy tắc, tham số này không thể sử dụng số thứ tự quy tắc.
-I: chèn một quy tắc, quy tắc ở vị trí này sẽ bị dịch chuyển xuống dưới, nếu không chỉ định số thứ tự quy tắc, sẽ chèn trước quy tắc đầu tiên.
-D: xóa một quy tắc khỏi danh sách quy tắc, có thể nhập toàn bộ quy tắc, hoặc chỉ định số thứ tự quy tắc để xóa.
-R: thay thế một quy tắc, quy tắc bị thay thế sẽ không thay đổi thứ tự, phải chỉ định số thứ tự quy tắc cần thay thế.
<tên_chuỗi>: chỉ định xem danh sách quy tắc của chuỗi nào trong bảng chỉ định, có thể sử dụng INPUT, OUTPUT, FORWARD, PREROUTING, OUTPUT và POSTROUTING.
[số_thứ_tự_quy_tắc]: số thứ tự quy tắc được sử dụng khi chèn, xóa và thay thế quy tắc, số thứ tự được sắp xếp theo thứ tự của danh sách quy tắc, số thứ tự của quy tắc đầu tiên trong danh sách quy tắc là 1.
[-i | o tên_card_mạng]: i chỉ định gói dữ liệu vào từ card mạng nào, o chỉ định gói dữ liệu ra từ card mạng nào. Tên card mạng có thể sử dụng ppp0, eth0 và eth1.
[-p loại_giao thức]: có thể chỉ định giao thức áp dụng cho quy tắc, bao gồm TCP, UDP và ICMP.
[-s địa chỉ_IP_nguồn | mạng_con_nguồn]: địa chỉ IP hoặc địa chỉ mạng con của máy chủ nguồn.
[–sport cổng_nguồn]: cổng nguồn của IP trong gói dữ liệu.
[-d địa chỉ_IP_đích | mạng_con_đích]: địa chỉ IP hoặc địa chỉ mạng con của máy chủ đích.
[–dport cổng_đích]: cổng đích của IP trong gói dữ liệu.
<-j hành động>: hành động xử lý gói dữ liệu, giải thích chi tiết của từng hành động có thể tham khảo phần giải thích trước đó.

4. Xóa quy tắc và bộ đếm

Khi tạo quy tắc mới, thường cần xóa các quy tắc cũ, cũ để chúng không ảnh hưởng đến quy tắc mới được thiết lập. Nếu quy tắc nhiều, xóa từng một sẽ rất phiền phức, lúc này có thể sử dụng tham số xóa quy tắc do iptables cung cấp để đạt được mục đích xóa nhanh tất cả các quy tắc.

Định dạng định nghĩa tham số là:

iptables [-t tên_bảng] <-F | Z>

Giải thích tham số:
[-t tên_bảng]: chỉ định chính sách mặc định sẽ được áp dụng cho bảng nào, có thể sử dụng filter, nat và mangle, nếu không chỉ định bảng nào, iptables sẽ mặc định sử dụng bảng filter.
-F: xóa tất cả quy tắc trong bảng chỉ định.
-Z: đặt lại bộ đếm gói dữ liệu và bộ đếm lưu lượng trong bảng chỉ định về 0.

Định nghĩa NAT

NAT là viết tắt của Network Address Translation, tên đầy đủ là Chuyển đổi Địa chỉ Mạng, đây là một tiêu chuẩn của IETF, cho phép một tổ chức xuất hiện trên Internet với một địa chỉ. NAT chuyển đổi địa chỉ của mỗi nút mạng thành một địa chỉ IP, và ngược lại. Nó cũng có thể được áp dụng vào công nghệ tường lửa, che giấu các địa chỉ IP riêng lẻ không bị bên ngoài phát hiện, khiến bên ngoài không thể truy cập trực tiếp vào thiết bị mạng nội bộ, đồng thời, nó còn giúp mạng vượt qua giới hạn địa chỉ, sắp xếp hợp lý việc sử dụng địa chỉ Internet công cộng và địa chỉ IP riêng tư trong mạng.

Loại NAT

NAT Tĩnh (Static NAT)

NAT tĩnh là loại thiết lập đơn giản và dễ thực hiện nhất, mỗi máy chủ trong mạng nội bộ được ánh xạ vĩnh viễn thành một địa chỉ hợp lệ trong mạng bên ngoài.

NAT Địa chỉ Động (Pooled NAT)

NAT địa chỉ động định nghĩa một loạt địa chỉ hợp lệ trong mạng bên ngoài, sử dụng phương pháp phân bổ động để ánh xạ vào mạng nội bộ.
NAT địa chỉ động chỉ chuyển đổi địa chỉ IP, nó phân bổ một địa chỉ IP bên ngoài tạm thời cho mỗi địa chỉ IP nội bộ, chủ yếu được áp dụng cho kết nối拨号, đối với các kết nối từ xa thường xuyên cũng có thể sử dụng NAT động.

Chuyển đổi Địa chỉ Cổng Mạng (NAPT)

NAPT là ánh xạ địa chỉ nội bộ vào các cổng khác nhau trên một địa chỉ IP của mạng bên ngoài.
Đây là loại chuyển đổi quen thuộc nhất. NAPT được áp dụng rộng rãi trong thiết bị truy cập, nó có thể che giấu mạng nhỏ và trung型企业 đằng sau một địa chỉ IP hợp lệ. NAPT khác với NAT địa chỉ động, nó ánh xạ kết nối nội bộ vào một địa chỉ IP riêng của mạng bên ngoài, đồng thời thêm một cổng TCP được thiết bị NAT chọn trên địa chỉ này.

Ví dụ iptables

Cấm máy khách truy cập trang web không lành mạnh

Ví dụ 1 Thêm quy tắc iptables cấm người dùng truy cập trang web có tên miền www.example.com.

iptables -I FORWARD -d www.example.com -j REJECT

Ví dụ 2 Thêm quy tắc iptables cấm người dùng truy cập trang web có địa chỉ IP là 10.10.10.10.

iptables -I FORWARD -d 10.10.10.10 -j REJECT

Cấm một số máy khách truy cập Internet

Ví dụ 1 Thêm quy tắc iptables cấm máy khách có địa chỉ IP là 192.168.1.Y truy cập Internet.

iptables -I FORWARD -s 192.168.1.Y -j DROP

Ví dụ 2 Thêm quy tắc iptables cấm tất cả máy khách trong mạng con 192.168.1.0 truy cập Internet.

iptables -I FORWARD -s 192.168.1.0/24 -j DROP

Cấm máy khách truy cập một số dịch vụ

Ví dụ 1 Cấm tất cả máy khách trong mạng con 192.168.1.0 sử dụng giao thức FTP để tải xuống.

iptables -I FORWARD -s 192.168.1.0/24 -p tcp --dport 21 -j DROP

Ví dụ 2 Cấm tất cả máy khách trong mạng con 192.168.1.0 sử dụng giao thức Telnet để kết nối với máy tính từ xa.

iptables -I FORWARD -s 192.168.1.0/24 -p tcp --dport 23 -j DROP

Buộc truy cập trang web chỉ định

Ví dụ Buộc tất cả máy khách truy cập máy chủ Web có địa chỉ 192.168.1.z.

iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.z:80

Cấm sử dụng giao thức ICMP

Ví dụ Cấm máy tính trên Internet sử dụng giao thức ICMP ping đến giao diện ppp0 của máy chủ NAT, nhưng cho phép máy khách trong mạng nội dung sử dụng giao thức ICMP ping đến máy tính.

iptables -I INPUT -i ppp0 -p icmp -j DROP

Phát hành dịch vụ mạng nội bộ

Ví dụ 1 Phát hành dịch vụ Web của máy chủ 10.0.0.4 trong mạng nội bộ, người dùng Internet có thể truy cập dịch vụ Web của máy chủ này thông qua địa chỉ IP của tường lửa.

iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.4:80

Ví dụ 2 Phát hành dịch vụ terminal (sử dụng cổng 3389 của giao thức TCP) của máy chủ 10.0.0.4 trong mạng nội bộ, người dùng Internet có thể truy cập dịch vụ terminal của máy này thông qua địa chỉ IP của tường lửa.

iptables -t nat -I PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 10.0.0.4:3389

Cấu hình cơ bản làm máy chủ

Các dịch vụ: SSH, DNS, WWW, FTP, EMAIL

Cấu hình cơ bản làm cổng mạng

Các dịch vụ: SSH, DNS, WWW, FTP, EMAIL, NAT (SNAT, DNAT), Giới hạn tốc độ

Thẻ: iptables tường lửa lọc gói mạng nat

Đăng vào ngày 21 tháng 6 lúc 01:44