Iptables là công cụ cho phép quản lý các quy tắc kiểm soát lưu lượng mạng đi vào, đi ra hoặc đi qua hệ thống. Để hiểu rõ hơn cách thức hoạt động cũng như cách cài đặt và thiết lập Iptables, hãy cùng mình tìm hiểu thêm trong bài viết dưới đây.
Những điểm chính
- Định nghĩa về Iptables: là công cụ tường lửa trên Linux giúp kiểm soát và bảo mật lưu lượng mạng.
- Lý do nên dùng iptables: Vì giúp tăng cường bảo mật, ngăn chặn tấn công mạng và kiểm soát lưu lượng hiệu quả.
- Cấu trúc của iptables: Là tổ chức bởi các thành phần chính tables, chains, và targets.
- Các quy tắc trong iptables: Hệ thống quy tắc quản lý lưu lượng mạng thông qua các hành động chấp nhận, từ chối, hoặc ngăn chặn.
- Tùy chọn phổ biến của iptables: Các tùy chọn quan trọng để cấu hình thông số, quản lý chains và rules trong iptables.
- Lệnh cơ bản của iptables: Tạo, bổ sung, và xóa quy tắc tường lửa một cách linh hoạt.
- Hướng dẫn mở port VPS bằng iptables: Bạn sẽ được hướng dẫn cách chặn IP để tăng cường bảo mật VPS.
- Hướng dẫn cài đặt và thiết lập iptables: Được hướng dẫn các bước cơ bản để cài đặt và cấu hình iptables trên hệ thống Linux.
- Biết được Vietnix – Nhà cung cấp dịch vụ VPS an toàn và hiệu năng vượt trội.
Iptables là gì?
Lệnh iptables là công cụ tường lửa (Firewall) miễn phí trên Linux, cho phép người dùng thiết lập và quản lý các quy tắc riêng về tường lửa để kiểm soát quyền truy cập và tăng độ bảo mật. Khi vận hành máy chủ, tường lửa đóng vai trò quan trọng trong việc ngăn chặn các truy cập không mong muốn. Trên các bản phân phối Linux như Ubuntu, Fedora… bạn có thể sử dụng công cụ tường lửa iptables tích hợp sẵn để bảo vệ hệ thống.

Tổng quan về tường lửa
Tường lửa (Firewall) là một hệ thống bảo mật mạng được thiết kế để theo dõi và kiểm soát lưu lượng mạng đi vào và đi ra khỏi một mạng hoặc một thiết bị. Iptables hoạt động như một bức tường ngăn cách giữa một mạng nội bộ an toàn và một mạng bên ngoài không đáng tin cậy (như Internet). Các chức năng chính của tường lửa:
- Ghi nhật ký và báo cáo (Logging and Reporting).
- Lọc gói tin (Packet Filtering).
- Kiểm soát truy cập (Access Control).
- Ngăn chặn xâm nhập (Intrusion Prevention).

Lý do bạn nên sử dụng iptables
Tường lửa và iptables là công cụ quen thuộc, nhưng nhiều người chọn firewalld hoặc ufw vì sự đơn giản. Dù dễ dùng, chúng hạn chế tính linh hoạt và không khai thác hết sức mạnh của iptables. Firewalld và ufw chỉ hỗ trợ chặn hoặc cho phép packet, trong khi iptables có thể làm nhiều hơn như NAT, ghi log, forward,… Dưới đây là một số lý do cụ thể:
- Đây là một công cụ đầy đủ tính năng cung cấp cho bạn mọi thứ bạn cần
- Bạn có thể xử lý các packet linh hoạt hơn.
- Bạn sẽ cảm thấy mình giống như một hacker khi tự viết được những rule tuyệt vời chống lại các cuộc tấn công.

Tables
Các bảng (tables) là nơi lưu trữ các quy tắc tường lửa để quản lý và xử lý các package tin. Dưới đây là các bảng chính trong iptables:
- Filter table: Thường được dùng để lọc và quyết định một package tin có được chấp nhận (Accept), bị từ chối (Reject) hoặc bị loại bỏ (Drop) hay không. Filter table bao gồm các chuỗi chính: input (xử lý các package tin đi vào hệ thống), output (xử lý các package tin được tạo ra và gửi đi từ hệ thống) và forward (xử lý các package tin được định tuyến qua hệ thống).
- NAT table: Được dùng để thực hiện các hoạt động liên quan đến NAT (Network Address Translation), bao gồm thay đổi địa chỉ IP nguồn hoặc đích của package tin khi đi qua hệ thống. NAT table bao gồm các chuỗi chính: prerouting (dùng để thay đổi địa chỉ IP đích), postrouting (dùng để thay đổi địa chỉ IP nguồn) và output.
- Mangle Table: Được sử dụng để sửa đổi manipulate trong tiêu đề (header) của package tin như thay đổi giá trị TTL (Time to Live), MTU, Type of Service. Mangle table bao gồm các chuỗi chính: prerouting, input, forward, output và postrouting.
- Raw table: Thường được dùng để đánh dấu các package tin cho mục đích theo dõi (tracking) và có thể bỏ qua các thao tác NAT hoặc kiểm tra trạng thái kết nối. Raw table bao gồm các chuỗi chính: prerouting, input.

Chains
Các chuỗi (chains) là tập hợp các quy tắc được áp dụng tuần tự cho các package tin khi đi qua tường lửa. Iptables thường được chia thành hai loại chuỗi mặc định và chuỗi người dùng tự tạo. Dưới đây là các chuỗi mặc định thường gặp trong các bảng:
- Input: Được dùng để xử lý các package tin đi vào hệ thống (nghĩa là các package tin có đích đến là chính hệ thống đó). Thường được áp dụng trong các bảng: filter, mangle, security.
- Output: Được sử dụng để xử lý các package tin được tạo ra từ hệ thống và chuẩn bị để gửi đi. Thường được áp dụng trong các bảng: filter, nat, mangle, raw, security.
- Forward: Dùng để xử lý các package tin định tuyến qua hệ thống từ một giao diện mạng này sang một giao diện mạng khác. Chuỗi này thường được sử dụng trên các router hoặc gateway và áp dụng trong các bảng: filter, mangle, security.
- Prerouting: Thường được dùng để Xử lý các package tin ngay khi vừa đến hệ thống và trước khi được định tuyến. Prerouting thường được sử dụng để thay đổi địa chỉ IP đích (Destination NAT – DNAT) và được áp dụng trong các bảng: nat, mangle, raw.
- Postrouting: Sử dụng để xử lý các package tin ngay trước khi rời khỏi hệ thống, sau khi đã được định tuyến. Postrouting thường được sử dụng để thay đổi địa chỉ IP nguồn (Source NAT – SNAT) và áp dụng cho các bảng: nat, mangle.

Targets
Targets (mục tiêu) xác định các hành động sẽ được thực hiện khi một package tin khớp với một quy tắc cụ thể trong chuỗi (chain). Dưới đây là các target phổ biến trong iptables:
- Accept: Cho phép packe tin đi vào hệ thống mà không có bất kỳ sự can thiệp nào khác.
- Drop: Loại bỏ các package tin mà không thông báo cho nguồn gửi và sẽ không tiếp tục xử lý trong các chuỗi tiếp theo.
- Reject: Từ chối package tin và sẽ phản hồi lại nguồn gửi về việc package tin đã bị từ chối.
- Log: Ghi lại thông tin chi tiết về package tin trong nhật ký hệ thống (syslog) trước khi tiếp tục xử lý package tin trong chuỗi.

Các quy tắc trong iptables
Để xem các quy tắc trong iptables, bạn nhập câu lệnh sau:
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
Trong đó:
- Target: Hành động được thực thi.
- – PROT: viết tắt của Protocol là giao thức được sử dụng để thực thi quy tắc với 3 chọn lựa all, TCP hay UDP.
- – IN: Chi ra quy tắc sẽ được áp dụng cho các package tin đi vào từ interface nào.
- – OUT: Quy tắc sẽ được áp dụng cho các package tin đi ra từ interface nào.
- – DESTINATION: Là địa chỉ của lượt truy cập áp dụng quy tắc.
- – ACCEPT all – – lo any anywhere anywhere: Chấp nhận tất cả các package tin từ interface lo (đây là một interface ảo của nội bộ).
- – ACCEPT all – – any any anywhere anywhere ctstate RELATED,ESTABLISHED: Chấp nhận tất cả các package tin đã kết nối.
- – ACCEPT tcp – – any any anywhere anywhere tcp dpt:ssh: Chấp nhận tất cả các package tin giao thức SSH đến từ bất kỳ giao diện mạng nào. Hệ thống mặc định hiển thị dpt:ssh, tức là cổng SSH 22. Nếu muốn thay đổi sang cổng khác, nhập giá trị cổng đầu vào.
- – ACCEPT tcp – – any any anywhere anywhere tcp dpt:http: Mặc định hiển thị là http, tức cho phép kết nối đến cổng 80.
- – ACCEPT tcp – – any any anywhere anywhere tcp dpt:https: Mặc định hiển thị là https, tức cho phép kết nối đến cổng 443.
- – DROP all – – any any anywhere anywhere: Toàn bộ những package tin không khớp với các quy tắc trên sẽ bị loại bỏ.
3 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 |
Các lệnh cơ bản của iptables
Liệt kê các rule có trong Iptables
Để liệt kê các quy tắc được áp dụng, bạn hãy sử dụng lệnh sau:
$ sudo iptables -L
Kết quả: Các quy tắc đã được liệt kê trên màn hình

Chèn thêm rule mới
Để chèn một hoặc nhiều quy tắc vào chuỗi, bạn sử dụng lệnh sau:
iptables -L INPUT -n --line-numbers

Ví dụ: Bạn muốn chèn quy tắc giữa 1 và 2, hãy nhập:
iptables -I INPUT 2 -s 202.54.1.2 -j DROP
Để xem quy tắc đã được cập nhật chưa bằng lệnh:
iptables -L INPUT -n --line-numbers

Xóa một rule do người dùng xác định
Để xóa các quy tắc, bạn lệnh sau:
$ sudo iptables -L INPUT -n --line-numbers

Ví dụ: Bạn muốn xóa 1 quy tắc dòng thứ 5 ra khỏi Input.

Bước 1: Nhập lệnh sau:
iptables -D INPUT 5
Bước 2: Sau đó, bạn kiểm tra lại bằng câu lệnh:
sudo iptables -L --line-numbers
Kết quả: Như bạn thấy dòng số 5 đã được xóa ra khỏi input.

Lưu rule đã xác định
Để lưu các quy tắc trong bản phân phối dựa trên RHEL, dùng lệnh sau:
$ sudo /sbin/service iptables save
Bạn có thể dùng lệnh sau để lưu các quy tắc trong các phiên bản Debian:
$ sudo /sbin/iptables-save

Hướng dẫn mở port VPS bằng iptables
Lưu ý
Vì lệnh “iptables” liên quan trực tiếp đến vận hành hệ thống do đó mỗi lệnh được nhập vào cần quyền quản trị sudo để thực thi.
Đầu tiên, để mở port bạn cần chèn chuỗi Accept Port với 2 cách như sau:
Cách 1: Dùng flag -A
:
# iptables -A INPUT -p tcp -m tcp --dport xxx -j ACCEPT
Cách 2: Dùng flag -I
:
# iptables -I INPUT number -p tcp -m tcp --dport xxx -j ACCEPT
Trong đó:
- A (Append): Chèn rule vào cuối chuỗi INPUT.
- I (Insert): Chèn rule vào vị trí chỉ định.
- Number: Số thứ tự dòng trong chuỗi INPUT muốn chèn vào.
Mở port SSH
Để truy cập VPS, bạn cần mở port SSH 22 mặc định trên VPS bằng câu lệnh:
iptables -I INPUT 1 -p tcp -m tcp --dport 22 -j ACCEPT
Kết quả: Hiển thị mặc định port SSH luôn ở cổng 22 và bạn có thể thay đổi số cổng trong câu lệnh trên.

Tiếp theo, để cho phép kết nối SSH vào VPS với 1 IP cụ thể, bạn hãy nhập lệnh:
# iptables -I INPUT -p tcp -s xxx.xxx.xxx.xxx -m tcp --dport 22 -j ACCEPT
Mở port Web Server
Để web server được phép truy cập vào cổng 80 và 443, bạn dùng lệnh sau:
iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Kết quả: Iptables hiển thị mặc định HTTP và HTTPS như sau:

Mở port Mail
Bạn sử dụng lệnh sau để cho phép người dùng có thể sử dụng SMTP qua các cổng mặc định 25 và 465:
iptables -I INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 465 -j ACCEPT
Kết quả: Iptables hiển thị mặc định các giao thức SMTP và URD:

Ngoài ra, bạn có thể mở port 110 và 995 (POP3) để cho phép người dùng đọc mail trên server bằ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

Kết quả: Iptables sẽ hiển thị mặc định POP3 và POP3S:

Cuối cùng, để cho phép sử dụng giao thức IMAP mail protocol (port mặc định là 143 và 993), bạn nhập lệnh sau:
iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
Kết quả: Iptables sẽ hiển thị mặc định giao thức IMAP và IMAPS như sau:

Chặn 1 IP truy cập
Câu lệnh chặn 1 địa chỉ IP:
iptables -A INPUT -s IP_ADDRESS -j DROP

Ví dụ: Để chặn địa chỉ IP 192.168.1.4, bạn hãy nhập lệnh sau:
iptables -A INPUT -s 192.168.1.4 -j DROP

Để chặn 1 IP truy cập 1 port cụ thể, bạn dùng lệnh:
iptables -A INPUT -p tcp -s IP_ADDRESS --dport PORT -j DROP

Ví dụ: Bạn muốn chặn IP 192.168.1.4 với port 235, hãy nhập lệnh sau
iptables -A INPUT -p tcp -s 192.168.1.4 --dport 235 -j DROP

Kiểm tra kết quả rule:

Sau khi mở các cổng cần thiết hoặc hạn chế kết nối, cần chặn các kết nối còn lại và cho phép toàn bộ các kết nối đi ra ngoài từ VPS.
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

Bạn cần kiểm tra lại các quy tắc sau khi thiết lập bằng lệnh:
iptables -L -n
Lưu ý
Tùy chọn -n dùng để chỉ định IP là yếu tố quan trọng
Cuối cùng, cần lưu lại cài đặt để tránh mất dữ liệu khi khởi động lại máy. Trên hệ điều hành CentOS, cài đặt được lưu vào file /etc/sysconfig/iptables
.
iptables-save | sudo tee /etc/sysconfig/iptables
Hoặc
service iptables save
Hướng dẫn cài đặt và thiết lập iptables
Cách cài đặt iptables
Bước 1: Kết nối với máy chủ qua SSH
Bước 2: Nhập lệnh sau:
sudo apt-get install iptables

Bước 3: Kiểm tra trạng thái cấu hình iptables bằng cách chạy:
sudo iptables -L -v
Kết quả: iptables đã được cài đặt trên hệ thống

Cách thiết lập iptables
Thiết lập các chain rules
Bước 1: Nhập lệnh sau:
sudo iptables -A -i <interface> -p <protocol (tcp/udp)> -s <source> --dport <port no.> -j <target
Trong đó:
- A: Thêm chain rules.
- i: Là giao diện mạng cần thực hiện lọc các package tin.
- p: Là giao thức mạng thực hiện lọc (tcp/udp).
- dort: Là cổng muốn đặt bộ lọc.
Bước 2: Cho phép giao tiếp giữa ứng dụng trên server bằng lệnh:
sudo iptables -A INPUT -i lo -j ACCEPT
Bước 3: Bạn dùng -A
để thêm quy tắc vào chuỗi INPUT và cho phép các cổng kết nối bao gồm HTTP, SSH, SSL:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Bước 4: Để cho phép hoặc từ chối các package tin, bạn tham số -s
:
- Các package tin đến từ IP nguồn là 192.168.1.3 sẽ được nhấp nhận.

- Các package tin đến từ IP nguồn là 192.168.1.3 sẽ bị từ chối

- Dùng tham số
Iprange --m
để từ chối các package tin từ một dãy IP:


Bước 5: Chặn tất cả truy cập bằng lệnh:
sudo iptables -A INPUT -j DROP
Bước 6: Nhập lệnh sau để kiểm tra lại sau khi thiết lập:
sudo iptables -L --v

Lưu ý
Cần DROP các package tin từ các nguồn khác để tránh truy cập trái phép từ các cổng mở trên server.
Bước 7: Xóa các rules nhập lệnh:
sudo iptables -F
Kết quả: Mọi rule được user thêm vào đã bị xóa.

Lưu trữ các thay đổi
Bước 1: Để lưu giữ các thay đổi vào hệ thống, bạn dùng lệnh:
sudo /sbin/iptables-save

Bước 2: Bạn có thể dùng lệnh sau để tắt firewall:
sudo iptables -F
sudo /sbin/iptables-save

Vietnix – Nhà cung cấp dịch vụ VPS an toàn và hiệu năng vượt trội
Vietnix cung cấp dịch vụ VPS mạnh mẽ, đáp ứng đa dạng nhu cầu từ cá nhân đến doanh nghiệp. Với cam kết uptime 99.9% cùng chính sách hoàn tiền trong 30 ngày, Vietnix đảm bảo sự ổn định và hài lòng cho khách hàng. Dịch vụ nổi bật với khả năng tùy chỉnh cấu hình linh hoạt, bảng điều khiển quản lý thân thiện, hỗ trợ kỹ thuật 24/7 và đa dạng hệ điều hành, bao gồm cả Windows và Linux. Khởi tạo nhanh chóng chỉ trong 1 phút và khả năng nâng cấp dễ dàng giúp khách hàng tiết kiệm thời gian và tối ưu chi phí, chỉ phải trả cho những gì mình sử dụng.
Trong số đó, dịch vụ VPS AMD của Vietnix nổi bật với hiệu năng vượt trội nhờ trang bị CPU AMD EPYC thế hệ mới, ổ cứng NVMe siêu tốc và băng thông lớn, mang lại trải nghiệm tối ưu cho các website và ứng dụng đòi hỏi khả năng xử lý mạnh mẽ. Đặc biệt, VPS AMD không chỉ hỗ trợ các hệ điều hành server phổ biến mà còn linh hoạt cung cấp các tùy chọn hệ điều hành Windows dành cho người dùng thông thường, đồng thời cho phép khách hàng dễ dàng nâng cấp cấu hình khi cần thiết.
Thông tin liên hệ:
- Hotline: 18001093
- Email: sales@vietnix.com.vn
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Website: https://vietnix.vn/
Bên trên là tất cả các thông tin về iptables bao gồm các quy tắc, cấu trúc, đồng thời hướng dẫn cách cài đặt và thiết lập iptables trong Linux mà bạn có thể tham khảo. Ngoài ra, đừng quên đón đọc các nội dung tiếp theo của Vietnix để không bỏ lỡ kiến thức hay ho về Linux.