IPtables là gì? Tùy chọn cấu hình và chức năng
Bạn từng tự hỏi "IPtables là gì?" khi bắt đầu khám phá thế giới phức tạp của bảo mật mạng trên hệ điều hành Linux? IPtables không chỉ là một khái niệm, mà là một cánh cửa mở ra những khả năng đáng kinh ngạc trong việc kiểm soát và bảo vệ lưu lượng mạng của bạn. Hãy cùng nhau khám phá sức mạnh và ý nghĩa đằng sau câu hỏi "IPtables là gì?" và tại sao nó là yếu tố không thể thiếu cho bất kỳ hệ thống Linux nào.
IPtables là gì?
Được triển khai dưới dạng các mô-đun Netfilter, iptables là một chương trình tiện ích trong không gian người dùng cho phép một quản trị hệ thống cấu hình các quy tắc lọc gói tin IP của tường lửa hạt nhân Linux. Các bộ lọc được tổ chức thành các bảng chứa chuỗi quy tắc quy định cách xử lý gói tin mạng.
Netfilter là khung tường lửa trên Linux, và iptables là tiện ích được sử dụng để quản lý và điều khiển Netfilter. Bạn có thể sử dụng iptables để lọc cả gói tin đến và đi cũng như định tuyến gói tin mạng.
Bảng
Một bảng là một bộ sưu tập các chuỗi phục vụ một chức năng cụ thể. Có 3 bảng chính trong iptables là bảng Filter, NAT và Mangle.
- Bảng Filter được sử dụng để kiểm soát luồng gói tin vào và ra khỏi một hệ thống.
- Bảng NAT được sử dụng để chuyển hướng kết nối đến các giao diện khác trên mạng.
- Bảng Mangle được sử dụng để sửa đổi đầu gói tin.
Mỗi trong những bảng này đều có một chuỗi quy tắc.
Chuỗi
Chuỗi là một danh sách các quy tắc được xử lý theo thứ tự.
Có 5 chuỗi chính trong iptables:
- Input: Sử dụng để quản lý gói tin/kết nối đến dịch vụ hoặc giao thức.
- Output: Gói tin đi ra sau khi đã được tạo/được xử lý.
- Forward: Chuyển tiếp gói tin đến từ nguồn đến đích (định tuyến).
- Prerouting: Sau khi gói tin nhập vào giao diện mạng.
- Postrouting: Trước khi gói tin rời khỏi giao diện mạng sau quyết định định tuyến đã được thực hiện.
Ghi chú
Bảng filter chịu trách nhiệm chặn hoặc cho phép kết nối và là bộ lọc mặc định được sử dụng trong iptables.
Hiểu luồng gói tin
Gói tin đến được phân tích ở mỗi chuỗi và được kiểm tra so với một bộ quy tắc. Nếu có quy tắc khớp, mục tiêu được đặt. Dưới đây là các mục tiêu có sẵn:
- ACCEPT: Dừng quá trình xử lý và cho phép gói tin tiếp tục.
- REJECT: Loại bỏ gói tin với phản hồi.
- DROP: Dừng xử lý tại chuỗi hiện tại và loại bỏ gói tin.
- LOG: Tương tự như ACCEPT, tuy nhiên, được ghi nhật ký vào /var/log/messages.
Ví dụ, giả sử bạn muốn chặn tất cả các kết nối đến máy chủ web của bạn trên cổng 80. Bạn nên thêm một quy tắc vào chuỗi đầu vào trong bảng filter và đặt mục tiêu là REJECT. Nếu gói tin đến cuối chuỗi mà không khớp với bất kỳ quy tắc nào, quy tắc mặc định sẽ được sử dụng. Nếu không có quy tắc mặc định, gói tin sẽ được chấp nhận.
Cài đặt iptables
Trong hầu hết các bản phân phối Linux, iptables được bao gồm sẵn như một tiện ích theo mặc định. Đề xuất rằng bạn tắt hoặc xóa bất kỳ quy tắc nào bạn có trước khi bắt đầu hoặc tạo một cấu hình mới. Bạn cũng cần gỡ cài đặt bất kỳ tiện ích quản lý tường lửa nào khác như UFW.
Bạn có thể cài đặt iptables bằng cách chạy lệnh sau:
sudo apt install iptables
Tập tin cấu hình mặc định cho iptables có thể được tìm thấy tại /etc/sysconfig/iptables
. Bạn có thể sửa đổi nó bằng vim hoặc trình soạn thảo văn bản mà bạn chọn bằng lệnh sau:
vim /etc/sysconfig/iptables
Sử dụng iptables
Xây dựng các lệnh iptables
Dưới đây là một số tùy chọn lệnh phổ biến:
Tùy chọn |
Chức năng |
-t hoặc --table |
Chỉ định bảng phù hợp gói tin. Bảng mặc định được đặt là "filter" nếu không có bảng nào được chỉ định. |
-I hoặc --insert chain [rule-number] rule |
Chèn một hoặc nhiều quy tắc vào chuỗi được chọn với số quy tắc đã cho. Chỉ mục bắt đầu từ 1. |
-A hoặc --append chain rule-specification |
Thêm một hoặc nhiều quy tắc vào danh sách các quy tắc ở cuối chuỗi được chọn. |
-L hoặc --list [chuỗi] |
Liệt kê tất cả các quy tắc trong chuỗi được chọn. Nếu không có chuỗi nào được chỉ định, sẽ liệt kê tất cả các chuỗi |
-D hoặc --delete chuỗi quy-định-quy-tắc |
Xóa một hoặc nhiều quy tắc trong chuỗi được chọn. |
-D hoặc --delete chuỗi số-quy-tắc |
Xóa quy tắc được chỉ định trong chuỗi được chọn. Chỉ mục bắt đầu từ 1. |
-p hoặc --protocol [!] |
Giao thức cần kiểm tra (TCP, UDP, icmp hoặc all). Sử dụng đối số ! trước giao thức để đảo ngược kiểm tra. |
-s hoặc --source [!] |
Mô tả nguồn. Điều này có thể là mạng, tên máy chủ hoặc địa chỉ IP. Sử dụng đối số ! trước nguồn để đảo ngược nghĩa của địa chỉ. |
--destination-port hoặc --dport |
Khoảng cổng đích. |
-j hoặc --jump mục-tiêu |
Đây là mục tiêu của quy tắc và chỉ định hành động cần thực hiện khi có sự khớp. |
-m hoặc --match kiểm-soát |
Chỉ định một mô-đun mở rộng kiểm tra một thuộc tính cụ thể. |
-p hoặc --policy chuỗi mục-tiêu |
Đặt chính sách cho chuỗi đến mục tiêu. |
-F hoặc --flush [chuỗi] |
Xóa sạch chuỗi được chọn. Nếu không có chuỗi nào được chỉ định, tất cả các chuỗi sẽ bị xóa sạch. Việc xóa sạch tương tự như việc xóa từng quy tắc một. |
Ví dụ lệnh:
sudo iptables -t filter -I INPUT -m tcp -p tcp --dport 80 -j REJECT
Lệnh trên chặn mọi lưu lượng đến máy chủ web/HTTP.
Liệt kê các chuỗi
Bạn có thể liệt kê tất cả các chuỗi có sẵn trong bảng filter bằng cách sử dụng lệnh list:
sudo iptables -L
Điều này hiển thị tất cả các chuỗi trong bảng filter và tất cả các quy tắc trong các chuỗi INPUT
, FORWARD
và OUTPUT
.
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Xác định chính sách mặc định
Trong quá trình cấu hình mới, bạn không có bất kỳ quy tắc đã được xác định trước nào, vì vậy bạn phải bắt đầu bằng cách đặt chính sách mặc định cho mục tiêu. Trong trường hợp này, chính sách mặc định được đặt thành ACCEPT
, có nghĩa là tất cả các lưu lượng được chấp nhận mặc định.
Bạn có thể xác định chính sách mặc định cho tất cả các chuỗi bằng cách chạy các lệnh sau:
sudo iptables --policy INPUT ACCEPT
sudo iptables --policy FORWARD ACCEPT
sudo iptables --policy OUTPUT ACCEPT
Điều này đặt chính sách mặc định cho tất cả các chuỗi là ACCEPT
. Bạn cũng có thể thay đổi điều này thành DROP
hoặc REJECT
nếu bạn muốn vô hiệu hóa quyền truy cập vào bất kỳ dịch vụ nào trên máy chủ và cho phép thủ công các dịch vụ bạn muốn tiếp cận.
Chặn & Cho phép kết nối từ địa chỉ IP
Bạn có thể chặn tất cả các yêu cầu đến từ một địa chỉ IP bằng cách thêm quy tắc sau:
sudo iptables -A INPUT -s 192.168.1.1 -j DROP
Bạn cũng có thể chặn tất cả các kết nối đến từ một mạng con bằng cách thêm quy tắc sau:
sudo iptables -A INPUT -s 192.168.1.1/24 -j DROP
Để chặn tất cả các kết nối ra đến một địa chỉ IP hoặc mạng con cụ thể, bạn có thể thêm quy tắc sau vào chuỗi OUTPUT
:
sudo iptables -I OUTPUT -s 192.168.1.1 -j DROP
Để cho phép kết nối đến các dịch vụ và cổng này, thay đổi mục tiêu thành ACCEPT
thay vì DROP
.
Chặn & Cho phép kết nối đến cổng
Để chặn kết nối đến các cổng và dịch vụ, chỉ định giao thức và cổng đích. Ví dụ, nếu bạn muốn chặn mọi kết nối SSH đến máy chủ, thêm quy tắc sau:
sudo iptables -I INPUT -p tcp --dport 22 -j DROP
Bạn cũng có thể chặn mọi kết nối đến máy chủ web của bạn chạy trên cổng 80 bằng cách thêm quy tắc sau:
sudo iptables -I INPUT -p tcp --dport 80 -j DROP
Bạn cũng có thể điều này một bước xa và chặn một địa chỉ IP cụ thể khỏi việc kết nối đến một dịch vụ cụ thể. Ví dụ, bạn có thể chặn một địa chỉ IP khỏi việc truy cập máy chủ web của chúng tôi bằng cách thêm quy tắc sau:
sudo iptables -I INPUT -p tcp --dport 80 -s <IP> -j DROP
Để cho phép kết nối đến các dịch vụ và cổng này, thay đổi mục tiêu thành ACCEPT
thay vì DROP
.
Lưu thay đổi
Để lưu các thay đổi bạn đã thực hiện vào tập quy tắc của mình để chúng có tính nhất quán, thực hiện các lệnh nhị phân sau:
sudo /sbin/iptables-save
Xóa & Xoá quy tắc
Nếu bạn muốn xóa một quy tắc cụ thể, bạn cần xác định số dòng quy tắc. Để làm điều này, liệt kê các chuỗi và các quy tắc với các tùy chọn sau:
sudo iptables -L --line-numbers
Điều này liệt kê ra các số dòng liên quan cho mỗi quy tắc. Khi quy tắc được xác định và tương ứng với số dòng của nó, bạn có thể xóa nó bằng cách chạy lệnh sau:
sudo iptables -D INPUT 3
Nếu bạn muốn xoá tất cả các quy tắc bạn đã thêm để bắt đầu lại, bạn có thể sử dụng tùy chọn flush:
sudo iptables -F
Tóm gọn, IPtables không chỉ đơn thuần là một công cụ tường lửa mà còn là một hệ thống quy tắc mạng linh hoạt, giúp điều chỉnh lưu lượng thông tin theo nhu cầu và yêu cầu cụ thể. Khả năng tùy chỉnh cao và sức mạnh linh hoạt của IPtables giúp đáp ứng mọi nhu cầu bảo mật mạng của người quản trị hệ thống. Dù cho việc chặn kết nối từ địa chỉ IP cụ thể hay điều chỉnh quy tắc định tuyến, IPtables đóng vai trò không thể phải bỏ qua trong việc bảo vệ và quản lý hệ thống mạng Linux. KDATA mong bài viết trên đã giúp bạn hiểu "IPtables là gì?", nếu có gì thắc mắc hãy liên hệ với chúng tôi nhé.
Các gói dịch vụ Cloud VPS của KDATA mang đến cho bạn nhiều lựa chọn về hiệu suất cũng như khả năng lưu trữ, mọi nhu cầu về doanh nghiệp đều được đáp ứng. KDATA đảm bảo khả năng uptime lên đến 99,99%, toàn quyền quản trị và free backup hằng ngày. Tham khảo ngay các gói dịch vụ Cloud VPS:
👉 Liên hệ ngay KDATA hỗ trợ tận tình, support tối đa, giúp bạn trải nghiệm dịch vụ giá hời chất lượng tốt nhất