นักเทียบท่า & ชอร์วอลล์


16

ฉันใช้Shorewallบนเซิร์ฟเวอร์ของฉันเป็นไฟร์วอลล์แบบสแตนด์อโลนและต้องการใช้Dockerเช่นกัน

โดยการใช้คอนเทนเนอร์ Docker และพอร์ตการเปลี่ยนเส้นทางของนักเทียบท่าตั้งกฎ / โซ่ iptables ของตัวเองซึ่งจะถูกฆ่าหากมีการรีสตาร์ท shorewall ดังนั้นภาชนะจะเข้าไม่ถึง

มีใครจัดการบันทึก / กู้คืนกฎนักเทียบท่าเมื่อเริ่มต้นใหม่อีกครั้งหรือไม่มีใครมีวิธีแก้ปัญหาอื่นหรือไม่

ดูสิ่งนี้ด้วย:

คำตอบ:


19

การเปลี่ยนแปลงการกำหนดค่าต่อไปนี้ควรตรวจสอบให้แน่ใจว่าการรับส่งข้อมูลระหว่างนักเทียบท่าและโฮสต์ Shorewall ทดสอบบน Shorewall 4.5.21.9 แต่ควรใช้กับเวอร์ชันล่าสุด:

/etc/shorewall/shorewall.conf

ตรวจสอบให้แน่ใจว่าเปิดใช้งานการส่งต่อ IP (รายการกำหนดค่าส่วนใหญ่เป็นใช่ / ไม่ใช่ แต่อันนี้เป็น "เปิด"):

IP_FORWARDING=On

/ etc / Shorewall / MASQ

เปิดใช้งาน masquerading (NAT) สำหรับเครือข่าย Docker ส่วนตัวของคุณ (หากคุณใช้เครือข่ายอื่นเช่นคุณเปิดตัว Docker ด้วย--bip=#.#.#.#/#จากนั้นเปลี่ยนตาม) เปลี่ยนeth0เป็นอินเตอร์เฟสใด ๆ บนเครื่องโฮสต์ด้วยการเชื่อมต่อภายนอก:

#INTERFACE:DEST         SOURCE
eth0                    172.17.0.0/16

/ etc / Shorewall / อินเตอร์เฟซ

เพิ่มรายการอินเทอร์เฟซเพื่อให้ Shorewall รู้ว่าอินเทอร์เฟซใดที่dockโซนเกี่ยวข้องกับ:

#ZONE           INTERFACE               OPTIONS
dock            docker0

/ etc / Shorewall / โซน

สร้างโซนใหม่ หมายเหตุdockerยาวเกินไปและจะทำให้เกิดข้อผิดพลาด "ชื่อโซนที่ไม่ถูกต้อง"

#ZONE   INTERFACE
dock    ipv4

/ etc / Shorewall / นโยบาย

คุณอาจต้องการอนุญาตให้ Docker container คุยกับเครื่องโฮสต์และอินเทอร์เน็ตดังนั้นนี่คือจุดเริ่มต้นที่ดี:

#SOURCE         DEST            POLICY
# ...(other policies)...
dock            all             ACCEPT
# ...(other policies, catch-all)...

นอกจากนี้คุณยังอาจต้องคล้ายACCEPTนโยบายสำหรับการจราจรจากfwไปdockถ้าคุณยังไม่ได้เปิดมันขึ้นกับการfwall

คุณสามารถทำให้เรื่องนี้แน่นขึ้นในนโยบายหรือไฟล์กฎตามที่ต้องการ ตัวอย่างเช่นข้างต้นไม่อนุญาตให้ทราฟฟิกภายนอกเข้าถึงคอนเทนเนอร์ Docker ของคุณอย่างชัดเจน ตรวจสอบโซน / นโยบาย / กฎอื่น ๆ ของคุณ


1
IP_FORWARDING=YesและIP_FORWARDING=Trueทำงานเช่นกัน ฉันมีเราเตอร์หลายตัว แต่คำตอบของคุณชัดเจนกว่าของฉันมาก การทำงานที่ดี.
Aaron C. de Bruyn

ยกโทษให้ความไม่รู้ของฉัน - เมื่อฉันรีสตาร์ท shorewall หลังจากเพิ่มกฎที่กำหนดไว้ฉันได้รับคำเตือนว่าท่าจอดเรือเป็น "ช่องว่างที่ว่าง" "... และแน่นอนเมื่ออ่านข้างต้นมันก็ไม่ชัดเจนสำหรับฉัน ที่อยู่ 172.17 และโซน 'ท่าเรือ' ฉันขาดอะไรบางอย่างที่ชัดเจนเกี่ยวกับวิธีการที่ shorewall ทำงานได้อย่างไร
John Clements

ขออภัยที่ฉันพลาดการเปลี่ยนแปลงในไฟล์อินเตอร์เฟส /etc/shorewall/interfacesฉันได้แก้ไขคำตอบที่เห็นส่วนใหม่
fazy

ขอขอบคุณ. มันทำงานได้ดีเช่นกันกับ shorewall 5 (ซึ่งเป็นนักเทียบท่าที่รู้ตัว) เพื่อให้โฮสต์เข้าร่วมคอนเทนเนอร์ของมัน
Drasill

การตั้งค่า masq มีความสำคัญมากมิฉะนั้นนักเทียบท่า - คอนเทนเนอร์จะไม่สามารถเข้าถึงคอนเทนเนอร์อื่นโดยใช้ IP ภายนอก - มันจะถูกบล็อก
Eugen Mayer

6

เนื่องจากนักเทียบท่านำเสนอคุณสมบัติการแยกเครือข่ายโซลูชันอื่น ๆ ที่กล่าวถึงที่นี่จะไม่เพียงพออีกต่อไปหากคุณต้องการใช้เครือข่ายที่กำหนดเอง Shorewall 5.0.6 แนะนำการรองรับ Dockerรวมถึงเครือข่าย Docker นี้:

  • อนุญาตให้ shorewall และนักเทียบท่าเริ่ม / หยุด / เริ่มใหม่ในลำดับใดก็ได้
  • หลีกเลี่ยงความจำเป็นในการดูแลรักษาสคริปต์ส่วนขยาย

2

เพิ่งคิดออกมาในกล่องของฉัน ตรวจสอบให้แน่ใจว่า /etc/shorewall.conf มี:

IP_FORWARDING=Yes

นักเทียบท่าอาศัยการส่งต่อและฉันเว้นระยะที่ 'หุ่นเชิด' ตั้งค่าเป็น 'ไม่' บนเซิร์ฟเวอร์ทั้งหมดของฉัน

อัปเดต: คุณอาจต้องทำการปลอมแปลงทราฟฟิกที่มาจากนักเทียบท่าออกจากส่วนต่อประสาน WAN ของคุณ

แก้ไข/etc/shorewall/masqและคุณจะต้องมีบรรทัดคล้ายกับ:

br0 172.17.0.0/12

ในกรณีนี้ส่วนต่อประสาน WAN ของฉันเป็นจริง br0 (สะพาน) แต่คุณอาจจะเป็นเช่น eth0 (ใช้ifconfigเพื่อดูอินเทอร์เฟซและที่อยู่ IP ของพวกเขา) ในเครื่องนักเทียบท่าของฉันใช้ 172.17.0.0/24 ซึ่งเป็นช่วงที่อยู่ส่วนตัวของ RFC1918 ซึ่งอาจแตกต่างกันในระบบอื่น ๆ แต่คุณสามารถดูช่วงโดยใช้อีกครั้งหนึ่งที่จะมองหาอินเตอร์เฟซifconfigdocker0


2

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


0

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

นี่เป็นจริงอย่างน้อยในการติดตั้ง Archlinux ของฉัน


0

การดำเนินการรีเฟรชไม่ได้ทำการกำหนด iptable ดังนั้นหากคุณต้องการรีเฟรชกฎหรือนโยบายคุณอาจเรียกใช้การรีเฟรชแทนการรีสตาร์ท:

sudo shorewall refresh

เห็นได้ชัดว่าปัญหายังคงอยู่หากคุณต้องการเริ่มต้นใหม่โดยอัตโนมัติ จากนั้นคุณต้องรีสตาร์ทตัวเทียบท่าและบรรจุคอนเทนเนอร์ของคุณอีกครั้ง


0

ตัวเลือกหนึ่งที่เป็นไปได้คือการเรียกใช้ Docker ด้วย --net = host options เพื่ออนุญาตให้แอปพลิเคชั่นเข้าถึงเครือข่ายโฮสต์โดยไม่ต้องส่งต่อไอพีและ NAT

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