Bảo mật máy chủ là một trong những ưu tiên hàng đầu của bất kỳ quản trị viên hệ thống nào. Tuy nhiên, giữa vô vàn công cụ và giải pháp, có một cái tên quen thuộc và mạnh mẽ mà bạn không thể bỏ qua: iptables. Vậy, iptables là gì và làm thế nào để sử dụng công cụ này một cách hiệu quả? Bài viết này sẽ giúp bạn hiểu rõ iptables là gì, các thành phần cốt lõi và hướng dẫn chi tiết cách cấu hình iptables để bảo vệ máy chủ của bạn khỏi các mối đe dọa.
iptables là gì?
iptables là một công cụ quản lý tường lửa (firewall) mặc định trên các hệ điều hành Linux. Về bản chất, iptables hoạt động như một “người gác cổng” thông minh. Mỗi khi có một gói dữ liệu (packet) muốn ra hoặc vào máy chủ, iptables sẽ kiểm tra gói dữ liệu đó dựa trên một danh sách các quy tắc (rules) đã được định nghĩa sẵn.

iptables là gì
Nếu gói dữ liệu phù hợp với một quy tắc nào đó, iptables sẽ thực hiện hành động tương ứng, chẳng hạn như cho phép (ACCEPT), từ chối (DROP), hoặc chuyển hướng (REJECT). iptables giúp bạn kiểm soát hoàn toàn lưu lượng truy cập ra vào hệ thống, từ đó bảo vệ máy chủ khỏi các cuộc tấn công không mong muốn như dò quét cổng (port scanning), tấn công từ chối dịch vụ (DDoS) hay các truy cập trái phép.
Nếu bạn đang thắc mắc cấu hình iptables như thế nào, thì bài viết này chính là câu trả lời.
Các thành phần cơ bản trong iptables
Để hiểu cách iptables hoạt động, bạn cần nắm vững ba thành phần cốt lõi của nó: Tables, Chains và Targets.

Các thành phần cơ bản trong iptables
Tables trong iptables
Tables là nơi chứa các chuỗi (chains) và các quy tắc liên quan. Mỗi table có một mục đích sử dụng riêng biệt.
- Filter Table: Đây là bảng mặc định và được dùng phổ biến nhất. Mục đích của nó là lọc gói tin, quyết định xem gói tin đó có được cho phép đi tiếp hay không. Các hành động phổ biến là ACCEPT, DROP, REJECT.
- NAT (Network Address Translation) Table: Dùng để thay đổi địa chỉ nguồn hoặc đích của gói tin. NAT table thường được dùng để chia sẻ kết nối Internet hoặc chuyển hướng lưu lượng truy cập (port forwarding).
- Mangle Table: Dùng để thay đổi các gói tin IP, ví dụ như thay đổi trường TTL (Time to Live) hoặc đánh dấu gói tin để xử lý bởi các công cụ khác.
- Raw Table: Dùng để xử lý các gói tin trước khi chúng được các table khác xử lý.
- Security Table: Một vài kernel có thể hỗ trợ thêm Security Table, được dùng bởi SELinux để thiết lập các chính sách bảo mật.
Chains trong iptables
Chains là các chuỗi quy tắc mà gói tin sẽ đi qua. Một table có thể chứa nhiều chains. Dưới đây là ba chains quan trọng nhất:
- INPUT Chain: Xử lý các gói tin đến máy chủ của bạn. Các quy tắc trong chain này quyết định xem máy chủ có chấp nhận gói tin đó hay không.
- OUTPUT Chain: Xử lý các gói tin đi ra từ máy chủ của bạn.
- FORWARD Chain: Xử lý các gói tin đi qua máy chủ của bạn nhưng không dành cho máy chủ (ví dụ: khi máy chủ đóng vai trò là router).
- PREROUTING Chain: Tồn tại trong Nat Table, Mangle Table và Raw Table, các rules trong chain sẽ được thực thi ngay khi gói tin vào đến giao diện mạng (Network Interface).
- POSTROUTING Chain: Chỉ tồn tại ở Manle Table và Nat Table với các rules được thực thi khi gói tin rời giao diện mạng.
Target trong iptables
Khi một gói tin khớp với một quy tắc, iptables sẽ thực hiện một “target” (hành động).
- ACCEPT: Cho phép gói tin đi qua.
- DROP: Hủy gói tin một cách im lặng. Người gửi sẽ không nhận được bất kỳ thông báo lỗi nào.
- REJECT: Hủy gói tin và gửi lại thông báo lỗi cho người gửi.
- LOG: Ghi lại thông tin về gói tin vào log hệ thống.
- RETURN: Trả gói tin về chain trước đó.
Cách iptables hoạt động
Nguyên lý hoạt động của iptables dựa trên cơ chế packet filtering (lọc gói tin) có thứ tự. Khi một gói tin đi vào hoặc ra khỏi hệ thống, nó sẽ được kiểm tra lần lượt theo các rules trong các chains đã được định nghĩa.

Cách iptables hoạt động
Dưới đây là cơ chế xử lý một gói tin theo chain:
- Gói tin đến (ví dụ: từ internet) sẽ đi qua INPUT Chain.
- iptables sẽ so sánh gói tin với quy tắc đầu tiên trong INPUT Chain.
- Nếu gói tin khớp với quy tắc đó, iptables sẽ thực hiện hành động (target) tương ứng và không kiểm tra các quy tắc còn lại.
- Nếu không khớp, nó sẽ chuyển sang quy tắc tiếp theo, và cứ thế cho đến khi tìm thấy một quy tắc phù hợp.
- Nếu gói tin đi qua tất cả các quy tắc mà không khớp với bất kỳ quy tắc nào, iptables sẽ áp dụng chính sách mặc định của chain đó (thường là ACCEPT hoặc DROP).
Việc hiểu iptables hoạt động như thế nào là rất quan trọng để bạn có thể xây dựng một bộ quy tắc hiệu quả, đảm bảo an toàn cho máy chủ mà không gây gián đoạn các dịch vụ.
Lý do bạn nên sử dụng iptables
Có nhiều lý do khiến iptables trở thành công cụ bảo mật hàng đầu cho các hệ thống Linux:
- Tích hợp sẵn: iptables là một phần mặc định của kernel Linux, không cần cài đặt thêm.
- Kiểm soát chi tiết: Bạn có thể tạo các quy tắc cực kỳ chi tiết dựa trên địa chỉ IP, cổng, giao thức (TCP/UDP), hay thậm chí là trạng thái kết nối.
- Hiệu suất cao: iptables xử lý các quy tắc ở cấp độ kernel, mang lại hiệu suất cao, ít tiêu tốn tài nguyên hệ thống.
- Tính linh hoạt: iptables cho phép bạn tùy chỉnh mọi thứ theo nhu cầu cụ thể, từ bảo vệ máy chủ web, email, đến các ứng dụng phức tạp.
Người dùng có thể dùng lệnh sau để xem các rules hiện có trong IPtables:
IPtables -L –v TARGET PROT OPT IN OUT SOURCE DESTINATION ACCEPT all -- lo any anywhere anywhere ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ACCEPT tcp -- any any anywhere anywhere tcp dpt:http ACCEPT tcp -- any any anywhere anywhere tcp dpt:https DROP all -- any any anywhere anywhere
Giải mã bảng quy tắc iptables
Khi bạn xem bảng quy tắc của iptables, bạn sẽ thấy một loạt các cột và hàng. Mỗi cột mang một ý nghĩa riêng, giúp bạn hiểu cách hệ thống đang xử lý các gói tin.
- TARGET (Hành động): Đây là mệnh lệnh cuối cùng mà iptables sẽ thực thi.
- PROT (Giao thức): Giao thức mà quy tắc này áp dụng. Bạn có thể chọn all (tất cả), tcp (như SSH, FTP), hoặc udp.
- IN (Đầu vào): Chỉ ra gói tin đi vào từ đâu. Có thể là lo (kết nối nội bộ), eth0 (cổng mạng vật lý), hoặc any (mọi cổng).
- OUT (Đầu ra): Tương tự như IN, cột này cho biết gói tin đi ra qua cổng nào.
- DESTINATION (Điểm đến): Địa chỉ mà gói tin đang hướng tới.
Các ví dụ thực tế về quy tắc iptables
Dưới đây là một số ví dụ phổ biến được viết lại để bạn dễ hình dung hơn:
- ACCEPT all — lo any anywhere anywhere: Quy tắc này là để chấp nhận tất cả các gói tin đến từ giao diện “loopback” (lo). Đây là một giao diện ảo chỉ dùng cho các kết nối nội bộ, ví dụ như truy cập máy chủ của chính bạn qua IP 127.0.0.1. Nhờ vậy, các ứng dụng trên máy chủ có thể giao tiếp với nhau.
- ACCEPT all — any any anywhere anywhere ctstate RELATED,ESTABLISHED: Quy tắc này đảm bảo các kết nối đã thiết lập từ trước vẫn được duy trì. Điều này có nghĩa là khi bạn đang kết nối SSH với máy chủ để thay đổi tường lửa, bạn sẽ không bị đẩy ra ngoài. Quy tắc này chấp nhận tất cả các gói tin thuộc một kết nối hiện tại hoặc liên quan đến nó.
- ACCEPT tcp — any any anywhere anywhere tcp dpt:ssh: Quy tắc này cho phép mọi kết nối sử dụng giao thức TCP đi vào máy chủ của bạn qua cổng SSH (mặc định là cổng 22). Dù gói tin đến từ bất kỳ đâu hay từ IP nào, nó cũng sẽ được chấp nhận. Nếu bạn dùng cổng khác cho SSH, tên ssh sẽ được thay bằng số cổng tương ứng.
- ACCEPT tcp — any any anywhere anywhere tcp dpt:http: Quy tắc này mở cửa cho các kết nối web thông thường. Nó cho phép truy cập vào máy chủ qua cổng 80, hay còn gọi là cổng HTTP.
- ACCEPT tcp — any any anywhere anywhere tcp dpt:https: Tương tự, quy tắc này cho phép các kết nối web an toàn qua cổng 443, hay còn gọi là cổng HTTPS.
- DROP all — any any anywhere anywhere: Đây là một quy tắc rất quan trọng, thường nằm cuối cùng. Nó hoạt động như một “cánh cửa đóng”. Nếu một gói tin không khớp với bất kỳ quy tắc chấp nhận nào ở trên, quy tắc này sẽ loại bỏ nó.
3 loại tùy chọn phổ biến của iptables
Các tùy chọn để chỉ định thông số iptables
| Tùy chọn | Mô tả |
|---|---|
| -p, –protocol | Chỉ định loại giao thức dữ liệu |
| -s, –source | Xác định địa chỉ IP nguồn của package tin |
| -d, –destination | Xác định địa chỉ IP đích cho package tin |
| –sport | Chỉ định cổng nguồn (port number) |
| –dport | Xác định cổng đích (port number) |
| -i, –in-interface | Xác định interface đầu vào gói tin sử dụng |
| -o, –out-interface | Xác định interface đầu ra |
| -t | Chỉ định tên table |
| -j, –jump | Chỉ định mục tiêu xử lý sau khi package tin khớp với quy tắc |
Các tùy chọn để thao tác với chain trong iptables
| Tùy chọn | Mô tả |
|---|---|
| -A, –append | Thêm một rule vào cuối chain |
| -L, –list | Liệt kê các rule có trong chain |
| -I, –insert | Chèn một rule vào vị trí cụ thể trong chain |
| -D, –delete | Xóa một rule khỏi chain |
| -R, –replace | Thay thế một rule trong chain |
| -N, –new-chain | Tạo một chain mới |
| -X, –delete-chain | Xóa một chain |
| -P, –policy | Thiết lập chính sách mặc định cho chain |
| -E, –rename-chain | Đổi tên một chain |
Các tùy chọn để thao tác với rule trong iptables
| Tùy chọn | Mô tả |
|---|---|
| -C, –check | Kiểm tra package tin có khớp với rule hay không |
| -X, –delete-chain | Xóa một user-defined chain |
| -F, –flush | Xóa tất cả các rule trong chain |
| -Z, –zero | Reset bộ đếm cho tất cả các rule |
| -L, –list | Liệt kê các rule trong chain |
| -N, –new | Tạo ra một user-defined chain mới |
Một số lệnh cơ bản trong iptables
- Tạo một rule mới: Để chấp nhận tất cả các kết nối đến trên cổng 80 (HTTP), bạn dùng lệnh: iptables -A INPUT -p tcp –dport 80 -j ACCEPT
- Bổ sung một rule mới: Để chèn quy tắc vào đầu chuỗi INPUT (đảm bảo nó được ưu tiên xử lý), bạn dùng lệnh -I: iptables -I INPUT -p tcp –dport 80 -j ACCEPT
- Xóa 1 rule: Để xóa một quy tắc cụ thể, bạn có thể dùng lệnh -D và chỉ định chính xác quy tắc đó: iptables -D INPUT -p tcp –dport 80 -j ACCEPT

Một số lệnh cơ bản iptables
Hướng dẫn sử dụng iptables để mở cổng VPS
Dưới đây, Thuê Máy Chủ Giá Rẻ sẽ hướng dẫn sử dụng iptables để mở cổng VPS một cách dễ hiểu nhất:
Mở Cổng SSH
Để mở cổng SSH 22 và cho phép truy cập vào VPS từ bất kỳ đâu, bạn dùng lệnh sau:
iptables -I INPUT -p tcp -m tcp --dport 22 -j ACCEPT
Nếu bạn đã thay đổi cổng SSH sang một số khác, hãy điều chỉnh lại số cổng trong lệnh trên.
Để chỉ cho phép kết nối SSH từ một địa chỉ IP cụ thể, bạn có thể sử dụng lệnh này:
iptables -I INPUT -p tcp -s xxx.xxx.xxx.xxx -m tcp --dport 22 -j ACCEPT
Trong lệnh này, iptables sẽ thêm một quy tắc chỉ cho phép kết nối từ địa chỉ IP bạn chỉ định (được đại diện bởi xxx.xxx.xxx.xxx).
Mở Cổng Web Server
Để mở cổng cho Web Server, bạn thực hiện như sau:
Để mở cổng HTTP (cổng 80) cho mọi nguồn truy cập, hãy sử dụng lệnh sau:
iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
Nếu bạn muốn chỉ cho phép kết nối từ một địa chỉ IP cụ thể, bạn có thể sử dụng lệnh này:
iptables -I INPUT -p tcp -s xxx.xxx.xxx.xxx -m tcp --dport 80 -j ACCEPT
Trong lệnh này, iptables sẽ thêm một quy tắc chỉ cho phép kết nối đến Web Server từ địa chỉ IP bạn chỉ định.
Mở Cổng Mail
Để mở các cổng cho dịch vụ Mail, bạn thực hiện theo các bước sau:
Để cho phép người dùng sử dụng giao thức SMTP qua các cổng mặc định là 25 và 465, bạn sử dụng các lệnh:
iptables -I INPUT -p tcp -m tcp --dport 25 -j ACCEPT iptables -I INPUT -p tcp -m tcp --dport 465 -j ACCEPT
iptables sẽ hiển thị các giao thức SMTP và URD:
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp ACCEPT tcp -- anywhere anywhere tcp dpt:urd
Để mở các cổng POP3 (cổng mặc định 110 và 995), bạn sử dụng lệnh:
iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
Công cụ này sẽ hiển thị các giao thức POP3 và POP3S:
ACCEPT tcp -- anywhere anywhere tcp dpt:pop3 ACCEPT tcp -- anywhere anywhere tcp dpt:pop3s
Để mở cổng cho giao thức IMAP (cổng mặc định 143 và 993), bạn sử dụng các lệnh:
iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
Công cụ này sẽ hiển thị các giao thức IMAP và IMAPS:
ACCEPT tcp -- anywhere anywhere tcp dpt:imap ACCEPT tcp -- anywhere anywhere tcp dpt:imaps
Chặn địa chỉ IP truy cập
Để chặn một địa chỉ IP cụ thể, bạn sử dụng lệnh:
iptables -A INPUT -s IP_ADDRESS -j DROP
Nếu bạn muốn chặn một địa chỉ IP truy cập vào một cổng nhất định, bạn áp dụng lệnh:
iptables -A INPUT -p tcp -s IP_ADDRESS --dport PORT -j DROP
Thiết lập quy tắc mặc định
Sau khi đã thiết lập tất cả các quy tắc cần thiết, bạn cần chặn toàn bộ các kết nối không được phép và cho phép toàn bộ các kết nối đi ra khỏi VPS:
iptables -P OUTPUT ACCEPT iptables -P INPUT DROP
Kiểm tra và lưu các quy tắc
Để kiểm tra lại các quy tắc sau khi thiết lập, bạn sử dụng lệnh:
service iptables status iptables -L -n
Tùy chọn -n sẽ hiển thị địa chỉ IP, ví dụ, nếu bạn chặn một địa chỉ cụ thể, iptables sẽ hiển thị là xxx.xxx.xxx.xxx với tham số này.
Cuối cùng, bạn cần lưu lại các cài đặt tường lửa iptables, nếu không sẽ mất khi khởi động lại hệ thống.
Trong CentOS, cấu hình được lưu tại /etc/sysconfig/iptables.
Để lưu các quy tắc tường lửa, bạn sử dụng lệnh:
iptables-save | sudo tee /etc/sysconfig/iptables
Hoặc: service iptables save
Sau đó, các quy tắc tường lửa sẽ được lưu vào /etc/sysconfig/iptables.
Câu hỏi thường gặp về iptables
iptables có còn được dùng không?
Mặc dù các công cụ mới hơn như nftables đã xuất hiện, iptables vẫn được sử dụng rất rộng rãi, đặc biệt trên các phiên bản Linux cũ hơn và nhiều tài liệu hướng dẫn vẫn dựa trên iptables.
Hơn nữa, nhiều công cụ tường lửa mới chỉ là giao diện đồ họa hoặc giao diện dòng lệnh đơn giản hơn, nhưng nền tảng cốt lõi vẫn là iptables. Do đó, việc hiểu iptables là gì vẫn vô cùng quan trọng.
iptables và nftables khác nhau thế nào?
nftables là thế hệ tiếp theo của iptables. nftables có cú pháp đơn giản hơn, linh hoạt hơn và hiệu suất cao hơn. nftables có thể thay thế tất cả các công cụ cũ như iptables, ip6tables và arptables bằng một bộ cú pháp duy nhất.
Tuy nhiên, nftables mới được sử dụng phổ biến trên các bản phân phối Linux mới nhất, trong khi iptables đã tồn tại hàng chục năm và có một cộng đồng hỗ trợ khổng lồ.
iptables có thay thế được firewall cứng không?
Không hoàn toàn. iptables là một tường lửa phần mềm, bảo vệ máy chủ ở cấp độ hệ điều hành. Firewall cứng là một thiết bị vật lý, bảo vệ toàn bộ mạng lưới từ bên ngoài. iptables rất hiệu quả trong việc lọc lưu lượng truy cập đến máy chủ cụ thể, nhưng không thể thay thế tường lửa cứng trong việc bảo vệ toàn bộ mạng doanh nghiệp.
Kết luận
iptables là một công cụ mạnh mẽ và linh hoạt để quản lý tường lửa trên Linux. Mặc dù có cú pháp phức tạp, nhưng việc nắm vững iptables là gì và cách sử dụng các thành phần cơ bản sẽ giúp bạn xây dựng một lớp phòng thủ vững chắc cho máy chủ của mình.
Nếu bạn đang tìm kiếm một giải pháp hosting hiệu quả và an toàn, hãy liên hệ Thuemaychugiare. Đội ngũ chuyên gia của chúng tôi có kiến thức sâu rộng về iptables và các công nghệ bảo mật khác, sẵn sàng hỗ trợ bạn bảo vệ hệ thống một cách chủ động và hiệu quả.

Để lại một bình luận