กฎ iptables อนุญาตให้มีการรับส่งข้อมูลขาออกภายในเครื่องหรือไม่


11

ฉันสงสัยว่าบางคนสามารถช่วยฉันด้วยกฎ iptables ต่อไปนี้:

เราต้องการอนุญาตการรับส่งข้อมูลใด ๆ และทั้งหมดในพื้นที่ต้นทาง (เช่นบนบนเซิร์ฟเวอร์ที่ใช้ iptables)

DNS, HTTP, ฯลฯ ... ทั้งหมดนั้น การเชื่อมต่อใด ๆ ที่เริ่มต้นโดยเซิร์ฟเวอร์ที่ใช้ iptables ควรได้รับอนุญาต

ขณะนี้เรากำลังใช้นโยบายเริ่มต้นโดยทั่วไปแล้วยอมรับ ACCEPT ถูกต้องหรือไม่ อินพุตถูกปิดกั้นดังนั้นฉันสมมติว่านี่หมายความว่าการเชื่อมต่อ (ยกเว้นที่เราอนุญาต) ไม่สามารถเริ่มได้เพราะจะลดลงก่อนที่ฝ่ายของเราจะสามารถเข้าถึงนโยบาย OUTPUT ได้หรือไม่

ขออภัยทักษะ iptables ของฉันอ่อนแอ;)

ขอบคุณมาก

คำตอบ:


26

คุณต้องมีกฎสองข้อเพื่อทำสิ่งนี้:

iptables -I OUTPUT -o eth0 -d 0.0.0.0/0 -j ACCEPT
iptables -I INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

บางบันทึก

  • กฎที่มีอยู่ก่อนหน้านี้ที่คุณอาจทำไปแล้ว แต่ดูแตกต่างออกไป
  • สิ่งนี้ใช้-Iเพื่อบังคับกฏเหล่านี้ให้เป็นอันดับแรก iptablesกฎจะถูกประเมินจากบนลงล่าง
  • -oและ-iธงหมายถึง "ออก" และ "ใน" ตามลำดับ แทนที่eth0ด้วยชื่ออินเตอร์เฟสอีเธอร์เน็ตที่เหมาะสม

เรามีทั้ง :) ฉันไม่สามารถเอ่ยถึงอันที่สองเพราะอย่างที่ฉันบอกว่า ... ทักษะ iptables ของฉันคือซอสที่อ่อนแอ ขอบคุณสำหรับการชี้แจง :)
ไม่ระบุชื่อหนึ่ง

2
-d 0.0.0.0/0ซ้ำซ้อนและไม่จำเป็น
zapstar

คำตอบที่ดี แต่ตอนนี้ฉันสามารถ ping เซิร์ฟเวอร์และฉันไม่เข้าใจว่าทำไม คุณสามารถอธิบาย?
Daniel

@Daniel เพราะถ้าคุณอนุญาตเฉพาะทราฟฟิกขาออกดังนั้นการตอบ ping จะลดลงโดยตัวกรองแพ็คเก็ตเมื่อมันมาถึงโฮสต์ของคุณ เพื่อป้องกันสิ่งนี้คุณต้องอนุญาตการรับส่งข้อมูลขาเข้าที่เกี่ยวข้องกับเซสชันเดียวกันกับหรือเกี่ยวข้องกับการรับส่งข้อมูลขาออกใด ๆ กล่าวอีกนัยหนึ่งเนื่องจากการตอบ ping เกี่ยวข้องกับคำขอ ping จึงควรได้รับอนุญาต หากมีการร้องขอการ ping ที่เข้ามาและไม่มีการ ping ที่บันทึกไว้ในตารางเซสชันดังนั้นแพ็กเก็ตขาเข้าจะถูกทิ้ง หวังว่าเหมาะสม!
bahamat

@bahamat: หลังจากฉันลองอีกครั้งฉันพบว่าฉันต้องอนุญาตการรับส่งข้อมูล icmp อย่างชัดเจน และฉันกำลังพูดถึงความสามารถในการ ping เซิร์ฟเวอร์ที่ฉันใช้กฎด้านบน ไม่สามารถทำซ้ำได้ btw. บางทีฉันอาจทำผิดพลาดที่ไหนสักแห่ง ขอบคุณอยู่ดี
แดเนียล

0

ขณะนี้เรากำลังใช้นโยบายเริ่มต้นโดยทั่วไปแล้วยอมรับ ACCEPT

เพียงพอสำหรับ OUTPUT เนื่องจาก Netfilter ไม่จำเป็นต้องมีกฎพิเศษในการเริ่มการติดตามการเชื่อมต่อที่มีสถานะ

แต่ถ้าคุณต้องการกรองทราฟฟิกขาเข้าตามนโยบาย" default deny " คุณสามารถทำได้ด้วยการสลับINPUT-chain ไปที่DROP:iptables -P INPUT DROP

หลังจากนั้นทั้งหมดจะถูกกำหนดด้วยกฎเพียง 2 ข้อ :

iptables -A INPUT -j ACCEPT -i lo
iptables -A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED

ให้ความสนใจกับกฎที่อนุญาตให้ทราฟฟิกอินพุตบนอินเทอร์เฟซวนรอบ - ดังที่ฉันได้ชี้ให้เห็นในบล็อกโพสต์ของฉันว่า " ไฟร์วอลล์น้อยที่สุดสำหรับผู้ใช้ " เว้นแต่ว่าได้รับอนุญาตอย่างชัดเจน ปริมาณการใช้ข้อมูลผ่าน, พูด, eth0.

เพื่อให้แน่ใจว่าโหลดชุดกฎขั้นต่ำนี้ " ตามที่เป็น " โดยไม่รบกวนกฎที่อาจมีอยู่แล้วสะดวกในการใช้iptables-restoreใน SHELL-session:

lptables-restore <<__EOF__
-P INPUT DROP
-A INPUT -j ACCEPT -i lo
-A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED
__EOF__

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

__

  1. แน่นอนคุณสามารถเพิ่มกฎอื่น ๆ เพื่ออนุญาตการเชื่อมต่อดังกล่าว สามารถทำได้ง่ายเพียงแค่-A INPUT -j ACCEPT -p tcp --dport 22- ไม่จำเป็นต้องคนจรจัด-m stateที่นี่ อย่าลืมแก้ไขlptables-restoreกลับไปiptables-restoreก่อนลอง;)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.