Điểm:1

các vấn đề ưu tiên chuỗi nftables (nft)

lá cờ fr

nft đang khiến tôi đau đầu vô tận, cho dù tôi có chỉnh sửa chính sách như thế nào, tôi vẫn không thể làm cho nó hoạt động.

Khái niệm tôi có trong tâm trí:

  • Một chuỗi "cơ sở" nơi các quy tắc chung tồn tại (ví dụ: cho phép ssh vân vân.)
  • Một hoặc nhiều ứng dụng cụ thể nơi các quy tắc cụ thể của daemon hoạt động (ví dụ: chuỗi máy chủ http)

Tôi đã thử nhiều hoán vị quy tắc khác nhau, nhưng tôi không bao giờ có thể có cả lưu lượng truy cập "cơ sở" + daemon, cuối cùng tôi luôn chặn cái này hay cái kia! ;-(

Đây là cấu hình (đơn giản hóa) hiện tại của tôi (như được cấu thành hiện tại, nó cho phép ssh nhưng không cho phép http)

/etc/nftables.conf:

#!/usr/sbin/nft -f                                                                                                                                                                                                                                              
tuôn ra quy tắc                                                                                                                       
bộ lọc inet bảng {   
     bộ đếm input_ssh {}     
        đặt my_admin_ipv4 {                                                                                                        
                gõ ipv4_addr                                                                                                      
                khoảng thời gian cờ                                                                                                      
                phản đối                                                                                                             
                phần tử = {                                                                                                        
                        10.0.0.0/8,                                                                                                 
                        172.16.0.0/12,                                                                                              
                        192.168.0.0/16                                                                                                                                                                                      
                }                                                                                                                   
        }         
       chuỗi đầu vào {
                loại bộ lọc hook bộ lọc ưu tiên đầu vào;
                iifname lo chấp nhận nhận xét "Cho phép lưu lượng lặp lại";
                trạng thái ct đã thiết lập, liên quan chấp nhận nhận xét "Cho phép kết nối đã thiết lập/liên quan";
                trạng thái ct bỏ bình luận không hợp lệ "Từ chối kết nối không hợp lệ";

                # SSH
                tcp dport ssh ip saddr @my_admin_ipv4 tên bộ đếm input_ssh chấp nhận nhận xét "Cho phép SSH IPv4 từ Quản trị viên";
    giảm chính sách;
        }
        chuỗi về phía trước {
                loại móc bộ lọc ưu tiên chuyển tiếp 0;
                giảm chính sách;
        }
        đầu ra chuỗi {
                đầu ra móc lọc loại ưu tiên 0;
        }
 bao gồm "/etc/nft/*.conf"
}

/etc/nft/http.conf:

truy cập đầu vào_http {} 
   chuỗi http {
    loại bộ lọc hook bộ lọc ưu tiên đầu vào - 1;
      #HTT#
      tên bộ đếm tcp dport {80,443} input_nginx chấp nhận nhận xét "Cho phép HTTP";
    chính sách chấp nhận; 
    }
Điểm:1
lá cờ cl
A.B

Bạn có thể chọn đánh dấu các gói được chấp nhận là hành vi an toàn trong các chuỗi sau của cùng một hook.

  • mỗi quy tắc chấp nhận nên đánh dấu gói

    Các quy tắc thực hiện chấp nhận rõ ràng nên đánh dấu gói ngay trước khi chấp nhận nó. Bất kỳ sự xuất hiện nào của:

    ... Chấp nhận
    

    nên được thay thế bằng:

    ... dấu meta được đặt 0xf00 chấp nhận
    

    Giá trị không quan trọng miễn là nó không phải là 0 nếu không có vai trò nào khác đối với nhãn hiệu.

  • mỗi chuỗi phải chấp nhận một gói được đánh dấu vì đó là hành vi an toàn

    bằng cách sử dụng quy tắc này sớm trong chuỗi:

    dấu meta != 0 chấp nhận
    

Đó là ý tưởng chung. Các điều chỉnh và ngoại lệ vẫn có thể được thực hiện nếu nó hợp lý hơn.

Đây là bộ quy tắc được xem lại theo cách tiếp cận này. Nhãn hiệu được chấp nhận sau khi ct ... thả không hợp lệ quy tắc là quy tắc quan trọng không nên bỏ qua (và thực tế có thể đã được thực hiện trong chuỗi trước đó một lần và mãi mãi vì đó là quy tắc loại bỏ). Nếu bên dưới, đầu vào là chuỗi cuối cùng trong hook bộ lọc/đầu vào thì không thực sự cần thiết để đánh dấu các gói được chấp nhận, nhưng làm như vậy không hại gì.

/etc/nftables.conf::

tuôn ra quy tắc 
bộ lọc inet bảng {   
    bộ đếm input_ssh {}     
    đặt my_admin_ipv4 {                                                                                                        
        gõ ipv4_addr                                                                                                      
        khoảng thời gian cờ                                                                                                      
        phản đối                                                                                                             
        phần tử = {                                                                                                        
            10.0.0.0/8,                                                                                                 
            172.16.0.0/12,                                                                                              
            192.168.0.0/16                                                                                                                                                                                      
        }                                                                                                                   
    }         
    chuỗi đầu vào {
        loại móc bộ lọc đầu vào bộ lọc ưu tiên; giảm chính sách;
        iifname lo meta mark set 0x1 accept comment "Allow loopback traffic";
        trạng thái ct đã được thiết lập, dấu meta liên quan được đặt 0x1 chấp nhận nhận xét "Cho phép các kết nối được thiết lập/có liên quan";
        trạng thái ct bỏ bình luận không hợp lệ "Từ chối kết nối không hợp lệ";
        dấu meta != 0 chấp nhận

        # SSH
        tcp dport ssh ip saddr @my_admin_ipv4 tên bộ đếm input_ssh dấu meta được đặt 0x1 chấp nhận nhận xét "Cho phép SSH IPv4 từ Quản trị viên";
    }
    chuỗi về phía trước {
        loại bộ lọc hook ưu tiên về phía trước 0; giảm chính sách;                      
    }
    đầu ra chuỗi {
        đầu ra móc lọc loại ưu tiên 0; chính sách chấp nhận;
    }
    bao gồm "/etc/nft/*.conf"
}

/etc/nft/http.conf (đã thay thế counter_nginx với truy cập_http). Các dấu meta != 0 chấp nhận quy tắc có lẽ không cần thiết ở đây vì dù sao thì có thể không có bất kỳ chuỗi nào khác trước đó, nhưng cũng không hại gì khi có nó.

    truy cập đầu vào_http {} 
    chuỗi http {
        loại bộ lọc hook bộ lọc ưu tiên đầu vào - 1; chính sách chấp nhận;
         dấu meta != 0 chấp nhận
         #HTT#
         tcp dport {80,443} tên bộ đếm dấu meta input_http được đặt 0x2 chấp nhận nhận xét "Cho phép HTTP";
    }

Phương pháp này sử dụng các dấu nên sẽ khó tích hợp hơn với các quy tắc tường lửa khác đã sử dụng các dấu cho các mục đích khác. Vẫn có thể thực hiện được bằng cách đặt trước một vài bit của nhãn hiệu bằng các thao tác theo bit.

Little Code avatar
lá cờ fr
Điều này có vẻ thú vị, tôi sẽ kiểm tra và cho bạn biết.Nhưng có một câu hỏi, tôi thấy bạn đã thay đổi `policy drop` thành `policy accept` trên bộ lọc đầu vào chính? Chắc chắn điều này có nghĩa là bất cứ điều gì chưa từng có được chấp nhận?
A.B avatar
lá cờ cl
A.B
Đánh máy bằng cắt/dán (và đơn giản hóa câu trả lời ban đầu bằng cách sử dụng chuỗi "phán quyết" chuyên dụng). Tôi sẽ thả trở lại.
Little Code avatar
lá cờ fr
Tôi hiểu rồi, vậy bạn đang nói rằng có thể có một chuỗi thứ ba không có gì trong đó ngoài `policy drop` và `meta mark != 0 accept`? Tôi đoán rằng có lẽ làm cho nó sạch hơn theo một cách nào đó. Tôi chỉ đang tải lên cấu hình ngay bây giờ, sẽ cho bạn biết nó diễn ra như thế nào.
Little Code avatar
lá cờ fr
Hmm, dường như không thể hiện tình yêu với tôi (đã cập nhật Q gốc với cú pháp mới). SSH đang hoạt động nhưng không phải web.
Little Code avatar
lá cờ fr
Điều thú vị là `set` bị thiếu không được chọn bởi `nft -c -f /etc/nftables.conf`? Nhưng bây giờ nó hoạt động!
A.B avatar
lá cờ cl
A.B
dấu meta là một biểu thức (tương đương với đối sánh của iptables) trong khi bộ đánh dấu meta là một câu lệnh (tương đương với mục tiêu của iptables, ngoại trừ nó không phải là thiết bị đầu cuối cho quy tắc). Cả hai đều hợp lệ.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.