Керування кластером комп'ютерів Linux за брандмауерами


19

Продукт моєї компанії, по суті, є вікном Linux (Ubuntu), який сидить у чужій мережі, де працює наше програмне забезпечення. На даний момент у нас було менше 25 коробок у дикій природі, і ми використовували TeamViewer для управління ними.

Зараз ми збираємося доставити 1000 таких скриньок, і TeamViewer більше не є можливим. Моя робота - розібратися у способі доступу до цих скриньок та оновлення програмного забезпечення на них . Це рішення повинно мати можливість пробиватися через брандмауэры та що у вас є.

Я вважав:

1. Рішення в домашніх умовах (наприклад, служба Linux), яка встановлює зворотний тунель SSH до сервера в хмарі та інша служба в хмарі, яка відслідковує ті, і дозволяє вам підключатися до них.

Це, очевидно, трудомістке і, чесно кажучи, відчуває, як винаходити колесо, оскільки так багато інших компаній, мабуть, вже стикалися з цією проблемою. Тим не менш, я не впевнений, що ми зробимо велику роботу в цьому.

2. Інструменти, такі як лялька, шеф-кухар або OpenVPN

Я намагався читати якомога більше, але не можу, здається, проникнути достатньо через маркетингові розмови, щоб зрозуміти очевидний вибір, з яким потрібно піти.

Ніхто інший, крім нас, не потребує підключення до цих скриньок. Хтось із відповідним досвідом може дати мені деякі вказівки?


2
"Ми не збираємося відправляти" => " Зараз ми збираємося відправляти"?
Боб

Відповіді:


23

Потягніть оновлення, не натискайте

Як масштабувати, це стане неможливим , щоб зробити поштовх оновлення всіх ваших продуктів.

  • Вам доведеться відстежувати кожного клієнта, який може мати іншу конфігурацію брандмауера.
  • Вам доведеться створити вхідні з'єднання через брандмауер замовника, що вимагатиме переадресації портів чи іншого подібного механізму. Це ризик для безпеки для ваших клієнтів

Натомість, припускайте, щоб ваші продукти періодично "витягували" свої оновлення, і тоді ви можете додавати додаткову потужність на стороні сервера під час зростання.

Як?

Ця проблема вже вирішена, як ви запропонували. Ось декілька підходів, про які я можу придумати.

  • using apt : Використовуйте вбудовану систему apt зі спеціальним списком PPA та джерелами. Як налаштувати PPA?
    • Кон: Якщо ви не користуєтесь публічним хостинговим сервісом, таким як стартовий панель, налаштування власної вподобаної системи упаковки PPA + не для слабкого серця.
  • за допомогою ssh : Створіть відкритий ключ SSH для кожного продукту, а потім додайте ключ цього пристрою до своїх серверів оновлення. Потім просто замовте програмне забезпечення rsync/ scpпотрібні файли.
    • Con: Необхідно відстежувати (і створювати резервну копію!) Усіх відкритих ключів кожного продукту, який ви надсилаєте.
    • Pro : Більш захищена, ніж нестандартне завантаження, оскільки єдиними пристроями, які мають доступ до оновлень, були б ті, у яких встановлений відкритий ключ.
  • завантаження в неробочому порядку + перевірка підпису :

    • Опублікувати десь підписаний файл оновлення (Amazon S3, FTP-сервер тощо)
    • Ваш продукт періодично перевіряє, чи потрібно змінити файл оновлення, а потім завантажує / перевіряє підпис.
    • Con : Залежно від способу розгортання файлів, ці файли можуть бути загальнодоступними (це може полегшити процес інженерії та злому продукту)
  • ansible : Ansible - це чудовий інструмент для управління конфігураціями системи. Це в царині лялькових / шеф-кухарів, але без агентів (використовує пітон) і призначений бути безсильним. Якщо для розгортання програмного забезпечення потрібен складний скрипт bash, я б скористався таким інструментом, щоб зробити його менш складним у виконанні оновлень.

Звичайно, є й інші способи зробити це .. Але це підводить мене до важливого моменту.

Підпишіть / підтвердіть свої оновлення!

Незалежно від того, що ви робите, обов'язково маєте механізм, щоб ваше оновлення не було підроблене. Зловмисний користувач може видавати себе за ваш сервер оновлення в будь-якій з перерахованих вище конфігурацій. Якщо ви не підтвердили своє оновлення, ваш вікно набагато простіше зламати та потрапляти.

Хороший спосіб зробити це підписати файли оновлення. Вам доведеться підтримувати сертифікат (або платити комусь за це), але ви зможете встановити відбиток пальців на кожному з своїх пристроїв, перш ніж надсилати їх, щоб вони могли відхиляти оновлення, які були підроблені.

Фізична безпека

Звичайно, якщо хтось має фізичний доступ до розгортання клієнта, він може легко перейняти сервер. Але принаймні вони не можуть атакувати інші розгортання! Фізична безпека, ймовірно, відповідальність вашого клієнта.

Якщо б ви на хвилину, уявіть, що буде, якби ви використовували велику мережу OpenVPN для оновлень ... Вони могли б потім використовувати компрометований сервер для нападу на кожен екземпляр VPN.

Безпека

Що б ви не робили, безпеку потрібно вбудовувати з самого початку. Тут не зрізайте кутів - зрештою ви пошкодуєте про це.

Повна безпека цієї системи оновлень виходить за межі цієї посади, і я настійно рекомендую найняти консультанта, якщо ви або хтось із вашої команди не обізнаний у цій галузі. Варто кожної копійки.


2
Я б по-друге використовував Ansible - це середина шляху у складності між скриптами оболонки та повномасштабним керуванням конфігурацією стилю Puppet / Chef і має складність робити складніші речі, ніж просто оновлювати програмне забезпечення (на що натякає питання, що говорить " керувати ").
RichVel

Якщо ви йдете по маршруту використання Ansible, ви можете записати його для запуску на "localhost", і це не вимагатиме доступу SSH до будь-якої з машин, якими керує. Налаштуйте це як кронштейн, і ви золотий.
BobTuckerman

1
ДО РЕЧІ: Якщо ви хочете запустити свій власний сервер пакетів, fpmі aptlyдві великі інструментів , які роблять його набагато простіше побудувати і розмістити свої власні пакети. Просто нещодавно пройшов цей процес, і це було досить приємно.
BobTuckerman

10

Вам дійсно потрібно отримати доступ до них?

Або просто оновити їх? Тому що ви можете їх оновлювати самостійно, як і те, як доречні оновлення власноруч без нагляду.

Якщо вам потрібно увійти

Чому б не демон прослуховування демона OpenSSH через переадресацію портів? Кожен клієнт може мати окремий ключ для безпеки і підключатиметься лише за потреби.

До ваших клієнтів

Вам потрібно врахувати, що клієнт готовий прийняти. Вони можуть бути не комфортні з будь-яким віддаленим доступом до своєї мережі або зручні лише з певними технологіями / конфігураціями.


4
це. з 1000 різними вимогами клієнтів, принаймні деякі не хочуть постійного openvpn з'єднання назад до ваших офісів. В ідеалі, ви б спробували змусити їх оновлюватись, якщо / як / коли вони виявляють нову версію, скажімо (скажімо, з файлу у відрі AWS S3. Скажімо, це ми робимо.
Sirex

@Sirex - Одним недоліком використання відра S3 є те, що не існує простого списку IP-адрес, який клієнт може використовувати для блокування цього сервера, щоб він міг дістатися лише до того відра, яке містить оновлення. Нарешті, нам довелося налаштувати сервер оновлення зі статичною загальнодоступною IP-адресою, щоб клієнти могли використовувати IP-фільтри, щоб контролювати те, на чому може говорити цей сервер. (AWS публікує всі їх IP-блоки, тому теоретично можливо встановити фільтр, який дозволяє отримати доступ лише до ресурсів AWS, але це занадто широко для цього випадку використання)
Johnny

У нас немає оновлень на S3, але у нас є текстовий файл, в якому детально описується, яка остання версія - додаток використовується для надання банерних повідомлень "оновлення доступно". Потім клієнти можуть запустити (у нашому випадку вручну) завантаження останньої версії, в нашому випадку - з послуги під назвою fetchapp.
Sirex

9

Я пропоную такий інструмент для оркестрації, як лялька чи сіль .

Сіль - це черга повідомлень і може зробити постійне вихідне з'єднання від вашого пристрою до головного сервера. Ви можете використовувати це для запуску довільних команд на пристроях ... як apt-get.

Інший варіант - Ляльковий, де ви все ще маєте головний сервер, і клієнти здійснюють вихідні з'єднання зі своїх місць.

Я використовую обидва ці інструменти для подібних цілей, якщо я, можливо, не маю адміністративного контролю над брандмауером.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.