Score:1

ปัญหาลำดับความสำคัญของลูกโซ่ nftables (nft)

ธง fr

เอ็นเอฟที ทำให้ฉันปวดหัวไม่รู้จบ ไม่ว่าฉันจะปรับแต่งนโยบายอย่างไร ฉันก็ยังไม่สามารถทำงานได้

แนวคิดที่ฉันมีในใจ:

  • เชน "ฐาน" หนึ่งเชนที่มีกฎทั่วไปอยู่ (เช่น อนุญาต จุ๊ๆ ฯลฯ)
  • แอ็พพลิเคชันอย่างน้อยหนึ่งแอ็พพลิเคชันเฉพาะที่มีกฎเฉพาะของ daemon อยู่ (เช่น http server chain)

ฉันได้ลองใช้กฎการเรียงสับเปลี่ยนต่างๆ มากมาย แต่ฉันไม่สามารถรับทั้งทราฟฟิก "พื้นฐาน" + daemon ได้ ฉันมักจะลงเอยด้วยการบล็อกอย่างใดอย่างหนึ่งเสมอ ! ;-(

นี่คือการกำหนดค่าปัจจุบัน (แบบง่าย) ของฉัน (ตามที่อนุญาตในปัจจุบัน จุ๊ๆ แต่ไม่อนุญาต http)

/etc/nftables.conf:

#!/usr/sbin/nft -f                                                                                                                                                                                                                                              
ล้างชุดกฎ                                                                                                                       
ตัวกรองตาราง inet {   
     ตัวนับ input_ssh {}     
        ตั้ง my_admin_ipv4 {                                                                                                        
                พิมพ์ ipv4_addr                                                                                                      
                ช่วงเวลาธง                                                                                                      
                เคาน์เตอร์                                                                                                             
                องค์ประกอบ = {                                                                                                        
                        10.0.0.0/8,                                                                                                 
                        172.16.0.0/12,                                                                                              
                        192.168.0.0/16                                                                                                                                                                                      
                }                                                                                                                   
        }         
       อินพุตลูกโซ่ {
                ประเภท ตัวกรอง เบ็ด ตัวกรองลำดับความสำคัญอินพุต;
                iifname lo ยอมรับความคิดเห็น "อนุญาตการรับส่งข้อมูลย้อนกลับ";
                สถานะ ct ก่อตั้งขึ้นที่เกี่ยวข้อง ยอมรับความคิดเห็น "อนุญาตการเชื่อมต่อที่สร้างแล้ว/ที่เกี่ยวข้อง";
                ct ระบุความคิดเห็นที่ไม่ถูกต้อง "ปฏิเสธการเชื่อมต่อที่ไม่ถูกต้อง";

                #สสส
                tcp dport ssh ip saddr @my_admin_ipv4 ชื่อตัวนับ input_ssh ยอมรับความคิดเห็น "อนุญาต IPv4 SSH จากผู้ดูแลระบบ";
    นโยบายลดลง;
        }
        ห่วงโซ่ไปข้างหน้า {
                ประเภทตัวกรอง hook ลำดับความสำคัญไปข้างหน้า 0;
                นโยบายลดลง;
        }
        เอาต์พุตลูกโซ่ {
                ประเภทลำดับความสำคัญเอาต์พุตของตะขอตัวกรอง 0;
        }
 รวม "/etc/nft/*.conf"
}

/etc/nft/http.conf:

ตัวนับ input_http {} 
   เชน http {
    ประเภท ตัวกรองเบ็ด ตัวกรองลำดับความสำคัญอินพุต - 1;
      # HTTP #
      tcp dport {80,443} ชื่อตัวนับ input_nginx ยอมรับความคิดเห็น "อนุญาต HTTP";
    นโยบายยอมรับ; 
    }
Score:1
ธง cl
A.B

คุณสามารถเลือกที่จะทำเครื่องหมายแพ็กเก็ตที่จะยอมรับเป็นการดำเนินการที่ปลอดภัยในห่วงโซ่ต่อไปนี้ของตะขอเดียวกัน

  • กฎการยอมรับแต่ละข้อควรทำเครื่องหมายที่แพ็กเก็ต

    กฎที่ทำการยอมรับอย่างชัดแจ้งควรทำเครื่องหมายแพ็กเก็ตก่อนที่จะยอมรับ เหตุการณ์ใด ๆ ของ:

    ... ยอมรับ
    

    ควรแทนที่ด้วย:

    ... ชุดเครื่องหมายเมตา 0xf00 ยอมรับ
    

    ค่าไม่สำคัญตราบใดที่ไม่ใช่ 0 หากไม่มีบทบาทอื่นในการทำเครื่องหมาย

  • แต่ละห่วงโซ่ควรยอมรับแพ็กเก็ตที่ทำเครื่องหมายไว้เนื่องจากเป็นการดำเนินการที่ปลอดภัย

    โดยใช้กฎนี้ในช่วงต้นของห่วงโซ่:

    เครื่องหมายเมตา != 0 ยอมรับ
    

นั่นคือแนวคิดทั่วไป การปรับเปลี่ยนและข้อยกเว้นยังคงสามารถทำได้หากเหมาะสมกว่า

นี่คือชุดกฎที่เยี่ยมชมตามแนวทางนี้ เครื่องหมายได้รับการยอมรับหลังจาก ct ... การลดลงไม่ถูกต้อง กฎซึ่งเป็นกฎสำคัญที่ไม่ควรข้าม (และจริงๆ แล้วสามารถทำได้ในห่วงโซ่ก่อนหน้านี้ครั้งแล้วครั้งเล่า เนื่องจากเป็นกฎการดรอป) หากอยู่ด้านล่าง อินพุตคือเชนสุดท้ายใน hook ของตัวกรอง/อินพุต ไม่จำเป็นต้องทำเครื่องหมายแพ็กเก็ตที่ยอมรับ แต่ก็ไม่เสียหายที่จะทำเช่นนั้น

/etc/nftables.conf::

ล้างชุดกฎ 
ตัวกรองตาราง inet {   
    ตัวนับ input_ssh {}     
    ตั้ง my_admin_ipv4 {                                                                                                        
        พิมพ์ ipv4_addr                                                                                                      
        ช่วงเวลาธง                                                                                                      
        เคาน์เตอร์                                                                                                             
        องค์ประกอบ = {                                                                                                        
            10.0.0.0/8,                                                                                                 
            172.16.0.0/12,                                                                                              
            192.168.0.0/16                                                                                                                                                                                      
        }                                                                                                                   
    }         
    อินพุตลูกโซ่ {
        ประเภท ตัวกรอง เบ็ด ตัวกรองลำดับความสำคัญอินพุต; นโยบายลดลง;
        iifname lo meta mark set 0x1 ยอมรับความคิดเห็น "อนุญาตการรับส่งข้อมูลย้อนกลับ";
        สถานะ ct ที่จัดตั้งขึ้น ชุดเครื่องหมายเมตาที่เกี่ยวข้อง 0x1 ยอมรับความคิดเห็น "อนุญาตการเชื่อมต่อที่สร้างแล้ว/ที่เกี่ยวข้อง";
        ct ระบุความคิดเห็นที่ไม่ถูกต้อง "ปฏิเสธการเชื่อมต่อที่ไม่ถูกต้อง";
        เครื่องหมายเมตา != 0 ยอมรับ

        #สสส
        tcp dport ssh ip saddr @my_admin_ipv4 ชื่อตัวนับ input_ssh meta mark set 0x1 ยอมรับความคิดเห็น "อนุญาต IPv4 SSH จากผู้ดูแลระบบ";
    }
    ห่วงโซ่ไปข้างหน้า {
        ประเภทตัวกรอง hook ลำดับความสำคัญไปข้างหน้า 0; นโยบายลดลง;                      
    }
    เอาต์พุตลูกโซ่ {
        ประเภทลำดับความสำคัญเอาต์พุตของตะขอตัวกรอง 0; นโยบายยอมรับ;
    }
    รวม "/etc/nft/*.conf"
}

/etc/nft/http.conf (เปลี่ยน counter_nginx กับ counter_http). เดอะ เครื่องหมายเมตา != 0 ยอมรับ อาจไม่จำเป็นต้องใช้กฎที่นี่เนื่องจากอาจไม่มีห่วงโซ่อื่นมาก่อน แต่ก็ไม่เจ็บที่จะมีเช่นกัน

    ตัวนับ input_http {} 
    เชน http {
        ประเภท ตัวกรองเบ็ด ตัวกรองลำดับความสำคัญอินพุต - 1; นโยบายยอมรับ;
         เครื่องหมายเมตา != 0 ยอมรับ
         # HTTP #
         tcp dport {80,443} ชื่อตัวนับ input_http ชุดเครื่องหมายเมตา 0x2 ยอมรับความคิดเห็น "อนุญาต HTTP";
    }

วิธีนี้ใช้เครื่องหมาย ดังนั้นจะรวมเข้ากับกฎไฟร์วอลล์อื่นที่ใช้เครื่องหมายเพื่อวัตถุประสงค์อื่นได้ยากขึ้น ยังคงเป็นไปได้โดยสงวนเครื่องหมายไว้สองสามบิตด้วยการดำเนินการระดับบิต

Little Code avatar
fr flag
มันดูน่าสนใจ ฉันจะทดสอบและแจ้งให้คุณทราบแต่คำถามหนึ่ง ฉันเห็นว่าคุณได้เปลี่ยน `การลดลงของนโยบาย' เป็น 'การยอมรับนโยบาย' ในตัวกรองอินพุตหลัก ? แน่นอนว่านี่หมายถึงสิ่งที่ไม่ตรงกันได้รับการยอมรับ ?
A.B avatar
cl flag
A.B
พิมพ์ผิดด้วยการตัด/แปะ (และการทำให้คำตอบเริ่มต้นง่ายขึ้นโดยใช้ห่วงโซ่ "คำตัดสิน" โดยเฉพาะ) ฉันจะใส่แบ็คดร็อป
Little Code avatar
fr flag
ฉันเข้าใจแล้ว คุณกำลังบอกว่าอาจมีห่วงโซ่ที่สามที่ไม่มีอะไรอยู่ในนั้นนอกจาก `policy drop` และ `meta mark != 0 ยอมรับ` ? ฉันเดาว่าอาจจะทำให้สะอาดขึ้นในทางหนึ่ง ตอนนี้ฉันกำลังโหลดการกำหนดค่า ฉันจะแจ้งให้คุณทราบว่าเป็นอย่างไรบ้าง
Little Code avatar
fr flag
อืม ดูเหมือนจะไม่แสดงความรักให้ฉันเห็น (ได้อัปเดต Q ดั้งเดิมด้วยไวยากรณ์ใหม่) SSH ใช้งานได้ แต่ไม่ใช่เว็บ
Little Code avatar
fr flag
น่าสนใจที่ `set` ที่ขาดหายไปไม่ถูกหยิบขึ้นมาโดย `nft -c -f /etc/nftables.conf` ? แต่ตอนนี้มันใช้งานได้แล้ว !
A.B avatar
cl flag
A.B
เครื่องหมายเมตาเป็นนิพจน์ (เทียบเท่ากับการจับคู่ของ iptables) ในขณะที่ชุดเครื่องหมายเมตาเป็นคำสั่ง (เทียบเท่ากับเป้าหมายของ iptables ยกเว้นว่าไม่ใช่เทอร์มินัลสำหรับกฎ) ทั้งคู่ถูกต้อง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา