Lệnh iptables trong Linux

Giới thiệu

Trong lab này, bạn sẽ học cách sử dụng lệnh iptables, một công cụ tường lửa mạnh mẽ trong Linux, để quản lý và kiểm soát lưu lượng mạng trên hệ thống của bạn. Bạn sẽ bắt đầu bằng cách hiểu cấu trúc và các khái niệm cơ bản của iptables, bao gồm các bảng và chuỗi tích hợp khác nhau của nó. Sau đó, bạn sẽ khám phá các lệnh iptables khác nhau để quản lý các quy tắc tường lửa, chẳng hạn như liệt kê các quy tắc hiện có, thêm các quy tắc mới và xóa các quy tắc hiện có. Cuối cùng, bạn sẽ học cách triển khai các cấu hình iptables nâng cao hơn để phù hợp với các yêu cầu mạng cụ thể của bạn.

Hiểu các kiến thức cơ bản về iptables

Trong bước này, bạn sẽ tìm hiểu các khái niệm cơ bản về tường lửa iptables trong Linux. iptables là một công cụ mạnh mẽ cho phép bạn quản lý và kiểm soát lưu lượng mạng trên hệ thống của bạn.

Đầu tiên, hãy hiểu cấu trúc cơ bản của iptables. iptables được tổ chức thành các bảng khác nhau, mỗi bảng có bộ chuỗi tích hợp riêng. Các bảng thường được sử dụng nhất là:

  • filter: Bảng này chịu trách nhiệm lọc các gói mạng, xác định có cho phép hay chặn chúng.
  • nat: Bảng này được sử dụng để dịch địa chỉ mạng, thường được sử dụng để chuyển tiếp cổng hoặc masquerading.
  • mangle: Bảng này được sử dụng để thay đổi gói chuyên dụng, chẳng hạn như đặt trường Type of Service (ToS) trong tiêu đề IP.

Mỗi bảng chứa một tập hợp các chuỗi tích hợp, chẳng hạn như INPUT, OUTPUTFORWARD, tương ứng với các giai đoạn khác nhau của quá trình truyền gói.

Bây giờ, hãy khám phá một số lệnh iptables cơ bản:

## List all existing rules
sudo iptables -L

## List rules for a specific table (e.g., filter)
sudo iptables -t filter -L

## Add a new rule to the INPUT chain to block traffic on port 80
sudo iptables -A INPUT -p tcp --dport 80 -j DROP

## Delete a rule from the INPUT chain
sudo iptables -D INPUT 1

## Save the current iptables configuration
sudo iptables-save > ~/project/iptables-rules.txt

Ví dụ về đầu ra:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             state NEW,RELATED,ESTABLISHED
ACCEPT     udp  --  anywhere             anywhere             state NEW,RELATED,ESTABLISHED
DROP       tcp  --  anywhere             anywhere             dport 80

Trong ví dụ trên, trước tiên chúng ta liệt kê tất cả các quy tắc iptables hiện có, sau đó thêm một quy tắc mới vào chuỗi INPUT để chặn lưu lượng truy cập trên cổng 80 và cuối cùng xóa quy tắc vừa thêm. Chúng ta cũng lưu cấu hình iptables hiện tại vào một tệp để tham khảo trong tương lai.

Quản lý các quy tắc tường lửa bằng iptables

Trong bước này, bạn sẽ học cách quản lý các quy tắc tường lửa bằng iptables. Chúng ta sẽ đề cập đến việc thêm, xóa và sửa đổi các quy tắc, cũng như lưu cấu hình hiện tại.

Đầu tiên, hãy liệt kê các quy tắc tường lửa hiện tại:

sudo iptables -L

Ví dụ về đầu ra:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             state NEW,RELATED,ESTABLISHED
ACCEPT     udp  --  anywhere             anywhere             state NEW,RELATED,ESTABLISHED
DROP       tcp  --  anywhere             anywhere             dport 80

Bây giờ, hãy thêm một quy tắc mới để cho phép lưu lượng SSH (cổng 22) trên chuỗi INPUT:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Để xóa quy tắc mà chúng ta đã thêm trước đó để chặn cổng 80, chúng ta có thể sử dụng lệnh sau:

sudo iptables -D INPUT -p tcp --dport 80 -j DROP

Cuối cùng, hãy lưu cấu hình iptables hiện tại vào một tệp:

sudo iptables-save > ~/project/iptables-rules.txt

Điều này sẽ lưu các quy tắc iptables hiện tại vào tệp iptables-rules.txt trong thư mục ~/project.

Triển khai các cấu hình iptables nâng cao

Trong bước cuối cùng này, bạn sẽ học cách triển khai một số cấu hình iptables nâng cao, chẳng hạn như chuyển tiếp cổng và dịch địa chỉ mạng (NAT).

Đầu tiên, hãy thiết lập chuyển tiếp cổng để chuyển hướng lưu lượng truy cập từ một cổng sang một cổng khác. Ví dụ: hãy chuyển tiếp lưu lượng truy cập từ cổng 8080 đến cổng 80 trên máy cục bộ:

## Enable IP forwarding
sudo sysctl -w net.ipv4.ip_forward=1

## Add a port forwarding rule
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 127.0.0.1:80

Bây giờ, bất kỳ lưu lượng truy cập nào đến hệ thống trên cổng 8080 sẽ được chuyển tiếp đến cổng 80 trên máy cục bộ.

Tiếp theo, hãy định cấu hình một quy tắc NAT (Network Address Translation) đơn giản để masquerade lưu lượng truy cập исходящий từ mạng cục bộ:

## Add a masquerade rule for the default interface
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Quy tắc này sẽ masquerade tất cả lưu lượng truy cập исходящий từ mạng cục bộ (giả sử giao diện mặc định là eth0) đến mạng bên ngoài.

Cuối cùng, hãy lưu cấu hình iptables hiện tại vào một tệp:

sudo iptables-save > ~/project/iptables-advanced-rules.txt

Điều này sẽ lưu các quy tắc iptables nâng cao vào tệp iptables-advanced-rules.txt trong thư mục ~/project.

Tóm tắt

Trong lab này, bạn đã học các khái niệm cơ bản về tường lửa iptables trong Linux, bao gồm cấu trúc cơ bản, các bảng và chuỗi tích hợp của nó. Bạn đã khám phá các lệnh iptables khác nhau để quản lý các quy tắc tường lửa, chẳng hạn như liệt kê các quy tắc hiện có, thêm các quy tắc mới, xóa các quy tắc và lưu cấu hình hiện tại. Bạn cũng đã hiểu cách sử dụng bảng filter để lọc gói, bảng nat để dịch địa chỉ mạng và bảng mangle để thay đổi gói chuyên dụng. Với kiến thức này, giờ đây bạn có thể định cấu hình và quản lý hiệu quả tường lửa của hệ thống Linux bằng iptables.

400+ câu lệnh phổ biến trong Linux