Score:1

ข้อผิดพลาดในการกำหนดค่าหลังจากอัปเดต nftables

ธง ph

ใช้ nftables ในช่วง 2 ปีที่ผ่านมาด้วย config เดียวกัน อัปเดตโปรแกรมเมื่อวันก่อนและตอนนี้มันบ่นว่า config ของฉันไม่ถูกต้องแม้ว่าเอกสารทั้งหมดจะยังคงบอกว่าถูกต้อง อาจมีบางคนสามารถเห็นสัญลักษณ์อันธพาลหรืออะไรบางอย่าง?

นี่คือการกำหนดค่าของฉัน:


ล้างชุดกฎ

# `inet` ใช้กับทั้ง IPv4 และ IPv6
ตัวกรองตาราง inet {
    อินพุตลูกโซ่ {
        ประเภทตัวกรอง hook อินพุตลำดับความสำคัญ 0;

        # ยอมรับการรับส่งข้อมูล localhost
        ฉันยอมรับ

        # น้ำปิงไม่ท่วม:
        ip protocol icmp ประเภท icmp echo-request limit rate มากกว่า 10/วินาที ปล่อยแพ็กเก็ต 4 แพ็กเก็ต
        ip6 nexthdr icmpv6 icmpv6 ประเภท echo-request limit rate มากกว่า 10/วินาที ปล่อยแพ็กเก็ต 4 แพ็กเก็ต

        # ยอมรับการเข้าชมที่มาจากเรา
        ct รัฐจัดตั้งขึ้นที่เกี่ยวข้องยอมรับ

        # ssh
        tcp dport 22 ยอมรับ

        #http/https
        tcp dport 80 ยอมรับ
        tcp dport 443 ยอมรับ

        #tftp/เน็ตบูต
        udp dport 4011 ยอมรับ
        udp dport 67 ยอมรับ
        tcp dport 69 ยอมรับ
        udp dport 69 ยอมรับ

        #นักจัดรายการ
        tcp dport 8080 ยอมรับ
        tcp dport 4343 ยอมรับ

        #สคบ
        tcp dport 139 ยอมรับ
        tcp dport 445 ยอมรับ
        udp dport 137 ยอมรับ
        udp dport 138 ยอมรับ

        #มค
        tcp dport 25565 ยอมรับ

        # นับและลดการเข้าชมอื่น ๆ
        วางเคาน์เตอร์
    }

    เอาต์พุตลูกโซ่ {
        ประเภทลำดับความสำคัญเอาต์พุตของตะขอตัวกรอง 0;
        นโยบายยอมรับ;
    }

    ห่วงโซ่ไปข้างหน้า {
        ประเภทตัวกรอง hook ลำดับความสำคัญไปข้างหน้า 0;
        nft เพิ่มกฎ inet กรองไปข้างหน้า ct สถานะ dnat ยอมรับ;
        นโยบายลดลง;
    }
}

และข้อผิดพลาดเมื่อเริ่มต้น:

กำลังเริ่ม nftables...
/etc/nftables.conf:57:6-8: ข้อผิดพลาด: ข้อผิดพลาดทางไวยากรณ์ การเพิ่มที่ไม่คาดคิด
        nft เพิ่มกฎ inet กรองไปข้างหน้า ct สถานะ dnat ยอมรับ;
            ^^^
nftables.service: ออกจากกระบวนการหลักแล้ว, รหัส=ออกแล้ว, สถานะ=1/ล้มเหลว
nftables.service: ล้มเหลวด้วยผลลัพธ์ 'exit-code'
ไม่สามารถเริ่ม nftables
Score:0
ธง cl
A.B

นี่คือภายใน nftable สคริปต์ เต็มไปด้วยคำสั่ง nft -f. เดอะ เอ็นเอฟที คำไม่มีความหมายภายในและไม่ควรปรากฏ แต่มีปัญหาอื่นอีก 1 1/2 ในที่เดียวกัน มาดูกัน:

รอบเส้น เอ็นเอฟที คำสั่งบ่นว่ามี:

   ห่วงโซ่ไปข้างหน้า {
       ประเภทตัวกรอง hook ลำดับความสำคัญไปข้างหน้า 0;
       nft เพิ่มกฎ inet กรองไปข้างหน้า ct สถานะ dnat ยอมรับ;
       นโยบายลดลง;
   }
  • เอ็นเอฟที ที่จะถูกลบออก

  • อยู่ภายในแล้ว inet กรองไปข้างหน้า (โซ่) บล็อก

    ดังนั้น เพิ่มตัวกรองกฎ inet ไปข้างหน้า ต้องเอาออกด้วย ที่จริงแล้ว ; ไม่จำเป็นเพราะมีบรรทัดใหม่ตามมา

           ct สถานะ dnat ยอมรับ
    
  • นโยบายลดลง; จะต้องใส่กับคำนิยามโซ่ฐาน

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

    ข้อสังเกตเดียวกันนี้ใช้กับ เอาต์พุต โซ่: ไม่แยก นโยบายยอมรับ; จากคำจำกัดความของห่วงโซ่ฐาน ดังนั้นคุณจะไม่แทรกกฎระหว่างกันโดยไม่ตั้งใจในภายหลัง

เดอะ ซึ่งไปข้างหน้า ในตอนท้ายควรเปลี่ยนโซ่ด้วย:

    ห่วงโซ่ไปข้างหน้า {
        ประเภทตัวกรอง hook ลำดับความสำคัญไปข้างหน้า 0; นโยบายลดลง;
        ct สถานะ dnat ยอมรับ
    }

สิ่งที่จะเป็นไวยากรณ์ที่ถูกต้อง แต่ไม่น่าสนใจจริงๆ คือการกำหนดกฎที่ไม่ได้อยู่ในบล็อก แต่อยู่นอกโครงสร้างโดยสิ้นเชิง ที่ส่วนท้ายของสคริปต์ดังนี้:

    ห่วงโซ่ไปข้างหน้า {
        ประเภทตัวกรอง hook ลำดับความสำคัญไปข้างหน้า 0; นโยบายลดลง;
    }
}
เพิ่มตัวกรองกฎ inet ไปข้างหน้า ct สถานะ dnat ยอมรับ

อย่างไรก็ตาม ชุดกฎรายการ nft แล้วจะกลับมาแสดงผลเหมือนเดิมภายใน inet กรองไปข้างหน้า บล็อกโซ่


หมายเหตุ:

  • ในขณะที่มันตกลงที่จะใช้ ip โปรโตคอล icmpใช้งานไม่ได้ ip6 ถัดไป hdr ipv6-icmp

    เหตุผลคือตรงกันข้ามกับ IPv4 โดยที่โปรโตคอลในส่วนหัวของ IPv4 จะเป็นโปรโตคอลเลเยอร์ 4 เสมอ ของ IPv6 ส่วนหัวถัดไป ไม่ใช่ส่วนหัวของเลเยอร์ 4 (icmp, udp, tcp...) เสมอไป: อาจเป็นแทน ส่วนหัวส่วนขยาย ปรากฏระหว่างส่วนหัวของ IPv6 และส่วนหัวของเลเยอร์ 4 (ขั้นสุดท้าย) ในกรณีนี้กฎจะไม่ตรงกัน

    ระบบปฏิบัติการได้พิจารณาแล้วว่าแพ็กเก็ตนี้เป็นของโปรโตคอลเลเยอร์ 4 ใด ดังนั้นข้อมูลนี้จึงพร้อมใช้งานในรูปแบบข้อมูลเมตาแทนที่จะเป็นข้อมูลเนื้อหาแพ็กเก็ต: เมตา l4proto ipv6-icmp.

    นี้ก็เช่นกัน บันทึกไว้ในหน้าคน:

    นิพจน์นี้อ้างถึงฟิลด์ส่วนหัวของ ipv6 ข้อควรระวังในการใช้งาน ip6 ถัดไป HDRค่าจะอ้างอิงถึงส่วนหัวถัดไปเท่านั้น เช่น ip6 ถัดไป hdr tcp จะจับคู่ก็ต่อเมื่อแพ็กเก็ต ipv6 ไม่มีข้อมูลใด ๆ ส่วนหัวส่วนขยาย แพ็กเก็ตที่แยกส่วนหรือเช่น ประกอบด้วย ส่วนหัวของส่วนขยายการกำหนดเส้นทางจะไม่ตรงกัน โปรดใช้ เมตา l4proto หากคุณต้องการจับคู่ส่วนหัวการขนส่งจริงและละเว้นใดๆ ส่วนหัวส่วนขยายเพิ่มเติมแทน

    แต่ที่จริงแล้ว เนื่องจากบรรทัดเดียวกันมี ประเภท icmpv6 ... บรรทัดนี้กรองโปรโตคอลเลเยอร์ 4 เพื่อให้ตรงกับ ICMPv6 แล้วและในเวลาเดียวกัน การใช้ ICMPv6 ตั้งค่าโปรโตคอลเลเยอร์ 3 ให้ตรงกับ IPv6 โดยปริยาย: ไม่จำเป็นเลยที่จะทำให้ถูกต้อง

    ในทำนองเดียวกันบรรทัดก่อนหน้าสามารถทำได้โดยไม่ต้อง ip โปรโตคอล icmp ด้วยเหตุผลเดียวกัน (แต่พฤติกรรมปัจจุบันยังปกติอยู่)

    เส้น:

            ip6 nexthdr icmpv6 icmpv6 ประเภท echo-request limit rate มากกว่า 10/วินาที ปล่อยแพ็กเก็ต 4 แพ็กเก็ต
    

    ต้องเปลี่ยนง่ายๆ ด้วย:

            icmpv6 ประเภท echo-request limit rate มากกว่า 10/วินาที ปล่อยแพ็กเก็ต 4 แพ็กเก็ต
    

    (โดยไม่ต้องเติม เมตา nfproto ipv6 เมตา l4proto icmpv6 )

  • ทีเอฟทีพี

    • TFTP ใช้ UDP เท่านั้น

      ไม่เคยใช้พอร์ต TCP 69 ดังนั้นจึงไม่ต้องการกฎในการอนุญาต

    • TFTP และไฟร์วอลล์ stateful

      ทีเอฟทีพี เป็นโปรโตคอลที่ยากพอๆ กับ FTP สำหรับไฟร์วอลล์ หลังจากการสอบถามเบื้องต้น การถ่ายโอนข้อมูลเองก็ไม่ได้ใช้พอร์ต UDP 69 อีกต่อไป การใช้งานอย่างเพียงพอของ ตัวช่วยคอนทราสต์ TFTP ด้วยกฎเพิ่มเติม (ที่ควรโหลดไฟล์ nf_conntrack_tftp โมดูลเคอร์เนล) น่าจะจำเป็น เว้นแต่การตั้งค่า sysctl ที่เลิกใช้แล้ว net.netfilter.nf_conntrack_helper ถูกเปิดใช้งานกลับ

      สิ่งนี้จะกลายเป็นเรื่องนอกประเด็นที่จะกล่าวถึงที่นี่ ดูจุดเริ่มต้น (เท่านั้น) ของคำตอบของฉันที่ CentOS 8 เป็นเราเตอร์ NAT พร้อม nft และไฟร์วอลล์ - จะผ่าน TFTP ได้อย่างไร เพื่อให้มีชุดกฎ TFTP ตัวอย่างที่สามารถคัดลอกเพื่อแทนที่ ตัวอย่าง FTP ใน nftables wiki.

  • กฎที่เหมือนกันแต่มีค่าพอร์ตต่างกันสามารถแยกตัวประกอบได้โดยใช้ ชุดที่ไม่ระบุชื่อ. nftable รุ่น >= 1.0.2 ยังมี -o (เพิ่มประสิทธิภาพ) ตัวเลือก เพื่อลองทำสิ่งนี้โดยอัตโนมัติ

PetNoire avatar
ph flag
เหตุใดจึงทำงานได้อย่างสมบูรณ์เมื่อวันก่อนโพสต์ ยังได้รับการตอบกลับที่ละเอียดที่สุดที่นี่ id กดลูกศรขึ้นหากไซต์นี้ให้ฉันทำอะไร
A.B avatar
cl flag
A.B
@PetNoire ไม่สามารถทำอะไรที่แตกต่างออกไปได้ แต่ได้บอกสิ่งที่ต้องทำ หากคุณคิดว่าวิธีนี้ช่วยแก้ปัญหาของคุณได้ คุณยังสามารถทำเครื่องหมายคำตอบนี้เป็นคำตอบที่ยอมรับได้เพื่อขอบคุณฉัน

โพสต์คำตอบ

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