Iptables là một công cụ tường lửa được sử dụng để quản lý các quy tắc truy cập mạng trên Linux. Hướng dẫn này sẽ giúp bạn thực hiện các tác vụ liên quan đến:
Lưu ý: Khi làm việc với tường lửa, hãy cẩn thận để không chặn mất kết nối SSH (cổng 22). Nếu mất truy cập, bạn có thể cần kết nối qua console để khôi phục.
Hướng dẫn giả sử bạn đang sử dụng máy chủ Linux có lệnh iptables
được cài đặt và tài khoản người dùng có quyền sudo
.
Nếu bạn cần trợ giúp thiết lập ban đầu, hãy tham khảo hướng dẫn Cài đặt Máy chủ với Ubuntu 20.04, Debian hoặc CentOS.
Có hai cách để xem các quy tắc iptables đang hoạt động: xem dưới dạng bảng hoặc danh sách các quy tắc chi tiết.
Để liệt kê tất cả quy tắc đang dùng dưới dạng danh sách chi tiết, sử dụng lệnh:
sudo iptables -S
Kết quả xuất ra sẽ giống như các lệnh đã tạo ra các quy tắc này, nhưng không có tiền tố iptables
.
Để giới hạn hiển thị vào một chuỗi cụ thể, đặt tên chuỗi sau -S
. Ví dụ để xem quy tắc trong chuỗi TCP:
sudo iptables -S TCP
Bạn có thể liệt kê các quy tắc dưới dạng bảng, giúp so sánh các quy tắc dễ hơn bằng lệnh:
sudo iptables -L
Kết quả sẽ liệt kê các quy tắc theo từng chuỗi.
Bạn cũng có thể giới hạn vào một chuỗi cụ thể như:
sudo iptables -L INPUT
Bảng có các cột:
Cột cuối cùng chưa được ghi nhãn chứa các tùy chọn bổ sung như trạng thái kết nối, cổng nguồn/đích.
Sử dụng tùy chọn -v
cùng với -L
để hiển thị số lượng gói tin và tổng kích thước byte cho mỗi quy tắc:
sudo iptables -L INPUT -v
Hai cột mới là pkts
(gói tin) và bytes
(kích thước).
Để xóa, đặt lại các bộ đếm gói tin và byte về 0, sử dụng option -Z
:
sudo iptables -Z
sudo iptables -Z INPUT
sudo iptables -Z INPUT 1
Để xóa một quy tắc bằng cách sử dụng toàn bộ định nghĩa của nó, dùng option -D
và định nghĩa của quy tắc (không có -A
):
Ví dụ, để xóa quy tắc loại bỏ gói tin không hợp lệ:
sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP
Để biết số thứ tự của các quy tắc, liệt kê bảng với tùy chọn --line-numbers
:
sudo iptables -L --line-numbers
Sau đó xóa quy tắc theo số thứ tự trong chuỗi bằng cách:
sudo iptables -D INPUT 3
(Ở đây, xóa quy tắc thứ 3 trong chuỗi INPUT)
Để xóa tất cả các quy tắc trong một chuỗi, sử dụng option -F
hoặc --flush
cùng tên chuỗi:
sudo iptables -F INPUT
Để làm trống tất cả các chuỗi:
sudo iptables -F
Cảnh báo: Hãy cẩn thận khi flush nếu chính sách mặc định chuỗi đó là drop hoặc deny để tránh bị mất kết nối SSH.
Để thiết lập iptables về trạng thái mặc định chấp nhận mọi kết nối:
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
nat
và mangle
, flush tất cả chuỗi, và xóa tất cả chuỗi tùy chỉnh:sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X
Sau đó tường lửa không còn chặn lưu lượng nào.
iptables -D
và iptables -F
Option | Mô tả | Mục đích | Ví dụ |
---|---|---|---|
-D |
Xóa một quy tắc cụ thể trong chuỗi | Dùng để xóa từng quy tắc riêng lẻ | sudo iptables -D INPUT 1 |
-F |
Làm rỗng tất cả các quy tắc trong chuỗi | Dùng để xóa toàn bộ quy tắc trong chuỗi | sudo iptables -F INPUT |
Nếu bạn có chuỗi tường lửa do người dùng định nghĩa (chuỗi tùy chỉnh), có thể xóa quy tắc trong đó bằng:
sudo iptables -D custom_chain 1
Thay custom_chain
bằng tên chuỗi tùy chỉnh của bạn và số 1
bằng vị trí quy tắc muốn xóa.
Lưu ý cần cẩn thận khi xóa quy tắc để không làm mất an toàn hệ thống.
Lỗi: “iptables: No chain/target/match by that name”
sudo iptables -L
. Nếu chuỗi chưa có, tạo với sudo iptables -N <tên chuỗi>
.Lỗi: quy tắc không bị xóa do không khớp
iptables -S <tên chuỗi>
rồi đối chiếu.Lỗi: xóa nhầm quy tắc khi dùng số thứ tự
-nL
để liệt kê kèm số thứ tự, kiểm tra chính xác rồi mới xóa.Làm thế nào để xem các quy tắc iptables đang hoạt động?
Dùng sudo iptables -L
để xem tất cả chuỗi và quy tắc, hoặc dùng sudo iptables -S
để xem chi tiết lệnh tạo ra quy tắc.
Làm sao để xóa một quy tắc iptables cụ thể?
Dùng iptables -D
theo chuỗi và số thứ tự quy tắc hoặc theo định nghĩa. Ví dụ:
sudo iptables -D INPUT <số thứ tự>
3. **Phân biệt giữa flush và delete là gì?**
- Flush (dọn sạch) xóa tất cả quy tắc trong chuỗi.
- Delete xóa một quy tắc cụ thể.
4. **Làm thế nào để xóa tất cả quy tắc trong một chuỗi?**
Dùng `sudo iptables -F <tên chuỗi>` để xóa tất cả quy tắc trong chuỗi đó.
5. **Có thể khôi phục quy tắc iptables đã xóa không?**
Có thể thêm lại quy tắc bằng `iptables -A` với định nghĩa quy tắc mong muốn.
---
## Kết luận
Sau khi theo dõi hướng dẫn, bạn đã biết cách liệt kê và xóa quy tắc tường lửa iptables, làm rỗng chuỗi, và phân biệt giữa các phương pháp xóa.
Lưu ý rằng các thay đổi qua lệnh `iptables` chỉ tạm thời và cần lưu cấu hình để tồn tại qua khởi động lại server. Tham khảo phần Lưu quy tắc trong hướng dẫn tổng quan về các quy tắc tường lửa cơ bản.
Để học thêm, bạn có thể tham khảo các hướng dẫn nâng cao về iptables và ufw để xây dựng hệ thống tường lửa hiệu quả cho máy chủ của mình.