ฉันจะอนุญาต IPS บางอย่างและบล็อกการเชื่อมต่ออื่น ๆ ทั้งหมดใน iptables ได้อย่างไร
ฉันจะอนุญาต IPS บางอย่างและบล็อกการเชื่อมต่ออื่น ๆ ทั้งหมดใน iptables ได้อย่างไร
คำตอบ:
ผมเขียนบล็อกโพสต์เกี่ยวกับกฎ iptables คำพื้นฐานสำหรับผู้ใช้เดสก์ทอปเป็นเวลานานมาแล้วและคุณอาจจะอ่านมันและบทความที่เชื่อมโยงในStateful ไฟร์วอลล์การออกแบบ แต่ก่อนเคอร์เนล 2.6.39 (ซึ่งรวมถึงipset
และคุณอาจต้องการที่จะใช้สำหรับการยกเว้น IP ถ้าคุณมีมากกว่า 10 ถึงรายการที่อนุญาต (โดยที่ 10 คือโดยพลการ)
จัดการกับสถานะแรกที่เรารู้ว่าเราต้องการยอมรับหรือปล่อยและอินเทอร์เฟซ
iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept
หากคุณเพียงต้องการที่จะอนุญาตโดย IP เท่านั้นโดยไม่ต้องรัฐ
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
คุณมีแนวโน้มที่จะพบปัญหาในการทำเช่นนี้และฉันขอแนะนำให้ใช้สถานะเพื่อทำให้ชีวิตของคุณง่ายขึ้น ตัวอย่างเช่นการไม่อนุญาต-i lo
และ-o lo
จะทำให้เกิดปัญหาสำหรับบางแอปพลิเคชัน
iptables -F
นั้นควรจะล้างกฎทั้งหมดไม่สามารถแม้แต่จะปิง ubuntu.com
นี่คือตัวอย่าง (ยังไม่ทดลอง!) ที่บล็อกการเชื่อมต่อขาเข้าเท่านั้น อนุญาตให้เชื่อมต่อผ่านส่วนต่อประสานวนกลับมาจาก 192.168.3.x, ICMP หรือพอร์ต SSH การเชื่อมต่ออื่น ๆ ทั้งหมดจะถูกปฏิเสธ
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT
lo
ในตัวอย่างข้างต้นถูกแยกออกจากการจับคู่สถานะและอนุญาตเสมอ
กฎด้านล่างจะอนุญาตเฉพาะ IP ของคุณและบล็อก IP อื่น ๆ ทั้งหมดผ่านพอร์ต 22 หรือ ssh ทดสอบกับเทอร์มินัลใหม่ก่อนที่จะตัดการเชื่อมต่อ
iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
yourIPaddress
ฉันสามารถเพิ่มที่อยู่ IP ไม่กี่และช่วง? และถ้าฉันใช้ SSH ในพอร์ตที่ไม่ได้มาตรฐานเช่น 2888 คำสั่งจะเปลี่ยน22
ในตัวอย่างของคุณเป็น2288
? นอกจากนี้สิ่งนี้จะบล็อก rsync, sftp, ฯลฯ ไปยังเซิร์ฟเวอร์นี้จาก IP ทั้งหมดยกเว้นที่อนุญาตหรือไม่
-p tcp
นี่เป็นสิ่งสำคัญเพราะ--dport
ไม่สามารถใช้งานได้หากไม่มี ฉันขอแนะนำให้ใช้-j REJECT
แทนDROP
เพราะREJECT
ทำให้พอร์ตเหมือนกับพอร์ตปิดและDROP
ทำให้แพ็กเก็ตถูกกำหนดให้กับพอร์ตนั้นดำสนิท ในทางปฏิบัติผู้โจมตีระยะไกลสามารถตรวจจับDROP
พอร์ตที่กำหนดค่าจากพอร์ตที่ปิดจริง
นี่คือตัวอย่างการทำงานที่สมบูรณ์
ทำให้แอปพลิเคชันทำงานอีกครั้ง (ความคิดเห็นของฉันเกี่ยวกับ keepass ไม่เริ่มทำงาน)