puppet etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
puppet etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

22 Temmuz 2014 Salı

Puppet Otomatik İmzalama Hakkında

Bu yazımda Puppet'taki otomatik imzalama çeşitlerinden bahsedeceğim. 3 çeşit otomatik imza kullanılabiliyor. Bunlar:

** Naive Autosigning : Master makinaya gelen tüm imzalar (CSR - Certificate Sign Request) imzalanır.  Master'daki puppet.conf'da autosign = true olması yeterli.

** Basic Autosigning : Otomatik imza için sertifika ve domain isimlerinin olduğu bir beyaz liste oluşturmalıyız. İmzalama gerçekleşecek makinaları önceden tanıtmak gibi düşünebiliriz. Master'daki puppet.conf dosyasında autosign = <whitelist file> diye oluşturduğumuz listeyi bilirtmeliyiz. Bu listenin yolu $confdir/autosign.conf şeklinde olmalı. autosign.conf içeriği şu şekilde olmalı: 
ornek1.ornek1.com
*.ornek2.com
*.local

** Policy-Based Autosigning : Kendi belirlediğimiz ilkelere uygunsa, imzalamanın gerçekleşeceği çeşittir. Diğerlerine göre güvenlik açığı daha az. Çünkü direk imzalama gerçekleşmeden önce ilkelere uygunluk sonucunda işlem yapılıyor.

Bunun için master makinadaki puppet.conf'a autosign = <policy executable file> diyerek belirlediğimiz ilkelerin olduğu çalıştırılabilir dosyayı belirtmeliyiz. Peki ilkeleri hangi kurallara göre yazmalıyız?

* İlkeleri herhangibir programlama dili ile yazabiliyoruz. 
* İstek olarak master makinaya gelen pem formatlı dosyayı, ilkeleri yazacağımız dosyaya stdin ile almalıyız. 
* Çıktı olarak 0 ise onay(imza gerçekleşecek), 1 ise red döndürmeliyiz.

Ayrıntılı şekilde buradan da bakabilirsiniz. Kolay gelsin :)



4 Temmuz 2014 Cuma

Temel Puppet Kullanımı

Merhaba, önceki yazımda puppetın ne olduğundan bahsetmiştim. Bu yazımda agent ve master makinalar arasındaki iletişimin nasıl olduğundan ve master makinalarda yönergeler yazarak agent makinalara nasıl işlemler yaptırıldığından bahsedeceğim.

Master ve agentta Puppet'ın düzgün kurulu olduğunu varsayıyorum. Çalışma şekli de fotoğrafta anlaşılır halde diye bunu da siteden aldım :D Daha çok bilgi için.

** Makinaların iletişimde olması için öncelikle birbirlerine ping atabiliyor olmalılar.

** Birbirlerinin makina isimlerini (hostname) biliyor olmalılar. ('$hostname' komutu ile kısaca öğrenilebilir.)

** Daha sonra her iki makinada “/etc/hosts”  dosyasına:  “ip hostname.localdomain hostname puppet.localdomain puppet” biçiminde birbirlerinin bilgilerini yazıyoruz. 

** Son olarak saatlerinin de senkron olması gerekiyor.


Şimdik bağlama işlemi için agentta "# puppet agent --test" komutu çalıştırıp bir sertifika oluşturuyoruz. Oluşan sertifika /var/lib/puppet/ssl altında. Masterda "#puppet cert list" komutu ile oluşan sertifikayı görüyoruz. Son olarak "# puppet cert sign hostname.localdomain" diyerek imzalama işlemini gerçekleştiriyoruz.

Bugün çok eğlenerek çalıştığım kısım agenta birşeyler yaptırmaktı :)
Çalışma alanı /etc/puppet altında. 
Önce master makinada manifest dizini altına ".pp" uzantılı bir dosya oluşturmalıyız.
Sonrası agenta ne yaptırmak istediğinize bağlı. Ben 'pgbuncer' kurdurup, servisi çalıştır dedim mesela. Yazım için de biçimleri burada.

Benim site.pp dosyam şöyle:

node 'hostname.localhost' {
    package{"pgbouncer":
      ensure => "installed",
  }
    file {"/etc/pgbouncer/userlist.txt":
      ensure  => present,
      content => '"username" "password"',
  }
    exec {"sed1":
      command => "/bin/sed -i 's/;;   dbname= host= port= user= password=/dbname host=NAME user=username password=password/g' /etc/pgbouncer/pgbouncer.ini",
      path => "/bin/sed/",
  }
    exec {"sed2":
      command => "/bin/sed -i 's/START=0/START=1/g' /etc/default/pgbouncer",
      path => "/bin/sed",
  }
    exec {"start":
      command => "/etc/init.d/pgbouncer start",
  }
}

Burada node kısmında yine agentı belirttik. 
* Package kısmında anlaşıldığı gibi paketi indirip kurulduğundan emin oluyor. 

* File kısmında /etc/pgbouncer/userlist.txt dosyasına pgbouncer için kullanıcı adı ve parola ekliyor. 

exec kısımlarında komut çalıştırıyor. 
* sed1'de dbname, host, kullanıcı adı, parola bilgilerini .ini dosyasına giriyor. 
* sed2 komutunda da /etc/default/pgbouncer dosyasındaki START değerini değiştiriyoruz. Çünkü servisin başlaması için "1" değerini almalı.
*start adındaki komut da pgbouncer'ı başlatıyor.

Bunu kaydedip agentta "# puppet agent -t" komutunu çalıştırdığımızda, masterda bir değişiklik varsa agent bunu uyguluyor. Son olarak agentta pgbouncer çalışıp çalışmadığını "$ ps auxf | grep pgbouncer" diye çalışan süreçlerden görebiliriz.












Kolay gelsin :)

23 Haziran 2014 Pazartesi

Puppet'a Giriş ve Debian Wheezy'ye Kurulumu

Bu yaz, stajımda Puppet ile çokça zaman geçireceğim. Giriş niteliğinde okuduklarımı ve denediklerimi sizlerle paylaşmak istedim.

Puppet, Ruby dili ile yazılmış bir yapılandırma yönetimi aracı. Aslında bu yapılandırma yönetimi 3 şekilde oluyor. 

1. Elle (manuel)
2. Kurulum sırasında
3. Araç kullanarak

Araç kullanmak bizi birçok uğraştan kurtarıyor. Sunucularımızı nasıl yapılandırmak istediğimizi tarif ediyoruz ve kullandığımız araç yapılandırmayı tarife göre uyguluyor. 

Puppet'ın yapılandırma dosyası (/etc/puppet/puppet.conf) 3 kısımdan oluşuyor.

main: Özel olarak belirtilmiş yapılandırma ayarları yoksa geçerli olacak ayarları içerir.

master: Puppetmaster (yönetim birimi) içindir.

agent: Puppet istemcisi yönetimi içindir.

2 modda çalıştırılabiliyor. "Sunucu-İstemci Mod" ve "Bağımsız Mod".  

Sunucu-İstemci Modu:

Puppetserver: Tüm yapılandırma dosyaları masterda bulunur. CA (Certificate Authority), SSL keyleri tutar. Verilerin şifrelenerek iletişimde olmasını sağlar.

Node: 3o dakikada bir mastera sistem bilgilerini yollar. Master, istenilen yapılandırma durumunu belirten bir katalog yollar. Node, kataloğu uygulayıp mastera raporlar. 

Bağımsız (Standole) Mod: Sunucu-İstemci modu gibi çalışır, tek farkı yapılandırma dosyalarının locale'de bulunmasıdır.

Ben Puppet'ı denemek için sanalda iki makinaya Debian kurdum. Birini master, birini agent olarak ayarladım. Şimdi bu kısımı açıklayayım.

İlk makinayı master yapalım.

1. deb paketini çekip paketi yükleyelim.
#wget http://apt.puppetlabs.com/puppetlabs-release-wheezy.deb 
#dpkg -i puppetlabs-release-wheezy.deb

2. Paket listesini güncelleyelim.
#apt-get update 

3. İsteğe bağlı önsürümler için etkinleştirme:

/etc/apt/sources.list.d/puppetlabs.list dosyasında aşağıdaki bölümde #'yi kaldırarak yapılıyor.

# Puppetlabs devel (uncomment to activate)
 deb http://apt.puppetlabs.com precise devel
# deb-src http://apt.puppetlabs.com precise devel 
 
4.  Master sunucuyu kuralım.
 $ sudo apt-get install puppetmaster 

Son sürüme yükseltmek için: 
 $ sudo apt-get update
 $ sudo puppet resource package puppetmaster ensure=latest

Diğer makinamızı da agent yapmak için aşağıdaki komutu vermemiz yeterli.
 $ sudo apt-get install puppet
 Yine son sürüm için update dedikten sonra:
  $ puppet resource package puppet ensure=latest
Bir sonraki yazımda bu iki makina arasındaki çalışmanın ne şekilde olduğundan bahsedeceğim. 
Esen kalın :)