Kukla Güvenliği ve Ağ Topolojileri


26

Arka fon:

Sonunda 21. Yüzyıla katılmak ve Kukla'ya bakmak için biraz zaman ayırıyorum.

Bugünkü haliyle, tüm sunucu konfigürasyonlarını ofiste dahili olarak tutulan bir depoda kontrol ediyoruz. Bir güncelleme yapılması gerektiğinde, değişiklikler depolara geri kontrol edilir ve söz konusu makineye manuel olarak gönderilir. Bu genellikle uzak makineye SFTP yapmak ve ardından ilgili izinlerle dosyaları bir kabuktan yerine taşımak anlamına gelir.

Bu yüzden, Puppet'in sahip olduklarımız için basit ama şaşırtıcı bir uzantı olacağına ümit ediyorum.

Şimdi, şu anda makul bir şekilde güvence altına almamız gereken süreci düşünüyorum. İç ağımızın her zaman veri merkezlerimizdeki kamu ağlarından daha güvenli olacağı varsayımına dayanarak.

  • İşlem her zaman bir yoldur. Değişiklikler güvenli bir ortamdan güvenli olmayan bir yere doğru ilerler ve asla tersi olmaz.

  • Ana mağaza mümkün olan en güvenli yerdedir. Yapılandırmaları çalarak veya kötü amaçlı değişiklikler göndererek uzlaşma riski büyük ölçüde azaltılır.

Soru:

Kukla sunucu / müşteri modelini anladığım kadarıyla, müşterilerin güncellemeleri doğrudan sunucudan aşağı çekiyorlar. Trafik SSL sarılı olduğundan yakalanamaz veya karıştırılamaz. Ancak şu an yaptığımızdan farklı çünkü Kukla sunucusunun halka açık bir yerde barındırılması gerekiyor. Ya merkezi olarak ya da koruduğumuz her veri merkezi sitesi için bir tane.

Bu yüzden merak ediyorum:

  • Basından çekişe değişim konusunda gereksiz yere paranoyak mı oluyorum?

  • Tüm bu bilgileri merkezi bir ağda merkezi olarak saklama konusunda gereksiz yere paranoyak mı oluyorum?

  • Diğerleri birden fazla ağı nasıl yönetiyor - her site için ayrı sunucu?


30.07.09. Güncellemesi:

Sanırım en büyük endişelerimden birinin tek bir makineye güvenmesi gerektiği. Kuklacı (lar) güvenlik duvarı ile korunacak, güvence altına alınacaktı ve bu şekilde. Ancak, dinleme hizmetleri olan herhangi bir kamu makinesinin belirli boyutta bir saldırı yüzeyi vardır.

Muhtemelen, usta kukla müşterilerinden herhangi biri üzerinde herhangi bir dosyayı güncelleme iznine sahipse, sonuçta bu uzlaşma sonuçta tüm istemcilerinin uzlaşmasına neden olacaktır. Konuşmak için "krallığa kral".

  • Bu hipotez doğru mu?

  • Hafifletilmesinin bir yolu var mı?


Hipotezleriniz doğru; Kuklacıda uzlaşma, tüm müşterilerde uzlaşmadır. Ancak, dikkatinizi güvence altına almaya odaklanabileceğiniz tek bir makinenin güvenliği konusunda kendinizi iyi hissetmek daha kolaydır, öyle değil mi? Azaltma ortamınıza bağlıdır, ancak kukla sıhhi tesisat yapmak üzere yazılmıştır, gerektiğinde bazı denetimler veya ek kontroller ekleyebileceğiniz makul miktarda "kanca" vardır.
Paul Lathrop

1
@Paul - "Çok iyi bir sepete sahip olduğunuzdan emin olduktan sonra tüm yumurtaları bir sepete koyun" yaklaşımına mı?
Matt Simmons

Yanıtlar:


10

Bazen şifreleri modüllerimdeki değişkenlerde sakladığımdan, uygulamaları yapılandırmayı manuel olarak bitirmek zorunda kalmadan dağıtabilmek için kukla depomu düzgün bir şekilde genel bir sunucuya koyamayacağım anlamına geliyor. Bunu yapmak, kuklacıya saldırmanın tüm sunucularımızdaki tüm farklı uygulamalarımızın bazı uygulama veya db şifrelerini kazanmasına izin vereceği anlamına gelir.

Kukla yöneticim ofisimizdeki özel ağda ve sunucularda kukla daemonu çalıştırmıyorum. Dağıtmam gerektiğinde, ssh'ı özel ağdan sunuculara, bir tünel oluşturup uzaktan kuklacı çağırarak kullanıyorum.
İşin püf noktası, uzak tünel ve kukla istemcisini kukla yöneticisine bağlanacak şekilde ayarlamak değil, http bağlantısını kabul eden ve özel ağdaki kuklacı sunucusuna erişebilen bir proxy'ye ayarlamaktır . Aksi halde kukla, sertifikalarla host adı çatışması nedeniyle çekmeyi reddedecek

# 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

Benim için çalışıyor, yardımcı olacağını umuyor


Parlak! Ama kuklada bir zamana ihtiyacın var mı? Aksi halde, komut çalıştırıldıktan sonra tünel çökmez, fakat kuklacı varsayılan olarak sunucu olarak çalışacak mı?
Purfideas

Fırlatılan kukla daemonize edilmedi. --Test seçeneğini --onetime --no-daemonize çiftinin yerine kullanmayı tercih ederim. Böylece kukla ön planda çalıştırılır ve ssh bir terminali zorlar (seçenek -t). Ayrıca çalışan kukla ile etkileşime girme avantajına da sahiptir (örneğin temiz kukla sonlandırma için ctrl ^ c). Kukla oturumu sona erdiğinde ssh oturumu sona erer ve tünel kapanır.
Alex F

Bunun hala sorunlara yol açtığını ve böylece güvenlik duvarı makinesinde bir OpenVPN sunucusunun yapılandırılmasını sağladığımı ve böylece kukla sunucusuyla ağın uzak makinelerden iletişim kurabildiğini gördüm ...
David Gardner

4

Ofisimiz ve kolomuz olmak üzere iki sitemiz var. Her sitenin kendi kukla yöneticisi var. Aşağıdaki yapıya sahip bir svn deposu kurduk:

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

Her sitenin altındaki modüller dizini, bir svn: externals dizini, tekrar üst seviye modüller dizinine geri döner. Bu, tamamen aynı modüller dizinini paylaştıkları anlamına gelir. Daha sonra yazdığımız sınıfların büyük çoğunluğunun modüller dizini altında olduğundan ve her iki site tarafından da kullanıldığından emin oluruz. Bu, bizi genel olarak düşünmeye zorlamak ve bir sınıfı belirli bir siteye bağlamak için zorlama avantajına sahiptir.

Güvenlik konusunda, kukla yöneticimizi (ve ağımızın geri kalanını) güvenlik duvarımızın arkasında barındırıyoruz, bu yüzden konfigürasyonu merkezi olarak saklama konusunda endişeli değiliz. Kuklacı yalnızca güvendiği ana bilgisayarlara config gönderir. Açıkçası o sunucuyu güvende tutman gerekiyor.


Teşekkürler. Svn: externals ucu hoş bir dokunuş. Her şey güvenlik duvarı olacak. Ancak, biliyorsun, her şey bir dinleme servisinin doğal olarak daha büyük bir saldırı yüzeyine sahip olacak.
Dan Carley

2

Paranoya'nın ne kadar gerekli olduğu konusunda karar veremem, bu büyük ölçüde çevrenize bağlı. Ancak, mevcut yapılandırmanızın iki ana noktasının hala geçerli olabileceğini güvenle söyleyebilirim. Kukla yöneticinizin bulunduğu her yerde güvenli bir ortamdan (ofisinizdeki depo) daha az güvenli bir ortama geçişinizin değişmesini sağlayabilirsiniz. İşlemi SFTP'ing'ten bir grup sunucuya değiştirir ve manuel olarak dosyaları SFTP'ing'e yerleştirmek için kukla yöneticinize yerleştirirsiniz ve Kukla'ın dosyaları dağıtmasına ve bunları doğru yere koymasına izin vermiş olursunuz. Ana mağazanız hala depoda ve riskleriniz azaltıldı.

İtme veya çekme işleminin diğer modelden daha güvenli olduğuna inanmıyorum. Kukla, iki yollu bir güven söz konusu olduğundan emin olmak için hem istemcinin hem de sunucunun kimliğini doğrulamanın yanı sıra, yapılandırmaları güvenli bir şekilde yerine getirmek için de harika bir iş çıkarmaktadır.

Çoklu ağlara gelince, her bir merkezdeki uydu kuklacıların bulunduğu merkezi bir "ana" kuklacı ile merkezi anaya müşteri olarak davranıyoruz.


Uydu yaklaşımı ilginç geliyor. Gerekli herhangi bir özel yapılandırma var mı? Bana herhangi bir belgenin yönünü gösterir misiniz?
Dan Carley

Gerekli herhangi bir özel konfigürasyon yok. Sen sadece uydular üzerinde kukla yapıyorsun. puppet.conf kendi kendine işaret etmek yerine sunucu ayarını "usta" olarak ayarlamalıdır (bu daha tipik bir konfigürasyondur)
Paul Lathrop

1

Bir tasarım yaklaşımı, her bir sistem sitesinde yerel bir kuklacı bulundurmak ve kuklacılara değişiklikleri zorlamak için bir dağıtım aracı kullanmaktır. (Git'i git kancalarıyla kullanmak da işe yarayabilir).

Bu, kukla ağ trafiğinin yalnızca dahili olacağı için bir kamu ağındaki dinleme servisleri hakkındaki endişenizi koruyacaktır.

Ayrıca, bildirimleri her sunucuya iletmek ve kukla istemcisinin bildirimleri ayrıştırması ve ilgili yapılandırmaları uygulaması da mümkündür.


0

"Dış" demenize rağmen, keyfi olarak insanların kukla yöneticinize bağlanması gerektiğinden şüpheliyim. karışıma her zaman bir VPN atabilirsiniz. bir arkadaşım bir keresinde bana "bağlantı güvenliyse protokolün güvenliği hakkında endişelenmeniz gerekiyor mu?" diye sordu. bu tutuma katılmamakla birlikte, ekstra bir katman asla acıtmaz ve kesinlikle kişisel paranoyamda harikalar yaratır. Ayrıca, tünel tünelleri için eğlenceli.


0

Cfengine'in yazarı ve bir üniversite profesörü olan Mark Burgess (bu kuklanın mirasına borçlu olduğu görülüyor) itme ve çekme konusunda çok şey yazdı. Çekmenin doğası gereği daha güvenli olduğunu iddia ediyor. Cfengine web sitesine bakarsanız, yalnızca 17 yılda 1 ağ güvenliği olayı olmuşlardır. Burgess, çekme tasarımı nedeniyle olduğunu iddia ediyor. Tek bir uzlaşma noktasının kaçınılmaz olduğunu düşünüyorum. Bu noktaya saldırı yolları hakkında daha fazla endişe duyarım.


0

İsterseniz merkezi bir usta olmadan kukla çalıştırabilirsiniz. Gördüğüm bir yöntem git deposunu kullanmak ve yalnızca bir etiketi önceden ayarlanmış bir gpg anahtar listesinden biri tarafından imzalanmışsa, yalnızca bir güncellemeyi birleştiren ve dağıtan komut dosyalarına sahip olmaktır. İnsanlar nasıl saklanmış konfigürasyonlar elde edebileceğini bile araştırdılar (örneğin, başka bir sunucuda işlenen bir kaynaktan merkezi bir sunucuda nagios izlemesi kurmak için kullanılır).

Yani merkezi git sunucusu tehlikeye girerse, diğer sunucular ondan daha fazla güncelleme uygulamaz. Gpg anahtarları, tuşları iptal etme yöntemiyle birlikte sys admin dizüstü bilgisayarlarında ya da bir şeyde olacaktır.

Http://current.workingdirectory.net/posts/2011/puppet-without-masters/ adresinde daha fazla bilgi alabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.