Keamanan Wayang dan Topologi Jaringan

26

Latar Belakang:

Saya akhirnya menyisihkan waktu untuk bergabung dengan Abad 21 dan melihat Wayang.

Seperti yang ada saat ini kami versi mengontrol semua konfigurasi server dalam repositori yang diadakan secara internal di kantor. Ketika suatu pembaruan perlu dilakukan, perubahan diperiksa kembali ke dalam repo dan didorong secara manual ke mesin yang dimaksud. Ini biasanya berarti SFTP'ing ke mesin jarak jauh dan kemudian memindahkan file ke tempatnya, dengan izin yang relevan, dari shell.

Jadi saya berharap bahwa Wayang akan menjadi perpanjangan sederhana namun menakjubkan untuk apa yang sudah kita miliki.

Sekarang saya menganggap proses yang saat ini kami harus cukup aman. Dengan asumsi bahwa jaringan internal kami akan selalu relatif lebih aman daripada jaringan publik di pusat data kami.

  • Prosesnya selalu satu arah. Perubahan melintasi dari lingkungan yang aman ke tidak aman dan tidak pernah sebaliknya.

  • Master store berada di tempat yang paling aman. Risiko kompromi, baik dengan mencuri konfigurasi atau mengirimkan modifikasi berbahaya, sangat berkurang.

Pertanyaan:

Dari apa yang saya pahami tentang server Wayang / model klien adalah bahwa klien melakukan polling dan menarik pembaruan langsung dari server. Lalu lintas dibungkus SSL sehingga tidak dapat dicegat atau dipalsukan. Tapi itu berbeda dari apa yang kita lakukan saat ini karena server Wayang perlu di-host di lokasi publik. Baik secara terpusat, atau satu untuk setiap situs pusat data yang kami pelihara.

Jadi saya bertanya-tanya:

  • Apakah saya menjadi paranoid yang tidak perlu tentang perubahan dari push to pull?

  • Apakah saya menjadi paranoid yang tidak perlu tentang menyimpan semua informasi itu secara terpusat di jaringan publik?

  • Bagaimana orang lain memelihara beberapa jaringan - server terpisah untuk setiap situs?


Pembaruan 30/07/09:

Saya kira salah satu masalah besar saya yang lain adalah menempatkan begitu harus percaya pada satu mesin. Para dalang akan di-firewall, diamankan dan semacamnya. Namun demikian setiap mesin publik dengan layanan pendengaran memiliki permukaan serangan dengan ukuran tertentu.

Mungkin jika master memiliki izin untuk memperbarui file apa pun pada salah satu klien boneka, maka kompromi itu pada akhirnya akan menghasilkan kompromi dari semua klien itu. "Raja-raja kerajaan" berbicara.

  • Apakah hipotesis itu benar?

  • Apakah ada cara yang bisa dimitigasi?

Dan Carley
sumber
Hipotesis Anda benar; kompromi pada dalang adalah kompromi pada semua klien. Namun, lebih mudah untuk merasa nyaman dengan keamanan satu mesin yang bisa Anda fokuskan perhatiannya pada pengamanan daripada seluruh jaringan mesin, bukan? Mitigasi tergantung pada lingkungan Anda, tetapi boneka ditulis untuk menjadi pipa ledeng, ada cukup banyak "kait" di tempat di mana Anda dapat menambahkan beberapa audit atau pemeriksaan tambahan sesuai kebutuhan.
Paul Lathrop
1
@ Paul - Semacam "taruh semua telur Anda dalam satu keranjang setelah memastikan bahwa Anda memiliki keranjang yang sangat bagus"?
Matt Simmons

Jawaban:

10

Karena saya kadang-kadang menyimpan kata sandi dalam variabel dalam modul saya, untuk dapat menggunakan aplikasi tanpa harus menyelesaikan konfigurasi secara manual, itu berarti bahwa saya tidak dapat dengan sopan menempatkan repo boneka saya di server publik. Melakukan hal itu berarti menyerang puppetmaster akan memungkinkan untuk mendapatkan beberapa sandi aplikasi atau db dari semua aplikasi kami yang berbeda di semua server kami.

Jadi puppetmaster saya ada di jaringan pribadi kantor kami, dan saya tidak menjalankan daemon puppetd di server. Ketika saya perlu menggunakan, saya menggunakan ssh dari jaringan pribadi ke server, membuat terowongan dan memanggil boneka jarak jauh.
Caranya bukan dengan mengatur remote tunnel dan puppet client untuk terhubung ke puppetmaster, tetapi ke proxy yang menerima http connect dan dapat mencapai puppetmaster server di jaringan pribadi. Kalau tidak, boneka akan menolak untuk menarik karena konflik nama host dengan sertifikat

# From a machine inside privatenet.net :
ssh -R 3128:httpconnectproxy.privatenet.net:3128 \
    -t remoteclient.publicnetwork.net \
    sudo /usr/sbin/puppetd --server puppetmaster.privatenet.net \
    --http_proxy_host localhost --http_proxy_port 3128 \
    --waitforcert 60 --test –-verbose

Ini bekerja untuk saya, semoga membantu Anda

Alex F
sumber
Cemerlang! Tetapi apakah Anda membutuhkan - sekali pakai boneka? Jika tidak, terowongan tidak akan runtuh setelah perintah dieksekusi, tetapi puppetd akan default untuk berjalan sebagai server?
Purfideas
Wayang yang diluncurkan tidak dianemonisasi. Saya lebih suka menggunakan opsi --test sebagai ganti pasangan --selamanya --no-daemonize. Jadi puppetd dijalankan di latar depan, dan ssh memaksa terminal (opsi -t). Ini juga memiliki keuntungan bahwa Anda dapat berinteraksi dengan boneka yang sedang berjalan (mis. Ctrl ^ c untuk terminasi puppetd yang bersih). Setelah puppetd berakhir, sesi ssh berakhir dan terowongan ditutup.
Alex F
Saya menemukan bahwa ini masih menyebabkan masalah dan akhirnya mengkonfigurasi server OpenVPN pada mesin firewall sehingga jaringan dengan server boneka dimungkinkan untuk menghubungi dari mesin jarak jauh ...
David Gardner
4

Kami memiliki dua situs, kantor kami dan colo kami. Setiap situs memiliki puppetmaster sendiri. Kami menyiapkan repositori svn dengan struktur berikut:

root/office
root/office/manifests/site.pp
root/office/modules
root/colo
root/colo/manifests/site.pp
root/colo/modules
root/modules

Direktori modul di bawah setiap situs adalah direktori svn: externals kembali ke direktori modul tingkat atas. Ini berarti mereka berbagi direktori modul yang persis sama. Kami kemudian memastikan bahwa sebagian besar kelas yang kami tulis berada di bawah direktori modul dan digunakan oleh kedua situs. Ini memiliki keuntungan bagus memaksa kita untuk berpikir secara umum dan tidak mengikat kelas ke situs tertentu.

Adapun keamanan, kami meng-host puppetmaster kami (dan seluruh jaringan kami) di belakang firewall kami, jadi kami tidak khawatir tentang menyimpan konfigurasi secara terpusat. Puppetmaster hanya akan mengirimkan config ke host yang dipercayanya. Jelas Anda harus menjaga server itu tetap aman.

David Pashley
sumber
Terima kasih. Tip svn: eksternal adalah sentuhan yang bagus. Semuanya akan di-firewall. Tapi, Anda tahu, apa pun yang akan dimiliki layanan mendengarkan secara inheren memiliki permukaan serangan yang lebih besar.
Dan Carley
2

Saya tidak bisa membuat keputusan tentang seberapa penting paranoia Anda, itu sangat tergantung pada lingkungan Anda. Namun, saya dapat mengatakan dengan yakin bahwa dua poin utama dari konfigurasi yang ada masih dapat diterapkan. Anda dapat memastikan perubahan Anda melintas dari lingkungan yang aman (repositori di kantor Anda) ke lingkungan yang kurang aman, di mana pun dalang Anda berada. Anda mengubah proses dari SFTP'ing ke sekelompok server dan secara manual menempatkan file ke tempat ke SFTP'ing ke puppetmaster Anda dan membiarkan Puppet mendistribusikan file dan meletakkannya di tempat yang benar. Master store Anda masih merupakan repositori, dan risiko Anda dikurangi.

Saya tidak percaya bahwa mendorong atau menarik secara inheren lebih aman daripada model lainnya. Wayang melakukan pekerjaan yang baik untuk mengamankan konfigurasi dalam perjalanan, serta mengotentikasi baik klien dan server untuk memastikan ada kepercayaan dua arah di tempat.

Adapun beberapa jaringan - kami menanganinya dengan kepala "master" kepala sekolah dengan kepala boneka di setiap lokasi bertindak sebagai klien untuk kepala pusat.

Paul Lathrop
sumber
Pendekatan satelit terdengar menarik. Apakah diperlukan konfigurasi khusus? Bisakah Anda mengarahkan saya ke arah dokumentasi apa pun?
Dan Carley
Sebenarnya tidak ada konfigurasi khusus yang diperlukan. Anda hanya menjalankan boneka di satelit. puppet.conf harus menetapkan pengaturan server ke "master" alih-alih menunjuk ke diri mereka sendiri (yang merupakan konfigurasi yang lebih khas)
Paul Lathrop
1

Salah satu pendekatan desain adalah memiliki kepala dalang lokal untuk setiap situs sistem dan menggunakan alat penyebaran untuk mendorong perubahan pada kepala dalang. (Menggunakan git dengan kait git bisa bekerja juga).

Ini akan menjaga kekhawatiran Anda tentang layanan mendengarkan di jaringan publik karena lalu lintas jaringan boneka hanya bersifat internal.

Dimungkinkan juga untuk mendorong manifes ke setiap server dan meminta klien boneka mem-parsing manifes dan menerapkan konfigurasi yang relevan.

Mark Carey
sumber
0

meskipun Anda mengatakan "eksternal", saya benar-benar ragu orang yang sewenang-wenang perlu terhubung dengan kepala boneka Anda. Anda selalu dapat melempar VPN ke dalam campuran. seorang teman saya pernah bertanya kepada saya "apakah Anda perlu khawatir tentang keamanan protokol jika koneksi aman?" sementara saya tidak setuju dengan sikap itu, lapisan tambahan tidak pernah sakit dan tentu saja keajaiban pada paranoia pribadi saya. selain itu, menyenangkan untuk terowongan terowongan.

Neoice
sumber
0

Mark Burgess, penulis cfengine dan seorang profesor universitas (boneka itu sepertinya berutang warisan kepada) telah menulis banyak tentang push dan pull. Dia mengklaim tarikan secara inheren lebih aman. Jika Anda melihat situs web cfengine, mereka hanya memiliki 1 insiden keamanan jaringan dalam 17 tahun. Burgess mengklaim itu karena desain tarikannya. Saya pikir satu titik kompromi tidak bisa dihindari. Saya akan lebih khawatir tentang rute serangan ke titik itu.

Sannukka
sumber
0

Anda dapat menjalankan boneka tanpa master sentral jika Anda mau. Salah satu metode yang saya lihat adalah menggunakan repositori git dan memiliki skrip yang hanya akan menggabungkan dan menggunakan pembaruan hanya jika tag ditandatangani oleh salah satu daftar kunci gpg yang telah ditentukan sebelumnya. Orang-orang bahkan mencari cara untuk mendapatkan konfigurasi tersimpan (digunakan untuk misalnya mengatur pemantauan nagios pada server pusat dari sumber daya yang diproses pada server lain).

Jadi jika server git pusat dikompromikan, server lain tidak akan menerapkan pembaruan lagi darinya. Kunci gpg akan berada di laptop admin sys atau sesuatu, bersama dengan beberapa cara mencabut kunci.

Baca lebih lanjut di http://current.workingdirectory.net/posts/2011/puppet-without-masters/

Hamish Downer
sumber