• Sonuç bulunamadı

AHTAPOT Ansible Playbook Dökümantasyon u

N/A
N/A
Protected

Academic year: 2022

Share "AHTAPOT Ansible Playbook Dökümantasyon u"

Copied!
107
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

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

(2)

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

(3)

- 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.

(4)

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

(5)

- /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

(6)

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

(7)

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

(8)

mode: 644

(9)

- “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.

(10)

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"

(11)

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"

(12)

- “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

(13)

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

(14)

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.

(15)

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

(16)

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

(17)

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

(18)

- 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 “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:

# 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

(19)

bu dizinin hakları, erişim yetkileri belirtilmektedir. “keyfile” satırı ile GitLab’a erişecek kullanıcının anahtar bilgisi girilmektedir.

(20)

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

(21)

- “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.

(22)

$ 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

(23)

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.

(24)

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.

(25)

“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.

(26)

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.

(27)

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

(28)

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.

(29)

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.

(30)

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.

(31)

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

(32)

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

(33)

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

(34)

- 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 “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:

# GitLab playbooku ile kurulacak paketleri belirtmektedir.

name: git,gitlab-ce updatecache: yes

(35)

force: yes

(36)

- “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

(37)

- “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

(38)

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/git-

data/repositories/ahtapotops/mys.git/custom_hooks/post-receive destination2: /var/opt/gitlab/git-

data/repositories/ahtapotops/gdys.git/custom_hooks/post-receive destination3: /var/opt/gitlab/git-

data/repositories/ahtapotops/gkts.git/custom_hooks/post-receive owner: git

(39)

mode: 770 directory:

path1: /var/opt/gitlab/git-

data/repositories/ahtapotops/mys.git/custom_hooks/

path2: /var/opt/gitlab/git-

data/repositories/ahtapotops/gdys.git/custom_hooks/

path3: /var/opt/gitlab/git-

data/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

(40)

- 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;

(41)

- “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:

(42)

# 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

(43)

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:

(44)

# 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.

(45)

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

(46)

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.

(47)

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.

(48)

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.

(49)

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

(50)

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

Referanslar

Benzer Belgeler

Madde 101 - (1) Soruşturma evresinde şüphelinin tutuklanmasına Cumhuriyet savcısının istemi üzerine sulh ceza hâkimi tarafından, kovuşturma evresinde

1-) Garanti süresi, malın teslim tarihinden itibaren başlar ve 2 yıldır. 2-) Malın bütün parçaları dahil olmak üzere tamamı Firmamızın garanti kapsamındadır. 3-)

Bu dosya içinde makineler ile ilgili olarak makine ismi, makinenin IP adresi ve makine için kısaltma bulunmaktadır.. /etc/resolv.conf Dosyası DNS

BlackBerry PlayBook tabletiniz ile verilmiş olan şarj aksesuarlarını ya da Research In Motion tarafından onaylanmış diğer şarj aksesuarlarını yalnızca üzerlerindeki

Bu dosyalardan kaptan özenle korunması gereken gizli anahtar (Private Key), kaptan.pub dosyası ise her yere dağıtılabilen açık anahtar (Public Key) olarak

# Guvenlik duvari uzerine konumlandirilacak Yerel GitLab dizinleri.. ISO’dan kurulumu yapılmış her makinanın ilk planda ssh portları “22” olarak belirlendiğinden dolayı,

“**/etc/ansible/playbooks/**” dizini altında bulunan “**gitlab.yml**” dosyasına bakıldığında, “**hosts**” satırında Ansible’ a ait “**/etc/ansible/**”

İnsan fizyolojisi konusunun, hücre, kan, kas, dolaşım, solunum, boşaltım, sindirim, endokrin, sinir ve duyu sistemleri başlıkları altında incelenmesi bu