IPtables là gì? Toàn tập kiến thức cần biết về IPtables

IPtables là gì? Toàn tập kiến thức cần biết về IPtables

Tác giả: admin@
19:35 01/03/2022

IPtables là một trong những thuật ngữ được nghe nhiều nhưng để có sự am hiểu chi tiết không phải ai cũng làm được. Bởi vì thuật ngữ này chuyên về mảng công nghệ thông tin và chỉ người trong ngành mới có sự am hiểu nhất định. Vậy nếu bạn nào muốn nắm rõ về IPtables thì hãy tham khảo tất tần tật kiến thức được chia sẻ trong bài viết sau đây.

1. IPtables là gì? Tường lửa là gì?

Iptables là gì? Iptables chính là một chương trình Firewall – Tường lửa miễn phí. Chương trình này được phát triển chủ yếu cho hệ điều hành Linux. Chương trình cho phép hệ điều hành thiết lập các quy tắc riêng để kiểm soát truy cập và tăng tính bảo mật cho hệ thống gồm: VPS/Hosting/Server.

Khi sử dụng máy chủ, Iptables sẽ tiến hành thực thi tốt nhất nhiệm vụ ngăn chặn các truy cập không hợp lệ bằng cách sử dụng Netfilter. Iptables/Netfilter gồm 2 phần chính là phần Netfilter ở bên trong nhân Linux. Phần còn lại là Iptables nằm ở bên ngoài. Vì vậy sự hiện diện của Iptables chính là hệ thống giao tiếp với người dùng. Sau đó đẩy các luật của người dùng vào cho Netfilter xử lý.

Netfilter chịu trách nhiệm 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à giảm tốc độ của hệ thống. Iptables chỉ là Interface cho Netfilter. Cả 2 thành phần này có nhiệm vụ tương tự nhau. 

Trong đó tường lửa quyết định các packet nào được phép đi vào hay đi ra khỏi hệ thống. Các Packet ở bất kỳ Network nào cũng đều giao tiếp bằng cách sử dụng các cổng port. Để quyết định Port nào được phép kết nối từ bên ngoài là nhiệm vụ của Tường lửa. Một số tính năng tiêu biểu do Iptables cung cấp:

  • Tích hợp tốt với Kernel của Linux
  • Phân tích Package hiệu quả
  • Lọc Package 
  • Cung cấp đầy đủ các tùy chọn để ghi nhận sự kiện hệ thống
  • Cung cấp kỹ thuật NAT
  • Ngăn chặn sự tấn công theo kiểu DoS
  • ….

>>> Xem thêm: Bytefence anti-malware là gì? Cách gỡ Bytefence anti-malware hoàn toàn

2. Ba thành phần cơ bản của Iptables

Iptables hoạt động dựa trên các dòng lệnh để tương tác với Packet Filtering vủa Netfilter Framework. Vì vậy cơ chế lọc gói tin của Iptables được xây dựng hoạt động dựa trên 3 thành phần cơ bản khác nhau gồm: Tables – Các bảng trong Iptables, Chains và Targets. Nội dung chi tiết các thành phần cơ bản của Iptables như sau:

2.1. Các bảng trong Iptables

Tables – Các bảng trong Iptables là một trong những thành phần xử lý các gói tin theo những cách cụ thể khác nhau. Đặc biệt nếu không được chỉ định công việc cụ thể thì các bảng tính sẽ được mặc định làm việc với filter table, ngoài ra còn có các bản khác. 

2.1.1. Filter Table

Đối với thành phần Tables – Các bảng trong Iptables thì bảng Filter Table là một trong những bảng được Iptables sử dụng nhiều nhất trong suốt quá trình hoạt động. Bảng này được tích hợp với nhiệm vụ chính là quyết định việc một gói tin có được đi đến đích dự kiến hay không. Hay quyết định từ chối yêu cầu của gói tin một cách chắc chắn, nhanh chóng.

2.1.2. NAT Table

Như đã đề cập ở trên, mỗi bảng trong Iptables sẽ có một nhiệm vụ khác nhau trong hệ thống. Vì vậy đối với bản NAT Table sẽ dùng các rules về NAT. Nhiệm vụ chính của NAT Table chính là chịu trách nhiệm chỉnh sửa các Source hay còn gọi là IP nguồn. Hoặc chỉnh sửa các destination (IP đích) của các gói tin. Với sự hiện diện của bảng NAT Table thì việc chỉnh sửa thông tin gói tín khi thực hiện cơ chế NAT trở nên đơn giản, dễ dàng hơn.

2.1.3. Mangle Table

Mangle Table là một trong những bảng quan trọng trong Iptables. Bảng này có nhiệm vụ chỉnh sửa header của gói tín. Ngoài ra, sự hiện diện của Mangle Table còn cho phép chỉnh sửa giá trị của các trường: TTL, MTL, Type of Service.

2.1.4. RAM Table

Dựa theo bản chất của Iptables thì Iptables là một stateful firewall với các gói tin. Các gói tin này được kiểm tra liên quan đến trạng thái State. RAM Tablet sẽ là bảng giúp người dùng dễ dàng làm việc với các gói tin trước khi kernel bắt đầu kiểm tra trạng thái. Bảng RAM cũng chức năng loại bỏ một số gói tin khỏi việc tracking vì vấn đề hiệu năng của hệ thống. Vì thế tâm quan trọng của bảng RAM trong Iptables cũng vô cùng quan trọng và cần thiết.

2.1.5. Security Table

Bảng tiếp theo có trong Iptables chính là Security Table. Một số Kernel có thể hỗ trợ thêm cho Security Table, được dùng bởi Selinux từ đó giúp thiết lập các chính sách bảo mật hiệu quả. Vậy nên Security Table luôn là một trong những bảng quan trọng trong các bảng của Iptables.

2.2. Chains

Chains chính là thành phần cơ bản tiếp theo trong Iptables. Thành phần này được tạo ra với một số lượng nhất định ứng với mỗi bảng trong Iptables. Công dụng chính của thành phần này chính là giúp lọc gói tin tại điểm khác nhau.

  • Chain 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 Network Interface.
  • Chain Input: Chain chỉ có ở Mangle Table và Nat Table. Các rules trong Chain này được cung cấp nhiệm vụ thực thi trước khi gói tin vào tiến trình.
  • Chain Output: Chain này tồn tại ở các bảng quen thuộc như Raw Table, Mangle Table và Filter. Các rules tại đây được cung cấp nhiệm vụ thực thi sau khi gói tin được tiến trình tạo ra.
  • Chain Forward: Chain này tồn tại ở các bảng Mangle Table và Filter Table. Các rules được cung cấp nhiệm vụ thực thi cho các gói tin được định tuyến qua host hiện đại.
  • Chain Postrouting: Chain này chỉ tồn tại ở các bảng Mangle Table và Nat Table. Các rules trong Chain được thực thi khi gói tin rời giao diện Internet.

2.3. Target

Bộ phận thứ 3 trong Iptables chính là Target. Target - hành động sử dụng dành cho các gói tin khi các gói tin thỏa mãn các rules đặt ra. 

  • ACCEPT: Hành động chấp nhận và cho phép gói tin đi vào hệ thống
  • DROP: Hành động loại gói tin, không có gói tin trả lời.
  • REJECT: Hành động loại gói tin nhưng vẫn cho phép gói tin trả lời Table gói tin khác. 
  • LOG: Hành động chấp thuận gói tin nhưng có ghi lại log

Target là hành động dành cho gói tin được phép đi qua tất cả các rules đặt ra mà không dừng lại ở bất kỳ rules nào. Trong trường hợp gói tin không khớp với yêu cầu của reles thì mặc định sẽ được chấp thuận.

3. Cấu hình của Iptables

Iptables – tường lửa có cấu hình yêu cầu cao về độ bảo mật. Trong đó tất cả các dữ liệu từ các gói tin được gửi đi sẽ được định dạng qua Internet. Linux Kernel sẽ thực hiện nhiệm vụ lọc các gói tin này bằng cách mang đến một giao diện sử dụng một bảng các bộ lọc khác nhau. Iptables của Linux cho phép người dùng thiết lập, duy trì và kiểm tra tất cả các bảng được sử dụng. 

Lúc này, người chơi sẽ thực hiện các thiết lập theo mong muốn với nhiều bảng khác nhau. Trong đó mỗi bảng được thiết lập sẽ chứa nhiều chuỗi. Mỗi chuối sẽ là một quy tắc. Mỗi quy tắc chính là đinh nghĩa cho việc phải làm với gói tin khi phù hợp với gói tin đó. Sau khi hoàn tất quá trình kiểm tra, thiết lập bảng thì một Target sẽ được đưa ra khi có một gói tin được xác lập.

Các Target có thể là một chuỗi khác để khớp với một trong các giá trị mà hệ thống đưa ra như sau:

  • ACCEPT: Gói tin được phép đi qua
  • DROP: Gói tín không được phép đi qua
  • RETURN: Bỏ qua chuỗi hiện tại. Quy trở lại quy tắc tiếp theo từ chuỗi được gọi

4. Tùy chọn trong Iptables

Iptables cung cấp rất nhiều tùy chọn khác nhau cho phép người dùng dễ dàng thao tác. Tuy nhiên để sử dụng linh hoạt thì mỗi người cần ghi nhớ các tùy chọn này. Trong đó các tùy chọn quan trọng nhất trong Iptables bạn nên nhớ gồm có:

4.1. Những tùy chọn để chỉ định thông số Iptables

Các tùy chọn trong Iptables được phân chia rõ ràng theo từng dạng khác nhau. Tùy chọn để chỉ định thông số Iptables là một trong những tùy chọn cực kỳ quan trọng. Chi tiết thực hiện các tùy chọn chỉ định thông số như sau:

  • Chỉ định tên Table: -t
  • Chỉ định loại giao thức: - p
  • Chỉ định card mạng vào: -i
  • Chỉ định card mạng ra: -o
  • Chỉ định IP nguồn: -s <địa_chỉ _ip_nguồn>
  • Chỉ định IP đích: -d <địa_chỉ_ip_dích>
  • Chỉ định cổng nguồn: -sport
  • Chỉ định cổng đích: -dport

4.2. Những tùy chọn để thao tác với chain

Trong Iptables, các tùy chọn để thao tác với chain cũng được quy định một cách cụ thể. Do đó người dùng cần sử dụng đúng mới cho hiệu quả sử dụng như mong muốn. Chi tiết các tùy chọn để thao tác với chain trong Iptables gồm có:

  • Tạo chain mới: Iptables – N
  • Xóa hết các rule đã có trong chain: Iptables – X
  • Đặt danh sách cho các chain: ‘built-in’(INPUT, OUTPUT & FORWARD): Iptables – p
  • Liệt kê các rule trong chain: Iptables – L
  • Xóa các rule trong chain: Iptables – F
  • Reset bộ đếm Packet về 0: Iptables – Z

4.3. Những tùy chọn để thao tác với rule 

Để thao tác với các rule trong Iptables đều phải thực hiện các tùy chọn tương ứng theo quy định. Trong đó các tùy chọn quan trọng mà người dùng nên nhớ để thực hiện thao tác với rule dễ dàng như:

  • Thêm rule: -A
  • Xóa rule: -D
  • Thay thế rule: -R
  • Chèn thêm rule: -I

>>> Xem thêm: Xampp là gì? Cách cài đặt & sử dụng phần mềm Xampp từ A – Z

5. Các lệnh cơ bản của Iptables

Để làm việc với rule trong Iptables thì tất cả các thao tác đều phải sử dụng lệnh. Các lệnh sử dụng trong Iptables được phân chia thành cơ bản với nâng cao. Tuy nhiên thông thường người dùng chỉ cần áp dụng linh hoạt các lệnh cơ bản của Iptables đã có thể dễ dàng làm việc với các rule. Vậy các lệnh cơ bản của Iptables gồm những lệnh nào, tất cả sẽ được cập nhật ngay sau đây.

5.1. Lệnh tạo một rule mới

iptables -A INPUT -i lo -j ACCEPT

Lệnh này có nghĩa là:

  • A nghĩa là Append. A INPUT nghĩa là khai báo kiểu kết nối sẽ được áp dụng
  • I nghĩa là Internet. I lo nghĩa là khai báo thiết bị mạng được áp dụng
  • J nghĩa là Jump. J ACCEPT nghĩa là khai báo hành động sẽ được áp dụng cho quy tắc này.

Nếu bạn gõ lại lệnh iptables –L –v thì sẽ thấy ngay 1 rule mới xuất hiện. 

after-created-iptables-rule

Sau khi thêm mới rules hoặc thay đổi gõ lệnh lưu thì bạn tiến hành khởi động lại tường lửa để áp dụng các thay đổi.

service iptables save

service iptables restart

Nếu tiếp tục thêm rule để được phép lưu lại quá trình kết nối hiện tại cũng như tránh các hiện tượng tự Block ra khỏi máy chủ thì hãy thực hiện đúng lệnh quy định.

Lệnh thực hiện: iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Để các cổng được phép truy cập từ bên ngoài vào qua giao thức tcp thì hãy thực hiện theo lệnh.

Lệnh thực hiện: iptables -A INPUT -p tcp --dport 22 -j ACCEPT

  • -p tcp: Giao thức được áp dụng
  • -dport 22: Cổng cho phép áp dụng. 22 là cho SSH

Để ngăn chặn tất cả các kết nối truy cập theo hướng từ bên ngoài vào không thỏa mãn những rule trên. Thao tác này thực hiện tương tự với rule 5 ở trên.

iptables -A INPUT -j DROP

5.2. Lệnh bổ sung một rule mới

Để chèn 1 rule mới vào trong 1 vị trí nào đó thì việc sử dụng các lệnh bổ sung thêm rule là điều quan trọng. Trong đó người dùng chỉ cần thay tham số -A table bằng tham số INSERT –l là xong. 

Cấu trúc lệnh bổ sung 1 rule mới: IPtables -I INPUT 2 -p tcp --dport 8080 -j ACCEPT

5.3. Lệnh xóa 1 rule

Để thực hiện xóa 1 rule trong Iptables mà đã tạo ra tại vị trí 4, bạn có thể sử dụng lệnh xóa với tham số -D. Cấu trúc lệnh xóa 1 rule chi tiết như sau:

IPtables -D INPUT 4

Trong trường hợp bạn muốn thực hiện thao tác xóa toàn bộ các rule chứa hành động DROP có trong Iptables rất đơn giản. Bạn chỉ cần thực hiện lệnh với cấu trúc như sau sẽ dễ dàng loại bỏ tất cả các rule này.

IPtables -D INPUT -j DROP

6. Hướng dẫn thiết lập IPtables chi tiết

Muốn thiết lập Iptables với Linux Firewall không phải là việc làm đơn giản. Bởi vì quy trình thiết lập Iptables trải qua nhiều bước với nhiều thao tác phức tạp. Vì vậy nếu không được hướng dẫn cụ thể từng bước, từng thao tác thì các bạn hoàn toàn không thể tự mình thực hiện cách thiết lập Iptables. Vậy nếu bạn nào muốn tự mình hoàn thành quá trình thiết lập Iptables chi tiết thì có thể làm theo những hướng dẫn sau.

6.1. Bước 1: Cài đặt Iptables Linux Firewall

Một trong những công đoạn quan trọng nhất trong quá trình thiết lập Iptables chính là cái đặt Iptables Linux Firewall. Nếu thiết bị của bạn không được cài đặt Iptables thì hoàn toàn không thể thiết lập tường lửa để bảo vệ Ubuntu VPS. Vì vậy trước khi thực hiện các thao tác tiếp theo bạn hãy tiến hành cài đặt Iptables.

Hầu hết các bản Linux hiện nay đều tích hợp sẵn tường lửa miễn phí – Iptables. Dù vậy nếu bản nào chưa có sẵn trên Ubuntu hoặc Debian thì bạn có thể dùng lệnh sau để thực hiện thao tác cài đặt.

sudo apt-get update

            sudo apt-get install IPtables

Sau khi cài đặt thành công Iptables, bạn tiến hành xem trạng thái hiện tại của Iptables. Lệnh xem trạng thái cần dùng là:

sudo IPtables -L –v

  • -L liệt kê tất cả các rule
  • -v liệt kê danh sách bổ trợ

6.2. Bước 2: Định nghĩa các chain rules

Việc làm này có nghĩa là thêm rule vào danh sách chain hiện tại. Để thực hiện bạn có thể áp dụng lệnh Iptables được định dạng với các tùy chọn sau đây.

6.2.1. Thêm rule vào danh sách chain

  • Cấu trúc thêm

sudo IPtables -A -i <interface> -p <protocol (tcp/udp)> -s <source> --dport <port no.> -j <target>

  • Lệnh này có ý nghĩa như sau:
  • A: thêm chain rules
  • -i <interface>: Giao diện mạng cần thực hiện lọc các gói tin
  • p <protocol>: Giao thức mạng thực hiện lọc (tcp/udp)
  • dport <port no.>: Cổng muốn đặt bộ lọc

6.2.2. Cho phép lưu lượng truy cập trên localhost

Tiếp theo kích hoạt lệnh cho phép lưu lượng truy cập trên localhost. Cấu trúc lệnh thực hiện chi tiết gồm:

sudo IPtables -A INPUT -i lo -j ACCEPT

6.2.3. Lọc các gói tin dựa trên nguồn

Để lọc các gói tin dựa trên nguồn thì bạn chỉ cần thêm vào tham số -s để cho phép hoặc từ chối. Cấu trúc lệnh thực hiện đúng như sau.

sudo IPtables -A INPUT -s 192.168.1.3 -j ACCEPT

Sau khi thực hiện lệnh này thì các gói tin đến từ IP nguồn là 192.168.1.3 sẽ được chấp nhận. 

Còn nếu thực hiện theo cấu trúc lệnh sudo IPtables -A INPUT -s 192.168.1.3 -j DROP có nghĩa các gói tin đến từ IP nguồn 192.168.1.3 sẽ bị từ chối. Tương tự nếu thay đổi tham số cho cầu trúc theo dạng:

sudo IPtables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP

Vậy thì các gói tin thuộc một dãy IP sẽ bị từ chối. Ý nghĩa  của cấu trúc này đến từ các tham số được dùng Iprange –m với dãy IP đặt sau-src-range.

6.2.4. Chặn tất cả truy cập

Để chặn tất cả các truy cập trong Iptables cần thực hiện theo đúng quy tắc cụ thể. Trong đó bạn chỉ cần áp dụng lệnh sau đây là có thể hoàn thành thao tác này.

sudo IPtables -A INPUT -j DROP

Sau khi hoàn thành lệnh chặn tất cả truy cập thì hãy kiểm tra lại để thấy kết quả sau khi thiết lập. Lệnh kiểm tra cần thực hiện sẽ là:

sudo IPtables -L –v

6.2.5. Xóa các rules

Lệnh xóa các rules không phức tạp như nhiều lệnh khác. Do đó để thực hiện thao tác này bạn chỉ cần một chút thời gian và ghi đúng lệnh sẽ có thể xóa tất cả các rules để tạo lại từ đầu. Cấu trúc lệnh xóa các rules:

sudo IPtables –F

Trong trường hợp các bạn muốn xóa từng rules khác nhau thì chỉ cần thay đổi các tham số thành tham số -D và chọn số tương ứng là được. Nếu muốn liệt kê các rule bằng lệnh bạn có thể thực hiện như sau:

sudo IPtables -L --line-numbers

6.3. Bước 3: Lưu giữ các thay đổi

Lưu giữ các thay đổi trong quá trình thiết lập Iptables là việc làm quan trọng. Những Iptables rules được tạo ra đều sẽ được lưu giữ trong bộ nhớ. Như vậy khi reboot máy chủ sẽ không cần phải tạo lại các rules này. Vậy để thực hiện quá trình lưu giữ thay đổi vào hệ thống sau khi đã thiết lập xong các rules thì bạn có thể sử dụng lệnh:

sudo /sbin/IPtables-save

Trong trường hợp sau khi cài đặt xong Iptables nhưng bạn không muốn kích hoạt chúng thì có thể tắt đi. Nếu muốn tắt Firewall trên thiết bị bạn có thể dùng lệnh.

sudo IPtables -F

            sudo /sbin/IPtables-save

Những bài viết liên quan:

IPtables là gì? Toàn tập kiến thức cần biết về IPtables đã được cập nhật chi tiết trong bài viết trên. Mong răng bài viết sẽ mang đến cho bạn những kiến thức bổ ích. Nếu trong quá trình tìm hiểu có điều gì thắc mắc, chưa hiểu, bạn có thể liên hệ FPT Cloud sẽ được hỗ trợ đầy đủ nhất. 

IPtables là gì? Toàn tập kiến thức cần biết về IPtables