iptables: อนุญาต ips และบล็อกการเชื่อมต่ออื่น ๆ ทั้งหมด


26

ฉันจะอนุญาต IPS บางอย่างและบล็อกการเชื่อมต่ออื่น ๆ ทั้งหมดใน iptables ได้อย่างไร


ดังที่Gilles แสดงให้เห็นถึงแนวคิดในลักษณะนี้: เพิ่มกฎ ACCEPT สำหรับแต่ละสิ่งที่คุณต้องการอนุญาตไม่ว่าจะโดย IP ต้นทางหรือคุณสมบัติอื่น ๆ จากนั้นตั้งค่านโยบายเริ่มต้นเป็น REJECT
Caleb

คำตอบ:


27

ผมเขียนบล็อกโพสต์เกี่ยวกับกฎ 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จะทำให้เกิดปัญหาสำหรับบางแอปพลิเคชัน


4
แทนที่จะเป็น DROP คุณควรปฏิเสธแพ็กเก็ตที่ไม่ต้องการเพราะจะทำให้การวินิจฉัยปัญหาง่ายขึ้นมากและป้องกันการหมดเวลา ดูปฏิเสธ IP แพ็คเก็ตที่มีข้อผิดพลาด ICMP หรือเพียงแค่ปล่อยพวกเขา
Gilles 'หยุดชั่วร้าย'

ฉันลองทั้งการตั้งค่าและ KeePass2 ไม่เริ่มทำงานความคิดใด ๆ นอกจากนี้ถ้าฉันทำอย่างiptables -Fนั้นควรจะล้างกฎทั้งหมดไม่สามารถแม้แต่จะปิง ubuntu.com
Pawel Cioch

@PawelCioch ทำไม KeePass2 ต้องการการเชื่อมต่ออินเทอร์เน็ตหรือไม่
อเล็กซ์

@Alex เพื่อเก็บไฟล์ DB ในที่ห่างไกลฉันต้องการ IP เดียว แต่ฉันเข้าใจทุกอย่างการตั้งค่านั้นซับซ้อนกว่าตัวอย่างที่นี่
Pawel Cioch

10

นี่คือตัวอย่าง (ยังไม่ทดลอง!) ที่บล็อกการเชื่อมต่อขาเข้าเท่านั้น อนุญาตให้เชื่อมต่อผ่านส่วนต่อประสานวนกลับมาจาก 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

@Gilles เพื่อใช้สถานะ RELATED และ ESTABLISHED อย่างถูกต้องคุณต้องจับคู่แพ็กเก็ตเริ่มต้นเป็นสถานะใหม่ loในตัวอย่างข้างต้นถูกแยกออกจากการจับคู่สถานะและอนุญาตเสมอ
penguin359

@ penguin359: คุณช่วยอธิบายได้ไหมว่าเหตุใดจึงจำเป็นต้องมี NEW ฉันยังห่างไกลจากผู้เชี่ยวชาญ iptables ฉันคัดลอกกฎเหล่านี้บางส่วนจากเราเตอร์ที่บ้านของฉันซึ่งไม่ตรงกับใหม่ เท่าที่ฉันเข้าใจสิ่งที่เหลืออยู่หลังจากกฎข้อแรกคือแพ็คเก็ตใหม่ (หรือยกเลิกการโหลด) อย่างไรก็ตาม (ถ้าฉันอยู่ห่างจากเครื่องหมายมากเกินไปและคุณไม่สามารถอธิบายได้ในความคิดเห็นโพสต์เวอร์ชันของคุณพร้อมคำอธิบายเป็นคำตอบและฉันจะลบของฉัน)
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

@Gilles ฉันจะปล่อยสถานะที่ไม่ถูกต้องเสมอก่อนที่จะยอมรับอะไร ... ซึ่งทำให้ทุกอย่างที่ไม่ถูกต้องไม่เกี่ยวข้องที่เกี่ยวข้องถูกสร้างขึ้นจะต้องเป็นสถานะใหม่ แต่ฉันไม่รู้เหตุผลที่ทุกอย่างจะต้องระบุใหม่ ในทางทฤษฎีแม้ว่าถ้าคุณไม่ได้จัดการที่ไม่ถูกต้องและคุณไม่ได้ระบุใหม่คุณสามารถท้ายยอมรับการที่ไม่ถูกต้อง แต่เมื่อจัดการ INVALID ไม่ได้ผลดูเหมือนว่าการตรวจสอบสถานะใหม่ในทุกกฎเพียงต้องการการประมวลผลเพิ่มเติมสำหรับแพ็กเก็ต
xenoterracide

@Gilles ยังมีนโยบายเริ่มต้นของการปฏิเสธที่ไม่ดีเพราะมันส่งแพ็กเก็ตที่ปฏิเสธสำหรับทุก ๆ แพ็คเก็ตที่ได้รับนี้จะเป็นการโจมตีแบบ DOS
xenoterracide


7

กฎด้านล่างจะอนุญาตเฉพาะ IP ของคุณและบล็อก IP อื่น ๆ ทั้งหมดผ่านพอร์ต 22 หรือ ssh ทดสอบกับเทอร์มินัลใหม่ก่อนที่จะตัดการเชื่อมต่อ

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP

3
ขอบคุณสำหรับคำตอบสั้น ๆ สิ่งนี้จะเปลี่ยนแปลงได้อย่างไรถ้าฉันต้องการอนุญาตช่วง IP และ IP สองสามช่วง ในสถานที่ของyourIPaddressฉันสามารถเพิ่มที่อยู่ IP ไม่กี่และช่วง? และถ้าฉันใช้ SSH ในพอร์ตที่ไม่ได้มาตรฐานเช่น 2888 คำสั่งจะเปลี่ยน22ในตัวอย่างของคุณเป็น2288? นอกจากนี้สิ่งนี้จะบล็อก rsync, sftp, ฯลฯ ไปยังเซิร์ฟเวอร์นี้จาก IP ทั้งหมดยกเว้นที่อนุญาตหรือไม่
PKHunter

1
โปรดทราบว่า-p tcpนี่เป็นสิ่งสำคัญเพราะ--dportไม่สามารถใช้งานได้หากไม่มี ฉันขอแนะนำให้ใช้-j REJECTแทนDROPเพราะREJECTทำให้พอร์ตเหมือนกับพอร์ตปิดและDROPทำให้แพ็กเก็ตถูกกำหนดให้กับพอร์ตนั้นดำสนิท ในทางปฏิบัติผู้โจมตีระยะไกลสามารถตรวจจับDROPพอร์ตที่กำหนดค่าจากพอร์ตที่ปิดจริง
Mikko Rantalainen

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.