iToverDose/Yazılım· 16 HAZIRAN 2026 · 00:03

Her yeni sunucuya özel Ansible Playbook kılavuzu

Yeni bir sunucu kurarken manuel adımlar zaman kaybettirir ve tutarsızlıklara yol açar. Bu basit Ansible Playbook ile tüm sunucularınıza otomatik olarak standart güvenlik ayarlarını uygulayabilirsiniz.

DEV Community3 dk okuma0 Yorumlar

Yeni bir sunucuya ilk erişiminizde, genellikle bir dizi manuel adımı takip edersiniz: kök kullanıcıyı devre dışı bırakmak, SSH erişimini yalnızca anahtar tabanlı olarak sınırlandırmak, varsayılan reddetme politikasına sahip bir güvenlik duvarı kurmak ve sistem güncellemelerini otomatikleştirmek. Bu adımlar her sunucuda titizlikle uygulandığında bile, zamanla küçük farklılıklar oluşabilir — bazı sunucularda MaxAuthTries 3 ayarı bulunurken, diğerlerinde bulunmayabilir. Özellikle acil durumlarda yapılan hızlı kurulumlarda, bu tutarsızlıkların ortaya çıkma olasılığı artar.

Bu sorunun üstesinden gelmenin en etkili yolu, tüm bu adımları otomatikleştiren bir Ansible Playbook hazırlamaktır. Aynı adımlar her seferinde, aynı sırayla ve herhangi bir sunucuda tutarlı bir şekilde uygulanır. Üstelik, Ansible'ın idempotent yapısı sayesinde, zaten yapılandırılmış bir sunucuya playbook'u tekrar çalıştırdığınızda hiçbir değişiklik yapılmaz. Böylece, hem zaman kazandırır hem de insan hatasını en aza indirir.

Ansible Playbook'un yapılandırılması

Aşağıdaki playbook, yeni bir sunucunun güvenlik tabanını oluşturmak için gerekli temel adımları içerir. Playbook'un tamamı, yalnızca birkaç görevden oluşmakta ve sistemlerinize uygulanacak ilk katman olarak tasarlanmıştır. Bu sayede, uygulama düzeyindeki yapılandırmalardan bağımsız olarak çalışır ve zamanla değişmeden kalır.

Öncelikle, bir baseline.yml dosyası oluşturun ve içerisine aşağıdaki yapılandırmayı ekleyin:

---
- name: Yeni sunucu için temel güvenlik ayarları
hosts: new_servers
become: true
vars:
  admin_user: deploy
  ssh_public_key: "{{ lookup('file', '~/.ssh/id_ed25519.pub') }}"

tasks:
  - name: Yönetici kullanıcısı oluştur
    user:
      name: "{{ admin_user }}"
      groups: sudo
      shell: /bin/bash
      create_home: true

  - name: Yönetici kullanıcısı için SSH anahtarı ekle
    authorized_key:
      user: "{{ admin_user }}"
      key: "{{ ssh_public_key }}"

  - name: SSH yapılandırmasını güçlendir (bulut başlatma ayarlarını geçersiz kılar)
    copy:
      dest: /etc/ssh/sshd_config.d/99-hardening.conf
      content: |
        PermitRootLogin no
        PasswordAuthentication no
        MaxAuthTries 3
      mode: '0644'
    notify: sshd hizmetini yeniden başlat

  - name: UFW ve Fail2ban yükle
    apt:
      name: [ufw, fail2ban]
      state: present
      update_cache: true

  - name: UFW varsayılan kurallarını ayarla
    ufw:
      direction: "{{ item.direction }}"
      policy: "{{ item.policy }}"
    loop:
      - { direction: incoming, policy: deny }
      - { direction: outgoing, policy: allow }

  - name: Gerekli portları aç
    ufw:
      rule: allow
      port: "{{ item }}"
      proto: tcp
    loop: ['22', '80', '443']

  - name: UFW'yi etkinleştir
    ufw:
      state: enabled

  - name: Fail2ban hizmetini etkinleştir
    systemd:
      name: fail2ban
      enabled: true
      state: started

  - name: Otomatik güncellemeleri yükle
    apt:
      name: unattended-upgrades
      state: present

handlers:
  - name: sshd hizmetini yeniden başlat
    systemd:
      name: ssh
      state: restarted

Bu playbook, yeni bir sunucu için gerekli temel güvenlik ayarlarını otomatik olarak uygular. admin_user olarak adlandırılan bir yönetici kullanıcısı oluşturur, SSH erişimini yalnızca anahtar tabanlı olarak sınırlandırır ve sistem güvenlik duvarını varsayılan reddetme politikasına göre yapılandırır. Ayrıca, otomatik güncellemeleri etkinleştirerek sisteminizin sürekli olarak güncel kalmasını sağlar.

Playbook'un çalıştırılması

Playbook'u yeni bir sunucuya uygulamadan önce, sunucunun inventory.ini dosyasına eklenmesi gerekir. Örneğin:

[new_servers]
new-server-01 ansible_host=192.168.1.100 ansible_user=root

Playbook'u ilk kez çalıştırmak için aşağıdaki komutu kullanabilirsiniz:

ansible-playbook -i inventory.ini baseline.yml -l new-server-01 -u root

Bu komut, root kullanıcısı olarak bağlanarak playbook'un tüm görevlerini yerine getirir. Playbook tamamlandığında, root kullanıcısının SSH erişimi devre dışı bırakılır ve deploy kullanıcısı yeni giriş noktası haline gelir. Artık, gelecekteki tüm çalıştırmalarınızda deploy kullanıcısını kullanabilirsiniz:

ansible-playbook -i inventory.ini baseline.yml -l new-server-01 -u deploy

Playbook'un çalıştırılması sırasında, yalnızca SSH yapılandırmasında bir değişiklik yapılmışsa sshd hizmeti yeniden başlatılır. Bu sayede, playbook'un her çalıştırılmasında gereksiz yere hizmetin durdurulmasının önüne geçilir.

Idempotentlik: Tutarlılığın anahtarı

Bu playbook'un en büyük avantajı, idempotent olmasıdır. Bu terim, playbook'un aynı sunucuya tekrar tekrar çalıştırıldığında, sistemde zaten uygulanmış olan ayarlar için hiçbir değişiklik yapmayacağı anlamına gelir. Altı ay sonra, hangi sunucunun hangi ayarları aldığını hatırlamak zorunda kalmazsınız. Playbook'u tekrar çalıştırdığınızda, sistem zaten doğru şekilde yapılandırılmışsa Ansible size hiçbir değişiklik olmadığını bildirir. Eğer bir ayar eksikse, playbook onu hemen tamamlar.

Bu playbook, yalnızca birkaç görevden oluşacak şekilde tasarlanmıştır. Uygulama yığınlarını veya proje özel ayarlarını içermez. Bunun yerine, her sunucunun temelini oluşturan katman olarak hareket eder. Uygulama düzeyindeki playbook'larla bir arada kullanıldığında, güvenlik tabanı sabit kalır ve zamanla güvenilirliğini korur.

Yeni bir sunucuya her başladığınızda, temel güvenlik ayarlarını manuel olarak uygulamak yerine, bu playbook'u kullanarak süreci otomatikleştirin. Böylece, hem zaman kazanın hem de sistemlerinizin tutarlı ve güvenli kalmasını sağlayın.

Yapay zeka özeti

Yeni sunucularınıza hızlı ve tutarlı şekilde güvenlik ayarları uygulamak için basit bir Ansible Playbook hazırlayın. SSH, UFW, Fail2ban ve otomatik güncellemeler için adım adım rehber.

Yorumlar

00
YORUM BIRAK
ID #GC0HKU

0 / 1200 KARAKTER

İnsan doğrulaması

8 + 4 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

Henüz onaylı yorum yok. İlk yorumu sen bırak.