Mengelola cluster komputer linux di belakang firewall

19

Produk perusahaan saya pada dasarnya adalah sebuah kotak Linux (Ubuntu) yang berada di jaringan orang lain yang menjalankan perangkat lunak kami. Hingga kini kami memiliki kurang dari 25 kotak di alam liar dan menggunakan TeamViewer untuk mengelolanya.

Kami sekarang akan mengirimkan 1000 kotak ini dan TeamViewer tidak lagi menjadi pilihan. Pekerjaan saya adalah mencari cara untuk mengakses kotak-kotak ini dan memperbarui perangkat lunak pada mereka . Solusi ini harus bisa menembus firewall dan apa pun yang Anda miliki.

Saya telah mempertimbangkan:

1. Solusi yang dikembangkan di rumah (mis. Layanan Linux) yang membuat terowongan balik SSH ke server di cloud, dan layanan lain di cloud yang melacaknya & memungkinkan Anda terhubung dengannya.

Ini jelas padat karya dan terus terang terasa seperti menciptakan kembali roda karena begitu banyak perusahaan lain pasti sudah mengalami masalah ini. Meski begitu, saya tidak yakin kami akan melakukan pekerjaan dengan baik.

2. Alat-alat seperti boneka, koki atau OpenVPN

Saya mencoba membaca sebanyak mungkin, tetapi sepertinya saya tidak bisa menembus cukup melalui ceramah pemasaran untuk memahami pilihan yang jelas untuk pergi bersama.

Tidak ada orang lain kecuali kita yang perlu terhubung ke kotak-kotak ini. Apakah ada orang dengan pengalaman yang relevan yang dapat memberi saya beberapa petunjuk?

hakura
sumber
2
"Kami tidak akan mengirim" => "Kami sekarang akan mengirim"?
Bob

Jawaban:

23

Tarik pembaruan, jangan mendorong

Ketika Anda mengukur, itu akan menjadi tidak mungkin untuk melakukan pembaruan push untuk semua produk Anda.

  • Anda harus melacak setiap pelanggan, yang masing-masing mungkin memiliki konfigurasi firewall yang berbeda.
  • Anda harus membuat koneksi masuk melalui firewall pelanggan, yang akan memerlukan penerusan porta atau mekanisme serupa lainnya. Ini adalah risiko keamanan bagi pelanggan Anda

Alih-alih, mintalah produk Anda 'menarik' pembaruan mereka secara berkala, dan kemudian Anda dapat menambahkan kapasitas sisi server saat Anda tumbuh.

Bagaimana?

Masalah ini sudah dipecahkan, seperti yang Anda sarankan. Inilah beberapa pendekatan yang bisa saya pikirkan.

  • menggunakan apt : Gunakan sistem apt bawaan dengan PPA khusus dan daftar sumber. Bagaimana saya menyiapkan PPA?
    • Con: Kecuali jika Anda menggunakan layanan hosting publik seperti launchpad, Menyiapkan sistem pengemasan PPA + Anda sendiri bukan untuk menjadi lemah hati.
  • menggunakan ssh : Menghasilkan kunci publik SSH untuk setiap produk, dan kemudian menambahkan kunci perangkat itu ke server pembaruan Anda. Kemudian, cukup minta perangkat lunak rsync/ scpfile Anda
    • Con: Harus melacak (dan mencadangkan!) Semua kunci publik untuk setiap produk yang Anda kirim.
    • Pro : Lebih aman daripada unduhan mentah, karena satu-satunya perangkat yang dapat mengakses pembaruan adalah yang memiliki kunci publik yang diinstal.
  • unduhan mentah + cek tanda tangan :

    • Posting file pembaruan yang ditandatangani di suatu tempat (Amazon S3, server FTP, dll)
    • Produk Anda secara berkala memeriksa file pembaruan yang akan diubah, dan kemudian mengunduh / memverifikasi tanda tangan.
    • Kontra : Bergantung pada bagaimana Anda menggunakan ini, file-file tersebut mungkin dapat diakses oleh umum (yang dapat membuat produk Anda lebih mudah untuk dibalik-balikkan rekayasa dan retas)
  • ansible : Ansible adalah alat yang hebat untuk mengelola konfigurasi sistem. Ini di ranah boneka / koki, tetapi tanpa agen (menggunakan python) dan dirancang untuk menjadi idempoten. Jika menggunakan perangkat lunak Anda akan membutuhkan skrip bash yang rumit, saya akan menggunakan alat seperti ini untuk membuatnya tidak terlalu rumit untuk melakukan pembaruan Anda.

Tentu saja, ada cara lain untuk melakukan ini .. Tapi itu membawa saya ke poin penting.

Tanda tangani / validasikan pembaruan Anda!

Tidak peduli apa yang Anda lakukan, itu penting bahwa Anda memiliki mekanisme untuk memastikan bahwa update Anda belum dirusak. Pengguna jahat dapat menyamar sebagai server pembaruan Anda di salah satu dari konfigurasi di atas. Jika Anda tidak memvalidasi pembaruan Anda, kotak Anda jauh lebih mudah untuk diretas dan masuk.

Cara yang baik untuk melakukannya adalah dengan menandatangani file pembaruan Anda. Anda harus memiliki sertifikat (atau membayar seseorang untuk melakukannya), tetapi Anda dapat menginstal sidik jari pada setiap perangkat Anda sebelum mengirimkannya sehingga mereka dapat menolak pembaruan yang telah dirusak.

Keamanan fisik

Tentu saja, jika seseorang memiliki akses fisik ke penyebaran pelanggan, mereka dapat dengan mudah mengambil alih server. Tapi setidaknya mereka tidak bisa menyerang penyebaran lain! Keamanan fisik kemungkinan merupakan tanggung jawab pelanggan Anda.

Jika Anda mau sejenak, bayangkan apa yang akan terjadi jika Anda menggunakan jaringan OpenVPN yang besar untuk pembaruan ... Mereka kemudian dapat menggunakan server yang dikompromikan untuk menyerang setiap instance pada VPN

Keamanan

Apa pun yang Anda lakukan, keamanan harus dibangun sejak awal. Jangan berhemat di sini - Anda akan menyesal pada akhirnya jika melakukannya.

Sepenuhnya mengamankan sistem pembaruan ini berada di luar jangkauan pos ini, dan saya sangat menyarankan untuk menyewa konsultan jika Anda atau seseorang di tim Anda tidak memiliki pengetahuan di bidang ini. Layak setiap sen.

BobTuckerman
sumber
2
Saya akan kedua menggunakan Ansible - itu pertengahan jalan dalam kompleksitas antara skrip shell dan manajemen konfigurasi Wayang / Chef gaya penuh, dan memiliki kecanggihan untuk melakukan hal-hal yang lebih kompleks daripada hanya memperbarui perangkat lunak (seperti yang ditunjukkan oleh pertanyaan yang mengatakan " mengelola").
RichVel
Jika Anda memilih rute menggunakan Ansible, Anda dapat menulisnya untuk dijalankan di 'localhost', dan itu tidak akan memerlukan akses SSH ke salah satu mesin yang dikelola. Konfigurasikan untuk menjadi cronjob, dan Anda emas.
BobTuckerman
1
BTW: Jika Anda ingin menjalankan server paket Anda sendiri, fpmdan aptlydua alat hebat yang membuatnya lebih mudah untuk membangun dan meng-host paket Anda sendiri. Baru saja melewati proses ini, dan itu cukup bagus.
BobTuckerman
10

Apakah Anda benar-benar perlu mengaksesnya?

Atau hanya memperbaruinya? Karena Anda dapat meminta mereka memperbarui sendiri, mirip dengan cara memperbarui yang tepat pada itu sendiri tanpa pengawasan.

Jika Anda perlu masuk

Mengapa daemon OpenSSH tidak mendengarkan melalui penerusan porta? Setiap pelanggan dapat memiliki kunci terpisah untuk keamanan dan hanya akan terhubung bila diperlukan.

Terserah pelanggan Anda

Anda perlu mempertimbangkan apa yang juga ingin diterima oleh pelanggan. Mereka mungkin tidak nyaman dengan akses jarak jauh ke jaringan mereka, atau hanya nyaman dengan teknologi / konfigurasi tertentu.

Ryan Babchishin
sumber
4
ini. dengan 1000 persyaratan pelanggan yang berbeda setidaknya beberapa tidak akan menginginkan koneksi openvpn permanen kembali ke kantor Anda. Idealnya Anda akan mencoba membuat mereka memperbarui sendiri jika / ketika / ketika mereka mendeteksi versi baru tersedia (dari file dalam AWS S3 bucket, katakanlah. Itulah yang kami lakukan.
Sirex
@Sirex - Salah satu kelemahan menggunakan ember S3 adalah bahwa tidak ada daftar putih IP sederhana yang dapat digunakan pelanggan untuk mengunci server itu sehingga hanya dapat mencapai ember yang menyimpan pembaruan. Kami akhirnya harus menyiapkan server pembaruan dengan alamat IP publik yang statis sehingga pelanggan dapat menggunakan filter IP untuk mengontrol apa yang dapat dibicarakan oleh server itu. (AWS menerbitkan semua blok IP mereka, jadi secara teoritis dimungkinkan untuk mengatur filter yang memungkinkan akses ke sumber daya AWS saja, tapi itu terlalu luas untuk kasus penggunaan ini)
Johnny
Kami tidak memiliki pembaruan pada S3, tetapi kami memiliki file teks yang merinci apa versi terbaru - digunakan oleh aplikasi untuk memberikan pesan spanduk 'perbarui tersedia'. Pelanggan kemudian dapat memicu (dalam kasus kami secara manual) unduhan versi terbaru, dalam kasus kami dari layanan yang disebut fetchapp.
Sirex
9

Saya sarankan alat orkestrasi seperti Wayang atau Garam .

Salt adalah antrian pesan dan dapat membuat koneksi keluar terus-menerus dari alat Anda ke server master. Anda dapat menggunakan ini untuk menjalankan perintah sembarang pada peralatan ... seperti apt-get.

Opsi lainnya adalah Wayang, di mana Anda masih memiliki server master dan klien membuat koneksi keluar dari lokasi mereka.

Saya menggunakan kedua alat ini untuk tujuan yang sama di mana saya mungkin tidak memiliki kontrol administratif firewall.

putih
sumber