Đối với một bộ quy tắc chung, người ta có thể hỏi nftables để thực hiện tra cứu tuyến đường trước bằng cách sử dụng xơ
biểu thức thay vì đợi ngăn xếp định tuyến thực hiện. Điều này cho phép liên quan đến (tương lai) đầu ra giao diện mặc dù chưa tồn tại (quyết định định tuyến không xảy ra), với chi phí tra cứu thêm. Sau đó, nếu kết quả cho biết gói sẽ được định tuyến, hãy ngăn việc theo dõi xảy ra bằng cách sử dụng không có dấu vết
bản tường trình.
BIỂU HIỆN FIB
xơ {saddr | chadr | đánh dấu | nếu | oif} [. ...] {oif | oifname | loại}
Một xơ truy vấn biểu thức xơ (chuyển tiếp cơ sở thông tin) đến
có được thông tin như chỉ số giao diện đầu ra cụ thể
địa chỉ sẽ sử dụng. Đầu vào là một bộ các phần tử được sử dụng như
đầu vào cho xơ các chức năng tra cứu.
TUYÊN BỐ KHÔNG THEO DÕI
Câu lệnh notrack cho phép vô hiệu hóa theo dõi kết nối cho
gói tin nhất định.
không có dấu vết
Lưu ý rằng để tuyên bố này có hiệu quả, nó phải được áp dụng cho
các gói tin trước một theo dõi tra cứu xảy ra. Vì vậy, nó cần phải ngồi
trong một chuỗi với một trong hai định tuyến trước hoặc đầu ra móc và ưu tiên móc
từ -300 trở xuống.
Vì vậy, người ta nên thực hiện kiểm tra tuyến đường "đơn giản" từ định tuyến trước, chỉ sử dụng địa chỉ đích làm công cụ chọn và kiểm tra sự tồn tại của giao diện đầu ra (gói không thể định tuyến hoặc gói dành cho máy chủ lưu trữ sẽ không giải quyết được bất kỳ vấn đề nào). Có một ngoại lệ cho lo (loopback) để giữ cho nó được theo dõi: trong khi nó đại diện cho lưu lượng truy cập cục bộ, một gói được gửi (thông qua đầu ra path) từ máy chủ đến chính nó quay trở lại định tuyến trước đường dẫn và không có giao diện đầu ra của lo quá. Vì gói gửi đi đã tạo một theo dõi mục nhập, tốt hơn nên giữ điều này nhất quán.
nft thêm bảng ip không trạng thái
nft add chain ip định tuyến trước không trạng thái '{ ưu tiên định tuyến trước hook bộ lọc loại -310; chính sách chấp nhận; }'
nft thêm quy tắc ip định tuyến trước không trạng thái iif != lo fib Daddr oif tồn tại notrack
Thay thế ip
gia đình với inet
họ kết hợp nên mở rộng hành vi chung tương tự sang IPv4+IPv6.
Để cụ thể hơn, người ta có thể chỉ định giao diện đầu ra trong tương lai với fib daddr oif eth1
ví dụ, ít nhiều tương đương với oif eth1
, nhưng cũng có sẵn trong định tuyến trước.
Tất nhiên, nếu cấu trúc liên kết được biết trước thì có thể tránh tra cứu FIB bằng cách sử dụng một hoặc một số quy tắc dựa trên các kiểm tra địa chỉ vì các tuyến sau đó được quản trị viên biết trước. Có thể cần đo điểm chuẩn các kết quả để biết liệu điều này có thú vị hơn việc giữ một phương pháp chung hay không.
Ví dụ: với thông tin được cung cấp của OP, thay thế quy tắc trước đó bằng:
nft thêm quy tắc ip định tuyến trước không trạng thái 'ip Daddr != { 192.168.1.1, 192.168.2.1, 127.0.0.0/8 } notrack'
nên có tác dụng gần như tương đương. 127.0.0.0/8 có mặt vì những lý do tương tự như trên với lo giao diện.
Xử lý phát sóng (như 192.168.1.255 nhận được trên eth0) và phát đa hướng (như link-local 224.0.0.1 nhận được trên một giao diện) có thể không hoạt động giống nhau trong cả hai phương pháp cũng như không như mong đợi và có thể yêu cầu các quy tắc bổ sung cho các nhu cầu cụ thể, đặc biệt là với phương pháp thứ 2. Vì việc theo dõi quảng bá và phát đa hướng hiếm khi hữu ích, vì nguồn trả lời sẽ không (và không thể) là đích của địa chỉ quảng bá hoặc phát đa hướng ban đầu nên mục nhập theo dõi sẽ không bao giờ "thấy" lưu lượng truy cập hai chiều, điều này thường không quan trọng lắm đối với quy tắc nhà nước.
ghi chú
Điều này thường sẽ không tương thích với NAT trạng thái.
Tôi hiểu rằng DNAT đối với máy chủ từ xa sẽ khiến lưu lượng trả lời của nó không bị hủy NAT và không thành công, đồng thời SNAT được chuyển tiếp đó sẽ không kích hoạt vì không có theo dõi mục đã tạo. SNAT hiếm khi được sử dụng trong đường dẫn đầu vào sẽ ổn và kết hợp DNAT+SNAT (sử dụng nguồn địa chỉ cục bộ) cũng có thể hoạt động kể từ đó theo cả hướng ban đầu và hướng trả lời có liên quan đến đích cục bộ, vì vậy theo dõi mục sau đó phải luôn được tạo hoặc tra cứu chính xác.
bộ quy tắc tiêu chuẩn
Quy tắc thực tế sử dụng iptables hoặc nftables (trong bảng khác của chính nó) sau đó có thể được thực hiện như bình thường, bao gồm các quy tắc trạng thái cho chính máy chủ lưu trữ. Vì lưu lượng truy cập được định tuyến sẽ không tạo theo dõi các mục, quy tắc nếu có liên quan đến lưu lượng truy cập như vậy chỉ nên ở trạng thái không trạng thái và không sử dụng bất kỳ ct
biểu thức bởi vì nó sẽ không bao giờ phù hợp.
xác minh hành vi
Người ta có thể kiểm tra hành vi tổng thể ngay cả khi không có quy tắc tường lửa thích hợp bằng cách:
sử dụng một hình nộm ct
quy tắc để đảm bảo theo dõi cơ sở được đăng ký trong không gian tên mạng hiện tại.
nft thêm bảng ip mytable
nft add chain ip mytable mychain '{ type filter hook ưu tiên định tuyến trước -150; chính sách chấp nhận; }'
nft thêm quy tắc ip mytable mychain ct trạng thái mới
sử dụng theo dõi
công cụ để theo dõi các sự kiện:
conntrack -E
tạo lưu lượng truy cập từ xa
MỚI theo dõi các mục sau đó sẽ được tạo cho lưu lượng được bộ định tuyến nhận, nhưng không phải cho lưu lượng được định tuyến.