AHTAPOT Ansible Playbook Dökümantasyon u

Benzer belgeler
AHTAPOT Firewall Builder Kurulumu

AHTAPOT Ansible Kurulumu

AHTAPOT GitLab Kurulumu

Karaliste cekirdek modullerini iceren dosyadir. 9

AHTAPOT Kullanıcı ve Grup Değiştirme

AHTAPOT Merkezi Yönetim Sistemi ile Kurulum Yapılması

AHTAPOT GDYS Kurulum Yönergesi

AHTAPOT Güvenlik Duvarı Yönetim Sistemi Kullanımı

#Firewall Builder Kullanım Senaryoları... 9 Yönetici Arayüz Kullanımı Kullanıcı Arayüz Kullanımı... 65

AHTAPOT MERKEZİ YETKİ OTORİTESİ

AHTAPOT Merkezi Güvenlik Duvarı Yönetim Sistemi Kontrol Paneli

Cyberoam Single Sing On İle

Kets DocPlace LOGO Entegrasyonu

Aktif Dizin Logon/Logoff Script Ayarları Versiyon

Web Servis-Web Sitesi Bağlantısı

YAYGIN OLARAK KULLANILAN ADSL MODEMLER VE ROUTER AYARLARI

SSH ile Sistem Yönetimi

Nmap Sonuçlarının Yorumlanması

EKLER EK 12UY0106-5/A4-1:

PocketRest Kullanımı

Bilindik engelleme yöntemlerinin dışında olan, kurumsal web filitreleri nasıl aşılır?

Linux Temelli Zararlı Yazılımların Bulaşma Teknikleri, Engellenmesi ve Temizlenmesi

MIRACLE DATA WORKS KURULUM DOKÜMANI

HUAWEI Cihazlara Erişim Yöntemleri

FTP ve Güvenlik Duvarları

Bu bölüm V- Ray License Server lisans sunucusu uygulamasının kurulumundan

Bilgi ve Olay Yönetim Sistemi

1 STUNNEL NEDİR? 2 STUNNEL KURULUMU

SquidGuard Kurulumu. Öncelikle gerekli paket temin edilmelidir. adresinden temin edilebilir. Basitçe kurulumu ;

Bilgi ve Olay Yönetim Sistemi

MapCodeX MapLand Kullanım Kılavuzu

Ağ Üzerinde MATLAB kurulum rehberi (Sunucu makine)

Kets DocPlace Bilgi Bankası. 1. İstemcilerde sunucuya ulaşılamadı şeklinde bağlantı hatası alınıyor... 2

Exchange Server 2013 Kurulum Sonrası Yapılandırmalar

İşletme ve Devreye Alma Planı Yerel Okul Sunucusu Uygulama Yazılımları Prototipi TRscaler Technology Solutions

Temel Linux Eğitimi. İçindekiler

SparkleShare. Çağrı Emer. Ekim, 2011

TAPU VERİ SAYISALLAŞTIRMA YAZILIMI KURULUM DÖKÜMANI. Tapu Kadastro Genel Müdürlüğü-Bilgi Teknolojileri Daire Başkanlığı Page 1

Yerel Okul Sunucusu Uygulama Yazılımları Prototipi

Hızlı Başlangıç Kılavuzu

ELEKTRONİK İMZALI BAŞVURU ARAYÜZÜ TALİMATI

FortiGate Active Directory Uygulaması. v4.00-build /08

Uzaktan Kurulum Kılavuzu

Ubuntu Terminal Server Ve Uzak Masaüstü Sunucusu

DESTEK DOKÜMANI. Ürün : Tiger Enterprise/ Tiger Plus/ Go Plus/Go Bölüm : Kurulum İşlemleri

Nagios Network Monitör Uygulaması -2

ArcSight Logger Connector ArcSight Logger Connector Yapılandırması

1. Zamanbaz Hakkında Zamanbaz Kurulumu Zamanbaz Sistem Gereksinimleri Zamanbaz Kurulumu... 3

LIBPXY SERVİSİNİN KULLANIMI

MODSECURITY DENETİM KAYITLARINI ANLAMAK. Gökhan Alkan,

BIND ile DNS Sunucu Kurulumu

WINDOWS VE PARDUS İÇİN İMZAGER KURULUM TALİMATI

NicProxy Registrar AWBS Modül Kurulumu Versiyon 1.0

Sun Solaris Jumpstart Sistemi

TachoMobile Server Uygulaması Kullanım Kılavuzu

Bay.t Destek. İnternetten Uzak Erişim. Kullanım Klavuzu

.: Linux Kullanıcıları Derneği. III. Linux ve Özgür Yazılım Şenliği Mayıs Milli Kütüphane Ankara :.

Paralel Hesaplama - Beowulf Cluster

Yerel Disk Üzerinde CentOS 7.0 Kurulumu 17 Red Hat Enterprise Linux 6 Kurulumu 32. Sisteme Giriş ve Çıkış 49 İÇİNDEKİLER 1 LINUX HAKKINDA 1

Open-VPN Kurulumu ve SSH Bağlantı Ayarları (Windows İçin)

PHP (II) Formlar. Dosya İşlemleri. 2002, Sanem SARIEL PHP Ders Notları 2 1. Formlar

"SQL Server Management Studio" yazılımını yüklemek için alttaki resmi sitesinden 180 günlük deneme sürümünü indirebilirsiniz.

Smoothwall URL Filter Kurulumu

Ortamınızda A.D. veya LDAP sistemi var ise aşağıdaki linkten KoruMail LDAP-AD isimli dokümanı inceleyebilirsiniz.

FortiGate (Terminal Server) Terminal Sunucu Üzerinden Gelen Kullanıcılar

ORKA da BANKA EKSTRESİ TRANSFERi v2 PROGRAMININ KULLANIM KLAVUZU

Kurumsal Güvenlik ve Web Filtreleme

Google Chrome Proxy Sunucusu Ayarları

İNTERNET EXPLORER AYARLARI 1. Başlat-Ayarlar-Denetim Masası menüsünden "İnternet Özellikleri" (Seçenekleri)'ni seçiniz. Resim. 1

WebInstaller. 1. Kurulum Đçin Gereksinimler

Apache Htaccess Güvenlik Testleri

AKINSOFT. Eofis NetworkAdmin. AKINSOFT EOfis NetworkAdmin Kurulumu Bilgi Notu. Doküman Versiyon : Tarih : Copyright 2008 AKINSOFT

Windows Server 2012 Active Directory Kurulumu

WEB SUNUCU GÜVENLİĞİ: Web Siteleri Neden Hacklenir?

2013 Yıl Sonu İşlemleri

Kurumsal Güvenlik ve Web Filtreleme

YEDEKLEME PROGRAMI KURULUM VE KULLANIMI

Linux Sunucuları için Güvenlik İpuçları. Korhan Gürler, Burç Yıldırım

Cisco 881 Router ve AirLink ES4X0, WAN Failover Tanımı

Ağ Sızma Testleri ve 2. Katman Saldırıları Türk Standardları Enstitüsü Yazılım Test ve Belgelendirme Dairesi Başkanlığı

SQL Server 2014 Kurulum Adımları

Program istasyon yaratırken onunla aynı isimde bir dizin yaratır ve bu dizinin içine çalışması için gerekli dosyları kopyalar:

Linux Kurulumu (Sürüm 1.52) İçindekiler

Messenger Sunucularının Kurulum Dokümanı

AntiKor Güvenlik Sunucumu nereye yerleştirmeliyim?

Yedek Almak ve Yedekten Geri Dönmek

LOGO için Online Mutabakat Kullanım Kılavuzu

Miron Yazılım Entegre Uygulamalar (Mironist.NET Yılsonu Devir)

KANTAR UYGULAMASI Kurulum Kılavuzu

ProFTPD FTP Sunucusu. Devrim GÜNDÜZ. TR.NET Sistem Destek Uzmanı.

Veri Tabanı Yönetim Sistemleri Bölüm - 02

FreeBSD Üzerinde VLAN Kullanımı

Clonezilla Server ile Ağ Üzerinden Çoklu İmaj Yükleme

Ethercat 1S Servo Kütüphanesi

VIO ERP12 Muhasebe Kurulum

Checkpoint SSL-VPN Kurulum Prosedürü. Checkpoint Endpoint VPN Client

9. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

FABREKA YAZILIM ELEKTRONİK DANIŞMANLIK TİC. LTD. ŞTİ.

Scan Station Pro 550 Adminstration & Scan Station Service Araçları

FAKS SUNUCU EĞİTİM DÖKÜMANI

Transkript:

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: v1.2 2

- 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. v1.2 3

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 v1.2 4

- /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 v1.2 5

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 v1.2 6

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. source: sudoers.j2 destination: /etc/sudoers 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. source: blacklist.conf.j2 destination: /etc/modprobe.d/blacklist.conf v1.2 7

mode: 644 v1.2 8

- 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 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. v1.2 9

ssh: # ssh yapilandirmasini belirtmektedir. source: sshd_config.j2 destination: /etc/ssh/sshd_config service: name: ssh state: started enabled: yes TrustedUserCAKeys: source: ahtapot_ca.pub.j2 destination: /etc/ssh/ahtapot_ca.pub LocalBanner: source: issue.j2 destination: /etc/issue RemoteBanner: source: issue.net.j2 destination: /etc/issue.net Port: 22 Protocol: 2 ListenAddressv4: 0.0.0.0 ListenAddressv6: "::" UsePrivilegeSeparation: "yes" KeyRegenerationInterval: 3600 v1.2 10

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" v1.2 11

- 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. source: ntp.conf.j2 destination: /etc/ntp.conf 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. source: hosts.j2 destination: /etc/hosts v1.2 12

- 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. source: grub_01_users.j2 destination: /etc/grub.d/01_users mode: 755 conf2: source: grub_10_linux.j2 destination: /etc/grub.d/10_linux 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 v1.2 13

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. v1.2 14

audit: # audit yapilandirmasini belirtmektedir. source: auditd.conf.j2 destination: /etc/audit/auditd.conf service: name: auditd state: started enabled: yes rules: source: audit.rules.j2 destination: /etc/audit/audit.rules 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 v1.2 15

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. source: sysctl.conf.j2 destination: /etc/sysctl.conf 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 v1.2 16

rsyslog sunucusu bulunmadığı durumlarda Server2 satırı başına # konularak kullanım dışı haline getirilmelidir. rsyslog: # rsyslog yapilandirmasini belirtmektedir. source: rsyslog.conf.j2 destination: /etc/rsyslog.conf 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 v1.2 17

- 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 v1.2 18

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

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 v1.2 20

- 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 mode: 755 gdys: source: gdys.sh.j2 destination: /usr/bin/gdys.sh 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. v1.2 21

$ 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 v1.2 22

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. v1.2 23

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. v1.2 24

firewall alt fonksiyonu ile Limitlik Kullanıcı Konsolunda kullanılacak kullanıcıya gerekli yetki verilir. sudo: # Sudo yapilandirmasini belirtmektedir. source: sudoers.j2 destination: /etc/sudoers 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. source: blacklist.conf.j2 destination: /etc/modprobe.d/blacklist.conf 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. v1.2 25

logger: # heartbeat yapilandirmasini belirtmektedir. cron: source: logger.sh.j2 destination: /etc/cron.d/logger.sh 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. v1.2 26

ssh: # ssh yapilandirmasini belirtmektedir. source: sshd_config.j2 destination: /etc/ssh/sshd_config service: name: ssh state: started enabled: yes TrustedUserCAKeys: source: ahtapot_ca.pub.j2 destination: /etc/ssh/ahtapot_ca.pub LocalBanner: source: issue.j2 destination: /etc/issue RemoteBanner: source: issue.net.j2 destination: /etc/issue.net Port: 22 Protocol: 2 ListenAddressv4: 0.0.0.0 ListenAddressv6: "::" UsePrivilegeSeparation: "yes" KeyRegenerationInterval: 3600 v1.2 27

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. v1.2 28

ntp: # ntp yapilandirmasini belirtmektedir. source: ntp.conf.j2 destination: /etc/ntp.conf 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. source: hosts.j2 destination: /etc/hosts - 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. v1.2 29

grub: # grub yapilandirmasini belirtmektedir. source: grub_01_users.j2 destination: /etc/grub.d/01_users mode: 755 conf2: source: grub_10_linux.j2 destination: /etc/grub.d/10_linux 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. v1.2 30

audit: # audit yapilandirmasini belirtmektedir. source: auditd.conf.j2 destination: /etc/audit/auditd.conf service: name: auditd state: started enabled: yes rules: source: audit.rules.j2 destination: /etc/audit/audit.rules 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 v1.2 31

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. source: sysctl.conf.j2 destination: /etc/sysctl.conf 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 v1.2 32

rsyslog sunucusu bulunmadığı durumlarda Server2 satırı başına # konularak kullanım dışı haline getirilmelidir. rsyslog: # rsyslog yapilandirmasini belirtmektedir. source: rsyslog.conf.j2 destination: /etc/rsyslog.conf 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 v1.2 33

- 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 v1.2 34

force: yes v1.2 35

- 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. source: gitlab.rb.j2 destination: /etc/gitlab/gitlab.rb mode: 0640 - ssl fonksiyonu ile /etc/gitlab/ssl dosyasının hakları, erişim yetkileri belirlenir. ssl: directory: path: /etc/gitlab/ssl 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 mode: 600 v1.2 36

- 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 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 v1.2 37

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: 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 v1.2 38

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 v1.2 39

- 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; v1.2 40

- 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: v1.2 41

# 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. v1.2 42

sudo: # Sudo yapilandirmasini belirtmektedir. source: sudoers.j2 destination: /etc/sudoers 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. source: blacklist.conf.j2 destination: /etc/modprobe.d/blacklist.conf 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: v1.2 43

# heartbeat yapilandirmasini belirtmektedir. cron: source: logger.sh.j2 destination: /etc/cron.d/logger.sh 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. v1.2 44

ssh: # ssh yapilandirmasini belirtmektedir. source: sshd_config.j2 destination: /etc/ssh/sshd_config service: name: ssh state: started enabled: yes TrustedUserCAKeys: source: ahtapot_ca.pub.j2 destination: /etc/ssh/ahtapot_ca.pub LocalBanner: source: issue.j2 destination: /etc/issue RemoteBanner: source: issue.net.j2 destination: /etc/issue.net Port: 22 Protocol: 2 ListenAddressv4: 0.0.0.0 ListenAddressv6: "::" UsePrivilegeSeparation: "yes" KeyRegenerationInterval: 3600 v1.2 45

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. v1.2 46

ntp: # ntp yapilandirmasini belirtmektedir. source: ntp.conf.j2 destination: /etc/ntp.conf 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. source: hosts.j2 destination: /etc/hosts - 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. v1.2 47

grub: # grub yapilandirmasini belirtmektedir. source: grub_01_users.j2 destination: /etc/grub.d/01_users mode: 755 conf2: source: grub_10_linux.j2 destination: /etc/grub.d/10_linux 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. v1.2 48