28. tháng 3 2025
Từ rất lâu trước đây, tôi đã từng sử dụng iptables trên hệ điều hành Ubuntu phiên bản đầu tiên. Việc cấu hình tường lửa vào thời điểm đó khá phức tạp. Đặc biệt là khi thêm quy tắc accept trước reject, và nhiều tài liệu trực tuyến lúc bấy giờ khuyên chỉ cần thêm các quy tắc sau cùng, nhưng thực tế cách làm này lại có vấn đề. Do đó, tôi vẫn còn nhớ rất rõ về điều này.
Lần này, vấn đề tôi gặp phải liên quan đến sự thiếu hiểu biết sâu sắc về iptables. Tôi cảm thấy rằng logic của iptables cũng có một mu88 mu88 casino số điểm chưa hoàn hảo. Ví dụ như lệnh cơ bản iptables -L
, theo trợ giúp (help), lệnh này sẽ hiển thị tất cả các quy tắc thuộc mọi chuỗi (chain)! Điều này bao gồm bốn bảng nội bộ: Filter, NAT, Mangle và Raw.
Đây là bảng mặc định nếu không truyền tham số -t
. Nó chứa ba chuỗi được tích hợp sẵn:
Khi dùng lệnh iptables -L
mà không chỉ định bảng nào, nó sẽ tự động hiển thị các quy tắc từ bảng Filter. Vì vậy, nếu bạn muốn xem các quy tắc của bảng khác, chẳng hạn như Mangle hay Nat, thì cần phải chỉ định rõ ràng bằng cách thêm tùy chọn -t
.
Bảng này được tham khảo khi một gói tin tạo ra kết nối mới. Nó bao gồm ba chuỗi tích hợp sẵn:
Bảng này chủ yếu được sử dụng cho việc thay đổi gói tin chuyên biệt. Tùy thuộc vào phiên bản nhân (kernel), cấu trúc của bảng này có thể khác nhau. Từ phiên bản nhân 2.4.18 trở đi, bảng Mangle hỗ trợ năm chuỗi tích hợp sẵn:
Chú ý rằng cấu trúc bảng Mangle có sự khác biệt giữa các phiên bản nhân cũ và mới, nhưng hiện nay hầu hết các hệ thống đều sử dụng những phiên bản nhân mới hơn.
Bảng này chủ yếu được sử dụng để cấu hình các ngoại lệ khỏi việc theo dõi kết nối (connection tracking) thông qua mục tiêu NOTRACK. Nó đăng ký tại các móc nối (hook) của netfilter với mức ưu tiên cao hơn, do đó nó được gọi trước ip_conntrack hoặc bất kỳ bảng IP nào khác. Bảng Raw cung cấp hai chuỗi tích hợp sẵn:
Mỗi chuỗi trong các bảng này sẽ chứa các quy tắc cụ thể (rule). Trong các bài viết tiếp theo, tôi sẽ chi tiết hơn về cách cấu hình và áp dụng các quy tắc này.