AHTAPOT | Ansible Playbook Dökümantasyon u

Transkript

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

Benzer belgeler

AHTAPOT | Firewall Builder Kurulumu

AHTAPOT | Firewall Builder Kurulumu “SecondNtpServerHost” satırının başına “#” işareti konularak o satırın işlem dışı kalması sağlanmalıdır. Sunucularda ssh portunun varsayılan değer dışında bir değere atanması istendiği durumda, “ss...

Detaylı

AHTAPOT | Güvenlik Duvarı Hizmet Dışı Bırakma Saldırıları Önleme

AHTAPOT | Güvenlik Duvarı Hizmet Dışı Bırakma Saldırıları Önleme Sisteminde hizmet dışı bırakma saldırılarını önlemek amacı ile Ansible Playbook tarafından düzenlenen Kernel Parametreleri anlatılıyor.

Detaylı

2011 sigorta acenteleri teknik personel eğitimi

2011 sigorta acenteleri teknik personel eğitimi Katılımcıların, Yönetmelik gereği eğitimin tamamına (13 saat) devamı zorunludur; iki günlük eğitim süresi boyunca, her bir oturum öncesinde adayların imzaları alınacak, tek bir oturumda bile imzası...

Detaylı