Score:2

เหตุใดไฟร์วอลล์จึงอนุญาตให้รับส่งข้อมูลสาธารณะไปยังพอร์ตที่ไม่ใช่สาธารณะของฉัน เชื่อมโยงกับคอนเทนเนอร์ Docker

ธง de

ฉันกำลังพยายามใช้ไฟร์วอลล์ที่เรียบง่ายใน Fedora ซึ่งอินเทอร์เน็ตสาธารณะสามารถเข้าถึง SSH, HTTP, HTTPS และ Cockpit ได้ แต่ไม่มีอะไรอื่น ในขณะเดียวกัน เซิร์ฟเวอร์จะเรียกใช้ไมโครเซอร์วิสผ่าน Docker ที่สามารถสื่อสารระหว่างกันได้บนพอร์ต 8000-8999

แผนภาพเครือข่าย

ฉันตั้งค่านี้ในการติดตั้ง Fedora Server ใหม่ด้วยคำสั่งต่อไปนี้:

ไฟร์วอลล์ cmd --zone=public --add-service=ห้องนักบิน
ไฟร์วอลล์ cmd --zone=public --add-service=http
ไฟร์วอลล์ cmd --zone=public --add-service=https

ไฟร์วอลล์-cmd --zone=internal --add-source=192.168.1.65
ไฟร์วอลล์ cmd --zone=internal --add-source=192.168.1.66

ไฟร์วอลล์-cmd --zone=internal --add-port=8000-8999/tcp

firewall-cmd --runtime-to-permanent

เมื่อฉันตรวจสอบการกำหนดค่าด้วย --รายการทั้งหมดทุกอย่างถูกต้อง:

> ไฟร์วอลล์-cmd --list-all --zone=internal
ภายใน (ใช้งานอยู่)
  เป้าหมาย: ค่าเริ่มต้น
  icmp-block-inversion: ไม่
  อินเทอร์เฟซ:
  ที่มา: 192.168.1.65 192.168.1.66
  บริการ: dhcpv6-client ssh
  พอร์ต: 8000-8999/tcp
  โปรโตคอล:
  ไปข้างหน้า: ไม่
  สวมหน้ากาก: ไม่
  พอร์ตไปข้างหน้า:
  พอร์ตต้นทาง:
  icmp บล็อก:
  กฎมากมาย:

> ไฟร์วอลล์ cmd --list-all --zone=public
สาธารณะ (ใช้งานอยู่)
  เป้าหมาย: ค่าเริ่มต้น
  icmp-block-inversion: ไม่
  อินเทอร์เฟซ: enp2s0
  แหล่งที่มา:
  บริการ: ห้องนักบิน dhcpv6-client http https ssh
  พอร์ต:
  โปรโตคอล:
  ไปข้างหน้า: ไม่
  สวมหน้ากาก: ไม่
  พอร์ตไปข้างหน้า:
  พอร์ตต้นทาง:
  icmp บล็อก:
  กฎมากมาย:

อย่างไรก็ตาม เมื่อฉันทดสอบสิ่งนี้ ฉันสามารถตีได้ http://192.168.1.65:8080. ฉันสามารถเรียกใช้จากเครื่องบนเครือข่ายภายในเดียวกัน (192.168.128.128) เช่นเดียวกับคำขอสาธารณะจากเครื่องภายนอก เนื่องจากไม่ได้ระบุไว้ใน ภายใน's แหล่งที่มาฉันคิดว่า firewalld จะไม่อนุญาตให้ส่งคำขอผ่าน

ฉันมีการกำหนดค่าอัตโนมัติ นักเทียบท่า โซนกับ นักเทียบท่า0 อินเทอร์เฟซ แต่การเอาออกนั้นดูเหมือนจะไม่เปลี่ยนความสามารถของฉันในการเข้าสู่พอร์ตภายใน

เหตุใดฉันจึงสามารถขอ :8080 จากแหล่งที่ไม่ได้อยู่ในรายการได้สำเร็จ ภายใน?

Score:1
ธง de

ปรากฎว่าปัญหาเกิดจากการที่ฉันใช้ Docker สำหรับพอร์ตภายในของฉัน เพื่อลดความซับซ้อนของกระบวนการรับคอนเทนเนอร์เพื่อพูดคุยกับคนทั้งโลกและกันและกัน Docker ได้เลือกที่จะควบคุมไฟร์วอลล์/เครือข่ายของคุณเป็นจำนวนมาก ซึ่งหมายความว่าหากคุณ อย่า ต้องการให้คอนเทนเนอร์ของคุณเข้าถึงได้แบบสาธารณะ และ คุณต้องควบคุมการเข้าถึงสาธารณะผ่านไฟร์วอลล์บนเครื่องเดียวกันกับ Docker daemon ของคุณ คุณต้องกำหนดค่าไฟร์วอลล์ให้แตกต่างออกไปเล็กน้อย นักเทียบท่ามีเอกสารอย่างเป็นทางการเกี่ยวกับวิธีการทำเช่นนี้. โดยทั่วไป คุณมีตัวเลือกต่อไปนี้:

  • ตั้งค่าเครื่องแยกต่างหากสำหรับไฟร์วอลล์ของคุณ วิธีนี้น่าจะง่ายที่สุด เนื่องจาก Docker และไฟร์วอลล์ของคุณไม่ต้องแชร์ทรัพยากร
  • เพิ่มของคุณ iptables กฎเพื่อ นักเทียบท่า-ผู้ใช้ chain (นี่เป็นคำตอบเพิ่มเติมสำหรับ iptables ผู้ใช้; ฉันไม่แน่ใจว่าจะได้รับ ไฟร์วอลล์ เพื่อทำซ้ำแนวทางนี้)
  • ปิดการใช้งานทั้งหมดโดยการตั้งค่า iptables = เท็จ ในการกำหนดค่าบริการ Docker ของคุณ (โพสต์บล็อกนี้ กล่าวถึงตัวเลือกนี้)

ฉันยัง พบโพสต์ ที่ฉันคิดว่าเป็นรูปแบบที่ดีใน นักเทียบท่า-ผู้ใช้ ตัวเลือกโซ่ โดยพื้นฐานแล้ว คุณสร้างไฟล์ iptables.conf ไฟล์ที่คุณสามารถโหลดได้โดยไม่ต้องใช้ฟลัช iptables-restore -n. น่าเสียดายที่เป็น iptables วิธีแก้ปัญหา ไม่ใช่ ก ไฟร์วอลล์ สารละลาย.

ส่วนที่ยากอย่างหนึ่งในการวินิจฉัยปัญหานี้คือฉันจะเรียกใช้สคริปต์เพื่อแก้ไขไฟร์วอลล์ให้ตรงกับที่ฉันต้องการ และนั่นจะได้ผลจนกว่าฉันจะรีสตาร์ทเครื่องหรือเริ่มการทำงานของ Docker daemon นักเทียบท่าจะเขียนทับไฟล์ iptables config เมื่อมันเริ่มทำงาน

โพสต์คำตอบ

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