AHTAPOT | Ansible Playbook Dökümantasyon u
Transkript
AHTAPOT | Ansible Playbook Dökümantasyon u
AHTAPOT | Ansible Playbook Dökümantasyon u Bu dökümanda, AHTAPOT projesi kapsamında, merkezi yönetim uygulaması olarak kullanılan Ansible üzerinde geliştirilen playbooklar’ın temel rolleri ve detayları dökümante edilmektedir. 1. Ansible 1.1 Base 1.2 Ansible 2. Gitlab 2.1 Base 2.2 GitLab 3. FirewallBuilder 3.1 Base 3.2 FirewallBuilder 4. Rsyslog 4.1 Base 4.2 Rsyslog 5. Testbuilder 5.1 Base 5.2 Firewall 6. Firewall 6.1 Base 6.2 Firewall 7. Maintenance 7.1 Maintenance 8. Deploy 9. State Farklı görev üstlenen sunucular için farklı roller tanımlanmış olup her bir rolün yapısı aşağıda belirtilen şablon kullanılarak hazırlanmıştır. Şablonun temel yapısında “roles/” klasörü altında bulunan alt klasörler gösterilmektedir: - - - tasks/ - main.yml - task1.yml - task2.yml defaults/ vars/ - main.yml templates/ - template1.j2 - template2.j2 meta/ README.md Yukarıdaki klasör şablonuna göre her bir klasörün altında bulunan main.yml dosyası ana dosya olarak barınmakta ve içerisine belirtilen .yml dosyalarını playbook’a dahil etmektedir. Örnek vermek gerekirse, “tasks” dizini altındaki “main.yml” dosyası, “task1.yml” ve “task2.yml” dosyalarını playbook’a dahil etmektedir. <main.yml> --- include: task1.yml - include: task2.yml Bu konsept dahilinde, her bir dizin o ansible rolüne ait farklı işlevliklere sahiptir. Bu işlevlerin ayrıntıları aşağıda belirtilmiştir: Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 2 /107 - - - - Tasks: Herhangi bir görev, bu dizin altında belirtilir. (Örneğin: paket kurulumu, konfigurasyonu vb.) Vars: Ansible rollerine ait her bir değişken bu dizin altında belirtilir. (Örneğin: kullanıcı id, kullanıcı adı, program hafıza boyutu vb.) Defaults: Tek defaya mahsus kullanılmak üzere ya da “vars” dizininde belirtilmemiş değişkenler burada yer alır. Mevcut tasarımda bu klasör hiç bir rolde kullanılmamaktadır. Templates: Playbook çalıştığında sunucuda yapılması gereken, yapılandırma ayarları için oluşturulan temel dosyalardır. Bu şablonlar playbook’un çalıştırılacağı sunucu üzerindeki konfigurasyon dosyaları yerlerine konularak konfigurasyon işlemi tamamlanacaktır. Handlers: Task’lerin “notify” kısımlarında belirtilen komutların dizin klasörüdür. Bu task’lerde meydana gelecek bir değişiklikte notify kısmında belirtilen handlers’lar çağırılacaktır. Örneğin bir servisin konfigurasyonu değişmesi durumunda servisi yeniden başlatılma işlemini bu handlers’lar üstlenmektedir. Meta: Rollerin metadatalarını içerir. Bu metadatalarda ise paket bilgileri, bağımlılıklar gibi alanlar bulunmaktadır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 3 /107 1. Ansible Ahtapot projesi kapsamında merkezde bulunacak ve gitlab deposunu kullanarak sistem durumunu kararlı olarak ayakta tutacak merkezdeki komuta kontrol sunucusu üzerinde çalıştırılması gereken playbook’dur. “/etc/ansible/playbooks/” dizini altında bulunan “ansible.yml” dosyasına bakıldığında, “hosts” satırında Ansible’a ait “/etc/ansible/” altında bulunan “hosts” dosyasında “[ansible]” satırı altına yazılmış tüm sunucularda bu playbookun oynatılacağı belirtilir. “remote_user” satırında, sistemler oynatılacak playbookun hangi kullanıcı ile oynatılacağı belirlenir. “sudo” satırı ile, çalışacak komutların sudo yetkisi ile çalışması belirlenir. “roles” satırı altında bulunan satırlarda ise bu playbook çalıştığında “base” ve “ansible” rollerinin çalışacağı belirtilmektedir. $ more /etc/ansible/playbooks/ansible.yml # Calistirildiginda Ansible Kurulumu Yapilir - hosts: ansible remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: ansible } 1.1 Base Bu rol Ahtapot projesi kapsamındaki tüm sunucularda çalışan temel ayarlamaların yapıldığı roldür. Bu rolün görevleri: - Tüm sistemlerde olması gereken paketlerin kurulum ve denetimleri: - auditd,sysstat,ntp,bash,rsyslog,sudo Tüm sistemlerde bulunması gereken servislerin yapılandırılması: - ntp, auditd, ssh Tüm sistemlerde yapılması gereken genel işlemler: - sudo yapılandırma - sysctl yapılandırma Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 4 /107 - /etc/hosts yapılandırma grub yapılandırma rsyslog yapılandırma USB kullanım kapatma / açma Bu roldeki değişkenler “/etc/ansible/roles/base/vars/main.yml” dosyasında belirtilmiştir. “main.yml” dosyasının içeriği ve değişken bilgileri aşağıdaki gibidir; - “group” fonksiyonunda sistemler üzerinde kullanılan kullanıcının ait olduğu grup bilgisi belirtilmektedir. “presentgroup” sistemde var olması gereken gruptur. İlgili sistemde bulunmaması durumda yeniden oluşturur. “revokedgroup” sistemden grubun silinmesini sağlar. Silinecek bir grup yok ise boş bırakılır. group: # Belirtilen grubun sunucu uzerinde var olup olmadigini kontrol eder. # Olmamasi durumda olusturur. presentgroup: ahtapotops # Belirtilen grubun sunucudan silinmesini saglar. revokedgroup: - “user” fonksiyonunda sistemler üzerinde kullanılan kullanıcının bilgisi belirtilmektedir. “presentuser” sistemde var olması gereken kullanıcıdır. İlgili sistemde bulunmaması durumda yeniden oluşturur. “revokeduser” sistemden kullanıcının silinmesini sağlar. Silinecek bir kullanıcı yok ise boş bırakılır. user: # Belirtilen kullanicinin sunucu uzerinde var olup olmadigini kontrol eder. # Olmamasi durumda olusturur. presentuser: ahtapotops shell: /bin/bash # Belirtilen kullanicinin sunucudan silinmesini saglar. revokeduser: - “packages” fonksiyonunda sistemler üzerine kurulacak paketler belirtilmektedir. “name” satırında hangi paketlerin kurulacağı belirlenir. “updatecache” seçeneği ile “apt-get Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 5 /107 update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. “force” satırı ile kurulumun yapılması gerektiği durumlarda, her koşulda kurulumu tamamlamaya zorlar. packages: # Sisteme kurulacak paketleri belirler. name: auditd,sysstat,ntp,bash,rsyslog,sudo updatecache: yes state: present force: yes - “repository” fonksiyonunda sistemlere eklenecek depo bilgileri verilmektedir. “repo” satrında eklenecek deponun adresi belirtilmektedir. “url” satırında ihtiyaç olması durumunda depo anahtarını belirtmek için kullanılılmaktadır. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. repository: # Ahtapot projesi kapsaminda olusturulan paketlerin bulundugu repo adresidir. repo: 'deb http://193.140.98.199/pardus-yenikusak pardus-ahtapot main' # Pardus tarafından herhangi bir rep key ulasmadigindan dolayi kapatildi. # url: 'http://ip_adres/packages/amd64/bilgio.asc' updatecache: yes state: present - “sudo” fonksiyonunda sudo yapılandırması yapılmaktadır. “source” satırında belirtilen ve “/etc/ansible/roles/base/templates” altında bulunan “sudoers.j2” dosyasında bulunan ayarları sunucular üzerinde gerçekleştirir. “destination” satırında ayarların yapılacağı sudoers dosyası belirlenir. “owner”, “group” ve “mode” ile bu dosyanın sahibi Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 6 /107 olan kullanıcı, grup ve hakları belirlenir. “iologdir” satırı ile sudo loglarının hangi dizine yazılacağı belirtilir. “group” ile hangi grup için bu ayarların yapılacağı belirtilir. “newgroup” satırı, grupta bir değişlik olacağı durumlarda buraya yazılarak, değişikliğin sağlanmasına yaramaktadır. Grup değişmeyeceği sürece güncel grup adı ile kalmalıdır. “commands” satırı ile ilgili grupa hangi komutlar için yetki verileceği belirtilmektedir. “firewall” alt fonksiyonu ile Limitlik Kullanıcı Konsolunda kullanılacak kullanıcıya gerekli yetki verilir. sudo: # Sudo yapilandirmasini belirtmektedir. conf: source: sudoers.j2 destination: /etc/sudoers owner: root group: root mode: 440 iologdir: "/var/log/sudo-io/%{hostname}/%{user}" group: ahtapotops newgroup: ahtapotops commands: ALL firewall: user: lkk commands: /usr/sbin/iptraf - “usb-storage” fonksiyonunda sistemlerdeki usb kapılarının açılıp/kapanması sağlanır. “/etc/ansible/roles/base/templates” dizini altında bulunan “blacklist.conf.j2” dosyasındaki izin verilmeyecek durumları modprobe’a yazar. usb-storage: # usb yapilandirmasini belirtmektedir. conf: source: blacklist.conf.j2 destination: /etc/modprobe.d/blacklist.conf owner: root group: root Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 7 /107 mode: 644 Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 8 /107 - “logger” fonksiyonu ile sistemlerin ayakta ve log gönderebilir olduğunun kontrolünün yapılacağı script “/etc/ansible/roles/base/templates” dizini altında bulunan “logger.sh.j2” dosyasından kopyalanarak cron’a eklenmektedir. logger: # heartbeat yapilandirmasini belirtmektedir. cron: source: logger.sh.j2 destination: /etc/cron.d/logger.sh owner: root group: root mode: 755 min: "00" hour: "*" facility: local5 severity: info tag: "heartbeat" message: "Heartbeat from $(hostname) at $(date) !" - “ssh” fonksiyonunda sistemlerde ssh tanımlamaları, yapılandırma ve sıkılaştırma işlemleri yapılır. “conf” alt fonksiyonu ile “/etc/ssh/sshd_config” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda ssh servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “TrustedUserCAKeys” alt fonksiyonu ile sisteme eklenen CA imzalı açık anahtar bilgisi, bu anahtarın hakları ve erişim yetkileri belirlenir. “LocalBanner” ve “RemoteBanner” alt fonksiyonları ile sunuculara bağlantı kurulduğunda ekrana gelecek uyarı belirtilir. Bu satırlardan sonra gelen satırlarda, ssh yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/ssh/sshd_config” dosyasına bu değişiklikler yansıtılacaktır. Sistemlerde kullanılacak ssh portunu varsıyan “22” değeri dışında başka bir değere atamak istenir ise, “Port” satırındaki 22 değeri olması istenen değer ile değiştirilmelidir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 9 /107 ssh: # ssh yapilandirmasini belirtmektedir. conf: source: sshd_config.j2 destination: /etc/ssh/sshd_config owner: root group: root mode: 0644 service: name: ssh state: started enabled: yes TrustedUserCAKeys: source: ahtapot_ca.pub.j2 destination: /etc/ssh/ahtapot_ca.pub owner: root group: root mode: 0644 LocalBanner: source: issue.j2 destination: /etc/issue owner: root group: root mode: 0644 RemoteBanner: source: issue.net.j2 destination: /etc/issue.net owner: root group: root mode: 0644 Port: 22 Protocol: 2 ListenAddressv4: 0.0.0.0 ListenAddressv6: "::" UsePrivilegeSeparation: "yes" KeyRegenerationInterval: 3600 Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 10 /107 ServerKeyBits: 1024 SyslogFacility: AUTH LogLevel: INFO LoginGraceTime: 90 PermitRootLogin: "no" StrictModes: "yes" RSAAuthentication: "yes" PubkeyAuthentication: "yes" IgnoreRhosts: "yes" RhostsRSAAuthentication: "no" HostbasedAuthentication: "no" IgnoreUserKnownHosts: "yes" PermitEmptyPasswords: "no" ChallengeResponseAuthentication: "no" PasswordAuthentication: "no" KerberosAuthentication: "no" KerberosOrLocalPasswd: "yes" KerberosTicketCleanup: "yes" GSSAPIAuthentication: "no" GSSAPICleanupCredentials: "yes" X11Forwarding: "no" X11DisplayOffset: 10 PrintMotd: "yes" PrintLastLog: "yes" TCPKeepAlive: "yes" UsePAM: "no" UseLogin: "no" Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 11 /107 - “ntp” fonksiyonunda sistemlerdeki ntp yapılandırması yapılmaktadır. “conf” alt fonksiyonu ile “/etc/ntp.conf” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda ntp servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “FirstNtpServerHost” satırına ilk NTP sunucusunun adı ve ya ip adresi girilir. “SecondNtpServerHost” satırına ikinci NTP sunucusunun adı ve ya ip adresi girilir. İkinci NTP sunucusu olmaması durumunda bu satırın başına “#” işareti konularak kullanım dışı kalması sağlanır. ntp: # ntp yapilandirmasini belirtmektedir. conf: source: ntp.conf.j2 destination: /etc/ntp.conf owner: root group: root mode: 0644 service: name: ntp state: started enabled: yes # ntp server bilgileri girilmektedir. FirstNtpServerHost: "0.debian.pool.ntp.org" SecondNtpServerHost: "1.debian.pool.ntp.org" - “hosts” fonksiyonunda “source” satırında belirtilen ve “/etc/ansible/roles/base/templates” altında bulunan “hosts.j2” dosyanında yer alan host bilgilerini çalıştığı tüm makinalarda “/etc/hosts” dizini altına atmaktadır. Akabinde bu dosyanın hakları ve erişim yetkileri belirlenir. hosts: # /etc/hosts yapilandirmasini belirtmektedir. conf: source: hosts.j2 destination: /etc/hosts Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 12 /107 owner: root group: root mode: 0644 - “grub” fonksiyonunda sunucularda grub parolası belirlenir. “conf” alt fonksiyonu ile kullanıcı/parola bilgileri girilir ve bu dosyanın hakları ve erişim yetkileri belirlenir. “conf2” alt fonksiyonu ile ise girdiler belirlenir ve bu dosyanın hakları ve erişim yetkileri belirlenir. “confile” ile dosya dizini belirtilir. “grubuser” ile kullanıcı bilgisi, “grubpass” ile parola bilgisi girilir. grub: # grub yapilandirmasini belirtmektedir. conf: source: grub_01_users.j2 destination: /etc/grub.d/01_users owner: root group: root mode: 755 conf2: source: grub_10_linux.j2 destination: /etc/grub.d/10_linux owner: root group: root mode: 755 confile: "/boot/grub/grub.cfg" grubuser: ahtagrub grubpass: grub.pbkdf2.sha512.10000.2A82B914C527C90A5018614B88F1604955C46131AEF358D1CB8 1E604793F5DD973DC3B796A2AF691AECC835928F76774835920D11B7FBEB07F050FAAF231B75 4.9433A4A373F5FB7D5FC05E25E14CAC0FEAD7FDE2019BE0E5E5D3B7D98A06FA3DB018D3EC7A 0557B1D7BCDB3AD091B8C44E121B057931E72A0A1592A7392214DF - “audit” fonksiyonunda sunucularda audit yapılandırmasının yapılamasını sağlamaktadır. “conf” alt fonksiyonu ile “/etc/audit/auditd.conf” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda audit servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “rules” alt fonksiyonunda “/etc/audit/audit.rules” dosyasının Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 13 /107 hakları ve erişim yetkileri belirlenir. Bu satırlardan sonra gelen satırlarda, audit yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/audit/auditd.conf” dosyasına bu değişiklikler yansıtılacaktır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 14 /107 audit: # audit yapilandirmasini belirtmektedir. conf: source: auditd.conf.j2 destination: /etc/audit/auditd.conf owner: root group: root mode: 0644 service: name: auditd state: started enabled: yes rules: source: audit.rules.j2 destination: /etc/audit/audit.rules owner: root group: root mode: 0644 name: "ahtapotops" name_format: "user" log_file: /var/log/audit/audit.log log_format: RAW log_group: "root" max_log_file: 10 max_log_file_action: ROTATE num_logs: 5 priority_boost: 4 flush: INCREMENTAL freq: 20 disp_qos: lossy dispatcher: /sbin/audispd space_left: 2000 space_left_action: SYSLOG action_mail_acct: "root" admin_space_left: 1000 admin_space_left_action: SUSPEND Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 15 /107 disk_full_action: SUSPEND disk_error_action: SUSPEND tcp_listen_queue: 5 tcp_max_per_addr: 1 tcp_client_ports: 1024-65535 tcp_client_max_idle: 0 enable_krb5: "no" krb5_principal: auditd krb5_key_file: /etc/audit/audit.key - “sysctl” fonksiyonunda sunucular üzerinde sysctl yapılandırması yapılmaktadır. “conf” alt fonksiyonu ile “/etc/sysctl.conf” dosyasına “/etc/ansible/roles/base/templates/” altında bulunan “sysctl.conf.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. Bu satırlardan sonra gelen satırlarda, sysctl yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/sysctl.conf” dosyasına bu değişiklikler yansıtılacaktır. sysctl: # sysctl yapilandirmasini belirtmektedir. conf: source: sysctl.conf.j2 destination: /etc/sysctl.conf owner: root group: root mode: 0644 icmp_ignore_bougs_error_responses: 1 icmp_echo_ignore_broadcasts: 1 - “rsyslog” fonksiyonunda sunucularda rsyslog yapılandırmasının yapılamasını sağlamaktadır. “conf” alt fonksiyonu ile “/etc/rsyslog.conf” dosyasına “/etc/ansible/roles/base/templates/” altında bulunan “rsyslog.conf.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. “service” alt fonksiyonunda rsyslog servisinin değişikliklerden sonra yeniden başlatılması sağlanır. Bu satırlardan sonra gelen satırlarda, rsyslog yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/rsyslog.conf” dosyasına bu değişiklikler yansıtılacaktır. “Server1” ve “Server2” değişkenlerine rsyslog sunucuların adı ve ya ip adresi yazılmalıdır. İkinci Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 16 /107 rsyslog sunucusu bulunmadığı durumlarda “Server2” satırı başına “#” konularak kullanım dışı haline getirilmelidir. rsyslog: # rsyslog yapilandirmasini belirtmektedir. conf: source: rsyslog.conf.j2 destination: /etc/rsyslog.conf owner: root group: root mode: 0644 service: name: rsyslog state: started enabled: yes ConnectionType: tcp Server1: rsyslog01.gdys.local #Server2: rsyslog02.gdys.local Port: 514 ActionQueueMaxDiskSpace: 1g ActionQueueSaveOnShutdown: on ActionQueueType: LinkedList ActionResumeRetryCount: -1 WorkDirectory: "/var/spool/rsyslog" IncludeConfig: "/etc/rsyslog.d/*" 1.2 Ansible Bu rol Ahtapot projesi kapsamındaki Ansible görevini üstlenecek sunucularda çalıştırılan Ansible ayarlamaların yapıldığı roldür. Bu rolün görevleri: - Ansible sunucusu üzerinde bulunması gereken paketlerin kurulum ve denetimleri: - git,ansible, python-requests, ahtapot-gkts, rsync Ansible sunucusu yapılması gereken genel işlemler: - Ansible’da çalışalıcak dizin ve alt dizinlerin oluşturulması - Merkezi Sürüm Takip Sistemi’nde bulunan mys deposunun yerele indirilmesi Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 17 /107 - Güvenlik Duvarı Yönetim Sistemi’nde bulunan gdys deposunun yerele indirilmesi Bu roldeki değişkenler “/etc/ansible/roles/ansible/vars/main.yml” dosyasında belirtilmiştir. “main.yml” dosyasının içeriği ve değişken bilgileri aşağıdaki gibidir; - “packages” fonksiyonunda Ansible sunucusu üzerine kurulacak paketler belirtilmektedir. “name” satırında hangi paketlerin kurulacağı belirlenir. “updatecache” seçeneği ile “aptget update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. “force” satırı ile kurulumun yapılması gerektiği durumlarda, her koşulda kurulumu tamamlamaya zorlar. “packages-latest” fonksiyonunda “name” satırında yazan paket isimlerinin her zaman son versiyonlarının sistemde olup olmadığı kontrol edilir. Ve olmaması durumunda güncellenir. packages: # Sisteme kurulacak paketleri belirler. name: git,ansible,python-requests,rsync updatecache: yes state: present force: yes packages-latest: name: ahtapot-gkts updatecache: yes state: latest force: yes - “git” fonksiyonunda Ansible sunucusunda bulunacak git depolarının bilgileri girilmektedir. Bu fonksiyon altında Ansible sunucusunun erişmesi gereken “gdys” ve “mys” git depolarının bilgileri bulunmaktadır. Her iki alt fonksiyonun da çalışma prensibi aynıdır. “repo” satırına MYS kapsamında kurulmuş Yerel GitLab sunucusunda bulunan ilgili depo adresi girilir. “update” satırı ile her işlem öncesinde “git pull” komutu çalıştırarak deponun güncel halinin çekilmesi sağlanır. “accepthostkey” satırında bağlantı sırasında sunucu anahtarını kabul edilip edilmeyeceğine dair soru geldiğinde kabul etmesine zorlamaktadır. “destination” alt fonksiyonu ile GitLab deposunun kopyalanacağı dizin ve Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 18 /107 bu dizinin hakları, erişim yetkileri belirtilmektedir. “keyfile” satırı ile GitLab’a erişecek kullanıcının anahtar bilgisi girilmektedir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 19 /107 git: # Onay mekanizmasinda kullanilan GitLab bilgileri belirtilmektedir. gdys: # Onay mekanizmasinin bulundugu Yerel GitLab reposu belirtilmektedir. repo: ssh://git@ip_adres:ssh_port/ahtapotops/gdys.git update: yes accepthostkey: yes # Onay mekanizmasinina ait GitLab reposunun kopyalanacagi dizin belirtilmektedir. destination: path: /etc/fw/gdys group: ahtapotops owner: ahtapotops mode: 750 state: directory recurse: yes # Onay mekanizmasinda Yerel GitLab' in kullanacagi kullanici anahtari belirtilmektedir. keyfile: /home/ahtapotops/.ssh/id_rsa mys: # MYS mekanizmasinin bulundugu Yerel GitLab reposu belirtilmektedir. repo: ssh://git@ip_adres:ssh_port/ahtapotops/mys.git update: yes accepthostkey: yes # MYS reposunun kopyalanacagi dizin belirtilmektedir. destination: path: /etc/ansible/ group: ahtapotops owner: ahtapotops mode: 750 state: directory recurse: yes # MYS Yerel GitLab' in kullanacagi kullanici anahtari belirtilmektedir. keyfile: /home/ahtapotops/.ssh/id_rsa Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 20 /107 - “deployer” fonksiyonu ile, “/etc/ansible/roles/ansible/templates” dizini altında bulunan “mys.sh.j2” ve “gdys.sh.j2” scriptleri ile, Ansible makinası üzerinde bulunan GDYS ve MYS repolarının GitLab’dan güncel hallerinin çekilmesi sağlanır. deployer: mys: source: mys.sh.j2 destination: /usr/bin/mys.sh owner: root group: root mode: 755 gdys: source: gdys.sh.j2 destination: /usr/bin/gdys.sh owner: root group: root mode: 755 2. Gitlab Ahtapot projesi kapsamında merkezde bulunacak ve sistemlerin ihtiyaç duyduğu dosyaları depolarından bulunduran GitLab sunucunu kuracak playbook’dur. “/etc/ansible/playbooks/” dizini altında bulunan “gitlab.yml” dosyasına bakıldığında, “hosts” satırında Ansible’a ait “/etc/ansible/” altında bulunan “hosts” dosyasında “[gitlab]” satırı altına yazılmış tüm sunucularda bu playbookun oynatılacağı belirtilir. “remote_user” satırında, sistemler oynatılacak playbookun hangi kullanıcı ile oynatılacağı belirlenir. “sudo” satırı ile, çalışacak komutların sudo yetkisi ile çalışması belirlenir. “roles” satırı altında bulunan satırlarda ise bu playbook çalıştığında “base” ve “gitlab” rollerinin çalışacağı belirtilmektedir. Ayrıca bu playbook ile Ansible rolünde çalışan sunuculara ait “ansible” rolü de çalıştırılır. Böylelikle GitLab tarafında yapılan her değişiklikte, Ansible makinası üzerindeki git depoları güncellenmiş olur. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 21 /107 $ more /etc/ansible/playbooks/gitlab.yml # Calistirildiginda Gitlab Kurulumu Yapilir - hosts: ansible remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: ansible } - hosts: gitlab remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: gitlab } 2.1 Base Bu rol Ahtapot projesi kapsamındaki tüm sunucularda çalışan temel ayarlamaların yapıldığı roldür. Bu rolün görevleri: - Tüm sistemlerde olması gereken paketlerin kurulum ve denetimleri: - auditd,sysstat,ntp,bash,rsyslog,sudo Tüm sistemlerde bulunması gereken servislerin yapılandırılması: - ntp, auditd, ssh Tüm sistemlerde yapılması gereken genel işlemler: - sudo yapılandırma - sysctl yapılandırma - /etc/hosts yapılandırma - grub yapılandırma - rsyslog yapılandırma - USB kullanım kapatma / açma Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 22 /107 Bu roldeki değişkenler “/etc/ansible/roles/base/vars/main.yml” dosyasında belirtilmiştir. “main.yml” dosyasının içeriği ve değişken bilgileri aşağıdaki gibidir; - “group” fonksiyonunda sistemler üzerinde kullanılan kullanıcının ait olduğu grup bilgisi belirtilmektedir. “presentgroup” sistemde var olması gereken gruptur. İlgili sistemde bulunmaması durumda yeniden oluşturur. “revokedgroup” sistemden grubun silinmesini sağlar. Silinecek bir grup yok ise boş bırakılır. group: # Belirtilen grubun sunucu uzerinde var olup olmadigini kontrol eder. # Olmamasi durumda olusturur. presentgroup: ahtapotops # Belirtilen grubun sunucudan silinmesini saglar. revokedgroup: - “user” fonksiyonunda sistemler üzerinde kullanılan kullanıcının bilgisi belirtilmektedir. “presentuser” sistemde var olması gereken kullanıcıdır. İlgili sistemde bulunmaması durumda yeniden oluşturur. “revokeduser” sistemden kullanıcının silinmesini sağlar. Silinecek bir kullanıcı yok ise boş bırakılır. user: # Belirtilen kullanicinin sunucu uzerinde var olup olmadigini kontrol eder. # Olmamasi durumda olusturur. presentuser: ahtapotops shell: /bin/bash # Belirtilen kullanicinin sunucudan silinmesini saglar. revokeduser: - “packages” fonksiyonunda sistemler üzerine kurulacak paketler belirtilmektedir. “name” satırında hangi paketlerin kurulacağı belirlenir. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. “force” satırı ile kurulumun yapılması gerektiği durumlarda, her koşulda kurulumu tamamlamaya zorlar. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 23 /107 packages: # Sisteme kurulacak paketleri belirler. name: auditd,sysstat,ntp,bash,rsyslog,sudo updatecache: yes state: present force: yes - “repository” fonksiyonunda sistemlere eklenecek depo bilgileri verilmektedir. “repo” satrında eklenecek deponun adresi belirtilmektedir. “url” satırında ihtiyaç olması durumunda depo anahtarını belirtmek için kullanılılmaktadır. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. repository: # Ahtapot projesi kapsaminda olusturulan paketlerin bulundugu repo adresidir. repo: 'deb http://193.140.98.199/pardus-yenikusak pardus-ahtapot main' # Pardus tarafından herhangi bir rep key ulasmadigindan dolayi kapatildi. # url: 'http://ip_adres/packages/amd64/bilgio.asc' updatecache: yes state: present - “sudo” fonksiyonunda sudo yapılandırması yapılmaktadır. “source” satırında belirtilen ve “/etc/ansible/roles/base/templates” altında bulunan “sudoers.j2” dosyasında bulunan ayarları sunucular üzerinde gerçekleştirir. “destination” satırında ayarların yapılacağı sudoers dosyası belirlenir. “owner”, “group” ve “mode” ile bu dosyanın sahibi olan kullanıcı, grup ve hakları belirlenir. “iologdir” satırı ile sudo loglarının hangi dizine yazılacağı belirtilir. “group” ile hangi grup için bu ayarların yapılacağı belirtilir. “newgroup” satırı, grupta bir değişlik olacağı durumlarda buraya yazılarak, değişikliğin sağlanmasına yaramaktadır. Grup değişmeyeceği sürece güncel grup adı ile kalmalıdır. “commands” satırı ile ilgili grupa hangi komutlar için yetki verileceği belirtilmektedir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 24 /107 “firewall” alt fonksiyonu ile Limitlik Kullanıcı Konsolunda kullanılacak kullanıcıya gerekli yetki verilir. sudo: # Sudo yapilandirmasini belirtmektedir. conf: source: sudoers.j2 destination: /etc/sudoers owner: root group: root mode: 440 iologdir: "/var/log/sudo-io/%{hostname}/%{user}" group: ahtapotops newgroup: ahtapotops commands: ALL firewall: user: lkk commands: /usr/sbin/iptraf - “usb-storage” fonksiyonunda sistemlerdeki usb kapılarının açılıp/kapanması sağlanır. “/etc/ansible/roles/base/templates” dizini altında bulunan “blacklist.conf.j2” dosyasındaki izin verilmeyecek durumları modprobe’a yazar. usb-storage: # usb yapilandirmasini belirtmektedir. conf: source: blacklist.conf.j2 destination: /etc/modprobe.d/blacklist.conf owner: root group: root mode: 644 - “logger” fonksiyonu ile sistemlerin ayakta ve log gönderebilir olduğunun kontrolünün yapılacağı script “/etc/ansible/roles/base/templates” dizini altında bulunan “logger.sh.j2” dosyasından kopyalanarak cron’a eklenmektedir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 25 /107 logger: # heartbeat yapilandirmasini belirtmektedir. cron: source: logger.sh.j2 destination: /etc/cron.d/logger.sh owner: root group: root mode: 755 min: "00" hour: "*" facility: local5 severity: info tag: "heartbeat" message: "Heartbeat from $(hostname) at $(date) !" - “ssh” fonksiyonunda sistemlerde ssh tanımlamaları, yapılandırma ve sıkılaştırma işlemleri yapılır. “conf” alt fonksiyonu ile “/etc/ssh/sshd_config” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda ssh servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “TrustedUserCAKeys” alt fonksiyonu ile sisteme eklenen CA imzalı açık anahtar bilgisi, bu anahtarın hakları ve erişim yetkileri belirlenir. “LocalBanner” ve “RemoteBanner” alt fonksiyonları ile sunuculara bağlantı kurulduğunda ekrana gelecek uyarı belirtilir. Bu satırlardan sonra gelen satırlarda, ssh yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/ssh/sshd_config” dosyasına bu değişiklikler yansıtılacaktır. Sistemlerde kullanılacak ssh portunu varsıyan “22” değeri dışında başka bir değere atamak istenir ise, “Port” satırındaki 22 değeri olması istenen değer ile değiştirilmelidir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 26 /107 ssh: # ssh yapilandirmasini belirtmektedir. conf: source: sshd_config.j2 destination: /etc/ssh/sshd_config owner: root group: root mode: 0644 service: name: ssh state: started enabled: yes TrustedUserCAKeys: source: ahtapot_ca.pub.j2 destination: /etc/ssh/ahtapot_ca.pub owner: root group: root mode: 0644 LocalBanner: source: issue.j2 destination: /etc/issue owner: root group: root mode: 0644 RemoteBanner: source: issue.net.j2 destination: /etc/issue.net owner: root group: root mode: 0644 Port: 22 Protocol: 2 ListenAddressv4: 0.0.0.0 ListenAddressv6: "::" UsePrivilegeSeparation: "yes" KeyRegenerationInterval: 3600 Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 27 /107 ServerKeyBits: 1024 SyslogFacility: AUTH LogLevel: INFO LoginGraceTime: 90 PermitRootLogin: "no" StrictModes: "yes" RSAAuthentication: "yes" PubkeyAuthentication: "yes" IgnoreRhosts: "yes" RhostsRSAAuthentication: "no" HostbasedAuthentication: "no" IgnoreUserKnownHosts: "yes" PermitEmptyPasswords: "no" ChallengeResponseAuthentication: "no" PasswordAuthentication: "no" KerberosAuthentication: "no" KerberosOrLocalPasswd: "yes" KerberosTicketCleanup: "yes" GSSAPIAuthentication: "no" GSSAPICleanupCredentials: "yes" X11Forwarding: "no" X11DisplayOffset: 10 PrintMotd: "yes" PrintLastLog: "yes" TCPKeepAlive: "yes" UsePAM: "no" UseLogin: "no" - “ntp” fonksiyonunda sistemlerdeki ntp yapılandırması yapılmaktadır. “conf” alt fonksiyonu ile “/etc/ntp.conf” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda ntp servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “FirstNtpServerHost” satırına ilk NTP sunucusunun adı ve ya ip adresi girilir. “SecondNtpServerHost” satırına ikinci NTP sunucusunun adı ve ya ip adresi girilir. İkinci NTP sunucusu olmaması durumunda bu satırın başına “#” işareti konularak kullanım dışı kalması sağlanır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 28 /107 ntp: # ntp yapilandirmasini belirtmektedir. conf: source: ntp.conf.j2 destination: /etc/ntp.conf owner: root group: root mode: 0644 service: name: ntp state: started enabled: yes # ntp server bilgileri girilmektedir. FirstNtpServerHost: "0.debian.pool.ntp.org" SecondNtpServerHost: "1.debian.pool.ntp.org" - “hosts” fonksiyonunda “source” satırında belirtilen ve “/etc/ansible/roles/base/templates” altında bulunan “hosts.j2” dosyanında yer alan host bilgilerini çalıştığı tüm makinalarda “/etc/hosts” dizini altına atmaktadır. Akabinde bu dosyanın hakları ve erişim yetkileri belirlenir. hosts: # /etc/hosts yapilandirmasini belirtmektedir. conf: source: hosts.j2 destination: /etc/hosts owner: root group: root mode: 0644 - “grub” fonksiyonunda sunucularda grub parolası belirlenir. “conf” alt fonksiyonu ile kullanıcı/parola bilgileri girilir ve bu dosyanın hakları ve erişim yetkileri belirlenir. “conf2” alt fonksiyonu ile ise girdiler belirlenir ve bu dosyanın hakları ve erişim yetkileri belirlenir. “confile” ile dosya dizini belirtilir. “grubuser” ile kullanıcı bilgisi, “grubpass” ile parola bilgisi girilir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 29 /107 grub: # grub yapilandirmasini belirtmektedir. conf: source: grub_01_users.j2 destination: /etc/grub.d/01_users owner: root group: root mode: 755 conf2: source: grub_10_linux.j2 destination: /etc/grub.d/10_linux owner: root group: root mode: 755 confile: "/boot/grub/grub.cfg" grubuser: ahtagrub grubpass: grub.pbkdf2.sha512.10000.2A82B914C527C90A5018614B88F1604955C46131AEF358D1CB8 1E604793F5DD973DC3B796A2AF691AECC835928F76774835920D11B7FBEB07F050FAAF231B75 4.9433A4A373F5FB7D5FC05E25E14CAC0FEAD7FDE2019BE0E5E5D3B7D98A06FA3DB018D3EC7A 0557B1D7BCDB3AD091B8C44E121B057931E72A0A1592A7392214DF - “audit” fonksiyonunda sunucularda audit yapılandırmasının yapılamasını sağlamaktadır. “conf” alt fonksiyonu ile “/etc/audit/auditd.conf” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda audit servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “rules” alt fonksiyonunda “/etc/audit/audit.rules” dosyasının hakları ve erişim yetkileri belirlenir. Bu satırlardan sonra gelen satırlarda, audit yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/audit/auditd.conf” dosyasına bu değişiklikler yansıtılacaktır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 30 /107 audit: # audit yapilandirmasini belirtmektedir. conf: source: auditd.conf.j2 destination: /etc/audit/auditd.conf owner: root group: root mode: 0644 service: name: auditd state: started enabled: yes rules: source: audit.rules.j2 destination: /etc/audit/audit.rules owner: root group: root mode: 0644 name: "ahtapotops" name_format: "user" log_file: /var/log/audit/audit.log log_format: RAW log_group: "root" max_log_file: 10 max_log_file_action: ROTATE num_logs: 5 priority_boost: 4 flush: INCREMENTAL freq: 20 disp_qos: lossy dispatcher: /sbin/audispd space_left: 2000 space_left_action: SYSLOG action_mail_acct: "root" admin_space_left: 1000 admin_space_left_action: SUSPEND Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 31 /107 disk_full_action: SUSPEND disk_error_action: SUSPEND tcp_listen_queue: 5 tcp_max_per_addr: 1 tcp_client_ports: 1024-65535 tcp_client_max_idle: 0 enable_krb5: "no" krb5_principal: auditd krb5_key_file: /etc/audit/audit.key - “sysctl” fonksiyonunda sunucular üzerinde sysctl yapılandırması yapılmaktadır. “conf” alt fonksiyonu ile “/etc/sysctl.conf” dosyasına “/etc/ansible/roles/base/templates/” altında bulunan “sysctl.conf.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. Bu satırlardan sonra gelen satırlarda, sysctl yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/sysctl.conf” dosyasına bu değişiklikler yansıtılacaktır. sysctl: # sysctl yapilandirmasini belirtmektedir. conf: source: sysctl.conf.j2 destination: /etc/sysctl.conf owner: root group: root mode: 0644 icmp_ignore_bougs_error_responses: 1 icmp_echo_ignore_broadcasts: 1 - “rsyslog” fonksiyonunda sunucularda rsyslog yapılandırmasının yapılamasını sağlamaktadır. “conf” alt fonksiyonu ile “/etc/rsyslog.conf” dosyasına “/etc/ansible/roles/base/templates/” altında bulunan “rsyslog.conf.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. “service” alt fonksiyonunda rsyslog servisinin değişikliklerden sonra yeniden başlatılması sağlanır. Bu satırlardan sonra gelen satırlarda, rsyslog yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/rsyslog.conf” dosyasına bu değişiklikler yansıtılacaktır. “Server1” ve “Server2” değişkenlerine rsyslog sunucuların adı ve ya ip adresi yazılmalıdır. İkinci Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 32 /107 rsyslog sunucusu bulunmadığı durumlarda “Server2” satırı başına “#” konularak kullanım dışı haline getirilmelidir. rsyslog: # rsyslog yapilandirmasini belirtmektedir. conf: source: rsyslog.conf.j2 destination: /etc/rsyslog.conf owner: root group: root mode: 0644 service: name: rsyslog state: started enabled: yes ConnectionType: tcp Server1: rsyslog01.gdys.local #Server2: rsyslog02.gdys.local Port: 514 ActionQueueMaxDiskSpace: 1g ActionQueueSaveOnShutdown: on ActionQueueType: LinkedList ActionResumeRetryCount: -1 WorkDirectory: "/var/spool/rsyslog" IncludeConfig: "/etc/rsyslog.d/*" 2.2 GitLab Bu rol Ahtapot projesi kapsamındaki GitLab rolünü üstlenecek sunucularda ayarlamaların yapıldığı roldür. Bu rolün görevleri: - GitLab sunucusu üzerinde bulunması gereken paketlerin kurulum ve denetimleri: - git,gitlab-ce Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 33 /107 - GitLab sunucusu yapılması gereken genel işlemler: - git kullanıcısının yapılandırılması - GitLab SSL yapılandırması - GitLab SMTP yapılandırması - GitLab yedeklilik yapılandırması Bu roldeki değişkenler “/etc/ansible/roles/gitlab/vars/main.yml” dosyasında belirtilmiştir. “main.yml” dosyasının içeriği ve değişken bilgileri aşağıdaki gibidir; - “gitlab” fonksiyonunda sunucu üzerindeki git kullanıcısına parola atanmaktadır. Her ne kadar SSH ile parolasız bağlantı sağlansa da, git kullanıcısının parolası olması gerekmektedir. gitlab: # git kullanicisini yapilandirmasi belirtilmektedir. user: name: git password: "jQCGY1Gp$rVz8u3qRyH3UCB.6MSnWToQv1qQYjYeatbBEA0pA4aqnjoTchjPDsm9CAeuk1xVKoV 3MqM1C/UJZ6Fgap9XmB0" state: present - “packages” fonksiyonunda GitLab sunucusu üzerine kurulacak paketler belirtilmektedir. “name” satırında hangi paketlerin kurulacağı belirlenir. “updatecache” seçeneği ile “aptget update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. “force” satırı ile kurulumun yapılması gerektiği durumlarda, her koşulda kurulumu tamamlamaya zorlar. packages: # GitLab playbooku ile kurulacak paketleri belirtmektedir. name: git,gitlab-ce updatecache: yes state: present Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 34 /107 force: yes Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 35 /107 - “conf” fonksiyonu ile “/etc/gitlab/gitlab.rb” dosyasına “/etc/ansible/roles/gitlab/templates/” altında bulunan “gitlab.rb.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. conf: source: gitlab.rb.j2 destination: /etc/gitlab/gitlab.rb owner: root group: root mode: 0640 - “ssl” fonksiyonu ile “/etc/gitlab/ssl” dosyasının hakları, erişim yetkileri belirlenir. ssl: directory: path: /etc/gitlab/ssl owner: root group: root mode: 700 state: directory recurse: yes - “ssl-crt” fonksiyonu ile “/etc/gitlab/ssl/gitlab_makina_ismi.crt” dosyasına “/etc/ansible/roles/gitlab/templates/” altında bulunan “ssl-crt.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. ssl-crt: source: ssl-crt.j2 destination: /etc/gitlab/ssl/gitlab_makina_ismi.crt owner: root group: root mode: 600 Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 36 /107 - “ssl-key” fonksiyonu ile “/etc/gitlab/ssl/gitlab_makina_ismi.key” dosyasına “/etc/ansible/roles/gitlab/templates/” altında bulunan “ssl-key.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. ssl-key: source: ssl-key.j2 destination: /etc/gitlab/gitlab_makina_ismi.key owner: root group: root mode: 600 - “external_url” fonksiyonu ile GitLab arayüzüne ulaşması istenilen URL adresi yazılır. “firstrunpath” de belirtilen, GitLab’ ın ilk yapılandırmasında adres bilgileri bu dosyaya yazılır. external_url: https://URL_Adresi firstrunpath: /var/opt/gitlab/bootstrapped - “gitlab_rails” fonksiyonu ile GitLab sunucusunun bilgilendirme ayarları yapılmaktadır. “gitlab_email_from:” satırına GitLab tarafından atılacak bilgilendirme postalarının hangi adres tarafından atılacağı belirtilmelidir. “gitlab_email_display_name:” satırında gönderilen postalarda görünmesi istenilen isim belirlenir. “gitlab_email_reply_to:” satırında GitLab tarafından gönderilen postalara cevap verilmesi durumunda cevabın hangi adrese yönlendirilmesi istendiği belirtilir. “smtp_address:” satırında smtp sunucusunun FQDN ve ya IP adres bilgileri girilir. “smtp_port:” satırında smtp sunucusunun kullandığı port yazılır. “smtp_domain:” satırında ise stmp alan adı bilgisi girilir. gitlab_rails: gitlab_email_enabled: "true" gitlab_email_from: gitlab@domain_adres gitlab_email_display_name: Gitlab gitlab_email_reply_to: no-reply@domain_adres gitlab_default_theme: 2 Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 37 /107 gitlab_shell_ssh_port: SSH_port smtp_enable: "true" smtp_address: smtp_adres smtp_port: 25 smtp_domain: domain_adres smtp_tls: "false" - “nginx” fonksiyonu ile GitLab arayüzüne erişin adres çubuğunda “http” ile istek yapıldığında bağlantıyı otomatize bir şekilde “https” bağlantısına çevirmesi sağlanır. nginx: enable: "true" redirect_http_to_https: "true" - “backup” fonksiyonu ile GitLab sunucusu üzerinde bulunan her bir deponun yedeğini alarak, yedek GitLab sunucusuna dönülmesini sağlamaktadır. Bu işlem GitLab’ ın sağladığı “custom hook” yapısı ile sağlanmaktadır. “source” satırında belirtilen “/etc/ansible/roles/gitlab/templates” altında bulunan “post-receive.sh.j2” dosyasının içeriğini “destination” satırlarında belirtilen tüm dizinlere kopyalanır ve hakları, erişim yetkileri belirlenir. “Server” satırına yedek GitLab sunucusunun FQDN ve ya IP adres bilgisi girilir. “Port” satırında sunucusunun ssh port bilgisi bildirilir. “ansible” fonksiyonunun altında bulunan “Server” satırına yedek GitLab sunucusunun FQDN ve ya IP adres bilgisi girilir. “Port” satırında sunucusunun ssh port bilgisi bildirilir. backup: conf: source: post-receive.sh.j2 destination1: /var/opt/gitlab/gitdata/repositories/ahtapotops/mys.git/custom_hooks/post-receive destination2: /var/opt/gitlab/gitdata/repositories/ahtapotops/gdys.git/custom_hooks/post-receive destination3: /var/opt/gitlab/gitdata/repositories/ahtapotops/gkts.git/custom_hooks/post-receive owner: git group: git Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 38 /107 mode: 770 directory: path1: /var/opt/gitlab/gitdata/repositories/ahtapotops/mys.git/custom_hooks/ path2: /var/opt/gitlab/gitdata/repositories/ahtapotops/gdys.git/custom_hooks/ path3: /var/opt/gitlab/gitdata/repositories/ahtapotops/gkts.git/custom_hooks/ owner: git group: git mode: 755 state: directory recurse: yes Server: yedek_git_lab Port: ssh_port ansible: Server: Ansible_sunucu_fqdn Port: ssh_port 3. FirewallBuilder Ahtapot projesi kapsamında merkezde bulunacak ve güvenlik duvarlarının yönetilmesini sağlayacak playbook’dur. “/etc/ansible/playbooks/” dizini altında bulunan “firewallbuilder.yml” dosyasına bakıldığında, “hosts” satırında Ansible’a ait “/etc/ansible/” altında bulunan “hosts” dosyasında “[firewallbuilder]” satırı altına yazılmış tüm sunucularda bu playbookun oynatılacağı belirtilir. “remote_user” satırında, sistemler oynatılacak playbookun hangi kullanıcı ile oynatılacağı belirlenir. “sudo” satırı ile, çalışacak komutların sudo yetkisi ile çalışması belirlenir. “roles” satırı altında bulunan satırlarda ise bu playbook çalıştığında “base” ve “firewallbuilder” rollerinin çalışacağı belirtilmektedir. Ayrıca bu playbook ile Ansible rolünde çalışan sunuculara ait “ansible” rolü de çalıştırılır. Böylelikle GitLab tarafında yapılan her değişiklikte, Ansible makinası üzerindeki git depoları güncellenmiş olur. $ more /etc/ansible/playbooks/firewallbuilder.yml # Calistirildiginda FirewallBuilder Kurulumu Yapilir Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 39 /107 - hosts: ansible remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: ansible } - hosts: firewallbuilder remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: firewallbuilder } 3.1 Base Bu rol Ahtapot projesi kapsamındaki tüm sunucularda çalışan temel ayarlamaların yapıldığı roldür. Bu rolün görevleri: - Tüm sistemlerde olması gereken paketlerin kurulum ve denetimleri: - auditd,sysstat,ntp,bash,rsyslog,sudo Tüm sistemlerde bulunması gereken servislerin yapılandırılması: - ntp, auditd, ssh Tüm sistemlerde yapılması gereken genel işlemler: - sudo yapılandırma - sysctl yapılandırma - /etc/hosts yapılandırma - grub yapılandırma - rsyslog yapılandırma - USB kullanım kapatma / açma Bu roldeki değişkenler “/etc/ansible/roles/base/vars/main.yml” dosyasında belirtilmiştir. “main.yml” dosyasının içeriği ve değişken bilgileri aşağıdaki gibidir; Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 40 /107 - “group” fonksiyonunda sistemler üzerinde kullanılan kullanıcının ait olduğu grup bilgisi belirtilmektedir. “presentgroup” sistemde var olması gereken gruptur. İlgili sistemde bulunmaması durumda yeniden oluşturur. “revokedgroup” sistemden grubun silinmesini sağlar. Silinecek bir grup yok ise boş bırakılır. group: # Belirtilen grubun sunucu uzerinde var olup olmadigini kontrol eder. # Olmamasi durumda olusturur. presentgroup: ahtapotops # Belirtilen grubun sunucudan silinmesini saglar. revokedgroup: - “user” fonksiyonunda sistemler üzerinde kullanılan kullanıcının bilgisi belirtilmektedir. “presentuser” sistemde var olması gereken kullanıcıdır. İlgili sistemde bulunmaması durumda yeniden oluşturur. “revokeduser” sistemden kullanıcının silinmesini sağlar. Silinecek bir kullanıcı yok ise boş bırakılır. user: # Belirtilen kullanicinin sunucu uzerinde var olup olmadigini kontrol eder. # Olmamasi durumda olusturur. presentuser: ahtapotops shell: /bin/bash # Belirtilen kullanicinin sunucudan silinmesini saglar. revokeduser: - “packages” fonksiyonunda sistemler üzerine kurulacak paketler belirtilmektedir. “name” satırında hangi paketlerin kurulacağı belirlenir. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. “force” satırı ile kurulumun yapılması gerektiği durumlarda, her koşulda kurulumu tamamlamaya zorlar. packages: Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 41 /107 # Sisteme kurulacak paketleri belirler. name: auditd,sysstat,ntp,bash,rsyslog,sudo updatecache: yes state: present force: yes - “repository” fonksiyonunda sistemlere eklenecek depo bilgileri verilmektedir. “repo” satrında eklenecek deponun adresi belirtilmektedir. “url” satırında ihtiyaç olması durumunda depo anahtarını belirtmek için kullanılılmaktadır. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. repository: # Ahtapot projesi kapsaminda olusturulan paketlerin bulundugu repo adresidir. repo: 'deb http://193.140.98.199/pardus-yenikusak pardus-ahtapot main' # Pardus tarafından herhangi bir rep key ulasmadigindan dolayi kapatildi. # url: 'http://ip_adres/packages/amd64/bilgio.asc' updatecache: yes state: present - “sudo” fonksiyonunda sudo yapılandırması yapılmaktadır. “source” satırında belirtilen ve “/etc/ansible/roles/base/templates” altında bulunan “sudoers.j2” dosyasında bulunan ayarları sunucular üzerinde gerçekleştirir. “destination” satırında ayarların yapılacağı sudoers dosyası belirlenir. “owner”, “group” ve “mode” ile bu dosyanın sahibi olan kullanıcı, grup ve hakları belirlenir. “iologdir” satırı ile sudo loglarının hangi dizine yazılacağı belirtilir. “group” ile hangi grup için bu ayarların yapılacağı belirtilir. “newgroup” satırı, grupta bir değişlik olacağı durumlarda buraya yazılarak, değişikliğin sağlanmasına yaramaktadır. Grup değişmeyeceği sürece güncel grup adı ile kalmalıdır. “commands” satırı ile ilgili grupa hangi komutlar için yetki verileceği belirtilmektedir. “firewall” alt fonksiyonu ile Limitlik Kullanıcı Konsolunda kullanılacak kullanıcıya gerekli yetki verilir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 42 /107 sudo: # Sudo yapilandirmasini belirtmektedir. conf: source: sudoers.j2 destination: /etc/sudoers owner: root group: root mode: 440 iologdir: "/var/log/sudo-io/%{hostname}/%{user}" group: ahtapotops newgroup: ahtapotops commands: ALL firewall: user: lkk commands: /usr/sbin/iptraf - “usb-storage” fonksiyonunda sistemlerdeki usb kapılarının açılıp/kapanması sağlanır. “/etc/ansible/roles/base/templates” dizini altında bulunan “blacklist.conf.j2” dosyasındaki izin verilmeyecek durumları modprobe’a yazar. usb-storage: # usb yapilandirmasini belirtmektedir. conf: source: blacklist.conf.j2 destination: /etc/modprobe.d/blacklist.conf owner: root group: root mode: 644 - “logger” fonksiyonu ile sistemlerin ayakta ve log gönderebilir olduğunun kontrolünün yapılacağı script “/etc/ansible/roles/base/templates” dizini altında bulunan “logger.sh.j2” dosyasından kopyalanarak cron’a eklenmektedir. logger: Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 43 /107 # heartbeat yapilandirmasini belirtmektedir. cron: source: logger.sh.j2 destination: /etc/cron.d/logger.sh owner: root group: root mode: 755 min: "00" hour: "*" facility: local5 severity: info tag: "heartbeat" message: "Heartbeat from $(hostname) at $(date) !" - “ssh” fonksiyonunda sistemlerde ssh tanımlamaları, yapılandırma ve sıkılaştırma işlemleri yapılır. “conf” alt fonksiyonu ile “/etc/ssh/sshd_config” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda ssh servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “TrustedUserCAKeys” alt fonksiyonu ile sisteme eklenen CA imzalı açık anahtar bilgisi, bu anahtarın hakları ve erişim yetkileri belirlenir. “LocalBanner” ve “RemoteBanner” alt fonksiyonları ile sunuculara bağlantı kurulduğunda ekrana gelecek uyarı belirtilir. Bu satırlardan sonra gelen satırlarda, ssh yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/ssh/sshd_config” dosyasına bu değişiklikler yansıtılacaktır. Sistemlerde kullanılacak ssh portunu varsıyan “22” değeri dışında başka bir değere atamak istenir ise, “Port” satırındaki 22 değeri olması istenen değer ile değiştirilmelidir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 44 /107 ssh: # ssh yapilandirmasini belirtmektedir. conf: source: sshd_config.j2 destination: /etc/ssh/sshd_config owner: root group: root mode: 0644 service: name: ssh state: started enabled: yes TrustedUserCAKeys: source: ahtapot_ca.pub.j2 destination: /etc/ssh/ahtapot_ca.pub owner: root group: root mode: 0644 LocalBanner: source: issue.j2 destination: /etc/issue owner: root group: root mode: 0644 RemoteBanner: source: issue.net.j2 destination: /etc/issue.net owner: root group: root mode: 0644 Port: 22 Protocol: 2 ListenAddressv4: 0.0.0.0 ListenAddressv6: "::" UsePrivilegeSeparation: "yes" KeyRegenerationInterval: 3600 Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 45 /107 ServerKeyBits: 1024 SyslogFacility: AUTH LogLevel: INFO LoginGraceTime: 90 PermitRootLogin: "no" StrictModes: "yes" RSAAuthentication: "yes" PubkeyAuthentication: "yes" IgnoreRhosts: "yes" RhostsRSAAuthentication: "no" HostbasedAuthentication: "no" IgnoreUserKnownHosts: "yes" PermitEmptyPasswords: "no" ChallengeResponseAuthentication: "no" PasswordAuthentication: "no" KerberosAuthentication: "no" KerberosOrLocalPasswd: "yes" KerberosTicketCleanup: "yes" GSSAPIAuthentication: "no" GSSAPICleanupCredentials: "yes" X11Forwarding: "no" X11DisplayOffset: 10 PrintMotd: "yes" PrintLastLog: "yes" TCPKeepAlive: "yes" UsePAM: "no" UseLogin: "no" - “ntp” fonksiyonunda sistemlerdeki ntp yapılandırması yapılmaktadır. “conf” alt fonksiyonu ile “/etc/ntp.conf” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda ntp servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “FirstNtpServerHost” satırına ilk NTP sunucusunun adı ve ya ip adresi girilir. “SecondNtpServerHost” satırına ikinci NTP sunucusunun adı ve ya ip adresi girilir. İkinci NTP sunucusu olmaması durumunda bu satırın başına “#” işareti konularak kullanım dışı kalması sağlanır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 46 /107 ntp: # ntp yapilandirmasini belirtmektedir. conf: source: ntp.conf.j2 destination: /etc/ntp.conf owner: root group: root mode: 0644 service: name: ntp state: started enabled: yes # ntp server bilgileri girilmektedir. FirstNtpServerHost: "0.debian.pool.ntp.org" SecondNtpServerHost: "1.debian.pool.ntp.org" - “hosts” fonksiyonunda “source” satırında belirtilen ve “/etc/ansible/roles/base/templates” altında bulunan “hosts.j2” dosyanında yer alan host bilgilerini çalıştığı tüm makinalarda “/etc/hosts” dizini altına atmaktadır. Akabinde bu dosyanın hakları ve erişim yetkileri belirlenir. hosts: # /etc/hosts yapilandirmasini belirtmektedir. conf: source: hosts.j2 destination: /etc/hosts owner: root group: root mode: 0644 - “grub” fonksiyonunda sunucularda grub parolası belirlenir. “conf” alt fonksiyonu ile kullanıcı/parola bilgileri girilir ve bu dosyanın hakları ve erişim yetkileri belirlenir. “conf2” alt fonksiyonu ile ise girdiler belirlenir ve bu dosyanın hakları ve erişim yetkileri belirlenir. “confile” ile dosya dizini belirtilir. “grubuser” ile kullanıcı bilgisi, “grubpass” ile parola bilgisi girilir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 47 /107 grub: # grub yapilandirmasini belirtmektedir. conf: source: grub_01_users.j2 destination: /etc/grub.d/01_users owner: root group: root mode: 755 conf2: source: grub_10_linux.j2 destination: /etc/grub.d/10_linux owner: root group: root mode: 755 confile: "/boot/grub/grub.cfg" grubuser: ahtagrub grubpass: grub.pbkdf2.sha512.10000.2A82B914C527C90A5018614B88F1604955C46131AEF358D1CB8 1E604793F5DD973DC3B796A2AF691AECC835928F76774835920D11B7FBEB07F050FAAF231B75 4.9433A4A373F5FB7D5FC05E25E14CAC0FEAD7FDE2019BE0E5E5D3B7D98A06FA3DB018D3EC7A 0557B1D7BCDB3AD091B8C44E121B057931E72A0A1592A7392214DF - “audit” fonksiyonunda sunucularda audit yapılandırmasının yapılamasını sağlamaktadır. “conf” alt fonksiyonu ile “/etc/audit/auditd.conf” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda audit servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “rules” alt fonksiyonunda “/etc/audit/audit.rules” dosyasının hakları ve erişim yetkileri belirlenir. Bu satırlardan sonra gelen satırlarda, audit yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/audit/auditd.conf” dosyasına bu değişiklikler yansıtılacaktır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 48 /107 audit: # audit yapilandirmasini belirtmektedir. conf: source: auditd.conf.j2 destination: /etc/audit/auditd.conf owner: root group: root mode: 0644 service: name: auditd state: started enabled: yes rules: source: audit.rules.j2 destination: /etc/audit/audit.rules owner: root group: root mode: 0644 name: "ahtapotops" name_format: "user" log_file: /var/log/audit/audit.log log_format: RAW log_group: "root" max_log_file: 10 max_log_file_action: ROTATE num_logs: 5 priority_boost: 4 flush: INCREMENTAL freq: 20 disp_qos: lossy dispatcher: /sbin/audispd space_left: 2000 space_left_action: SYSLOG action_mail_acct: "root" admin_space_left: 1000 admin_space_left_action: SUSPEND Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 49 /107 disk_full_action: SUSPEND disk_error_action: SUSPEND tcp_listen_queue: 5 tcp_max_per_addr: 1 tcp_client_ports: 1024-65535 tcp_client_max_idle: 0 enable_krb5: "no" krb5_principal: auditd krb5_key_file: /etc/audit/audit.key - “sysctl” fonksiyonunda sunucular üzerinde sysctl yapılandırması yapılmaktadır. “conf” alt fonksiyonu ile “/etc/sysctl.conf” dosyasına “/etc/ansible/roles/base/templates/” altında bulunan “sysctl.conf.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. Bu satırlardan sonra gelen satırlarda, sysctl yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/sysctl.conf” dosyasına bu değişiklikler yansıtılacaktır. sysctl: # sysctl yapilandirmasini belirtmektedir. conf: source: sysctl.conf.j2 destination: /etc/sysctl.conf owner: root group: root mode: 0644 icmp_ignore_bougs_error_responses: 1 icmp_echo_ignore_broadcasts: 1 - “rsyslog” fonksiyonunda sunucularda rsyslog yapılandırmasının yapılamasını sağlamaktadır. “conf” alt fonksiyonu ile “/etc/rsyslog.conf” dosyasına “/etc/ansible/roles/base/templates/” altında bulunan “rsyslog.conf.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. “service” alt fonksiyonunda rsyslog servisinin değişikliklerden sonra yeniden başlatılması sağlanır. Bu satırlardan sonra gelen satırlarda, rsyslog yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/rsyslog.conf” dosyasına bu değişiklikler yansıtılacaktır. “Server1” ve “Server2” değişkenlerine rsyslog sunucuların adı ve ya ip adresi yazılmalıdır. İkinci Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 50 /107 rsyslog sunucusu bulunmadığı durumlarda “Server2” satırı başına “#” konularak kullanım dışı haline getirilmelidir. rsyslog: # rsyslog yapilandirmasini belirtmektedir. conf: source: rsyslog.conf.j2 destination: /etc/rsyslog.conf owner: root group: root mode: 0644 service: name: rsyslog state: started enabled: yes ConnectionType: tcp Server1: rsyslog01.gdys.local #Server2: rsyslog02.gdys.local Port: 514 ActionQueueMaxDiskSpace: 1g ActionQueueSaveOnShutdown: on ActionQueueType: LinkedList ActionResumeRetryCount: -1 WorkDirectory: "/var/spool/rsyslog" IncludeConfig: "/etc/rsyslog.d/*" 3.2 FirewallBuilder Bu rol Ahtapot projesi kapsamındaki FirewallBuilder rolünü üstlenecek sunucularda ayarlamaların yapıldığı roldür. Bu rolün görevleri: - FirewallBuilder sunucusu üzerinde bulunması gereken paketlerin kurulum ve denetimleri: Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 51 /107 - - fwbuilder, git, python-qt4, python-requests, python-pexpect, xauth, ahtapot-gdysgui FirewallBuilder sunucusu yapılması gereken genel işlemler: - Onay mekanizmasını barındıran gdys-gui uygulamasının konumlandırılması ve yapılandırılması - Onay deposunun bulunduğu GitLab GDYS deposunun konumlandırılması ve yapılandırılması Bu roldeki değişkenler “/etc/ansible/roles/firewallbuilder/vars/main.yml” dosyasında belirtilmiştir. “main.yml” dosyasının içeriği ve değişken bilgileri aşağıdaki gibidir; - “packages” fonksiyonunda sistemler üzerine kurulacak paketler belirtilmektedir. “name” satırında hangi paketlerin kurulacağı belirlenir. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. “force” satırı ile kurulumun yapılması gerektiği durumlarda, her koşulda kurulumu tamamlamaya zorlar. “packages-latest” fonksiyonunda “name” satırında yazan paket isimlerinin her zaman son versiyonlarının sistemde olup olmadığı kontrol edilir. Ve olmaması durumunda güncellenir. # FirewallBuilder playbooku ile birlikte kurulacak paketleri belirtmektedir. packages: name: fwbuilder,git,python-qt4,python-requests,python-pexpect,xauth updatecache: yes state: present force: yes packages-latest: name: ahtapot-gdys-gui updatecache: yes state: latest force: yes - “Fix” fonksiyonu, FirewallBuilder tarafında oluşan xlock problemini çözmek üzere oluşturulmuş fonksiyondur. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 52 /107 fix: source: reset_iptables destination: /usr/share/fwbuilder5.1.0.3599/configlets/linux24/reset_iptables group: root owner: root mode: 644 force: yes - “gui” fonksiyonunda güvenlik duvarlarında onay mekanizması ile kural girişinin yapılmasını sağlayan gdys arayüzününe ait dizinin hakları, erişim yetkileri belirlenir. “directory” fonksiyonunda GitLab’ ta bulunan gdys reposunun konumlandırılacağı dizinin hakları, erişim yetkileri belirlenir. gui: path: /var/opt/gdysgui group: ahtapotops owner: ahtapotops mode: 755 state: directory recurse: yes directory: main: path: /etc/fw/ group: ahtapotops owner: ahtapotops mode: 750 state: directory recurse: yes - “test” fonksiyonunda güvenlik duvarlarında onay mekanizması ile kural girişinin yapılmasını ardından sistemlerde oynatılmadan önce betiklerin test edilmesi için oluşturulan dizinin hakları, erişim yetkileri belirlenir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 53 /107 # Onay mekanizmasina gitmeden test scriptlerinin konumlandirildigi dizini belirtmektedir. test: path: /home/ahtapotops/testfw/ group: ahtapotops owner: ahtapotops mode: 750 state: directory recurse: yes - “git” fonksiyonunda FirewallBuilder sunucusunda bulunacak git depolarının bilgileri girilmektedir. “repo” satırına MYS kapsamında kurulmuş Yerel GitLab sunucusunda bulunan ilgili depo adresi girilir. “update” satırı ile her işlem öncesinde “git pull” komutu çalıştırarak deponun güncel halinin çekilmesi sağlanır. “accepthostkey” satırında bağlantı sırasında sunucu anahtarını kabul edilip edilmeyeceğine dair soru geldiğinde kabul etmesine zorlamaktadır. “destination” alt fonksiyonu ile GitLab deposunun kopyalanacağı dizin ve bu dizinin hakları, erişim yetkileri belirtilmektedir. “keyfile” satırı ile GitLab’a erişecek kullanıcının anahtar bilgisi girilmektedir. git: # Onay mekanizmasinin bulundugu Yerel GitLab reposu belirtilmektedir. repo: ssh://git@yerel_gitlab_ip:ssh_port/ahtapotops/gdys.git update: yes accepthostkey: yes # Onay mekanizmasinina ait GitLab reposunun kopyalanacagi dizin belirtilmektedir. destination: path: /etc/fw/gdys group: ahtapotops owner: ahtapotops mode: 750 state: directory recurse: yes # Onay mekanizmasinda Yerel GitLab' in kullanacagi kullanici anahtari belirtilmektedir. keyfile: /home/ahtapotops/.ssh/id_rsa Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 54 /107 - “bash” fonksiyonu ile güvenlik duvarı yönetim sistemi kontrol paneli için kısayol oluşturulması sağlanır ve bu dizinin hakları, erişim yetkileri belirlenir. bash: conf: source: fwbuilder-ahtapot.sh.j2 destination: /etc/profile.d/fwbuilder-ahtapot.sh owner: root group: root mode: 755 4. Rsyslog Ahtapot projesi kapsamında merkezde bulunacak ve logların gönderilerek tutulacağı sunucuları oluşturacak playbook’dur. “/etc/ansible/playbooks/” dizini altında bulunan “rsyslog.yml” dosyasına bakıldığında, “hosts” satırında Ansible’a ait “/etc/ansible/” altında bulunan “hosts” dosyasında “[rsyslog]” satırı altına yazılmış tüm sunucularda bu playbookun oynatılacağı belirtilir. “remote_user” satırında, sistemler oynatılacak playbookun hangi kullanıcı ile oynatılacağı belirlenir. “sudo” satırı ile, çalışacak komutların sudo yetkisi ile çalışması belirlenir. “roles” satırı altında bulunan satırlarda ise bu playbook çalıştığında “base” ve “rsyslog” rollerinin çalışacağı belirtilmektedir. Ayrıca bu playbook ile Ansible rolünde çalışan sunuculara ait “ansible” rolü de çalıştırılır. $ more /etc/ansible/playbooks/rsyslog.yml # Calistirildiginda Rsyslog Sunucu Kurulumu Yapilir - hosts: ansible remote_user: ahtapotops sudo: yes roles: - { role: base } Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 55 /107 - { role: ansible } - hosts: rsyslog remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: rsyslog } 4.1 Base Bu rol Ahtapot projesi kapsamındaki tüm sunucularda çalışan temel ayarlamaların yapıldığı roldür. Bu rolün görevleri: - Tüm sistemlerde olması gereken paketlerin kurulum ve denetimleri: - auditd,sysstat,ntp,bash,rsyslog,sudo Tüm sistemlerde bulunması gereken servislerin yapılandırılması: - ntp, auditd, ssh Tüm sistemlerde yapılması gereken genel işlemler: - sudo yapılandırma - sysctl yapılandırma - /etc/hosts yapılandırma - grub yapılandırma - rsyslog yapılandırma - USB kullanım kapatma / açma Bu roldeki değişkenler “/etc/ansible/roles/base/vars/main.yml” dosyasında belirtilmiştir. “main.yml” dosyasının içeriği ve değişken bilgileri aşağıdaki gibidir; - “group” fonksiyonunda sistemler üzerinde kullanılan kullanıcının ait olduğu grup bilgisi belirtilmektedir. “presentgroup” sistemde var olması gereken gruptur. İlgili sistemde bulunmaması durumda yeniden oluşturur. “revokedgroup” sistemden grubun silinmesini sağlar. Silinecek bir grup yok ise boş bırakılır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 56 /107 group: # Belirtilen grubun sunucu uzerinde var olup olmadigini kontrol eder. # Olmamasi durumda olusturur. presentgroup: ahtapotops # Belirtilen grubun sunucudan silinmesini saglar. revokedgroup: - “user” fonksiyonunda sistemler üzerinde kullanılan kullanıcının bilgisi belirtilmektedir. “presentuser” sistemde var olması gereken kullanıcıdır. İlgili sistemde bulunmaması durumda yeniden oluşturur. “revokeduser” sistemden kullanıcının silinmesini sağlar. Silinecek bir kullanıcı yok ise boş bırakılır. user: # Belirtilen kullanicinin sunucu uzerinde var olup olmadigini kontrol eder. # Olmamasi durumda olusturur. presentuser: ahtapotops shell: /bin/bash # Belirtilen kullanicinin sunucudan silinmesini saglar. revokeduser: - “packages” fonksiyonunda sistemler üzerine kurulacak paketler belirtilmektedir. “name” satırında hangi paketlerin kurulacağı belirlenir. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. “force” satırı ile kurulumun yapılması gerektiği durumlarda, her koşulda kurulumu tamamlamaya zorlar. packages: # Sisteme kurulacak paketleri belirler. name: auditd,sysstat,ntp,bash,rsyslog,sudo updatecache: yes state: present force: yes Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 57 /107 - “repository” fonksiyonunda sistemlere eklenecek depo bilgileri verilmektedir. “repo” satrında eklenecek deponun adresi belirtilmektedir. “url” satırında ihtiyaç olması durumunda depo anahtarını belirtmek için kullanılılmaktadır. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. repository: # Ahtapot projesi kapsaminda olusturulan paketlerin bulundugu repo adresidir. repo: 'deb http://193.140.98.199/pardus-yenikusak pardus-ahtapot main' # Pardus tarafından herhangi bir rep key ulasmadigindan dolayi kapatildi. # url: 'http://ip_adres/packages/amd64/bilgio.asc' updatecache: yes state: present - “sudo” fonksiyonunda sudo yapılandırması yapılmaktadır. “source” satırında belirtilen ve “/etc/ansible/roles/base/templates” altında bulunan “sudoers.j2” dosyasında bulunan ayarları sunucular üzerinde gerçekleştirir. “destination” satırında ayarların yapılacağı sudoers dosyası belirlenir. “owner”, “group” ve “mode” ile bu dosyanın sahibi olan kullanıcı, grup ve hakları belirlenir. “iologdir” satırı ile sudo loglarının hangi dizine yazılacağı belirtilir. “group” ile hangi grup için bu ayarların yapılacağı belirtilir. “newgroup” satırı, grupta bir değişlik olacağı durumlarda buraya yazılarak, değişikliğin sağlanmasına yaramaktadır. Grup değişmeyeceği sürece güncel grup adı ile kalmalıdır. “commands” satırı ile ilgili grupa hangi komutlar için yetki verileceği belirtilmektedir. “firewall” alt fonksiyonu ile Limitlik Kullanıcı Konsolunda kullanılacak kullanıcıya gerekli yetki verilir. sudo: # Sudo yapilandirmasini belirtmektedir. conf: source: sudoers.j2 destination: /etc/sudoers Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 58 /107 owner: root group: root mode: 440 iologdir: "/var/log/sudo-io/%{hostname}/%{user}" group: ahtapotops newgroup: ahtapotops commands: ALL firewall: user: lkk commands: /usr/sbin/iptraf - “usb-storage” fonksiyonunda sistemlerdeki usb kapılarının açılıp/kapanması sağlanır. “/etc/ansible/roles/base/templates” dizini altında bulunan “blacklist.conf.j2” dosyasındaki izin verilmeyecek durumları modprobe’a yazar. usb-storage: # usb yapilandirmasini belirtmektedir. conf: source: blacklist.conf.j2 destination: /etc/modprobe.d/blacklist.conf owner: root group: root mode: 644 - “logger” fonksiyonu ile sistemlerin ayakta ve log gönderebilir olduğunun kontrolünün yapılacağı script “/etc/ansible/roles/base/templates” dizini altında bulunan “logger.sh.j2” dosyasından kopyalanarak cron’a eklenmektedir. logger: # heartbeat yapilandirmasini belirtmektedir. cron: source: logger.sh.j2 destination: /etc/cron.d/logger.sh owner: root group: root Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 59 /107 mode: 755 min: "00" hour: "*" facility: local5 severity: info tag: "heartbeat" message: "Heartbeat from $(hostname) at $(date) !" - “ssh” fonksiyonunda sistemlerde ssh tanımlamaları, yapılandırma ve sıkılaştırma işlemleri yapılır. “conf” alt fonksiyonu ile “/etc/ssh/sshd_config” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda ssh servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “TrustedUserCAKeys” alt fonksiyonu ile sisteme eklenen CA imzalı açık anahtar bilgisi, bu anahtarın hakları ve erişim yetkileri belirlenir. “LocalBanner” ve “RemoteBanner” alt fonksiyonları ile sunuculara bağlantı kurulduğunda ekrana gelecek uyarı belirtilir. Bu satırlardan sonra gelen satırlarda, ssh yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/ssh/sshd_config” dosyasına bu değişiklikler yansıtılacaktır. Sistemlerde kullanılacak ssh portunu varsıyan “22” değeri dışında başka bir değere atamak istenir ise, “Port” satırındaki 22 değeri olması istenen değer ile değiştirilmelidir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 60 /107 ssh: # ssh yapilandirmasini belirtmektedir. conf: source: sshd_config.j2 destination: /etc/ssh/sshd_config owner: root group: root mode: 0644 service: name: ssh state: started enabled: yes TrustedUserCAKeys: source: ahtapot_ca.pub.j2 destination: /etc/ssh/ahtapot_ca.pub owner: root group: root mode: 0644 LocalBanner: source: issue.j2 destination: /etc/issue owner: root group: root mode: 0644 RemoteBanner: source: issue.net.j2 destination: /etc/issue.net owner: root group: root mode: 0644 Port: 22 Protocol: 2 ListenAddressv4: 0.0.0.0 ListenAddressv6: "::" UsePrivilegeSeparation: "yes" KeyRegenerationInterval: 3600 Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 61 /107 ServerKeyBits: 1024 SyslogFacility: AUTH LogLevel: INFO LoginGraceTime: 90 PermitRootLogin: "no" StrictModes: "yes" RSAAuthentication: "yes" PubkeyAuthentication: "yes" IgnoreRhosts: "yes" RhostsRSAAuthentication: "no" HostbasedAuthentication: "no" IgnoreUserKnownHosts: "yes" PermitEmptyPasswords: "no" ChallengeResponseAuthentication: "no" PasswordAuthentication: "no" KerberosAuthentication: "no" KerberosOrLocalPasswd: "yes" KerberosTicketCleanup: "yes" GSSAPIAuthentication: "no" GSSAPICleanupCredentials: "yes" X11Forwarding: "no" X11DisplayOffset: 10 PrintMotd: "yes" PrintLastLog: "yes" TCPKeepAlive: "yes" UsePAM: "no" UseLogin: "no" - “ntp” fonksiyonunda sistemlerdeki ntp yapılandırması yapılmaktadır. “conf” alt fonksiyonu ile “/etc/ntp.conf” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda ntp servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “FirstNtpServerHost” satırına ilk NTP sunucusunun adı ve ya ip adresi girilir. “SecondNtpServerHost” satırına ikinci NTP sunucusunun adı ve ya ip adresi girilir. İkinci NTP sunucusu olmaması durumunda bu satırın başına “#” işareti konularak kullanım dışı kalması sağlanır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 62 /107 ntp: # ntp yapilandirmasini belirtmektedir. conf: source: ntp.conf.j2 destination: /etc/ntp.conf owner: root group: root mode: 0644 service: name: ntp state: started enabled: yes # ntp server bilgileri girilmektedir. FirstNtpServerHost: "0.debian.pool.ntp.org" SecondNtpServerHost: "1.debian.pool.ntp.org" - “hosts” fonksiyonunda “source” satırında belirtilen ve “/etc/ansible/roles/base/templates” altında bulunan “hosts.j2” dosyanında yer alan host bilgilerini çalıştığı tüm makinalarda “/etc/hosts” dizini altına atmaktadır. Akabinde bu dosyanın hakları ve erişim yetkileri belirlenir. hosts: # /etc/hosts yapilandirmasini belirtmektedir. conf: source: hosts.j2 destination: /etc/hosts owner: root group: root mode: 0644 - “grub” fonksiyonunda sunucularda grub parolası belirlenir. “conf” alt fonksiyonu ile kullanıcı/parola bilgileri girilir ve bu dosyanın hakları ve erişim yetkileri belirlenir. “conf2” alt fonksiyonu ile ise girdiler belirlenir ve bu dosyanın hakları ve erişim yetkileri belirlenir. “confile” ile dosya dizini belirtilir. “grubuser” ile kullanıcı bilgisi, “grubpass” ile parola bilgisi girilir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 63 /107 grub: # grub yapilandirmasini belirtmektedir. conf: source: grub_01_users.j2 destination: /etc/grub.d/01_users owner: root group: root mode: 755 conf2: source: grub_10_linux.j2 destination: /etc/grub.d/10_linux owner: root group: root mode: 755 confile: "/boot/grub/grub.cfg" grubuser: ahtagrub grubpass: grub.pbkdf2.sha512.10000.2A82B914C527C90A5018614B88F1604955C46131AEF358D1CB8 1E604793F5DD973DC3B796A2AF691AECC835928F76774835920D11B7FBEB07F050FAAF231B75 4.9433A4A373F5FB7D5FC05E25E14CAC0FEAD7FDE2019BE0E5E5D3B7D98A06FA3DB018D3EC7A 0557B1D7BCDB3AD091B8C44E121B057931E72A0A1592A7392214DF - “audit” fonksiyonunda sunucularda audit yapılandırmasının yapılamasını sağlamaktadır. “conf” alt fonksiyonu ile “/etc/audit/auditd.conf” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda audit servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “rules” alt fonksiyonunda “/etc/audit/audit.rules” dosyasının hakları ve erişim yetkileri belirlenir. Bu satırlardan sonra gelen satırlarda, audit yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/audit/auditd.conf” dosyasına bu değişiklikler yansıtılacaktır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 64 /107 audit: # audit yapilandirmasini belirtmektedir. conf: source: auditd.conf.j2 destination: /etc/audit/auditd.conf owner: root group: root mode: 0644 service: name: auditd state: started enabled: yes rules: source: audit.rules.j2 destination: /etc/audit/audit.rules owner: root group: root mode: 0644 name: "ahtapotops" name_format: "user" log_file: /var/log/audit/audit.log log_format: RAW log_group: "root" max_log_file: 10 max_log_file_action: ROTATE num_logs: 5 priority_boost: 4 flush: INCREMENTAL freq: 20 disp_qos: lossy dispatcher: /sbin/audispd space_left: 2000 space_left_action: SYSLOG action_mail_acct: "root" admin_space_left: 1000 admin_space_left_action: SUSPEND Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 65 /107 disk_full_action: SUSPEND disk_error_action: SUSPEND tcp_listen_queue: 5 tcp_max_per_addr: 1 tcp_client_ports: 1024-65535 tcp_client_max_idle: 0 enable_krb5: "no" krb5_principal: auditd krb5_key_file: /etc/audit/audit.key - “sysctl” fonksiyonunda sunucular üzerinde sysctl yapılandırması yapılmaktadır. “conf” alt fonksiyonu ile “/etc/sysctl.conf” dosyasına “/etc/ansible/roles/base/templates/” altında bulunan “sysctl.conf.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. Bu satırlardan sonra gelen satırlarda, sysctl yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/sysctl.conf” dosyasına bu değişiklikler yansıtılacaktır. sysctl: # sysctl yapilandirmasini belirtmektedir. conf: source: sysctl.conf.j2 destination: /etc/sysctl.conf owner: root group: root mode: 0644 icmp_ignore_bougs_error_responses: 1 icmp_echo_ignore_broadcasts: 1 - “rsyslog” fonksiyonunda sunucularda rsyslog yapılandırmasının yapılamasını sağlamaktadır. “conf” alt fonksiyonu ile “/etc/rsyslog.conf” dosyasına “/etc/ansible/roles/base/templates/” altında bulunan “rsyslog.conf.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. “service” alt fonksiyonunda rsyslog servisinin değişikliklerden sonra yeniden başlatılması sağlanır. Bu satırlardan sonra gelen satırlarda, rsyslog yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/rsyslog.conf” dosyasına bu değişiklikler yansıtılacaktır. “Server1” ve “Server2” değişkenlerine rsyslog sunucuların adı ve ya ip adresi yazılmalıdır. İkinci Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 66 /107 rsyslog sunucusu bulunmadığı durumlarda “Server2” satırı başına “#” konularak kullanım dışı haline getirilmelidir. rsyslog: # rsyslog yapilandirmasini belirtmektedir. conf: source: rsyslog.conf.j2 destination: /etc/rsyslog.conf owner: root group: root mode: 0644 service: name: rsyslog state: started enabled: yes ConnectionType: tcp Server1: rsyslog01.gdys.local #Server2: rsyslog02.gdys.local Port: 514 ActionQueueMaxDiskSpace: 1g ActionQueueSaveOnShutdown: on ActionQueueType: LinkedList ActionResumeRetryCount: -1 WorkDirectory: "/var/spool/rsyslog" IncludeConfig: "/etc/rsyslog.d/*" 4.2 Rsyslog Bu rol Ahtapot projesi kapsamındaki Rsyslog rolünü üstlenecek sunucularda ayarlamaların yapıldığı roldür. Bu rolün görevleri: - Rsyslog sunucusu üzerinde bulunması gereken paketlerin kurulum ve denetimleri: - rsyslog,logrotate Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 67 /107 - Rsyslog sunucusu yapılması gereken genel işlemler: - Rsyslog yapılandırılması - Logrotate yapılandırılması Bu roldeki değişkenler “/etc/ansible/roles/rsyslog/vars/main.yml” dosyasında belirtilmiştir. “main.yml” dosyasının içeriği ve değişken bilgileri aşağıdaki gibidir; - “packages” fonksiyonunda sistemler üzerine kurulacak paketler belirtilmektedir. “name” satırında hangi paketlerin kurulacağı belirlenir. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. “force” satırı ile kurulumun yapılması gerektiği durumlarda, her koşulda kurulumu tamamlamaya zorlar. # rsyslog playbooku ile kurulacak paketleri belirtmektedir. packages: name: rsyslog,logrotate,rsync,openjdk-7-jre,ZamaneConsole updatecache: yes state: present force: yes - “rsyslog” fonksiyonunda bu rolü üstelencek sunucu üzerindeki gerekli yapılandırma yapılmaktadır. “conf” alt fonksiyonu ile “/etc/rsyslog.conf” dosyasına “/etc/ansible/roles/rsyslog/templates/” altında bulunan “rsyslog.conf.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. “service” alt fonksiyonu ile rsyslog servisi yeniden başlatılır. “WorkDirectory” satırı ile uygulamanın çalışacağı dizin belirtilir. “IncludeConfig” satırında uygulamaya ait yapılandırma dosyaları belirtilir. “RemoteLogDirectory” satırı ile diğer sunuculardan gelen logların konumlandırılacağı dizin belirtilir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 68 /107 rsyslog: # Rsyslog yapilandirmasini belirtmektedir. conf: source: rsyslog.conf.j2 destination: /etc/rsyslog.conf owner: root group: root mode: 644 service: name: rsyslog state: started enabled: yes WorkDirectory: "/var/spool/rsyslog" IncludeConfig: "/etc/rsyslog.d/*" RemoteLogDirectory: "/data/log/%HOSTNAME%/%fromhost-ip%.log" - “rsyslog” fonksiyonunda bu rolü üstelencek sunucu üzerindeki gerekli yapılandırma yapılmaktadır. “conf” alt fonksiyonu ile “/etc/logrotate.d/rsyslog” dosyasına “/etc/ansible/roles/rsyslog/templates/” altında bulunan “rsyslog.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. “Directory” satırı ile logların konumlandırılacağı dizin belirtilir. logrotate: # Rsyslog yapilandirmasini belirtmektedir. conf: source: rsyslog.j2 destination: /etc/logrotate.d/rsyslog owner: root group: root mode: 644 Directory: "/data/log" - “Signer” fonksiyonunda 5651 log imzalama için gerekli script ve bilgiler bulunmaktadır. KamuSM Zamane ile imzalanacak durumlarda “username” ve “password” bölümlerine ilgili kullanıcı adı ve parola bilgileri girilmelidir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 69 /107 signer: # Signer yapilandirmasini belirtmektedir. conf: source: signer.bash.j2 destination: /opt/signer.bash owner: root group: root mode: 750 directory: path: /data/log/5651 state: directory owner: root group: root mode: 750 recurse: no username: tubitak password: "'tubitak'" signingdirectory: /data/log/5651/tmp signedlogs: /data/log/5651/signedlogs invalidlogs: /data/log/5651/invaledlogs serverfiles: "squid0*" command: /opt/ZamaneConsole-2.0.5/ZamaneConsole-2.0.5.jar logs: /data/log 5. Testbuilder Ahtapot projesi kapsamında merkezde bulunan güvenlik duvarı yönetim sistemine dahil olan ve girilen kuralların güvenlik duvarlarında oynatılmadan önce imla açısından kontrol edilemsine sağlayacak sunucuyu oluşturan playbook’dur. “/etc/ansible/playbooks/” dizini altında bulunan “testbuilder.yml” dosyasına bakıldığında, “hosts” satırında Ansible’a ait “/etc/ansible/” altında bulunan “hosts” dosyasında “[testfirewall]” satırı altına yazılmış tüm sunucularda bu playbookun oynatılacağı belirtilir. “remote_user” satırında, sistemler oynatılacak playbookun hangi kullanıcı ile oynatılacağı belirlenir. “sudo” satırı ile, çalışacak komutların sudo yetkisi ile çalışması belirlenir. “roles” satırı altında bulunan satırlarda ise bu playbook çalıştığında “base” Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 70 /107 ve “firewall” rollerinin çalışacağı belirtilmektedir. Ayrıca bu playbook ile Ansible rolünde çalışan sunuculara ait “ansible” rolü de çalıştırılır. $ more /etc/ansible/playbooks/testbuilder.yml # Calistirildiginda Test Guvenlik Duvari Kurulumu Yapilir - hosts: ansible remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: ansible } - hosts: testfirewall remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: firewall } 5.1 Base Bu rol Ahtapot projesi kapsamındaki tüm sunucularda çalışan temel ayarlamaların yapıldığı roldür. Bu rolün görevleri: - Tüm sistemlerde olması gereken paketlerin kurulum ve denetimleri: - auditd,sysstat,ntp,bash,rsyslog,sudo Tüm sistemlerde bulunması gereken servislerin yapılandırılması: - ntp, auditd, ssh Tüm sistemlerde yapılması gereken genel işlemler: - sudo yapılandırma - sysctl yapılandırma - /etc/hosts yapılandırma - grub yapılandırma - rsyslog yapılandırma Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 71 /107 - USB kullanım kapatma / açma Bu roldeki değişkenler “/etc/ansible/roles/base/vars/main.yml” dosyasında belirtilmiştir. “main.yml” dosyasının içeriği ve değişken bilgileri aşağıdaki gibidir; - “group” fonksiyonunda sistemler üzerinde kullanılan kullanıcının ait olduğu grup bilgisi belirtilmektedir. “presentgroup” sistemde var olması gereken gruptur. İlgili sistemde bulunmaması durumda yeniden oluşturur. “revokedgroup” sistemden grubun silinmesini sağlar. Silinecek bir grup yok ise boş bırakılır. group: # Belirtilen grubun sunucu uzerinde var olup olmadigini kontrol eder. # Olmamasi durumda olusturur. presentgroup: ahtapotops # Belirtilen grubun sunucudan silinmesini saglar. revokedgroup: - “user” fonksiyonunda sistemler üzerinde kullanılan kullanıcının bilgisi belirtilmektedir. “presentuser” sistemde var olması gereken kullanıcıdır. İlgili sistemde bulunmaması durumda yeniden oluşturur. “revokeduser” sistemden kullanıcının silinmesini sağlar. Silinecek bir kullanıcı yok ise boş bırakılır. user: # Belirtilen kullanicinin sunucu uzerinde var olup olmadigini kontrol eder. # Olmamasi durumda olusturur. presentuser: ahtapotops shell: /bin/bash # Belirtilen kullanicinin sunucudan silinmesini saglar. revokeduser: - “packages” fonksiyonunda sistemler üzerine kurulacak paketler belirtilmektedir. “name” satırında hangi paketlerin kurulacağı belirlenir. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 72 /107 var ise günceller. “force” satırı ile kurulumun yapılması gerektiği durumlarda, her koşulda kurulumu tamamlamaya zorlar. packages: # Sisteme kurulacak paketleri belirler. name: auditd,sysstat,ntp,bash,rsyslog,sudo updatecache: yes state: present force: yes - “repository” fonksiyonunda sistemlere eklenecek depo bilgileri verilmektedir. “repo” satrında eklenecek deponun adresi belirtilmektedir. “url” satırında ihtiyaç olması durumunda depo anahtarını belirtmek için kullanılılmaktadır. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. repository: # Ahtapot projesi kapsaminda olusturulan paketlerin bulundugu repo adresidir. repo: 'deb http://193.140.98.199/pardus-yenikusak pardus-ahtapot main' # Pardus tarafından herhangi bir rep key ulasmadigindan dolayi kapatildi. # url: 'http://ip_adres/packages/amd64/bilgio.asc' updatecache: yes state: present - “sudo” fonksiyonunda sudo yapılandırması yapılmaktadır. “source” satırında belirtilen ve “/etc/ansible/roles/base/templates” altında bulunan “sudoers.j2” dosyasında bulunan ayarları sunucular üzerinde gerçekleştirir. “destination” satırında ayarların yapılacağı sudoers dosyası belirlenir. “owner”, “group” ve “mode” ile bu dosyanın sahibi olan kullanıcı, grup ve hakları belirlenir. “iologdir” satırı ile sudo loglarının hangi dizine yazılacağı belirtilir. “group” ile hangi grup için bu ayarların yapılacağı belirtilir. “newgroup” satırı, grupta bir değişlik olacağı durumlarda buraya yazılarak, değişikliğin Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 73 /107 sağlanmasına yaramaktadır. Grup değişmeyeceği sürece güncel grup adı ile kalmalıdır. “commands” satırı ile ilgili grupa hangi komutlar için yetki verileceği belirtilmektedir. “firewall” alt fonksiyonu ile Limitlik Kullanıcı Konsolunda kullanılacak kullanıcıya gerekli yetki verilir. sudo: # Sudo yapilandirmasini belirtmektedir. conf: source: sudoers.j2 destination: /etc/sudoers owner: root group: root mode: 440 iologdir: "/var/log/sudo-io/%{hostname}/%{user}" group: ahtapotops newgroup: ahtapotops commands: ALL firewall: user: lkk commands: /usr/sbin/iptraf - “usb-storage” fonksiyonunda sistemlerdeki usb kapılarının açılıp/kapanması sağlanır. “/etc/ansible/roles/base/templates” dizini altında bulunan “blacklist.conf.j2” dosyasındaki izin verilmeyecek durumları modprobe’a yazar. usb-storage: # usb yapilandirmasini belirtmektedir. conf: source: blacklist.conf.j2 destination: /etc/modprobe.d/blacklist.conf owner: root group: root mode: 644 Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 74 /107 - “logger” fonksiyonu ile sistemlerin ayakta ve log gönderebilir olduğunun kontrolünün yapılacağı script “/etc/ansible/roles/base/templates” dizini altında bulunan “logger.sh.j2” dosyasından kopyalanarak cron’a eklenmektedir. logger: # heartbeat yapilandirmasini belirtmektedir. cron: source: logger.sh.j2 destination: /etc/cron.d/logger.sh owner: root group: root mode: 755 min: "00" hour: "*" facility: local5 severity: info tag: "heartbeat" message: "Heartbeat from $(hostname) at $(date) !" - “ssh” fonksiyonunda sistemlerde ssh tanımlamaları, yapılandırma ve sıkılaştırma işlemleri yapılır. “conf” alt fonksiyonu ile “/etc/ssh/sshd_config” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda ssh servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “TrustedUserCAKeys” alt fonksiyonu ile sisteme eklenen CA imzalı açık anahtar bilgisi, bu anahtarın hakları ve erişim yetkileri belirlenir. “LocalBanner” ve “RemoteBanner” alt fonksiyonları ile sunuculara bağlantı kurulduğunda ekrana gelecek uyarı belirtilir. Bu satırlardan sonra gelen satırlarda, ssh yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/ssh/sshd_config” dosyasına bu değişiklikler yansıtılacaktır. Sistemlerde kullanılacak ssh portunu varsıyan “22” değeri dışında başka bir değere atamak istenir ise, “Port” satırındaki 22 değeri olması istenen değer ile değiştirilmelidir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 75 /107 ssh: # ssh yapilandirmasini belirtmektedir. conf: source: sshd_config.j2 destination: /etc/ssh/sshd_config owner: root group: root mode: 0644 service: name: ssh state: started enabled: yes TrustedUserCAKeys: source: ahtapot_ca.pub.j2 destination: /etc/ssh/ahtapot_ca.pub owner: root group: root mode: 0644 LocalBanner: source: issue.j2 destination: /etc/issue owner: root group: root mode: 0644 RemoteBanner: source: issue.net.j2 destination: /etc/issue.net owner: root group: root mode: 0644 Port: 22 Protocol: 2 ListenAddressv4: 0.0.0.0 ListenAddressv6: "::" UsePrivilegeSeparation: "yes" KeyRegenerationInterval: 3600 Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 76 /107 ServerKeyBits: 1024 SyslogFacility: AUTH LogLevel: INFO LoginGraceTime: 90 PermitRootLogin: "no" StrictModes: "yes" RSAAuthentication: "yes" PubkeyAuthentication: "yes" IgnoreRhosts: "yes" RhostsRSAAuthentication: "no" HostbasedAuthentication: "no" IgnoreUserKnownHosts: "yes" PermitEmptyPasswords: "no" ChallengeResponseAuthentication: "no" PasswordAuthentication: "no" KerberosAuthentication: "no" KerberosOrLocalPasswd: "yes" KerberosTicketCleanup: "yes" GSSAPIAuthentication: "no" GSSAPICleanupCredentials: "yes" X11Forwarding: "no" X11DisplayOffset: 10 PrintMotd: "yes" PrintLastLog: "yes" TCPKeepAlive: "yes" UsePAM: "no" UseLogin: "no" - “ntp” fonksiyonunda sistemlerdeki ntp yapılandırması yapılmaktadır. “conf” alt fonksiyonu ile “/etc/ntp.conf” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda ntp servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “FirstNtpServerHost” satırına ilk NTP sunucusunun adı ve ya ip adresi girilir. “SecondNtpServerHost” satırına ikinci NTP sunucusunun adı ve ya ip adresi girilir. İkinci NTP sunucusu olmaması durumunda bu satırın başına “#” işareti konularak kullanım dışı kalması sağlanır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 77 /107 ntp: # ntp yapilandirmasini belirtmektedir. conf: source: ntp.conf.j2 destination: /etc/ntp.conf owner: root group: root mode: 0644 service: name: ntp state: started enabled: yes # ntp server bilgileri girilmektedir. FirstNtpServerHost: "0.debian.pool.ntp.org" SecondNtpServerHost: "1.debian.pool.ntp.org" - “hosts” fonksiyonunda “source” satırında belirtilen ve “/etc/ansible/roles/base/templates” altında bulunan “hosts.j2” dosyanında yer alan host bilgilerini çalıştığı tüm makinalarda “/etc/hosts” dizini altına atmaktadır. Akabinde bu dosyanın hakları ve erişim yetkileri belirlenir. hosts: # /etc/hosts yapilandirmasini belirtmektedir. conf: source: hosts.j2 destination: /etc/hosts owner: root group: root mode: 0644 - “grub” fonksiyonunda sunucularda grub parolası belirlenir. “conf” alt fonksiyonu ile kullanıcı/parola bilgileri girilir ve bu dosyanın hakları ve erişim yetkileri belirlenir. “conf2” alt fonksiyonu ile ise girdiler belirlenir ve bu dosyanın hakları ve erişim yetkileri belirlenir. “confile” ile dosya dizini belirtilir. “grubuser” ile kullanıcı bilgisi, “grubpass” ile parola bilgisi girilir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 78 /107 grub: # grub yapilandirmasini belirtmektedir. conf: source: grub_01_users.j2 destination: /etc/grub.d/01_users owner: root group: root mode: 755 conf2: source: grub_10_linux.j2 destination: /etc/grub.d/10_linux owner: root group: root mode: 755 confile: "/boot/grub/grub.cfg" grubuser: ahtagrub grubpass: grub.pbkdf2.sha512.10000.2A82B914C527C90A5018614B88F1604955C46131AEF358D1CB8 1E604793F5DD973DC3B796A2AF691AECC835928F76774835920D11B7FBEB07F050FAAF231B75 4.9433A4A373F5FB7D5FC05E25E14CAC0FEAD7FDE2019BE0E5E5D3B7D98A06FA3DB018D3EC7A 0557B1D7BCDB3AD091B8C44E121B057931E72A0A1592A7392214DF - “audit” fonksiyonunda sunucularda audit yapılandırmasının yapılamasını sağlamaktadır. “conf” alt fonksiyonu ile “/etc/audit/auditd.conf” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda audit servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “rules” alt fonksiyonunda “/etc/audit/audit.rules” dosyasının hakları ve erişim yetkileri belirlenir. Bu satırlardan sonra gelen satırlarda, audit yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/audit/auditd.conf” dosyasına bu değişiklikler yansıtılacaktır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 79 /107 audit: # audit yapilandirmasini belirtmektedir. conf: source: auditd.conf.j2 destination: /etc/audit/auditd.conf owner: root group: root mode: 0644 service: name: auditd state: started enabled: yes rules: source: audit.rules.j2 destination: /etc/audit/audit.rules owner: root group: root mode: 0644 name: "ahtapotops" name_format: "user" log_file: /var/log/audit/audit.log log_format: RAW log_group: "root" max_log_file: 10 max_log_file_action: ROTATE num_logs: 5 priority_boost: 4 flush: INCREMENTAL freq: 20 disp_qos: lossy dispatcher: /sbin/audispd space_left: 2000 space_left_action: SYSLOG action_mail_acct: "root" admin_space_left: 1000 admin_space_left_action: SUSPEND Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 80 /107 disk_full_action: SUSPEND disk_error_action: SUSPEND tcp_listen_queue: 5 tcp_max_per_addr: 1 tcp_client_ports: 1024-65535 tcp_client_max_idle: 0 enable_krb5: "no" krb5_principal: auditd krb5_key_file: /etc/audit/audit.key - “sysctl” fonksiyonunda sunucular üzerinde sysctl yapılandırması yapılmaktadır. “conf” alt fonksiyonu ile “/etc/sysctl.conf” dosyasına “/etc/ansible/roles/base/templates/” altında bulunan “sysctl.conf.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. Bu satırlardan sonra gelen satırlarda, sysctl yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/sysctl.conf” dosyasına bu değişiklikler yansıtılacaktır. sysctl: # sysctl yapilandirmasini belirtmektedir. conf: source: sysctl.conf.j2 destination: /etc/sysctl.conf owner: root group: root mode: 0644 icmp_ignore_bougs_error_responses: 1 icmp_echo_ignore_broadcasts: 1 - “rsyslog” fonksiyonunda sunucularda rsyslog yapılandırmasının yapılamasını sağlamaktadır. “conf” alt fonksiyonu ile “/etc/rsyslog.conf” dosyasına “/etc/ansible/roles/base/templates/” altında bulunan “rsyslog.conf.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. “service” alt fonksiyonunda rsyslog servisinin değişikliklerden sonra yeniden başlatılması sağlanır. Bu satırlardan sonra gelen satırlarda, rsyslog yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/rsyslog.conf” dosyasına bu değişiklikler yansıtılacaktır. “Server1” ve “Server2” değişkenlerine rsyslog sunucuların adı ve ya ip adresi yazılmalıdır. İkinci Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 81 /107 rsyslog sunucusu bulunmadığı durumlarda “Server2” satırı başına “#” konularak kullanım dışı haline getirilmelidir. rsyslog: # rsyslog yapilandirmasini belirtmektedir. conf: source: rsyslog.conf.j2 destination: /etc/rsyslog.conf owner: root group: root mode: 0644 service: name: rsyslog state: started enabled: yes ConnectionType: tcp Server1: rsyslog01.gdys.local #Server2: rsyslog02.gdys.local Port: 514 ActionQueueMaxDiskSpace: 1g ActionQueueSaveOnShutdown: on ActionQueueType: LinkedList ActionResumeRetryCount: -1 WorkDirectory: "/var/spool/rsyslog" IncludeConfig: "/etc/rsyslog.d/*" 5.2 Firewall Bu rol Ahtapot projesi kapsamındaki Firewall rolünü üstlenecek sunucularda ayarlamaların yapıldığı roldür. Bu rolün görevleri: - Firewall sunucusu üzerinde bulunması gereken paketlerin kurulum ve denetimleri: - iptables,iptables-persistent,rsync,keepalived,iptraf,ifenslave Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 82 /107 - Firewall sunucusu yapılması gereken genel işlemler: - Limitli Kullanıcı Konsol yapılandırması - Kuralların barındığı git deposunun tanımlanması - modprobe yapılandırılması - sysctl yapılandırılması - Güvenlik duvarı sıkılaştırmaları Bu roldeki değişkenler “/etc/ansible/roles/firewall/vars/main.yml” dosyasında belirtilmiştir. “main.yml” dosyasının içeriği ve değişken bilgileri aşağıdaki gibidir; - “lkk” fonksiyonunda güvenlik duvarında sadece gözlemleme işlemi yapabilecek limitli kullanıcı konsolunun yapılandırması yapılmaktadır. “gid” ve “uid” satırlarında belirtilen tekil kimlik bilgisine sahip kullanıcının erişim yapmasını sağlar. lkk: # Limitli Kullanıcı Konsolu icin grup ve kullanici bilgileri belirtilmektedir. group: name: lkk gid: 1010 state: present user: name: lkk uid: 1010 group: lkk shell: "/bin/bash" state: present password: "$6$Q6I6.lT/ $iGAJmNHkxMQy2qZAfJ9clPVFFbotTL8LUdkoQHenFqhZPNglPD.Ezr1AsuSGIUV48FeTIUe1VJj 8dF7.vkmwv1" commands: /usr/sbin/iptraf conf: source: bashrc.j2 destination: /home/lkk/.bashrc owner: lkk group: lkk Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 83 /107 mode: 0644 - “packages” fonksiyonunda sistemler üzerine kurulacak paketler belirtilmektedir. “name” satırında hangi paketlerin kurulacağı belirlenir. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. “force” satırı ile kurulumun yapılması gerektiği durumlarda, her koşulda kurulumu tamamlamaya zorlar. “packages-latest” fonksiyonunda “name” satırında yazan paket isimlerinin her zaman son versiyonlarının sistemde olup olmadığı kontrol edilir. Ve olmaması durumunda güncellenir. packages: # Firewall playbooku ile sisteme kurulacak paketleri belirtmektedir. name: iptables,iptables-persistent,rsync,keepalived,iptraf,ifenslave updatecache: yes state: present force: yes packages-latest: # Firewall playbooku ile sisteme kurulacak paketleri belirtmektedir. name: ahtapot-lkk updatecache: yes state: latest force: yes - “service” fonksiyonunda ipv4 ve ipv6 için sırasıyla /etc/iptables/rules.v4 ve /etc/iptables/rules.v6 kuralları yapılandırılır. service: v4conf: /etc/iptables/rules.v4 v6conf: /etc/iptables/rules.v6 - “deploy” fonksiyonunda yerel GitLab sunucunda bulunan gdys deposu sunucu üzerine alınarak, betiklerin çalıştırılması sağlanır. Farklı ssh portu kullanıldığı durumlarda “Port” satırına bu bilgi yazılmalıdır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 84 /107 deploy: # Guvenlik duvari uzerine konumlandirilacak Yerel GitLab dizinleri belirtilmektedir. repo: path: /etc/fw/gdys owner: ahtapotops group: ahtapotops mode: 750 state: directory recurse: yes filepath: /etc/fw/gdys/files file: options: --force recursive: yes port: ssh_port - “modprobe” fonksiyonunda “source” satırında belirtilen ve “/etc/ansible/roles/firewall/templates” altında bulunan “modules.j2” dosyanında yer alan bilgiler çalıştığı tüm makinalarda “/etc/modules.conf” dizini altına atmaktadır. Akabinde bu dosyanın hakları ve erişim yetkileri belirlenir. modprobe: conf: source: modules.j2 destination: /etc/modules.conf owner: root group: root mode: 0644 - “sysctl” fonksiyonunda “source” satırında belirtilen ve “/etc/ansible/roles/firewall/templates” altında bulunan “sysctl.conf.j2” dosyanında yer alan bilgiler çalıştığı tüm makinalarda “/etc/sysctl.conf” dizini altına atmaktadır. Akabinde bu dosyanın hakları ve erişim yetkileri belirlenir. Diğer satırlarda ise, güvenlik duvarları için sıkılaştırma işlemleri yapılmaktadır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 85 /107 sysctl: # Guvenlik duvari isletim sistemi bazinda hardening parametreleri belirtilmektedir. conf: source: sysctl.conf.j2 destination: /etc/sysctl.conf owner: root group: root mode: 0644 ip_conntrack_max: 65536 nf_conntrack_max: 65536 nf_conntrack_tcp_timeout_established: 600 ip_conntrack_tcp_timeout_established: 600 nf_conntrack_tcp_timeout_time_wait: 90 ip_conntrack_tcp_timeout_time_wait: 90 ip_local_port_range_start: 24576 ip_local_port_range_end: 65534 icmp_ignore_bougs_error_responses: 1 icmp_echo_ignore_broadcasts: 1 log_martians: 1 tcp_ecn: 1 tcp_syncookies: 1 tcp_abort_on_overflow: 1 tcp_tw_recycle: 0 tcp_tw_reuse: 1 tcp_window_scaling: 1 tcp_timestamps: 0 tcp_sack: 1 tcp_dsack: 1 tcp_fack: 1 tcp_keepalive_time: 1200 tcp_fin_timeout: 20 tcp_retries0: 3 tcp_syn_retries: 3 tcp_synack_retries: 2 tcp_max_syn_backlog: 4096 rp_filter: 0 Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 86 /107 accept_source_route: 1 accept_source_route_ipv6: 0 bootp_relay: 1 ip_forward: 1 secure_redirects: 1 send_redirects: 1 proxy_arp: 0 6. Firewall Ahtapot projesi kapsamında güvenlik duvarı görevini üstlenecek sunucuyu oluşturan playbook’dur. “/etc/ansible/playbooks/” dizini altında bulunan “firewall.yml” dosyasına bakıldığında, “hosts” satırında Ansible’a ait “/etc/ansible/” altında bulunan “hosts” dosyasında “[firewall]” satırı altına yazılmış tüm sunucularda bu playbookun oynatılacağı belirtilir. “remote_user” satırında, sistemler oynatılacak playbookun hangi kullanıcı ile oynatılacağı belirlenir. “sudo” satırı ile, çalışacak komutların sudo yetkisi ile çalışması belirlenir. “roles” satırı altında bulunan satırlarda ise bu playbook çalıştığında “base” ve “firewall” rollerinin çalışacağı belirtilmektedir. Ayrıca bu playbook ile Ansible rolünde çalışan sunuculara ait “ansible” rolü de çalıştırılır. $ more /etc/ansible/playbooks/firewall.yml # Calistirildiginda Guvenlik Duvari Kurulumu Yapilir - hosts: ansible remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: ansible } - hosts: firewall remote_user: ahtapotops sudo: yes roles: - { role: base } Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 87 /107 - { role: firewall } 6.1 Base Bu rol Ahtapot projesi kapsamındaki tüm sunucularda çalışan temel ayarlamaların yapıldığı roldür. Bu rolün görevleri: - Tüm sistemlerde olması gereken paketlerin kurulum ve denetimleri: - auditd,sysstat,ntp,bash,rsyslog,sudo Tüm sistemlerde bulunması gereken servislerin yapılandırılması: - ntp, auditd, ssh Tüm sistemlerde yapılması gereken genel işlemler: - sudo yapılandırma - sysctl yapılandırma - /etc/hosts yapılandırma - grub yapılandırma - rsyslog yapılandırma - USB kullanım kapatma / açma Bu roldeki değişkenler “/etc/ansible/roles/base/vars/main.yml” dosyasında belirtilmiştir. “main.yml” dosyasının içeriği ve değişken bilgileri aşağıdaki gibidir; - “group” fonksiyonunda sistemler üzerinde kullanılan kullanıcının ait olduğu grup bilgisi belirtilmektedir. “presentgroup” sistemde var olması gereken gruptur. İlgili sistemde bulunmaması durumda yeniden oluşturur. “revokedgroup” sistemden grubun silinmesini sağlar. Silinecek bir grup yok ise boş bırakılır. group: # Belirtilen grubun sunucu uzerinde var olup olmadigini kontrol eder. # Olmamasi durumda olusturur. presentgroup: ahtapotops # Belirtilen grubun sunucudan silinmesini saglar. revokedgroup: Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 88 /107 - “user” fonksiyonunda sistemler üzerinde kullanılan kullanıcının bilgisi belirtilmektedir. “presentuser” sistemde var olması gereken kullanıcıdır. İlgili sistemde bulunmaması durumda yeniden oluşturur. “revokeduser” sistemden kullanıcının silinmesini sağlar. Silinecek bir kullanıcı yok ise boş bırakılır. user: # Belirtilen kullanicinin sunucu uzerinde var olup olmadigini kontrol eder. # Olmamasi durumda olusturur. presentuser: ahtapotops shell: /bin/bash # Belirtilen kullanicinin sunucudan silinmesini saglar. revokeduser: - “packages” fonksiyonunda sistemler üzerine kurulacak paketler belirtilmektedir. “name” satırında hangi paketlerin kurulacağı belirlenir. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. “force” satırı ile kurulumun yapılması gerektiği durumlarda, her koşulda kurulumu tamamlamaya zorlar. packages: # Sisteme kurulacak paketleri belirler. name: auditd,sysstat,ntp,bash,rsyslog,sudo updatecache: yes state: present force: yes - “repository” fonksiyonunda sistemlere eklenecek depo bilgileri verilmektedir. “repo” satrında eklenecek deponun adresi belirtilmektedir. “url” satırında ihtiyaç olması durumunda depo anahtarını belirtmek için kullanılılmaktadır. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 89 /107 repository: # Ahtapot projesi kapsaminda olusturulan paketlerin bulundugu repo adresidir. repo: 'deb http://193.140.98.199/pardus-yenikusak pardus-ahtapot main' # Pardus tarafından herhangi bir rep key ulasmadigindan dolayi kapatildi. # url: 'http://ip_adres/packages/amd64/bilgio.asc' updatecache: yes state: present - “sudo” fonksiyonunda sudo yapılandırması yapılmaktadır. “source” satırında belirtilen ve “/etc/ansible/roles/base/templates” altında bulunan “sudoers.j2” dosyasında bulunan ayarları sunucular üzerinde gerçekleştirir. “destination” satırında ayarların yapılacağı sudoers dosyası belirlenir. “owner”, “group” ve “mode” ile bu dosyanın sahibi olan kullanıcı, grup ve hakları belirlenir. “iologdir” satırı ile sudo loglarının hangi dizine yazılacağı belirtilir. “group” ile hangi grup için bu ayarların yapılacağı belirtilir. “newgroup” satırı, grupta bir değişlik olacağı durumlarda buraya yazılarak, değişikliğin sağlanmasına yaramaktadır. Grup değişmeyeceği sürece güncel grup adı ile kalmalıdır. “commands” satırı ile ilgili grupa hangi komutlar için yetki verileceği belirtilmektedir. “firewall” alt fonksiyonu ile Limitlik Kullanıcı Konsolunda kullanılacak kullanıcıya gerekli yetki verilir. sudo: # Sudo yapilandirmasini belirtmektedir. conf: source: sudoers.j2 destination: /etc/sudoers owner: root group: root mode: 440 iologdir: "/var/log/sudo-io/%{hostname}/%{user}" group: ahtapotops newgroup: ahtapotops commands: ALL Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 90 /107 firewall: user: lkk commands: /usr/sbin/iptraf - “usb-storage” fonksiyonunda sistemlerdeki usb kapılarının açılıp/kapanması sağlanır. “/etc/ansible/roles/base/templates” dizini altında bulunan “blacklist.conf.j2” dosyasındaki izin verilmeyecek durumları modprobe’a yazar. usb-storage: # usb yapilandirmasini belirtmektedir. conf: source: blacklist.conf.j2 destination: /etc/modprobe.d/blacklist.conf owner: root group: root mode: 644 - “logger” fonksiyonu ile sistemlerin ayakta ve log gönderebilir olduğunun kontrolünün yapılacağı script “/etc/ansible/roles/base/templates” dizini altında bulunan “logger.sh.j2” dosyasından kopyalanarak cron’a eklenmektedir. logger: # heartbeat yapilandirmasini belirtmektedir. cron: source: logger.sh.j2 destination: /etc/cron.d/logger.sh owner: root group: root mode: 755 min: "00" hour: "*" facility: local5 severity: info tag: "heartbeat" message: "Heartbeat from $(hostname) at $(date) !" Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 91 /107 - “ssh” fonksiyonunda sistemlerde ssh tanımlamaları, yapılandırma ve sıkılaştırma işlemleri yapılır. “conf” alt fonksiyonu ile “/etc/ssh/sshd_config” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda ssh servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “TrustedUserCAKeys” alt fonksiyonu ile sisteme eklenen CA imzalı açık anahtar bilgisi, bu anahtarın hakları ve erişim yetkileri belirlenir. “LocalBanner” ve “RemoteBanner” alt fonksiyonları ile sunuculara bağlantı kurulduğunda ekrana gelecek uyarı belirtilir. Bu satırlardan sonra gelen satırlarda, ssh yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/ssh/sshd_config” dosyasına bu değişiklikler yansıtılacaktır. Sistemlerde kullanılacak ssh portunu varsıyan “22” değeri dışında başka bir değere atamak istenir ise, “Port” satırındaki 22 değeri olması istenen değer ile değiştirilmelidir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 92 /107 ssh: # ssh yapilandirmasini belirtmektedir. conf: source: sshd_config.j2 destination: /etc/ssh/sshd_config owner: root group: root mode: 0644 service: name: ssh state: started enabled: yes TrustedUserCAKeys: source: ahtapot_ca.pub.j2 destination: /etc/ssh/ahtapot_ca.pub owner: root group: root mode: 0644 LocalBanner: source: issue.j2 destination: /etc/issue owner: root group: root mode: 0644 RemoteBanner: source: issue.net.j2 destination: /etc/issue.net owner: root group: root mode: 0644 Port: 22 Protocol: 2 ListenAddressv4: 0.0.0.0 ListenAddressv6: "::" UsePrivilegeSeparation: "yes" KeyRegenerationInterval: 3600 Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 93 /107 ServerKeyBits: 1024 SyslogFacility: AUTH LogLevel: INFO LoginGraceTime: 90 PermitRootLogin: "no" StrictModes: "yes" RSAAuthentication: "yes" PubkeyAuthentication: "yes" IgnoreRhosts: "yes" RhostsRSAAuthentication: "no" HostbasedAuthentication: "no" IgnoreUserKnownHosts: "yes" PermitEmptyPasswords: "no" ChallengeResponseAuthentication: "no" PasswordAuthentication: "no" KerberosAuthentication: "no" KerberosOrLocalPasswd: "yes" KerberosTicketCleanup: "yes" GSSAPIAuthentication: "no" GSSAPICleanupCredentials: "yes" X11Forwarding: "no" X11DisplayOffset: 10 PrintMotd: "yes" PrintLastLog: "yes" TCPKeepAlive: "yes" UsePAM: "no" UseLogin: "no" - “ntp” fonksiyonunda sistemlerdeki ntp yapılandırması yapılmaktadır. “conf” alt fonksiyonu ile “/etc/ntp.conf” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda ntp servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “FirstNtpServerHost” satırına ilk NTP sunucusunun adı ve ya ip adresi girilir. “SecondNtpServerHost” satırına ikinci NTP sunucusunun adı ve ya ip adresi girilir. İkinci NTP sunucusu olmaması durumunda bu satırın başına “#” işareti konularak kullanım dışı kalması sağlanır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 94 /107 ntp: # ntp yapilandirmasini belirtmektedir. conf: source: ntp.conf.j2 destination: /etc/ntp.conf owner: root group: root mode: 0644 service: name: ntp state: started enabled: yes # ntp server bilgileri girilmektedir. FirstNtpServerHost: "0.debian.pool.ntp.org" SecondNtpServerHost: "1.debian.pool.ntp.org" - “hosts” fonksiyonunda “source” satırında belirtilen ve “/etc/ansible/roles/base/templates” altında bulunan “hosts.j2” dosyanında yer alan host bilgilerini çalıştığı tüm makinalarda “/etc/hosts” dizini altına atmaktadır. Akabinde bu dosyanın hakları ve erişim yetkileri belirlenir. hosts: # /etc/hosts yapilandirmasini belirtmektedir. conf: source: hosts.j2 destination: /etc/hosts owner: root group: root mode: 0644 - “grub” fonksiyonunda sunucularda grub parolası belirlenir. “conf” alt fonksiyonu ile kullanıcı/parola bilgileri girilir ve bu dosyanın hakları ve erişim yetkileri belirlenir. “conf2” alt fonksiyonu ile ise girdiler belirlenir ve bu dosyanın hakları ve erişim yetkileri belirlenir. “confile” ile dosya dizini belirtilir. “grubuser” ile kullanıcı bilgisi, “grubpass” ile parola bilgisi girilir. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 95 /107 grub: # grub yapilandirmasini belirtmektedir. conf: source: grub_01_users.j2 destination: /etc/grub.d/01_users owner: root group: root mode: 755 conf2: source: grub_10_linux.j2 destination: /etc/grub.d/10_linux owner: root group: root mode: 755 confile: "/boot/grub/grub.cfg" grubuser: ahtagrub grubpass: grub.pbkdf2.sha512.10000.2A82B914C527C90A5018614B88F1604955C46131AEF358D1CB8 1E604793F5DD973DC3B796A2AF691AECC835928F76774835920D11B7FBEB07F050FAAF231B75 4.9433A4A373F5FB7D5FC05E25E14CAC0FEAD7FDE2019BE0E5E5D3B7D98A06FA3DB018D3EC7A 0557B1D7BCDB3AD091B8C44E121B057931E72A0A1592A7392214DF - “audit” fonksiyonunda sunucularda audit yapılandırmasının yapılamasını sağlamaktadır. “conf” alt fonksiyonu ile “/etc/audit/auditd.conf” dosyasının hakları ve erişim yetkileri belirlenir. “service” alt fonksiyonunda audit servisinin değişikliklerden sonra yeniden başlatılması sağlanır. “rules” alt fonksiyonunda “/etc/audit/audit.rules” dosyasının hakları ve erişim yetkileri belirlenir. Bu satırlardan sonra gelen satırlarda, audit yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/audit/auditd.conf” dosyasına bu değişiklikler yansıtılacaktır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 96 /107 audit: # audit yapilandirmasini belirtmektedir. conf: source: auditd.conf.j2 destination: /etc/audit/auditd.conf owner: root group: root mode: 0644 service: name: auditd state: started enabled: yes rules: source: audit.rules.j2 destination: /etc/audit/audit.rules owner: root group: root mode: 0644 name: "ahtapotops" name_format: "user" log_file: /var/log/audit/audit.log log_format: RAW log_group: "root" max_log_file: 10 max_log_file_action: ROTATE num_logs: 5 priority_boost: 4 flush: INCREMENTAL freq: 20 disp_qos: lossy dispatcher: /sbin/audispd space_left: 2000 space_left_action: SYSLOG action_mail_acct: "root" admin_space_left: 1000 admin_space_left_action: SUSPEND Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 97 /107 disk_full_action: SUSPEND disk_error_action: SUSPEND tcp_listen_queue: 5 tcp_max_per_addr: 1 tcp_client_ports: 1024-65535 tcp_client_max_idle: 0 enable_krb5: "no" krb5_principal: auditd krb5_key_file: /etc/audit/audit.key - “sysctl” fonksiyonunda sunucular üzerinde sysctl yapılandırması yapılmaktadır. “conf” alt fonksiyonu ile “/etc/sysctl.conf” dosyasına “/etc/ansible/roles/base/templates/” altında bulunan “sysctl.conf.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. Bu satırlardan sonra gelen satırlarda, sysctl yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/sysctl.conf” dosyasına bu değişiklikler yansıtılacaktır. sysctl: # sysctl yapilandirmasini belirtmektedir. conf: source: sysctl.conf.j2 destination: /etc/sysctl.conf owner: root group: root mode: 0644 icmp_ignore_bougs_error_responses: 1 icmp_echo_ignore_broadcasts: 1 - “rsyslog” fonksiyonunda sunucularda rsyslog yapılandırmasının yapılamasını sağlamaktadır. “conf” alt fonksiyonu ile “/etc/rsyslog.conf” dosyasına “/etc/ansible/roles/base/templates/” altında bulunan “rsyslog.conf.j2” dosyası kopyalanır ve hakları, erişim yetkileri belirlenir. “service” alt fonksiyonunda rsyslog servisinin değişikliklerden sonra yeniden başlatılması sağlanır. Bu satırlardan sonra gelen satırlarda, rsyslog yapılandırmasına ait bilgiler bulunup, değişiklik yapıldığı takdirde “/etc/rsyslog.conf” dosyasına bu değişiklikler yansıtılacaktır. “Server1” ve “Server2” değişkenlerine rsyslog sunucuların adı ve ya ip adresi yazılmalıdır. İkinci Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 98 /107 rsyslog sunucusu bulunmadığı durumlarda “Server2” satırı başına “#” konularak kullanım dışı haline getirilmelidir. rsyslog: # rsyslog yapilandirmasini belirtmektedir. conf: source: rsyslog.conf.j2 destination: /etc/rsyslog.conf owner: root group: root mode: 0644 service: name: rsyslog state: started enabled: yes ConnectionType: tcp Server1: rsyslog01.gdys.local #Server2: rsyslog02.gdys.local Port: 514 ActionQueueMaxDiskSpace: 1g ActionQueueSaveOnShutdown: on ActionQueueType: LinkedList ActionResumeRetryCount: -1 WorkDirectory: "/var/spool/rsyslog" IncludeConfig: "/etc/rsyslog.d/*" 6.2 Firewall Bu rol Ahtapot projesi kapsamındaki Firewall rolünü üstlenecek sunucularda ayarlamaların yapıldığı roldür. Bu rolün görevleri: - Firewall sunucusu üzerinde bulunması gereken paketlerin kurulum ve denetimleri: - iptables,iptables-persistent,rsync,keepalived,iptraf,ifenslave Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 99 /107 - Firewall sunucusu yapılması gereken genel işlemler: - Limitli Kullanıcı Konsol yapılandırması - Kuralların barındığı git deposunun tanımlanması - modprobe yapılandırılması - sysctl yapılandırılması - Güvenlik duvarı sıkılaştırmaları Bu roldeki değişkenler “/etc/ansible/roles/firewall/vars/main.yml” dosyasında belirtilmiştir. “main.yml” dosyasının içeriği ve değişken bilgileri aşağıdaki gibidir; - “lkk” fonksiyonunda güvenlik duvarında sadece gözlemleme işlemi yapabilecek limitli kullanıcı konsolunun yapılandırması yapılmaktadır. “gid” ve “uid” satırlarında belirtilen tekil kimlik bilgisine sahip kullanıcının erişim yapmasını sağlar. lkk: # Limitli Kullanıcı Konsolu icin grup ve kullanici bilgileri belirtilmektedir. group: name: lkk gid: 1010 state: present user: name: lkk uid: 1010 group: lkk shell: "/bin/bash" state: present password: "$6$Q6I6.lT/ $iGAJmNHkxMQy2qZAfJ9clPVFFbotTL8LUdkoQHenFqhZPNglPD.Ezr1AsuSGIUV48FeTIUe1VJj 8dF7.vkmwv1" commands: /usr/sbin/iptraf conf: source: bashrc.j2 destination: /home/lkk/.bashrc owner: lkk group: lkk Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 100 /107 mode: 0644 - “packages” fonksiyonunda sistemler üzerine kurulacak paketler belirtilmektedir. “name” satırında hangi paketlerin kurulacağı belirlenir. “updatecache” seçeneği ile “apt-get update” komutu çalıştırılarak deponun güncel hali çekilir. “state” satırı ile paketlerin durumu ile ilgili bilgi verilir. Üç farklı değişken kullanılabilir; “present” paket yüklü ise herhangi değişiklik yapmaz. “absent” paketi kaldırır. “latest” paketin güncel versiyonu var ise günceller. “force” satırı ile kurulumun yapılması gerektiği durumlarda, her koşulda kurulumu tamamlamaya zorlar. “packages-latest” fonksiyonunda “name” satırında yazan paket isimlerinin her zaman son versiyonlarının sistemde olup olmadığı kontrol edilir. Ve olmaması durumunda güncellenir. packages: # Firewall playbooku ile sisteme kurulacak paketleri belirtmektedir. name: iptables,iptables-persistent,rsync,keepalived,iptraf,ifenslave updatecache: yes state: present force: yes packages-latest: # Firewall playbooku ile sisteme kurulacak paketleri belirtmektedir. name: ahtapot-lkk updatecache: yes state: latest force: yes - “service” fonksiyonunda ipv4 ve ipv6 için sırasıyla /etc/iptables/rules.v4 ve /etc/iptables/rules.v6 kuralları yapılandırılır. service: v4conf: /etc/iptables/rules.v4 v6conf: /etc/iptables/rules.v6 - “deploy” fonksiyonunda yerel GitLab sunucunda bulunan gdys deposu sunucu üzerine alınarak, betiklerin çalıştırılması sağlanır. Farklı ssh portu kullanıldığı durumlarda “Port” satırına bu bilgi yazılmalıdır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 101 /107 deploy: # Guvenlik duvari uzerine konumlandirilacak Yerel GitLab dizinleri belirtilmektedir. repo: path: /etc/fw/gdys owner: ahtapotops group: ahtapotops mode: 750 state: directory recurse: yes filepath: /etc/fw/gdys/files file: options: --force recursive: yes port: ssh_port - “modprobe” fonksiyonunda “source” satırında belirtilen ve “/etc/ansible/roles/firewall/templates” altında bulunan “modules.j2” dosyanında yer alan bilgiler çalıştığı tüm makinalarda “/etc/modules.conf” dizini altına atmaktadır. Akabinde bu dosyanın hakları ve erişim yetkileri belirlenir. modprobe: conf: source: modules.j2 destination: /etc/modules.conf owner: root group: root mode: 0644 - “sysctl” fonksiyonunda “source” satırında belirtilen ve “/etc/ansible/roles/firewall/templates” altında bulunan “sysctl.conf.j2” dosyanında yer alan bilgiler çalıştığı tüm makinalarda “/etc/sysctl.conf” dizini altına atmaktadır. Akabinde bu dosyanın hakları ve erişim yetkileri belirlenir. Diğer satırlarda ise, güvenlik duvarları için sıkılaştırma işlemleri yapılmaktadır. Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 102 /107 sysctl: # Guvenlik duvari isletim sistemi bazinda hardening parametreleri belirtilmektedir. conf: source: sysctl.conf.j2 destination: /etc/sysctl.conf owner: root group: root mode: 0644 ip_conntrack_max: 65536 nf_conntrack_max: 65536 nf_conntrack_tcp_timeout_established: 600 ip_conntrack_tcp_timeout_established: 600 nf_conntrack_tcp_timeout_time_wait: 90 ip_conntrack_tcp_timeout_time_wait: 90 ip_local_port_range_start: 24576 ip_local_port_range_end: 65534 icmp_ignore_bougs_error_responses: 1 icmp_echo_ignore_broadcasts: 1 log_martians: 1 tcp_ecn: 1 tcp_syncookies: 1 tcp_abort_on_overflow: 1 tcp_tw_recycle: 0 tcp_tw_reuse: 1 tcp_window_scaling: 1 tcp_timestamps: 0 tcp_sack: 1 tcp_dsack: 1 tcp_fack: 1 tcp_keepalive_time: 1200 tcp_fin_timeout: 20 tcp_retries0: 3 tcp_syn_retries: 3 tcp_synack_retries: 2 tcp_max_syn_backlog: 4096 rp_filter: 0 Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 103 /107 accept_source_route: 1 accept_source_route_ipv6: 0 bootp_relay: 1 ip_forward: 1 secure_redirects: 1 send_redirects: 1 proxy_arp: 0 7. Maintenance Ahtapot projesi kapsamında Ansible tarafından yönetilen tüm sunucularda bakım işlemlerinin yapıldığı playbook’dur. “/etc/ansible/playbooks/” dizini altında bulunan “maintenance.yml” dosyasına bakıldığında tüm sunucularda bu playbookun oynatılacağı belirtilir. “remote_user” satırında, sistemler oynatılacak playbookun hangi kullanıcı ile oynatılacağı belirlenir. “sudo” satırı ile, çalışacak komutların sudo yetkisi ile çalışması belirlenir. “roles” satırı altında bulunan satırlarda ise bu playbook çalıştığında “maintenance” rolünün çalışacağı belirtilmektedir. $ more /etc/ansible/playbooks/maintenance.yml # Bakim scripti - hosts: all remote_user: ahtapotops sudo: yes roles: - { role: maintenance } 7.1 Maintenance Bu rol Ahtapot projesi kapsamındaki tüm sunucularda bakım işlemlerinin yapıldığı roldür. Bu rolün görevleri: - Tüm sistemlerde loglar ile ilgili yapılması gereken bakım işlemleri Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 104 /107 Bu roldeki değişkenler “/etc/ansible/roles/maintenance/vars/main.yml” dosyasında belirtilmiştir. “main.yml” dosyasının içeriği ve değişken bilgileri aşağıdaki gibidir; - “script” fonksiyonunda “source” satırında belirtilen ve “/etc/ansible/roles/maintenance/templates” altında bulunan “ahtapot-pyBekci.py.j2” dosyasının içeriği playbookuni çalıştığı tüm makinalarda “/var/opt/ahtapot-pkBekci.py” dosyasına kopyalanır. Akabinde bu dosyanın hakları ve erişim yetkileri belirlenir. script: source: ahtapot-pyBekci.py.j2 destination: /var/opt/ahtapot-pyBekci.py owner: ahtapotops group: ahtapotops mode: 660 - “maintainer” fonksiyonunda belirlenen süreden daha eski loglar “/var/log/bekciarchive” dizinine taşınır ve bu dizinin hakları ve erişim yetkileri belirlenir. maintainer: directory: path: /var/log/bekciarchive/ owner: ahtapotops group: ahtapotops mode: 700 state: directory recurse: yes 8. Deploy Ahtapot projesi kapsamında güvenlik duvarı yönetim sistemi ile girilen güvenlik duvarı kurallarının uç birimlerde oynatılmasını sağlayan playbook’dur. Bu playbook, işletim sistemi bazında crontabda berlitilen zaman aralıkları ile çalışarak sistemlere kural girişinin yapılmasını sağlar. “/etc/ansible/playbooks/” dizini altında bulunan “deploy.yml” dosyasına bakıldığında tüm sunucularda bu playbookun oynatılacağı belirtilir. “remote_user” satırında, sistemler Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 105 /107 oynatılacak playbookun hangi kullanıcı ile oynatılacağı belirlenir. “sudo” satırı ile, çalışacak komutların sudo yetkisi ile çalışması belirlenir. “roles” satırı altında bulunan satırlarda ise bu playbook çalıştığında “base” ve “firewall” rollerinin çalışacağı belirtilmektedir. Ayrıca bu playbook ile Ansible rolünde çalışan sunuculara ait “ansible” rolü de çalıştırılır. $ more /etc/ansible/playbooks/deploy.yml # Calistirildiginda ansible'i kontrol ederek firewall kurulumu yapar - hosts: ansible remote_user: ahtapotops sudo: yes roles: - { role: ansible } - hosts: firewall remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: firewall } 9. State Ahtapot projesi kapsamında Ansible tarafından yönetilen tüm makinaların durum kontrolünü yapan playbook’dur. Bu playbook, işletim sistemi bazında crontabda berlitilen zaman aralıkları ile çalışarak sistemlerin aynı durumda kalmasını sağlar. “/etc/ansible/playbooks/” dizini altında bulunan “state.yml” dosyasına bakıldığında tüm sunucularda bu playbookun oynatılacağı belirtilir. “remote_user” satırında, sistemler oynatılacak playbookun hangi kullanıcı ile oynatılacağı belirlenir. “sudo” satırı ile, çalışacak komutların sudo yetkisi ile çalışması belirlenir. “roles” satırı altında bulunan satırlarda ise bu playbook çalıştığında oynayacak rolleri belirtilmektedir. $ more /etc/ansible/playbooks/state.yml # Sistem stabilitesini tutacak olan ansible dosyasi Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 106 /107 - hosts: ansible remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: ansible } - hosts: gitlab remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: gitlab } - hosts: firewallbuilder remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: firewallbuilder } - hosts: rsyslog remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: rsyslog } - hosts: firewall remote_user: ahtapotops sudo: yes roles: - { role: base } - { role: firewall } Son Güncelleme : 29 Nisan 2016 Ahtapot | Playbook Dökümantasyonu v1.2 107 /107
Benzer belgeler
AHTAPOT | Firewall Builder Kurulumu
“SecondNtpServerHost” satırının başına “#” işareti konularak o satırın işlem dışı
kalması sağlanmalıdır. Sunucularda ssh portunun varsayılan değer dışında bir değere
atanması istendiği durumda, “ss...
AHTAPOT | Güvenlik Duvarı Hizmet Dışı Bırakma Saldırıları Önleme
Sisteminde hizmet dışı bırakma saldırılarını
önlemek amacı ile Ansible Playbook tarafından
düzenlenen Kernel Parametreleri anlatılıyor.
2011 sigorta acenteleri teknik personel eğitimi
Katılımcıların, Yönetmelik gereği eğitimin tamamına (13 saat) devamı zorunludur; iki günlük eğitim süresi boyunca, her bir oturum öncesinde
adayların imzaları alınacak, tek bir oturumda bile imzası...