Tên chuỗi không phải là hook: iptables và nftables
Chuỗi chỉ là vật chứa; hook quyết định kernel có xem xét nó hay không. Hãy so sánh các chuỗi tích hợp của iptables với các chuỗi cơ sở của nftables trước khi sửa quy tắc.
Cả hai tường lửa đều có thể lọc lưu lượng VPN được chuyển tiếp, và chúng gắn quy tắc vào đường đi của gói theo những cách khác nhau. iptables có các chuỗi tích hợp bên trong một bảng, nên FORWARD tồn tại như một điểm hook có tên. nftables tách tên của chuỗi khỏi loại, hook và độ ưu tiên của nó, nghĩa là một chuỗi thông thường tên FORWARD không lọc gì cả. Việc so sánh hai mô hình giải thích vì sao một mục trông đúng trong công cụ này lại không có tác dụng trong công cụ kia.
Chuỗi là một vật chứa. Việc kernel có xem xét nó hay không phụ thuộc vào cách triển khai và cách tập quy tắc gắn nó.
Hai mô hình, hai cách gắn khác nhau
Trong iptables, bảng filter đi kèm ba chuỗi tích hợp, INPUT, FORWARD và OUTPUT, và -N tạo một chuỗi do người dùng định nghĩa chỉ có tác dụng khi nhảy tới nó từ một trong số đó. Ngược lại, sách hướng dẫn nftables định nghĩa các chuỗi cơ sở, vốn khai báo loại, hook và độ ưu tiên, cùng các chuỗi thông thường, vốn không làm vậy. Một chuỗi cơ sở có thể mang bất kỳ tên nào, và một chuỗi thông thường tên FORWARD không nhận được thuộc tính nào từ nhãn của nó. Đó là toàn bộ khác biệt, và nó vô hình trong một bài hướng dẫn chỉ hiển thị văn bản quy tắc.
Các backend tương thích thêm lý do thứ hai để không suy ra hành vi từ tên lệnh. Tài liệu iptables ghi nhận những thao tác khác đi dưới iptables-nft, nên hãy coi nftables gốc, iptables-nft và một tập quy tắc cũ là ba hệ thống chứ không phải ba cách viết của một hệ thống.
Đọc lỗi trong ngữ cảnh thực của nó
Một bảng thiếu, một lỗi quyền, một tính năng kernel không khả dụng và một chuỗi có tên bị thiếu là bốn phát hiện khác nhau, và chỉ một phát hiện liên quan đến chuỗi. Ghi lại phiên bản công cụ, họ địa chỉ và bảng được yêu cầu, không gian tên mạng và lỗi chính xác đầu tiên. Sau đó kiểm tra thành phần nào sở hữu tập quy tắc: một dịch vụ tường lửa hoặc một cổng do sản phẩm quản lý có thể sinh ra chuỗi và thứ tự riêng. Thêm một chuỗi gốc bên cạnh chúng để nguyên chính sách được quản lý và khiến bản kiểm kê rối hơn.
Không gian tên của một container có thể chứa tập quy tắc khác với máy chủ, nên một lệnh chạy trong ngữ cảnh sai không thể cho biết chuỗi nào đã thấy gói được chuyển tiếp. Nâng quyền vì không thấy chuỗi mong đợi không phải là chẩn đoán.
Bộ đếm chứng minh việc tới được, không phải phán quyết
Bộ đếm quy tắc cho bạn biết một quy tắc đã được tới. Chúng không cho biết một quy tắc sau đó đã cho phép thao tác, và không chứng minh mọi đường thay thế đều bị từ chối. Hãy đọc chúng trong một luồng được cấp phép vô hại, cùng với thứ tự quy tắc và cách gắn chuỗi, và coi chúng là một quan sát chứ không phải phán quyết. Bộ đếm khác không trên một quy tắc drop nghĩa là lưu lượng đã chạm vào nó; nó không nói gì về lưu lượng không chạm vào nó.
Chuyển tiếp IP của kernel là một thiết lập hoàn toàn riêng. Việc một chuỗi tồn tại không bật chuyển tiếp, và việc thiếu một nhãn quen thuộc không có nghĩa là chuyển tiếp đã dừng.
Mô tả luồng bạn muốn bảo vệ
Viết ra một yêu cầu của máy khách sau khi giải bọc: nguồn, đích, họ địa chỉ, và việc nó kết thúc tại cổng hay đi qua cổng. Đầu vào của dịch vụ cục bộ và lưu lượng được chuyển tiếp được quan sát tại các điểm khác nhau, nên chúng cần quy tắc và phép thử khác nhau. Với VPN có cầu, hãy kiểm tra cả đường cầu, vì một chuỗi ở mức IP không tự động giám sát các khung Ethernet.
Bảo toàn quyền truy cập khôi phục độc lập trước khi thay đổi một cổng từ xa. Sau đó xác nhận luồng dự định và các từ chối cần thiết dưới cùng một tập quy tắc. Một chuỗi rỗng mới với tên quen thuộc không phải là sửa chữa.
Việc so sánh kết thúc ở một câu hỏi: kernel thực sự gọi hook nào cho gói này? Trả lời điều đó, và tên chuỗi không còn quan trọng nữa.