การจัดการคลัสเตอร์ของคอมพิวเตอร์ linux หลังไฟร์วอลล์


19

ผลิตภัณฑ์ของ บริษัท ของฉันเป็นกล่อง Linux (Ubuntu) ซึ่งนั่งอยู่ในเครือข่ายของคนอื่นที่ใช้ซอฟต์แวร์ของเรา ถึงตอนนี้เรามีกล่องน้อยกว่า 25 กล่องในป่าและใช้ TeamViewer เพื่อจัดการกล่อง

ตอนนี้เรากำลังจะจัดส่ง 1,000 กล่องเหล่านี้และ TeamViewer ไม่มีตัวเลือกอีกต่อไป งานของฉันคือการคิดออกวิธีการเข้าถึงกล่องเหล่านี้และการปรับปรุงซอฟแวร์ที่พวกเขา โซลูชันนี้จะสามารถเจาะผ่านไฟร์วอลล์และคุณมีอะไรบ้าง

ฉันพิจารณาแล้ว:

1. โฮมโตโซลูชัน (เช่นบริการ Linux) ที่สร้างอุโมงค์ย้อนกลับ SSHไปยังเซิร์ฟเวอร์ในคลาวด์และบริการอื่นในคลาวด์ที่ติดตามสิ่งเหล่านั้น & ช่วยให้คุณเชื่อมต่อกับพวกเขา

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

2. เครื่องมือเช่นหุ่นเชพเชฟหรือ OpenVPN

ฉันพยายามอ่านให้มากที่สุดเท่าที่จะเป็นไปได้ แต่ดูเหมือนว่าฉันจะไม่สามารถเจาะผ่านการพูดการตลาดมากพอที่จะเข้าใจตัวเลือกที่ชัดเจนที่จะไปด้วย

ไม่มีใครนอกจากเราต้องเชื่อมต่อกับกล่องเหล่านี้ มีใครบ้างที่มีประสบการณ์ที่เกี่ยวข้องซึ่งสามารถให้คำแนะนำแก่ฉันได้บ้าง


2
"เราไม่ได้กำลังจะจัดส่ง" => " ตอนนี้เรากำลังจะจัดส่ง"?
Bob

คำตอบ:


23

ดึงการอัปเดตอย่าดัน

ในขณะที่คุณปรับขนาดมันจะกลายเป็นเรื่องยากที่จะทำการผลักดันการอัปเดตไปยังผลิตภัณฑ์ทั้งหมดของคุณ

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

ให้ผลิตภัณฑ์ของคุณ 'ดึง' การอัปเดตเป็นระยะ ๆ จากนั้นคุณสามารถเพิ่มเซิร์ฟเวอร์ด้านความจุพิเศษเมื่อคุณเติบโต

อย่างไร?

ปัญหานี้ได้รับการแก้ไขแล้วตามที่คุณแนะนำ นี่คือวิธีการหลายวิธีที่ฉันสามารถคิดได้

  • using apt : ใช้ระบบ apt ในตัวพร้อม PPA แบบกำหนดเองและรายการแหล่งข้อมูล ฉันจะตั้งค่า PPA ได้อย่างไร
    • คอนดิชั่น:หากคุณไม่ใช้บริการโฮสติ้งสาธารณะเช่น Launchpad การตั้งค่าระบบบรรจุภัณฑ์ PPA + ของคุณเองนั้นไม่เหมาะกับคนใจร้อน
  • using ssh : สร้างรหัสสาธารณะ SSH สำหรับแต่ละผลิตภัณฑ์แล้วเพิ่มรหัสของอุปกรณ์นั้นในเซิร์ฟเวอร์การอัพเดทของคุณ จากนั้นเพียงแค่มีซอฟต์แวร์rsync/ scpไฟล์ของคุณที่จำเป็น
    • คอนดิชั่น:ต้องติดตาม (และสำรอง!) กุญแจสาธารณะทั้งหมดสำหรับแต่ละผลิตภัณฑ์ที่คุณส่งออกไป
    • Pro : ความปลอดภัยมากกว่าการดาวน์โหลดแบบดิบเนื่องจากอุปกรณ์เดียวที่สามารถเข้าถึงการอัปเดตจะเป็นอุปกรณ์ที่ติดตั้งรหัสสาธารณะ
  • raw download + การตรวจสอบลายเซ็นต์ :

    • โพสต์ไฟล์อัปเดตที่ลงชื่อบางแห่ง (Amazon S3, เซิร์ฟเวอร์ FTP ฯลฯ )
    • ผลิตภัณฑ์ของคุณตรวจสอบไฟล์การอัพเดทที่จะมีการเปลี่ยนแปลงเป็นระยะ ๆ จากนั้นดาวน์โหลด / ตรวจสอบลายเซ็น
    • คอนดิชั่น : ขึ้นอยู่กับวิธีที่คุณปรับใช้นี้ไฟล์อาจเข้าถึงได้แบบสาธารณะ(ซึ่งอาจทำให้ผลิตภัณฑ์ของคุณง่ายต่อการย้อนกลับของวิศวกรและแฮ็ค)
  • ansible : Ansible เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการจัดการการกำหนดค่าระบบ มันอยู่ในขอบเขตของหุ่นเชิด / พ่อครัว แต่ไม่ใช้เอเจนต์ (ใช้ python) และได้รับการออกแบบให้เป็น idempotent หากการปรับใช้ซอฟต์แวร์ของคุณต้องใช้สคริปต์ทุบตีที่ซับซ้อนฉันจะใช้เครื่องมือเช่นนี้เพื่อทำให้ซับซ้อนน้อยลงในการอัปเดตของคุณ

แน่นอนมีวิธีอื่นในการทำเช่นนี้ .. แต่มันทำให้ฉันถึงจุดสำคัญ

ลงชื่อเข้าใช้ / ตรวจสอบการอัปเดตของคุณ!

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

วิธีที่ดีในการทำเช่นนี้คือลงชื่อไฟล์อัปเดตของคุณ คุณจะต้องรักษาใบรับรอง (หรือจ่ายให้ใครบางคนทำ) แต่คุณจะสามารถติดตั้งลายนิ้วมือของคุณในแต่ละอุปกรณ์ของคุณก่อนที่คุณจะส่งพวกเขาออกเพื่อให้พวกเขาสามารถปฏิเสธการปรับปรุงที่ถูกดัดแปลง

ความปลอดภัยทางกายภาพ

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

หากคุณต้องการสักครู่ลองจินตนาการว่าจะเกิดอะไรขึ้นถ้าคุณใช้เครือข่าย OpenVPN ขนาดใหญ่เพื่อรับการอัปเดต ... จากนั้นพวกเขาสามารถใช้เซิร์ฟเวอร์ที่ถูกบุกรุกเพื่อโจมตีทุก ๆ อินสแตนซ์บน VPN

ความปลอดภัย

ไม่ว่าคุณจะทำอะไรระบบรักษาความปลอดภัยจะต้องสร้างขึ้นตั้งแต่แรก อย่าตัดมุมที่นี่ - คุณจะเสียใจในท้ายที่สุดถ้าคุณทำ

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


2
ฉันจะใช้งาน Ansible เป็นครั้งที่สอง - มันอยู่ตรงกลางระหว่างความซับซ้อนของเชลล์สคริปต์และการจัดการการกำหนดค่า Puppet / Chef แบบฟูลสไตน์และมีความซับซ้อนในการทำสิ่งที่ซับซ้อนมากกว่าเพียงแค่อัปเดตซอฟต์แวร์ จัดการ").
RichVel

หากคุณไปเส้นทางของการใช้ Ansible คุณสามารถเขียนมันเพื่อให้ทำงานบน 'localhost' และมันจะไม่ต้องการการเข้าถึง SSH กับเครื่องใด ๆ ที่ได้รับการจัดการ กำหนดค่าให้เป็น cronjob และคุณเป็นทอง
BobTuckerman

1
BTW: ถ้าคุณต้องการรันเซิร์ฟเวอร์แพคเกจของคุณเองfpmและaptlyเป็นเครื่องมือที่ยอดเยี่ยมสองอย่างที่ทำให้การสร้างและโฮสต์แพ็คเกจของคุณง่ายขึ้น เพิ่งผ่านขั้นตอนนี้ไปเมื่อเร็ว ๆ นี้และมันก็ค่อนข้างดี
BobTuckerman

10

คุณต้องการเข้าถึงพวกเขาจริง ๆ ?

หรือเพียงแค่อัปเดตพวกเขา? เนื่องจากคุณสามารถให้พวกเขาอัปเดตตัวเองคล้ายกับวิธีที่ฉลาดในการปรับปรุงมันเป็นแบบอัตโนมัติ

หากคุณต้องการเข้าสู่ระบบ

ทำไม OpenSSH daemon ไม่ฟังผ่านการส่งต่อพอร์ต ลูกค้าแต่ละรายสามารถมีคีย์แยกต่างหากเพื่อความปลอดภัยและจะเชื่อมต่อเมื่อจำเป็นเท่านั้น

ขึ้นอยู่กับลูกค้าของคุณ

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


4
นี้. ด้วย 1,000 ข้อกำหนดของลูกค้าที่แตกต่างกันอย่างน้อยบางคนอาจไม่ต้องการการเชื่อมต่อ openvpn แบบถาวรกลับไปยังสำนักงานของคุณ เป็นการดีที่คุณจะพยายามทำให้พวกเขาอัปเดตตัวเองหาก / เป็น / เมื่อตรวจพบเวอร์ชันใหม่ (จากไฟล์ในที่เก็บ AWS S3 บอกว่านั่นคือสิ่งที่เราทำ
Sirex

@Sirex - ข้อเสียเปรียบประการหนึ่งของการใช้ที่ฝากข้อมูล S3 คือว่าไม่มีรายการที่อนุญาต IP อย่างง่ายที่ลูกค้าสามารถใช้เพื่อล็อคเซิร์ฟเวอร์นั้นเพื่อให้สามารถเข้าถึงที่ฝากข้อมูลที่เก็บการอัปเดตเท่านั้น เราต้องตั้งค่าเซิร์ฟเวอร์การอัพเดทด้วยที่อยู่ IP สาธารณะคงที่เพื่อให้ลูกค้าสามารถใช้ตัวกรอง IP เพื่อควบคุมสิ่งที่เซิร์ฟเวอร์สามารถพูดคุยได้ (AWS ทำการเผยแพร่บล็อก IP ทั้งหมดของพวกเขาดังนั้นในทางทฤษฎีจึงเป็นไปได้ที่จะตั้งค่าตัวกรองที่อนุญาตให้เข้าถึงทรัพยากร AWS เท่านั้น แต่นั่นกว้างเกินไปสำหรับกรณีการใช้งานนี้)
Johnny

เราไม่มีการอัปเดตใน S3 แต่เรามีไฟล์ข้อความซึ่งให้รายละเอียดว่าเป็นเวอร์ชันล่าสุด - ใช้โดยแอปเพื่อแสดงข้อความแบนเนอร์ 'พร้อมใช้งาน' จากนั้นลูกค้าสามารถเรียกใช้ (ในกรณีของเราด้วยตนเอง) ดาวน์โหลดเวอร์ชันล่าสุดในกรณีของเราจากบริการที่เรียกว่า fetchapp
Sirex

9

ผมขอแนะนำเครื่องมือในการประสานเช่นหุ่นกระบอกหรือเกลือ

Salt เป็นคิวข้อความและสามารถทำการเชื่อมต่อขาออกถาวรจากอุปกรณ์ของคุณไปยังเซิร์ฟเวอร์หลัก คุณสามารถใช้เพื่อเรียกใช้คำสั่งโดยพลการในเครื่องใช้ไฟฟ้า ... apt-getเหมือน

ตัวเลือกอื่นคือ Puppet ซึ่งคุณยังคงมีเซิร์ฟเวอร์หลักและไคลเอนต์ทำการเชื่อมต่อขาออกจากตำแหน่งที่ตั้งของพวกเขา

ฉันใช้เครื่องมือทั้งสองนี้เพื่อจุดประสงค์ที่คล้ายกันซึ่งฉันอาจไม่มีการควบคุมดูแลของไฟร์วอลล์

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