ฉันกำลังพยายามตั้งค่าไฟร์วอลล์ด้วย nftables แต่ฉันไม่เข้าใจและใช้การจำกัดอัตราอย่างง่ายตามเอกสารที่ฉันพบ
- ระบบปฏิบัติการ : Ubuntu 20.04 LTS
- เวอร์ชัน nftables : 0.9.3 (Topsy)
- เคอร์เนลรีลีส: 5.8.0-53-generic
ฉันได้สร้างไฟร์วอลล์ทดสอบด้วยคำสั่งด้านล่าง:
nft 'เพิ่มตาราง inet testnetwork'
nft 'เพิ่ม chain inet testnetwork INPUT { ลำดับความสำคัญของอินพุต hook ตัวกรอง 0; นโยบายลดลง; }'
nft 'เพิ่ม set inet testnetwork SSH { พิมพ์ ipv4_addr; แฟล็กไดนามิก หมดเวลา; ขนาด 65536; }'
nft 'เพิ่มกฎ inet testnetwork INPUT ct สถานะที่เกี่ยวข้อง สร้างเคาน์เตอร์ยอมรับ'
nft 'เพิ่มกฎ inet testnetwork INPUT ip saddr @SSH ct state ใหม่ tcp dport 22 counter drop'
nft 'เพิ่มกฎ inet testnetwork INPUT ct สถานะใหม่ tcp dport 22 อัตราขีดจำกัดมากกว่า 10/นาที เพิ่มตัวนับ @SSH {ip saddr timeout 60s}
nft 'เพิ่มกฎ inet ทดสอบเครือข่าย INPUT ct สถานะใหม่ tcp dport 22 tcp sport 1024-65535 ตัวนับการยอมรับ'
เมื่อฉันแสดงชุดกฎเริ่มต้น ฉันจะได้รับ:
เครือข่ายการทดสอบตาราง inet {
ตั้งค่า SSH {
พิมพ์ ipv4_addr
ขนาด 65536
แฟล็กไดนามิกหมดเวลา
}
ห่วงโซ่อินพุต {
ประเภท ตัวกรอง เบ็ด ตัวกรองลำดับความสำคัญอินพุต; นโยบายลดลง;
สถานะ ct ที่จัดตั้งขึ้น แพ็กเก็ตตัวนับที่เกี่ยวข้อง 0 ไบต์ 0 ยอมรับ
ip saddr @SSH ct สถานะใหม่ tcp dport 22 ตัวนับแพ็กเก็ต 0 ไบต์ 0 ดรอป
ct สถานะใหม่ tcp dport 22 อัตราขีด จำกัด มากกว่า 10 / นาที เพิ่ม @SSH { ip saddr timeout 1m } ตัวนับแพ็กเก็ต 0 ไบต์ 0
ct state ใหม่ tcp dport 22 tcp sport 1024-65535 ตัวนับแพ็กเก็ต 0 ไบต์ 0 ยอมรับ
}
}
ด้วยการกำหนดค่าดังกล่าว ฉันคาดว่า IP จะถูกเพิ่มไปยังชุด SSH ในการทดลองเชื่อมต่อครั้งที่ 11 (ใหม่) ภายใน 1 นาที และจะถูกบล็อก (เป็นเวลา 1 นาที) เริ่มตั้งแต่ความพยายามครั้งที่ 12
อย่างไรก็ตาม เมื่อฉันเปิดหน้าต่างเทอร์มินัลที่สองและเริ่มต้นตามลำดับ จากนั้นปิดการเชื่อมต่อ ssh น้อยกว่า 10 รายการเป็น 127.0.0.1 ฉันได้รับ IP เพิ่มในชุด SSH แล้วบล็อก
ด้านล่างสถานะชุดกฎในการพยายามครั้งที่ 7:
เครือข่ายการทดสอบตาราง inet {
ตั้งค่า SSH {
พิมพ์ ipv4_addr
ขนาด 65536
แฟล็กไดนามิกหมดเวลา
องค์ประกอบ = { 127.0.0.1 หมดเวลา 1m หมดอายุ 54s564ms }
}
ห่วงโซ่อินพุต {
ประเภท ตัวกรอง เบ็ด ตัวกรองลำดับความสำคัญอินพุต; นโยบายลดลง;
สถานะ ct ที่จัดตั้งขึ้น แพ็กเก็ตตัวนับที่เกี่ยวข้อง 156 ไบต์ 28692 ยอมรับ
ip saddr @SSH ct สถานะใหม่ tcp dport 22 ตัวนับแพ็กเก็ต 3 ไบต์ 180 ดรอป
ct สถานะใหม่ tcp dport 22 อัตราขีด จำกัด มากกว่า 10 / นาที เพิ่ม @SSH { ip saddr timeout 1m } ตัวนับแพ็กเก็ต 1 ไบต์ 60
ct state ใหม่ tcp dport 22 tcp sport 1024-65535 ตัวนับแพ็กเก็ต 6 ไบต์ 360 ยอมรับ
}
}
ณ จุดนี้ ฉันไม่เข้าใจกลไกอัตราจำกัดอย่างถูกต้อง หรือฉันทำผิดพลาดที่อื่น
ใครช่วยกรุณาช่วยฉันโดยชี้ให้เห็นว่าความคาดหวังของฉันผิดหรือความผิดพลาดนั้นมาจากไหน
ขอแสดงความนับถือและขอบคุณสำหรับเวลาของคุณ