IPTABLES là gì? IPTABLES là một công cụ quản lý tường lửa trên hệ điều hành Linux, cho phép quản trị viên mạng kiểm soát lưu lượng mạng trên máy chủ.
Trong bất kỳ công nghệ hay ứng dụng gì thì vấn đề đầu tiên mà chúng ta quan tâm chính là bảo mật. Linux cũng không ngoại lệ, nó luôn tồn tại hệ thống tường lửa (Firewall) giúp giải quyết vấn đề bảo mật. IPTABLES là công cụ cực kỳ mạnh mẽ có thể áp dụng để quản lý tường lửa đối với Linux. Cùng chúng tôi tìm hiểu chi tiết IPTABLES là gì cũng như đặc điểm của nó trong bài viết dưới đây nhé.
>>> Có thể bạn quan tâm:
1. IPTABLES là gì?
Iptables là một công cụ trong hệ điều hành Linux được sử dụng để quản lý bảng quy tắc của hệ thống tường lửa. Nó giúp kiểm soát việc chuyển tiếp dữ liệu giữa các giao diện mạng trên hệ thống, từ chặn hoặc chấp nhận gói tin dựa trên các quy tắc được xác định trước. Iptables có khả năng thực hiện các chức năng như chuyển đổi địa chỉ IP (NAT), quản lý các kết nối (connection tracking), và bảo vệ hệ thống khỏi các tấn công mạng.
Bằng cách xác định các quy tắc để lọc gói tin, iptables là một công cụ quan trọng trong việc đảm bảo an toàn và bảo mật cho hệ thống Linux.
2. Cách cài đặt IPTABLES
Sau khi đã hiểu IPTABLES là gì, chúng ta sẽ tiến hành cài đặt IPTABLES. Tuy IPTABLES là một công cụ mạnh mẽ và có sẵn trên tất cả các bản phân phối của Linux . Tuy nhiên không phải tất cả các bản phân phối của Linux đều sử dụng IPTABLES làm Firewall mặc định. Đối với Centos thì nó sử dụng Firewalld làm tường lửa mặc định. Để sử dụng IPTABLES làm Firewall cho Centos thì ta cần phải tắt Firewalld hoặc xóa nó và kích hoạt IPTABLES lên.
Tắt Firewalld với lệnh sau:
systemctl stop firewalld systemctl disable firewalld |
Cài đặt dịch vụ iptable (mặc định iptable đã được cài nhưng để sử dụng nó như 1 service ta cần thực hiện bước này).
yum install iptables-services -y |
Bật dịch vụ iptable.
systemctl start iptables systemctl enable iptables |
Lúc này firewalld vẫn được coi là firewall mặc định, ta cần mask nó đi.
systemctl mask firewalld |
Đến đây là ta có thể sử dụng iptable rồi.
IPTABLES là một dịch vụ giống như dịch vụ thông thường khác. Ta cũng có thể dùng systemctl để start, stop, enable, disable, reload,...
Và một lưu ý nữa là mỗi khi ta thiết lập các quy tắc bằng lệnh thì ta cần phải lưu lại thì nó mới có thể lưu vào file cấu hình nếu không lưu thì khi restart lại dịch vụ sẽ bị mất các quy tắc ta đã thiết lập.
Câu lệnh lưu lại các thiết lập:
service iptables save |
3. Các thành phần cấu tạo lên IPTABLES là gì?
Có thể nói IPTABLES sử dụng bảng các quy tắc để hoạt động và kiểm soát các gói tin của hệ thống. Các thành phần tạo lên IPTABLES gồm:
- Tables : Mỗi tables định nghĩa không gian lưu trữ của các quy tắc.
- Chains : Mỗi bảng chứa nhiều Chains và các chains quy định các điều kiện và hành động được áp dụng cho các gói tin.
- Rules : Mỗi chain sẽ chứa nhiều rules. Rules có thể được coi là quy tắc cụ thể mà gói tin được xử lý.
3.1 Tables là gì?
Đầu tiên ta cần phải hiểu rằng iptable được chia làm 3 bảng:
- Bảng mangle : bảng này để thay đổi QoS của gói tin như thay đổi các tham số TOS,TTL,..
- Bảng NAT : dùng để thay đổi đích, nguồn, port của các gói tin
- Bảng filter : Đây là bảng dùng để áp dụng các chính sách lọc gói tin , có cho phép các gói tin đi qua hay không
Bình thường bảng NAT và filter rất hay được sử dụng.
Để có thể dễ hiểu hơn các bạn có thể hiểu nó như là tên tiêu đề của các bảng vậy. Khi đặt tên cho nó ta sẽ dễ dàng quy định xem bảng gì xử lý công việc gì.
3.2 Chains là gì?
Tables thì dùng để quy định tên các bảng còn Chains thì ta cũng có thể hiểu rằng nó các cột trong bảng vậy. Nó sẽ quy định những dòng bên dưới cột đó có bổ xung các thông tin làm rõ cột đó. Để có thể hiểu rõ các Chains trong IPTABLES ta cần tìm hiểu có những chain gì trong các bảng và tác dụng của chúng dùng để làm gì.
Trong bảng NAT có các chain và có 4 chain được xây dựng sẵn trong table NAT:
PREROUTING :
- Chuỗi này áp dụng các quy tắc trước khi gói tin được định tuyến.
- Thường được sử dụng để thực hiện các biến đổi địa chỉ đích của gói tin trước khi nó đến đích.
- Lệnh dùng để thao tác
iptables -t nat -A PREROUTING ... |
POSTROUTING:
- Chuỗi này áp dụng các quy tắc sau khi gói tin đã được định tuyến.
- Thường được sử dụng để thực hiện các biến đổi địa chỉ nguồn của gói tin trước khi nó rời khỏi hệ thống.
- Lệnh dùng để thao tác
iptables -t nat -A POSTROUTING ... |
OUTPUT :
- Chuỗi này áp dụng các quy tắc cho gói tin được tạo ra bởi chính hệ thống
- Thường được sử dụng để thực hiện NAT cho gói tin được tạo ra từ localhost trước khi chúng rời đi.
- Lệnh dùng để thao tác
iptables -t nat -A OUTPUT ... |
INPUT:
- Chuỗi này áp dụng các quy tắc cho gói tin đến địa chỉ IP đích là hệ thống
- Thường được sử dụng để thực hiện NAT cho gói tin trước khi chúng đến máy chủ
- Lệnh dùng để thao tác
iptables -t nat -A INPUT ... |
Bảng filter cũng là một bảng hay được sử dụng.
Các chain có sẵn trong bảng filter.
INPUT:
- Đây là chain dùng để lọc các gói tin đầu vào.
- Chain này là chain các gói tin bắt buộc phải đi qua để có thể được xử lý.
OUTPUT
- Đây là chain dùng để lọc các gói tin đầu ra.
- Chain này là chain sau khi gói tin được xử lý phải đi qua chain này để ra được bên ngoài.
FORWARD
- Đây là chain dùng để chuyển gói tin qua lại giữa các card mạng với nhau.
- Các target được sử dụng trong các chain này có thể là ACCEPT (đồng ý) , DROP (xóa bỏ).
Bảng Mangle là một bảng rất ít được sử dụng đến, nó cho phép thay đổi cấu trúc của một gói tin. Các gói tin có thể được cấu tạo bởi các bit và bảng mangle cho phép ta thay đổi được các bit đó. Nhưng nó rất ít được sử dụng.
Trong bảng mangle bao gồm tất cả các chain được xây dựng sẵn là: PREROUTING, POSTROUTING, INPUT, OUTPUT, FORWARD.
3.3 Rules là gì?
Trong các Chain sẽ bao gồm các Rules để quy định cụ thể các gói tin được xử lý ra sao. Các Chain ta sẽ coi như là đầu mục của các cột còn các Rules ta sẽ coi như là nội dung của từng cột, có bao nhiêu Rule trong một Chain ta sẽ sẽ coi như là có bấy nhiêu dòng trong một cột. Các Rules sẽ quy định xử xem đang xử lý bảng nào, chain nào là đưa ra các target để xử lý như ACCEPT, DROP, REJECT,...
- ACCEPT: Chấp nhận gói tin.
- DROP: Từ chối gói tin mà không gửi bất kỳ thông báo lỗi nào.
- REJECT: Từ chối gói tin và gửi thông báo lỗi cho người gửi.
- LOG: Ghi log cho gói tin.
4. Một số tùy chọn và target thường được sử dụng trong IPTABLES
Tùy chọn 1: Thêm sửa xóa các chain
Tùy chọn |
Ý nghĩa |
-I chain rule |
Thêm các quy tắc vào đầu bảng |
-A chain rule |
Thêm các quy tắc vào cuối bảng |
-D [chain] [index] |
Xóa quy tắc có chỉ số trong chuỗi đã chọn |
-E [chain] [new chain] |
Đổi tên cho chuỗi |
-F [chain] |
Xóa tất cả các quy tắc trong chuỗi đã chọn; nếu không chọn chuỗi, xóa tất cả các quy tắc trong tất cả các chuỗi trong một bảng |
-L [chain] |
Hiển thị danh sách tất cả các quy tắc trong chuỗi; nếu không chọn chuỗi, hiển thị tất cả các chuỗi trong một bảng |
-P [chain] [target] |
Áp dụng chính sách đối với chuỗi |
-Z [chain] |
Xóa bộ đếm của chuỗi |
-N [name new chain] |
Tạo một chuỗi mới |
Tùy chọn 2: Thiết lập quy tắc
Tùy chọn |
Ý nghĩa |
-j [target] |
Dùng để chỉ rõ gói tin sau khi thoả mãn quy tắc sẽ được nhảy đến mục tiêu để xử lý ACCEPT, DROP, REJECT,... |
-m [match] |
Dùng để mở rộng quy tắc đối với một gói tin. Dấu '*' là để áp dụng cho tất cả các gói tin. |
-t [table] |
Dùng để chọn bảng. Nếu bạn không chọn, mặc định iptables sẽ chọn bảng "filter". |
-p [protocol] |
Chỉ ra gói tin thuộc loại nào: tcp, udp, icmp, v.v. |
5. Tổng kết
Hy vọng qua bài viết bạn đã hiểu rõ IPTABLES là gì cũng như đặc điểm của nó. IPTABLES là một công cụ Firewall không chỉ miễn phí mà còn mạnh mẽ được tích hợp sẵn trong Linux. Mọi người thường nói IPTABLES là một công cụ rất khó để sử dụng và mình cũng đồng ý là nó khó nhưng chỉ cần các bạn nắm rõ các cấu trúc và mục đích của các table và chain thì việc thao tác sẽ trở nên dễ dàng hơn. Còn 1 lưu ý quan trọng nữa là IPTABLES sẽ hiểu các quy tắc từ trên xuống dưới, Quy tắc nào thiết lập trước sẽ được thực hiện trước nếu quy tắc sau vi phạm quy tắc trước thì sẽ thực hiện đúng theo quy trình quy tắc thiết lập trước sẽ được ưu tiên.
>>> Xem thêm: Hướng dẫn cài đặt và gỡ bỏ ứng dụng trên hệ điều hành Linux