KVM – qcow2 Disk Dosyası Boyutunu Küçültme (Reduce – Shrink Qcow2 Disk Files)

Şimdiki yazımızda KVM hipervisor katmanında guest’ler(vm – sanal makineler) için başınıza gelebilecek bir durumdan bahsedeceğiz. Malumunuz KVM hostlarınızda disk dosyalarınız(qcow2) diskte belli bir alanı kaplamaktadır. Fakat zamanla guestteki disk alanı hosttaki barındığı disk alanını doldurup hatta üzerinede çıkabilmektedir. Aslında VM diski filesystem tabanında düzenli alanlarla kullanmadığı yada dağınık yazdığı için yani bu durum adreslemeyle alakalı; dolu göstermektedir. Aslında windows’ta defrag yöntemi gibi diyebiliriz. Bu durumda sanal makine otomatik olarak “Pause” duruma düşecek ve hizmet veremeyecek duruma gelecektir. Bu duruma düşmeden yada düştükten sonra aşağıdaki yöntemlerle qcow2 disk dosyalarını boyutunu hipervisor katmanında aslında kullanılmadığı halde kullanıyor gibi gösterdiği alanları yeniden düzenleyerek küçültecektir.

İlk yöntem olarak “virt-sparsify” komutunu kullanarak etkili ve verimli bir şekilde disk dosyanızın boyutunu küçültebilirsiniz.

NoT1 : “virt-sparsify” komutunu kullanabilmek için libguestfs-tools paketini öncesinde kurmalısınız.

NoT2 : İşlemleri vm kapalıyken yapın.

İşlem yapılmadan önce aşağıdaki komutla disk dosyasının boyutunu görelim.

> du -ha

Ardından “virt-sparsify” komutu ile istediğimiz küçültme işlemini gerçekleştirelim.

> virt-sparsify –in-place diskdosyanız.qcow2

Daha sonra tekrar “du -ha” komutunu çalıştıralım ve boyuttaki azalmayı görelim.

Ikinci yöntem olarak gene “virt-sparsify” komutunu convert yöntemi ile kullanalım.

> virt-sparsify diskdosyanız.qcow2 –convert qcow2 yeniisimdiskdosyanız.qcow2

Sonra “du -ha” komutu

Son olarak üçüncü yöntem ise,

Aşağıdaki yöntem ile Guest’in içinde “dd” komutu kullanarak kalan boş alana “zero” basıyoruz.

> dd if=/dev/zero of=/MyDump

Daha sonra MyDump dosyasını siliyoruz.

> rm -f /MyDump

Son olarak “qemu-img” komutu ile işlemi gerçekleştiriyoruz ama öncesinde fırsatınız varsa disk dosyasının yedeğini almanızda fayda var.

> qemu-img convert -O qcow2 ilgilidosyaismi.qcow2 yeni_ilgilidosyaismi.qcow2

Kaynaklar

http://libguestfs.org/virt-sparsify.1.html

https://pve.proxmox.com/wiki/Shrink_Qcow2_Disk_Files

Redhat/Centos TimeZone Değiştirme

İlk önce “date” komutunu çalıştırıp, şuan ki saat bilgilerimizi görelim.

İlk önce “cp” komutu ile “localtime” dosyasının yedeğini alalım.

> cp /etc/localtime /etc/localtime.bak

Ardından dosyayı silelim

> rm /etc/localtime

Ya da yukarıda olduğu gibi iki komut yerine aşağıdaki gibi “mv” komutuyla tek seferde işi çözebilirsiniz.

> mv /etc/localtime /etc/localtime.bak

Şimdi “ln -s” komutu ile Türkiye’ye uygun olan timezone dosya kaynağını localtime dosyasına linkleyelim.

> ln -s /usr/share/zoneinfo/Europa/Istanbul /etc/localtime

Son olarak “date” komutunu tekrar çalıştırıp, Türkiye timezone’nin geldiğini görelim.

Linux KVM Backup and Restore

Aşağıdaki yönergeleri izleyerek KVM sanallarınızı yedekleyebilir ve yedekten geri dönebilirsiniz.

1. Backup

İlk önce makinelerimizi listeleyelim ve çalışır vaziyette olduğunu görelim.

> virsh list –all

Daha sonra yedekleyeceğimiz vm’i kapatalım.

> virsh shutdown Ubuntu18

Ardından makineleri tekrar listeleyelim ve kapalı olduğunu görelim.

> virsh list –all

Şimdi makineyi (XML dosyasını) aşağıdaki komut/yöntem ile yedekleyelim.

> virsh dumpxml Ubuntu18 > /MyBackup/Ubuntu18.xml

yada

default ta XML lerin tutulduğu “/etc/libvirt/qemu” dizinin altından ilgili XLM’i ilgili backup dizinine cp komutu ile kopyalayabilirsiniz.

Şimdi de disk dosyasını (qcow2) aşağıdaki komut/yöntem ile yedekleyelim.

qcow2 formatındaki disk dosyasını da /MyBackup altına kopyalayalım. Disk dosyalarının default ta tutulduğu yer “/var/lib/libvirt/images/” altındadır.

yada

> virsh domblklist Ubuntu18 komutu ile nerde olduğunu görebilirsiniz. İlgili yerden cp yada scp (remote) komutu ile backup klasörünüze kopyalayabilirsiniz.

> cp /var/lib/libvirt/images/Ubuntu18.qcow2 /MyBackup/Ubuntu18.qcow2

Listeleyip tüm yedeklerimizi görelim.

> ls -lash

NoT: Backup işlemini makineleri kapatmadan da yapabilirsiniz fakat oluşabilecek hatalara yada veri kaybına karşın, kapatıp yapmak sağlıklı olacaktır. Tabi illaki makinenin hizmet kesintisi olmaması gerekiyorsa, dediğim gibi vm açıkkende backup alabilirsiniz.

2. Restore

Şimdi yedekten geri dönme senryosunu uygulayalım. Bunun için XML’i silebilir yada undefine edebilirsiniz.

> virsh undefine Ubuntu18

yada

Sunucu özelliklerinin barındığı XML dosyası silinmiş olsun ve listelediğimizde makinenin gittiğini görebiliyoruz.

> virsh list –all

Şimdi senaryoyu gerçekleştirmek için disk (qcow2) dosyasını silelim.

> rm /var/lib/libvirt/images/Ubuntu18.qcow2

Ve senaryo uygulamasına başlayabiliriz. Hemen backup aldığımız yerden diskin (qcow2)’un olması gereken yere kopyalama işlemine başlayalım.

> cp /MyBackup/Ubuntu18.qcow2 /var/lib/libvirt/images/

Diskin kopyalama işlemi bittikten sonra makine özelliklerinin olduğu XML dosyasını aşağıdaki komut/yöntem ile kullanabilir hale getirelim.

> virsh define –file /MyBackup/Ubuntu18.xml

yada

Sunucu özelliklerinin barındığı XML dosyası bulunduğu dizine tekrar kopyalanmış olsun.

Ardından vm’i başlatarak işlemi tamamlayalım.

> virsh start Ubuntu18

Linux Bash Shell Terminal Özelleştirme

Linux terminal’ini açılışta isim soyisim yada ünvan yada reklam gibi yazılar yazdırmak ve bunu her açılışta otomatik yaptırmak gibi bir fantazi isterseniz aşağıdaki adımları izleyebilirsiniz.

İlk önce aşağıdaki komutla figlet paketini kurun.

> sudo apt install figlet

Ardından home directory’inizin olduğu yerdeki .bashrc dosyasını edit’leyip,

> vi .bashrc

Son satıra aşağıdaki satırı ekleyip, kaydedip çıkın.

> figlet Fatih ASLAN fatlan.com

İşlem tamam, terminali her açtığınızda yukarıdaki gibi görünecektir.

How to install KVM on Ubuntu 16 – Ubuntu üzerine KVM kurulumu, Yapılandırması ve Sanal Makine oluşturulması

KVM Çekirdek tabanlı sanal makine Linux çekirdeği için geliştirilen ve onu bir üstsisteme dönüştüren bir sanallaştırma altyapısıdır.

Kurulumdan önce sunucumuza login olup, cpu muzun destekleyip desteklemediğini anlamak için aşağıdaki komutlar yardımıyla cpu bilgilerini kontrol edelim.

Bu komutun çıktısı olarak “CPU(s):” değeri 0 ise dekteklemiyor, 1 veya 1 den fazla bir değer ise destekliyor manasına gelir.

> egrep -c ‘(svm|vmx)’ /proc/cpuinfo

yada

> lscpu

Aşağıdaki komutla da çekidek modüllerinin yüklü olup, olmadığını kontrol edebilirsiniz.

> lsmod | grep kvm

Şimdi kuruluma geçebiliriz. Aşağıdaki komut ile gerekli tüm paketleri kurup, KVM ortamımızı hazır hale getirelim.

> sudo apt-get install qemu-kvm libvirt-bin bridge-utils virt-manager

Yukarıdaki kurulum komutundan sonra sorunsuz bir kurulum gerçekleştiğini, aşağıdaki komutla doğrulayın.

> kvm-ok

Ardından sunucuyu reboot edin.

> brctl show komutuyla da sonradan gelen sanal interface(NIC) i görüntüleyebilirsiniz.

Default’ta Virtual Machine(qcow2) lerin saklandığı dizindir.

/var/lib/libvirt/images/

Not1 : Eğer qcow2 formatında ki diskin yerini bilmiyorsanız aşağıdaki komut(komut ilgili vm in disklerini bulunduğu dizin ile beraber listeler) size nerde olduğunu söyleyecektir.

> virsh domblklist Ubuntu18

Default’ta Virtual Machine images lar için, kurulum iso larının saklandığı dizindir.

/var/lib/libvirt/boot/

Default’ta Virtual Machine özelliklerinin(ram,cpu,disk vs.) xml formatında tutulduğu yerdir.

/etc/libvirt/qemu

Not2 : Aşağıdaki komut ise ilgili makinanın xml formatında tutulduğu özellikleri(ram,cpu,disk vs.) ekrana bastırır.

> virsh dumpxml Ubuntu18

Aşağıdaki iki komutla da mevcuttaki sanal makinaları görüntüleyebilirsiniz.

> virsh -c qemu:///system list

yada

> virsh list –all

Virtual Machine lerinizi GUI olarak yönetmek, oluşturma ve silme gibi işlemler için virt arayüzünü kullanabilirsiniz. Komut aşağıdaki gibidir.

NoT3 : Bunu yapabilmek için öncesinde sunucuya ssh bağlantısı yaparken, -X parametresini kullanarak bağlanmalısınız(ssh -X root@192.168.1.100). Ayrıca Windows (Putty de x11 enable edilmelidir) için Xming uygulaması, Mac için ise Xquartz uygulaması kurulu ve çalışır olması gerekiyor.

NoT4 : Bu arada bir bilgi daha vermem gerekir. Eğer Linux kullanıcısı iseniz yani client makinanız Linux ise sunucuya virt-manager paketini kurmadan, client makinanızda virt-manager var ise ordan File-Add Connection diyerek sunuya bağlanıp yönetebilirsiniz.

> sudo virt-manager

Yada sunucuya ait konsolu direk olarak aşağıdaki komutla alabilirsiniz.

NoT5 : Bunu yapabilmek için öncesinde kullanıcı makinasına virt-viewer paketini kurmalısınız(ubuntu/debian için ’apt install virt-viewer’, Redhat/CentOS için ‘yum install virt-viewer’).

> sudo virt-viewer -c qemu:///system Ubuntu18

Komutlar aracılığı ile sunucuyu yönetimi için aşağıda bir kaç komut paylaşacağım.

Sunucuyu başlatır.

> virsh start Ubuntu18

Sunucuyu kapatır.

> virsh shutdown Ubuntu18

Sunucuyu yeniden başlatır.

> virsh reboot Ubuntu18

Sunucunun özelliklerini değiştirmek için kullanılır(xml dosyasını değiştirir).

> virsh edit Ubuntu18

Sununun barındığı host açıldığında, bu vm de otomatik olarak başlatma seçeneğidir.

> virsh autostart Ubuntu18

Sununun barındığı host açıldığında, bu vm de otomatik olarak başlatma seçeneğini devre dışı bırakır.

> virsh autostart –disable Ubuntu18

Şimdi “virt-install” komtuna bakalım, bu komut aracılığı ile komut satırı üzerinden makine oluşturabilirsiniz. Alltaki komutta örnek komut ile bu işlemi sağlayabilirsiniz. Ben bir çok parametreyi kullandım ama siz tüm parametleri kullanmak zorunda değilsiniz. Zaten kullanmadığınız parametreler yerine default değerler atanacaktır. Tabi sonrasında siz bu değerleri değiştirebilirsiniz. Komutu yürüttükten sonra gui açılıp size kuruluma yönlendirecektir.

> sudo virt-install –virt-type=kvm –name ubuntu-cli –ram 2048 –vcpus=2 –os-variant=Ubuntu16.04 –cdrom=/var/lib/libvirt/boot/ubuntu-18.04-live-server-amd64.iso –network=bridge=eth0,model=virtio –graphics spice –disk path=/var/lib/libvirt/images/ubuntu-cli.qcow2,size=40,bus=virtio,format=qcow2

Şimdi de “virt-clone” komutundan bahsedelim. Adında da anlaşılacağı üzere clone almak için kullanılan komuttur. Kullanımı aşağıdaki gibidir. Fakat vm kapalı durumda iken clone alabilirsiniz, yoksa uyarı verecektir. “Clone ‘Ubuntu18.clone’ created successfully.” uyarısını almalısınız.

> virt-clone –original=Ubuntu18 –name=Ubuntu18.clone –file=/var/lib/libvirt/images/Ubuntu18.clone

Aşağıdaki komut ise vmdk formatındaki bir vm i qcow2 formatına çevirip KVM host unuzda çalıştırmanızı sağlar.

> qemu-img convert -O qcow2 ubuntu.vmdk ubuntu.qcow2

Bir sonraki makalemizde KVM ortamında nasıl yedek alıp sonra aldığımız o yedeği nasıl geri yükleyip, çalışır hale getireceğiz ona bakacağız.

RedHat/CentOS Bonding Yapılandırması (LACP ve LACP Olmadan)

Bonding nedir.? : Birden fazla ethernet arayüzünü birleştirme işlemidir. Network teaming de denebilir. Şöyle ki birden fazla network kartının tek network kartı gibi davranması kartlardan birinin bağlantısının kopması durumunda diğer kart üzerinden kesintisiz bir şekilde bağlantının devam etmesi işlemidir.

LACP nedir.? : Ether Channel iki protokol ile yapılır. Bunlardan birincisi cisco protokolü olan PAgP(Port Aggregation Protokol) ikincisi ise LACP(Link Aggregation Control Protokol) IEEE 802.3ad olan standart protokolüdür. Ether Channel iki switch arasında 2 yada daha fazla kablo ile bağlantı sağlandığında switch in iki yada daha fazla kabloyu tek kablo gibi algılamasını sağlayan protokoldür. Ether Channel sayesinde hem yedeklilik(redundancy), hem loadbalans, hemde yüksek bandwidth sağlanmış olur.

Bonding MOD’ları

mode=0 >> Round-robin(balance-rr), arayüzlere sırası ile paketleri gönderir.

mode=1 >> Aktif-yedek çalışır(active-backup). Sadece bir arayüz aktiftir.

mode=2 >> [(Kaynak MAC adresi XOR hedef MAC adresi) % arayüz sayısı] (balance-xor) algoritmasına göre paketleri gönderir.

mode=3 >> Broadcast çeşididir(broadcast). Tüm paketleri tüm arayüzlerden gönderir.

mode=4 >> IEEE 802.3ad Dynamic link aggregation(802.3ad), LACP. Aktif-aktif çalışır.

mode=5 >> Toplam yük her arayüzün kendi yüküne göre paylaşılır(balance-tlb).

mode=6 >> Uyarlamalı yük dengeleme modudur(balance-alb).

Senaryomuz aşağıda şekildeki gibi,

1- LACP ile Bonding yapılandırması,

cd komutu ile “/etc/sysconfig/network-scripts/” directory sine gidin.

Ardından vi yada başka bir editör aracılığı ile uplink gelen “ifcfg-eth0 ve ifcfg-eth1” konfig dosyalarının içini aşağıdaki gibi yapılandırın.

[root@localhost network-scripts]# vi ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

BOOTPROTO=none

ONBOOT=yes

NM_CONTROLLED=no

IPV6INIT=no

MASTER=bond0

SLAVE=yes

[root@localhost network-scripts]# vi ifcfg-eth1

DEVICE=eth1

TYPE=Ethernet

BOOTPROTO=none

ONBOOT=yes

NM_CONTROLLED=no

IPV6INIT=no

MASTER=bond0

SLAVE=yes

Daha sonra aynı dizin içinde “ifcfg-bond0” dosyasını oluşturup aşağıdaki gibi yapılandırın.

[root@localhost network-scripts]# vi ifcfg-bond0

DEVICE=bond0

TYPE=bond

NAME=bond0

BONDING_MASTER=yes

BOOTPROTO=none

ONBOOT=yes

IPADDR=192.168.1.10

PREFIX=24

GATEWAY=192.168.1.1

BONDING_OPTS=”mode=4 miimon=100 lacp_rate=1″

Son olarak aşağıdaki komutla network servisini yeniden başlatalım ve işlemleri tamamlayalım. Servisi yeniden başlatırken uyarı/uyarılar alabilirsiniz. Üst üste iki kere de servisi yeniden başlatabilirsiniz yada sunucuyu reboot edebilirsiniz.

Redhat/CentOS 6.x için,

> /etc/init.d/network restart yada service network restart

Redhat/CentOS 7.x için,

> systemctl restart network.service

Ardından “ip a” komutu ile yapılan işlemleri kontrol edebilirsiniz.

Ayrıca Bonding yapılandırmalarına ait detayları aşağıdaki komutla elde edebilirsiniz.

> more /proc/net/bonding/bond0

NOT1 : Bonding yapılandırmasında bond0 birinci slave olarak görünen nic’in fiziksel adresini devralır ve onu kullanır. Yani MAC Address durumu aşağıdaki örnekteki gibi olacaktır(screenshot’tan da teyit edebilirsiniz). Bu durum mod5 ve mod6 hariç geçerlidir. Ayrıca mod1 de de active-backup çalışma prensibinden dolayı benzersiz MAC Addres kullanır.

bond0     Link encap:Ethernet HWaddr 04:09:73:ca:a6:70

eth0        Link encap:Ethernet HWaddr 04:09:73:ca:a6:70

eth1        Link encap:Ethernet HWaddr 04:09:73:ca:a6:70

NOT2 : OS tarafında Bonding’leri LACP olarak yapılandırdığınız taktirde, Switch tarafında da karşılık gelen portlara LACP yapılandırmasını yapmalısınız. Örnek olarak Switch tarafında yapılması gereken ayarı aşağıda paylaşıyorum.

interface Ethernet X

channel-group 1 mode active

no shutdown

interface Po1

switchport mode trunk

mlag 1

2- LACP olmadan Bonding yapılandırması,

ifcfg-eth0” ve “ifcfg-eth1” aynen yukarıdaki gibi yapılandırdıktan sonra, sadece “ifcfg-bond0” aşağıdaki gibi yapılandırın(‘mode’ değişikliği yapıldı).

[root@localhost network-scripts]# vi ifcfg-bond0

DEVICE=bond0

TYPE=bond

NAME=bond0

BONDING_MASTER=yes

BOOTPROTO=none

ONBOOT=yes

IPADDR=192.168.1.10

PREFIX=24

GATEWAY=192.168.1.1

BONDING_OPTS=”mode=2 miimon=100″

SFTP Kurulum ve Yapılandırması on Ubuntu

SFTP nedir.? : Secure FTP, yani SFTP, SSH kullanarak dosya transferi yapan bir dosya aktarım protokolüdür. SSH‘ın sağladığı güvenlik özellikleri, FTP‘den farklı olarak SFTP‘yi güvenli hale getirir.FTP‘nin RSA ile güçlendirilmiş halidir.

İlk olarak tabi OpenSSH paketi kurulu olması gerekiyor. Eğer kurulu değilse aşağıdaki komutla kurulum yapabilirsiniz.

> sudo apt install openssh-server -y

Ardından ftp kullanıcıları için grup oluşturalım.

> sudo addgroup ftpaccess

Daha sonra herhangi bir editör yardımıyla “/etc/ssh/sshd_config” dosyasındaki “Subsystem sftp /usr/lib/openssh/sftp-server” satırını başına # koyarak yorum satırına çevirip,

Ek olarak aşağıdaki satırları dosyanın sonuna ekleyip, kaydedip çıkın.

Subsystem sftp internal-sftp

Match group ftpaccess

ChrootDirectory %h

X11Forwarding no

AllowTcpForwarding no

ForceCommand internal-sftp

Şimdi SSH servisini yeniden başlatın

> sudo systemctl restart sshd.service

Ardından sunucuya login olamayacak ve ftpaccess gruba dahil bir kullanıcı oluşturalım. Bunu aşağıdaki komutla gerçekleştirebilirsiniz.

> sudo useradd -m USERNAME -s /usr/sbin/nologin -G ftpaccess

Şimdi bu kullanıcıya şifre belirleyelim.

> sudo passwd USERNAME

/home” dizininde USERNAME için oluşan klasörün sahipliğini root yapalım.

> sudo chown root:root /home/USERNAME

Ardından oluşturulan kullanıcının ftp işlemleri yapabilmesi için kullanılacak bir dizin oluşturalım.

> sudo mkdir /home/USERNAME/data

Dizini oluşturduktan sonra sahipliğini aşağıdaki gibi değiştirelim.

> sudo chown USERNAME:ftpaccess /home/USERNAME/data

Son olarak dışardan sftp bağlantısı deneyerek ister cli, ister gui olarak test edelim. Ben cli kullanacağım, siz remmina, winscp gibi araçlarla gui olarak da test edebilirsiniz.

OpenStack Ansible Network Configuration, Bonding, Mtu, Vlan, Br-vlan, Br-vxlan – Ubuntu 16.04

İlk önce aşağıdaki komutla apt reposunu güncelleyin.

> apt update

Ardından “bridge-utils” paketini sisteme kurun.

> apt install bridge-utils

Daha sonra “/etc/network/interfaces” dosyasını aşağıdaki gibi yapılandırabilirsiniz. Tabi siz kullanacağınız şekilde yapılandırabilirsiniz. Ben aşağıdaki örnekte hem bonding, hem vlan, hem bridge vlan, hem bridge vxlan, hem de mtu size olarak jumbo frame kullandım. Ayrıca nfs ve iscsi yide ayrı vlan larla yapılandırdım. Siz ortamınızda gerekli olan yapılandırmaya göre şekillendirebilirsiniz.

auto enp6s0f0
iface enp6s0f0 inet manual
bond-master bond0
mtu 9000

auto enp7s0f0
iface enp7s0f0 inet manual
bond-master bond0
mtu 9000

auto enp6s0f1
iface enp6s0f1 inet manual
bond-master bond1

auto enp7s0f1
iface enp7s0f1 inet manual
bond-master bond1

auto bond0
iface bond0 inet static
address 10.10.10.160
netmask 255.255.255.0
gateway 10.10.10.1
dns-nameservers 10.10.10.1
mtu 9000
bond-mode 4
bond-miimon 100
bond-slaves none
bond-downdelay 200
bond-updelay 200
bond-xmit_hash_policy 1

auto bond1
iface bond1 inet manual
bond-mode 4
bond-miimon 100
bond-slaves none
bond-downdelay 200
bond-updelay 200
bond-xmit_hash_policy 1

# Container/Host management VLAN interface
auto bond0.10
iface bond0.10 inet manual
mtu 9000
vlan-raw-device bond0

#Openstack iscsi  Storage network VLAN interface (optional)
auto bond0.20
iface bond0.20 inet manual
mtu 9000
vlan-raw-device bond0

# Openstack nfs  Storage network VLAN interface (optional)
auto bond0.21
iface bond0.21 inet manual
mtu 9000
vlan-raw-device bond0

# OpenStack Networking VXLAN (tunnel/overlay) VLAN interface
auto bond1.30
iface bond1.30 inet manual
vlan-raw-device bond1

# Container/Host management bridge
auto br-mgmt
iface br-mgmt inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports bond0.10
mtu 9000
address 192.168.236.160
netmask 255.255.252.0

#OpenStack Networking VXLAN (tunnel/overlay) bridge
#
# Only the COMPUTE and NETWORK nodes must have an IP address
# on this bridge. When used by infrastructure nodes, the
# IP addresses are assigned to containers which use this
# bridge.
#
auto br-vxlan
iface br-vxlan inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports bond1.30
address 192.168.240.160
netmask 255.255.252.0

# OpenStack Networking VLAN bridge
auto br-vlan
iface br-vlan inet manual
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports bond1

# compute1 Network VLAN bridge
#auto br-vlan
#iface br-vlan inet manual
#    bridge_stp off
#    bridge_waitport 0
#    bridge_fd 0
#
# For tenant vlan support, create a veth pair to be used when the neutron
# agent is not containerized on the compute hosts. ‘eth12’ is the value used on
# the host_bind_override parameter of the br-vlan network section of the
# openstack_user_config example file. The veth peer name must match the value
# specified on the host_bind_override parameter.
#
# When the neutron agent is containerized it will use the container_interface
# value of the br-vlan network, which is also the same ‘eth12’ value.
#
# Create veth pair, do not abort if already exists
#    pre-up ip link add br-vlan-veth type veth peer name eth12 || true
# Set both ends UP
#    pre-up ip link set br-vlan-veth up
#    pre-up ip link set eth12 up
# Delete veth pair on DOWN
#    post-down ip link del br-vlan-veth || true
#    bridge_ports bond1 br-vlan-veth

# Storage bridge (optional)
#
# Only the COMPUTE and STORAGE nodes must have an IP address
# on this bridge. When used by infrastructure nodes, the
# IP addresses are assigned to containers which use this
# bridge.
#

# Storage ISCSI bridge
auto br-iscsi
iface br-iscsi inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
mtu 9000
bridge_ports bond0.20
address 192.168.244.160
netmask 255.255.252.0

# Storage NFS bridge
auto br-nfs
iface br-nfs inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
mtu 9000
bridge_ports bond0.21
address 192.168.248.160
netmask 255.255.252.0

Kaynak : https://docs.openstack.org/project-deploy-guide/openstack-ansible/newton/app-config-prod.html

Ubuntu 16.04 Bonding Yapılandırması (LACP ve LACP Olmadan)

Bonding nedir.? : Birden fazla ethernet arayüzünü birleştirme işlemidir. Network teaming de denebilir. Şöyle ki birden fazla network kartının tek network kartı gibi davranması kartlardan birinin bağlantısının kopması durumunda diğer kart üzerinden kesintisiz bir şekilde bağlantının devam etmesi işlemidir.

LACP nedir.? : Ether Channel iki protokol ile yapılır. Bunlardan birincisi cisco protokolü olan PAgP(Port Aggregation Protokol) ikincisi ise LACP(Link Aggregation Control Protokol) IEEE 802.3ad olan standart protokolüdür. Ether Channel iki switch arasında 2 yada daha fazla kablo ile bağlantı sağlandığında switch in iki yada daha fazla kabloyu tek kablo gibi algılamasını sağlayan protokoldür. Ether Channel sayesinde hem yedeklilik(redundancy), hem loadbalans, hemde yüksek bandwidth sağlanmış olur.

Bonding MOD’ları

mode=0 >> Round-robin(balance-rr), arayüzlere sırası ile paketleri gönderir.

mode=1 >> Aktif-yedek çalışır(active-backup). Sadece bir arayüz aktiftir.

mode=2 >> [(Kaynak MAC adresi XOR hedef MAC adresi) % arayüz sayısı] (balance-xor) algoritmasına göre paketleri gönderir.

mode=3 >> Broadcast çeşididir(broadcast). Tüm paketleri tüm arayüzlerden gönderir.

mode=4 >> IEEE 802.3ad Dynamic link aggregation(802.3ad), LACP. Aktif-aktif çalışır.

mode=5 >> Toplam yük her arayüzün kendi yüküne göre paylaşılır(balance-tlb).

mode=6 >> Uyarlamalı yük dengeleme modudur(balance-alb).

Senaryomuz aşağıda şekildeki gibi,

1- LACP ile Bonding yapılandırması,

Şimdi “/etc/network/interfaces” dosyasının içini aşağıdaki gibi yapılandırın. Siz kendi nic kart isimlerinize göre düzenleyebilirsiniz.

auto enp6s0f0
iface enp6s0f0 inet manual
bond-master bond0

auto enp7s0f0
iface enp7s0f0 inet manual
bond-master bond0

auto enp6s0f1
iface enp6s0f1 inet manual
bond-master bond1

auto enp7s0f1
iface enp7s0f1 inet manual
bond-master bond1

auto bond0
iface bond0 inet static
address
192.168.1.10
netmask 255.255.255.0
gateway 1
92.168.1.1
dns-nameservers 1
92.168.1.1

bond-mode 4
bond-miimon 100
bond-lacp-rate fast
bond-slaves enp6s0f0 enp7s0f0
bond-downdelay 0
bond-updelay
0
bond-xmit_hash_policy 1

auto bond1
iface bond
1 inet static
address 1
92.168.2.20
netmask 255.255.255.0
gateway 1
92.168.2.1
dns-nameservers 1
92.168.2.1

bond-mode 4
bond-miimon 100
bond-lacp-rate fast
bond-slaves enp6s0f1 enp7s0f1
bond-downdelay
0
bond-updelay
0
bond-xmit_hash_policy 1

Ardından “systemctl restart networking.service” komutu ile network servisini yeniden başlatabilirsiniz, fakat maalesef Ubuntu da network servisi henüz istenilen olgunluğa ulaşmadığı için OS i reboot etmeniz gerekecek. Bu yüzden direk sistemi reboot komutu ile yeniden başlatın.

Ardından “ip a” komutu ile yapılan işlemleri kontrol edebilirsiniz.

Ayrıca Bonding yapılandırmalarına ait detayları aşağıdaki komutla elde edebilirsiniz.

> more /proc/net/bonding/bond0

> more /proc/net/bonding/bond1

NOT1 : Bonding yapılandırmasında bond0 birinci slave olarak görünen nic’in fiziksel adresini devralır ve onu kullanır. Yani MAC Address durumu aşağıdaki örnekteki gibi olacaktır(screenshot’tan da teyit edebilirsiniz). Bu durum mod5 ve mod6 hariç geçerlidir. Ayrıca mod1 de de active-backup çalışma prensibinden dolayı benzersiz MAC Addres kullanır.

bond0         Link encap:Ethernet HWaddr 50:6B:4B:23:1B:2C
enp6s0f0    Link encap:Ethernet HWaddr 50:6B:4B:23:1B:2C
enp7s0f0    Link encap:Ethernet HWaddr 50:6B:4B:23:1B:2C

NOT2 : OS tarafında Bonding’leri LACP olarak yapılandırdığınız taktirde, Switch tarafında da karşılık gelen portlara LACP yapılandırmasını yapmalısınız. Örnek olarak Switch tarafında yapılması gereken ayarı aşağıda paylaşıyorum.

interface Ethernet X
channel-group 1 mode active
no shutdown

interface Po1
switchport mode trunk
mlag 1

2- LACP olmadan normal Bonding yapılandırması,

auto enp6s0f0
iface enp6s0f0 inet manual
bond-master bond0

auto enp7s0f0
iface enp7s0f0 inet manual
bond-master bond0

auto bond0
iface bond0 inet static
address
192.168.1.10
netmask 255.255.255.0
gateway 1
92.168.1.1
dns-nameservers 1
92.168.1.1

bond-mode 1
bond-miimon 100
bond-slaves enp6s0f0 enp7s0f0
bond-downdelay
0
bond-updelay
0
bond-xmit_hash_policy 1

3- İp olmadan nic olarak bonding yapılandırması,

auto enp6s0f0
iface enp6s0f0 inet manual
bond-master bond0

auto enp7s0f0
iface enp7s0f0 inet manual
bond-master bond0

auto bond0
iface bond0 inet manual

bond-mode 4
bond-miimon 100
bond-lacp-rate fast
bond-slaves none
bond-downdelay 200
bond-updelay 200
bond-xmit_hash_policy 1

Ubuntu Login Ekranı Guest Session Kaldırma – Removing Guest Session at Login in Ubuntu

Ubuntu açılış ekranında oluşturduğunuz kullanıcı dışında default olarak gelen Guest Session oturumuda bulunmaktadır ve bu kullanıcı ile şifresiz olarak login olabilirsiniz. Bu kullanıcı oldukça kısıtlı haklara sahip olmasına rağmen güvenlik endileşelerinden dolayı(hak yükseltme saldırılarına karşın) yada bir çok farklı olabilecek sebepten dolayı kaldırmak isteyebilirsiniz. Şimdi aşağıdaki yöntemle bu işlemi nasıl yapacağımıza bir göz atalım.

Default gelen ubuntu açılış ekranı yukarıdaki gibidir.

Şimdi aşağıdaki dosyayı(50-ubuntu.conf) edit edin. Ben nano kullandım.

> sudo nano /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf

Daha sonra aşağıdaki satırı ekleyip kaydedip çıkın.

> allow-guest=false

Ardından makinayı reboot edin.

Ve Login ekranının son hali.

Linux Sistemlerde History Komutunun TimeStamp ile Çıktısı

Linux sistemlerde çalıştırılan komutların history de, tarih/saat/dakika cinsinden tutturmak ve daha sonra bunları timestamp lı olarak history komutu elde etmek için aşağıdaki adımları takip edin.

Tüm kullanıcılarda aynı formatta tutturmak için,

/etc/profile yada /etc/.bashrc

Sadece belirli bir kullanıcıda yapmak için,

.bashrc yada bash_profile(.profile), dosyalarından birini vi/vim/nano aracı ile edit edip en alt satıra aşağıdaki parametreyi ekleyin.

> export HISTTIMEFORMAT=”%F %T “

Daha sonra sistemi yeniden başlatın yada değişiklik yaptığınız dosyayı source edin, aşağıdaki gibi.

> source /etc/profile

Ubuntu16/CentOS7/RedHat7 Customize The docker0 Bridge ile Kurulum

Şimdiki makalemizde özelleştirilmiş network ile Docker kurulumunu ele alacağız. Öncesinde neden böyle birşeye ihtiyaç duyabileceğimizden bahsedeyim, hemde başımdan geçen durumu da anlatmış olurum.

Bildiğiniz gibi Docker kurulumda docker0 bridge‘inin default ip range‘i olarak 172.17.0.1/16‘yı vererek kurulum gerçekleştirmektedir. Bu durumda sizin bağlantı sağladığınız lokal ağ tercihini hali hazırda 172 li subnet ise kurulum aşamasında Docker Run olduğunda bağlantınız koparacak ve bir daha uzaktan bağlantı sağlayamayacaksınız. Benim başımada böyle bir durum geldi, lokal ağım 172 li /24 subnet’indeydi ve /16 lı subnet benim subnet’i yuttuğundan, çakışma gerçekleşti ve bağlantımı kopardı. Bu durumda konsol aracılığı ile sizin kendi belirlediğiniz subnet ile kurulum yapmanız gerekli yada subnet’i editlemelisiniz. Ben aşağıdaki göstereceğim yöntemle “systemd” kullanarak istediğim ortamı ayağa kaldırdım. Şimdi sırasıyla Ubuntu16’da ve Centos7/RedHat7 de bunu nasıl yapabiliriz, buna değinelim.

*Ubuntu16 da customize subnet ile Docker kurulumu

İlk önce “etc/systemd/system/” altına “docker.service.d” dizinini, “mkdir” komutunu kullanarak oluşturalım.

> sudo mkdir /etc/systemd/system/docker.service.d

İkinci olarak “/etc/systemd/system/docker.service.d/” altına “docker.conf” dizinini “touch” komutunu kullanarak oluşturalım.

> sudo touch /etc/systemd/system/docker.service.d/docker.conf

Ardından “docker.conf” dosyasının içine bir editör aracılığı(vim) ile aşağıdaki gibi doldurup, kaydedin.

docker.conf
[Service]

ExecStart=

ExecStart=/usr/bin/dockerd -H fd:// --bip=10.10.100.1/24

 

Gerekli systemd ayarlamalarını yaptık ve şimdi normal akışında kurulumu yaparak işlemleri tamamlayacağız.

Önce, resmi Docker repository için GPG anahtarını sisteme ekleyelim.

> curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –

Ardında Docker repo’sunu ekleyelim.

> sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”

Şimdi repolarımızı güncelleyelim.

> sudo apt-get update

Ve şimdi aşağıdaki komutla Docker’ı kuralım.

> sudo apt-get install -y docker-ce

Ardından gerekli kontrolleri sırasıyla yapıp, işlemlerimizi teyit edelim.

*CentOS7/RedHat7 da customize subnet ile Docker kurulumu

Gene “systemd” yi kullanarak işlemleri gerçekleştireceğiz.

İlk önce “etc/systemd/system/” altına “docker.service.d” dizinini, “mkdir” komutunu kullanarak oluşturalım.

> mkdir /etc/systemd/system/docker.service.d

İkinci olarak “/etc/systemd/system/docker.service.d/” altına “docker.conf” dizinini “touch” komutunu kullanarak oluşturalım.

> touch /etc/systemd/system/docker.service.d/docker.conf

Ardından “docker.conf” dosyasının içine bir editör aracılığı(vim) ile aşağıdaki gibi doldurup, kaydedin.

docker.conf
[Service]

ExecStart=

ExecStart=/usr/bin/dockerd --bip=10.10.100.1/24

Gerekli systemd ayarlamalarını yaptık ve şimdi normal akışında kurulumu yaparak işlemleri tamamlayacağız.

Docker’ı kurmadan önce aşağıdaki komutla gerekli paketleri indirip, kuralım.

> yum install yum-utils device-mapper-persistent-data lvm2 -y

Ardında Docker repo’sunu ekleyelim.

> yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

Şimdi aşağıdaki komutla Docker’ı kuralım.

> yum install docker-ce –y

Docker kurulduktan sonra sevisi çalıştırmak ve enable etmek lazım. Aşağıdaki komut ile yapabilirsiniz.

> systemctl enable docker.service

> systemctl start docker.service

Status’ ile son durumu kontrol edelim.

> systemctl status docker.service

Ardından gerekli kontrolleri sırasıyla yapıp, işlemlerimizi teyit edelim.

Bu arada servisi daha önceden kurduysanız “systemd” yapılandırmasını yaptıktan sonra aşağıdaki komutları çalıştırdığınızda sizin belirlediğiniz subnet overwrite olacak.

> systemctl daemon-reload

> systemctl restart docker.service

warning: remote host identification has changed

Ssh protokolü ile uzaktaki bir makinanıza bağlanmaya çalıştığınızda “warning: remote host identification has changed” uyarısını alıyorsanız muhtemelen ayını ip ile başka bir kurulum gerçekleştirmiş olabilirsiniz. Bu durumda ssh in çalışma prensibi doğrultusunda daha önceden ilgili ip için atanan public key numarası doğal olarak değiştiğinden ve sizin(yani ilgili kullanıcının) /.ssh/known_hosts dosyasında bulunan eski identification eşleşmediğinden bu hatayı almanız gayet doğal. Uyarıda genelde çalıştırmanız gereken komutu söyler, yukarıdaki resimde olduğu gibi fakat aşağıdaki screenshottan anlaşılacağı üzere ilgili komutu bildirmeye bilir de. Bu durumda da belirteceğimiz komutu yürütmeniz çözüm olacaktır.

> ssh-keygen -f “/home/fatihaslan/.ssh/known_hosts” -R 192.168.1.100

systemd-analyze blame Komutunu Keşfedelim – Redhat7, CentOS7, Ubuntu16

Bu makalemde çok hoş bir şekilde deneyimsellediğim bir durum ve komuttan bahsedeceğim. Bir komut nedir.? Diyebilirsiniz. Fakat sistem yöneticileri için özellikle de Linux Admin’leri için bir komut bile yeri geldi mi can kurtarıcı bir duruma dönüşebilir. Uzun süredir bakmadığınız yada başkası tarafından kurulup çalışan, sonradan yönetimi devraldığınız bir sunucuda yaşayabileceğiniz bir durum olabilir. Bende böyle bir durum oluştu ve RedHat Enterprise Linux 7 de açılışta bir problem yaşadım. Neydi bu problem.?

Sunucu RHEL 7 ama GUI de kurulu ve sunucu açılışta çok yavaş açılıyordu. User’lar, login ekranı dakikalar sonra geldi. Bir sorun olduğu belliydi ama onun dışında herhangi bir sorun yok sunucu canavar gibi çalışıyordu. Neyse tam bu noktada nedir problem.? Nasıl çözerim.? derken, bir komut keşfettim. Bu komut “system-analyze blame”. Bu komut kısaca analyze system boot-up performance, sistemin boot olmasında açılan servis ve uygulamaların başlangıç performansı olarak time bazında size yansıtacaktır ve sizde oradan alacağınız ip ucuyla sorunu giderebilirsiniz ki ben bu şekilde, belki de uzun süre uğraştıracak bir sorunu saniyeler içinde hallettim.

Bu komutun üzerinde durmamım bir diğer sebebi ise RedHat 7 de çalışmasıdır. Yani altı sürümlerde bu komut mevcut değil. Bu da tabi RHEL 7’nin kullanış seviyesini yansıtmaktadır. Tabi aynı şekilde CentOS 7 ve Ubuntu 16 ve üzerinde de bu komut mevcut.

Şimdi aşağıdaki screenshot’larla durumu daha detaylı inceleyelim.

Sistemi bir kere açmayı başarınca system-analyze blame komutunu çalıştırdım ve en geç açılan nfs.mount servisinin olduğunu gördüm.

> system-analyze blame

Ardından “/etc/fstab” dosyasını incelemeye aldım. Zaten açılışta bu problemin olması ve sistem boot olduğundan fstab dosyasını okuması şüpheyi kendi üzerine çekmeye yetiyordu. Ve en son satırda bir makinadan mount işleminin olduğunu gördüm. Tabi ki sistem boot olduğunda fstab dosyasını okuyup mount ediyor ve o hedefteki ip’li makinayı bulamadığı için açılış problemi olduğunu netti.

İnsert modda bu satırın başına # işareti koyup, kaydedip çıktım. Böylelikle o satırı yorum satırı olarak algılamasını sağladık. Ve sistemi reboot ettiğimde problemin çözüldüğünü gözlemledim. İyi çalışmalar.

NFS(Network File System) nedir.? NFS Server ve Kullanıcı Yapılandırması

Sun Microsystems tarafından geliştirilen Unix/Linux dosya paylaşım servisi olup, Linux sistemler arasında dosya paylaşamını sağlayan ve stabil çalışan bir teknolojidir. Tabi ki açık kaynak kodludur deyip bu kadar teorik bilgide noktalasak yeter herhalde.

Hemen yapılandırma ve kullanımına girmeliyiz. Ortamda Sunucu ve İstemci modeli ile çalışacağız. Yani Hem Server tarafında yapmamız gerekenler var hemde bunu Client ların kullanabilmesi için yapmamamız gerekenler var. Bunun için sanal ortamımı oluşturdum aşağıdaki gibi.

NFS Server’ımın ip bilgisi aşağıdaki gibidir.

NFS Client için de ip bilgisi aşağıdaki gibidir.

Herşeyden evvel genelde sunucular minimal kurulum yapıldığından NFS paketlerini kurmak gerek.

NOT : Bu paketleri hem sunucuda hem istemcide kurmalısınız. Aşağıdaki komut ile bu işlemi yapabilirsiniz.

> yum install nfs-utils nfs-utils-lib

Daha sonra servisin durumuna aşağıdaki komut ile bakın ve servisin hem çalışmadığını hemde disabled olduğunu görün.

> systemctl status nfs-server.service

Şimdi servisi alttaki komutla çalıştırın.

> systemctl start nfs-server.service

Daha sonra enabled durumuna çekin.

> systemctl enable nfs-server.service

Şimdi son duruma bakalım ve bu kısımın sağlıklı bir şekilde tamamlandığını görelim.

 

* Server – Sunucu tarafı

Şimdi sunucuda yapılandırmaya başlayalım. Tabi burada sizin ortamınıza göre planlama yapmanız gerekiyor. Yani NFS için ayıracağınız alanı belirleyip bunun için hususi ayrı bir disk, storage de kullanabilirsiniz ki bu yöntem her zaman daha sağlıklıdır. Ben sunucu tarafında belirlediğim disk alanına MePaylasNFS diye bir dizin oluşturuyorum.

Mkdir komut ile MePaylasNFS klasörünü oluşturuyorum. Ardından cd komutu ile içine girip test için dosya ve klasörler oluşturuyorum.

> mkdir MePaylasNFS

Paylaşım yapılandırmayı “/etc/exports” config dosyası yardımıyla gerçekleştireceğiz. Herhangi bir editör yardımıyla buraya girip oluşturduğumuz MePaylasNFS klasörünü herkes için(“*” işareti herkes bağlanıp kullanabilir manasına gelir, eğer belirli makinalar için yapacaksanız “*” yerine makinanın ip’ni girmelisiniz). Ardından nfs servisini yeniden başlatın.

> systemctl restart nfs-server.service

exportfs” komutu yardımıyla sunucudaki tüm paylaşımlarımızı listeleyebiliriz.

> exportfs

Birde “showmount -e localhost” komutunu çalıştırıp, burdan da paylaşımları gözlemleyelim.

 

* Client – Kullanıcı tarafı

Şimdi client tarafında yapılandırmaya girişelim. Paylaşımı kullanacak tarafta paylaşılan alanı mount edeceğiz. Mount için bir hedef yani klasör oluşturalım. Ben NFSKullan adında bir klasör oluşturuyorum.

> mkdir NFSKullan

Şimdi aşağıdaki gibi sunucunun ip(192.168.2.250) bigisiyle mount edelim.

> mount 192.168.2.250:/ MePaylasNFS /NFSKullan

Direk mount komutu ile durumu gözlemleyebilirsiniz. Ayrıca NFS servisinin de versiyon 4 olduğunu görün.

> mount

df -h komutu ile gözlemleyelim.

> df -h

Paylaşım noktasını ls -l ile listeleyelim, verileri kullanabildiğimizi gözlemleyelim. Bu bilgiler aslında sunucuda.

> ls -l /NFSKullan

Son kontrol amacı ile “showmount -e 192.168.2.250(Server ip bilgisi)” komutunu çalıştırıp değişimi gözlemleyelim.

> showmount –e 192.168.2.250

Herşey bittimi.? Tabi ki HAYIR.! Çünkü bu kullanıcı makinası reboot olduğunda mount bilgisi kaybolacak ve NFS paylaşımını kullanamayacak. Bunu sabit kılmak ve sürekli kullanıcı makinası reboot olsa da kullanabilir yapmak için/etc/fstab” dosyasına mount noktasını yazacağız. Herhangi bir editör yardımıyla bu yapılandırma dosyasına girelim ve aşağıdaki şekilde yapılandıralım(boşluklar tab tuşuyla oluşturuldu), kaydedip çıkalım.

# 192.168.2.250:/MePaylasNFS       /NFSKullan       nfs4       rw,sync       0 0

Hayırlı olsun.

Merkezi Log Server Oluşturma – Rsyslog

Sistem adminleri, Network yöneticileri, Güvenlik uzmanları, Yazılımcılar ve hatta Hacker için bile olmazsa olmaz bişey varsa oda sistemde var olan log lar yada oluşacak log lardır. Log ların hayatımızdaki yeri ve önemi tartışılmazdır. Çünkü log lar aracılığı ile bir çok sorunun ve problemin üstesinden geliriz. Analiz gerçekleştirir, sistemlere olan saldırıları hatta öncesinde yapılmış saldırıları keşfederiz. Aslında daha fazla yazılacak teorik çok şey var fakat ben çok fazla uzatmak istemiyorum. Log, loglama deyince akan sular durur ve herkesin az çok bilgisi vardır. Ben hemen yapmak istediğim ortamı hayata geçireyim.

Ne yapmak istiyorum.? Ortamda merkezi bir log server oluşturmak istiyorum. Yani tüm sunucularımın, firewall yada benzeri cihazlarımın yada göndermek istediğim ne varsa log olarak, tek bir merkezi log sunucu oluşturup ona göndermek istiyorum. Bunun faydalarına gelince zaten aklınızda bir sürü ışık yanmıştır. Örneğin bence bu log server ı daha sonra 5651 yasasına göre değerlendirebilirsiniz yada sistemleriniz herhangi biri saldırıya uğradığında hacker bulunduğu o server daki log ları temizleyebilir fakat log server a erişimi olmadığından ordaki log lara dokunamayacak ve siz bu log ları rahatlıkla değerlendirebileceksiniz.

Ben senaryoyu iki sanal Linux sunucuda Syslog(rsyslog) servisini kullanarak gerçekleştireceğim. Sunuculardan biri client olacak, log basacak diğeri de log server olacak ve log ları üstüne çekip barındıracak. Bunu kullanıcı tarafında ve Log server tarafında bir kaç ayarlama ve yapılandırmayla sağlayacağız.

Ama öncesinde Log yapılarından, seviyelerin bahsedelim. Log lar facility ve severity – level olarak iki sütunda inceleyecek olursak eğer facility.level olarak belirlesek yanlış olmaz. Yani facility olarak (none, kernel, mail, cron, authpriv, user) desek, level olarak (emerg, critical, alert, err, info, debug) olarak ele aldığımızda; örneğin sistemdeki tüm herşeyin sadece hata log larını almak için (*.err kullanabiliriz.) yada bilgi mesajları ve yukarı doğru içerdiği log ları almak için (*.info kullanabilirsiniz.). Yukarı doğru derken hemen onu da açıklayalım. Mesela level-seviye olarak info seçilmiş ise içinde(emerg, critical, alert, err uda barındırmaktadır.), Seviyelerden en konuşkanı debug tır. Tüm her hareketi log lar.

 user.emerg yada user.err yada user.info gibi gibi kullanabilirsiniz.

 

 

Her Linux sistemde (“/etc/rsyslog.conf”) mevcut olan bir kaç satırdan bahsedeyim ve bahsedersek mevzu daha iyi anlaşılacaktır.

*.info;mail.none;authpriv.none;cron.none /var/log/messages      Burada sistemdeki her facility i (*) info seviyesinde al (*.info;) fakat mail,authpriv ve cron u alma, neden çünkü onları /var/log/ içerisinde başka bir dosyaya aldıracak, yapılandırmayı yapacak. Aşağıdaki screenshot ta durum daha net anlaşılacak.

Ayrıca Linux ta log lar için özelleştirilmiş local soketler bulunmaktadır. Daha fazla ayrıntı için syslog linkini ziyaret edin.

Bu kadar teorik bilgiden sonra hemen yapılandırmaya girişelim. Çünkü loglardan gene ve /var dizini /var/log dizininden ayrıntılı olarak yeri geldi mi bir başka makalede bahsedeğiz. Bir kullanıcı makinasından(192.168.2.71) log göndereceğimiz için orada yapılandırma yapacağız, ikinci olarak da log sunucuda(192.168.2.150) logları alabilmek için yapılandırma yapıp, işlemleri de teyit ettikten sonra makaleyi noktalayacağız.

 

*Server tarafında yapılandırma

Yapılandırmayı “/etc/rsyslog.conf” dosyasından gerçekleştireceğiz. Vi, vim yada nano editörü ile dosyanın içine giriyoruz. Ben vim i tercih ediyorum çünkü satırları renklendiriyor.

> vim /etc/rsyslog.conf

Bu dosyanın içerisinde; son iki satırda bulunan Modload ve Input satırlarındaki “#” işaretini siliyoruz.

Durum aşağıdaki gibi olacak, dosyayı kaydedip çıkın.

Ardından aşağıdaki komutla servisi restart edin.

> systemctl restart rsyslog.service

 

*Kullanıcı tarafından yapılandırma(Logları yönlendirelim);

Tüm log ları info seviyesinde göndereceğim.

Gene bir editör aracılığı ile “/etc/rsyslog.conf” yapılandırma dosyasına girelim. Ve aşağıda resimdeki gibi yapılandırıp, kaydedip çıkalım. Bu arada @(udp), @@(tcp) dir.

> vim /etc/rsyslog.conf

NOT: bu log ları lokalde tutmak istemiyorsanız, dosyanın içindeki yapılandırma satırları silebilir yada satırların başına “#” işareti koyarsanız, satılar yorum satırı olarak algılanacak ve log lar sadece log ları yönlendirdiğiniz sunucuda barınacaktır.

Şimdi burada da servisi restart edelim.

> systemctl restart rsyslog.service

NOT2: Ayrıca input girdilerini(log yönlendirme) aşağıdaki gibi daha spesifik olarak /etc/rsyslog.d/ (/etc/rsyslog.d/YntmLog.conf gibi) içine dosya olarak oluşturup, yönlendirebilirsiniz.

—–   >> “/etc/rsyslog.conf içine yazılacak.”

$ModLoad imfile

—–   >> “/etc/rsyslog.d/YntmLog.conf içine yazılacak, aslında /etc/rsyslog.conf içine de yazılabilir.”

##remote syslog settings

$InputFileName /var/log/httpd/access_log

$InputFileTag celery

$InputFileStateFile celery-file1

$InputFileSeverity info

$InputFileFacility local5

$InputRunFileMonitor

$InputFilePersistStateInterval 1000

local5.* @192.168.2.150

 

Şimdi sıra yaptığımız işlemi teyit etmekte. Bunu da “logger” komutu ile yapacağız. Yani o komut ile dışarıdan custom bir log üreteceğiz.

> logger -p user.info “Bu mesajı info seviyesinde oluşturduk ve log sunucuda görmeliyiz.”

Şimdi Log sunucusunda görebildiğimizi teyit edelim.

Bu arada sunucular arasında network erişimi ve 514 port’undan erişime açık olmalıdır.

Linux Trap Command Usage (Signals Catch) – Linux tuzak komutu kullanımı (Sinyalleri Yakalama)

Linux tarafında kullanışlı bir komuttan bahsetmek istiyorum. Bu komut daha çok sistem yöneticilerinin işine yarayacak türden olabilir. Kullanıcı tarafında bir işlem çalıştırıp, bitene kadar sürmesini isteyebilirsiniz (bu bash script leriniz olabilir) ve bunun kullanıcı tarafından sonlandırılmasını da engellemeniz gerekiyor gibi bir örnek vererek açıklamak doğru olacaktır. Tam da burada devreye trap komutu giriyor. Kafanızda nedir bu trap dediğinizi duyar gibiyim sanki. Trap komutu Linux sistemlerinde var olan sinyalleri yakalamaya yarayan bir komuttur. Ctrl + C (SIGINT) gibi, kill -15 (SIGTERM) gibi, kill -9 (SIGKILL) gibi gibi. Aslında Kill komutundan daha öncesinde bahsetmem gerekiyordu. Bir başka makalede ona değineceğiz, aklıma gelmişken trap komutunu aradan çıkarayım. Hem pekişmiş olur.

Aşağıdaki komut ile trap in yakalayabileceği sinyalleri listeleyelim.

> trap -l

Şimdi Ctrl + C sinyalini engelleyelim, yani kullanıcı istediği kadar ctrl+c ye bassın çalışan herhangi bir işlemi bu yöntemle sonlandıramayacaktır. Bunu aşağıdaki komut ile hayata geçire biliriz.

> trap — ” SIGINT yada trap ” 2 yada çift tırnak fark etmez ama tırnak koymalısınız.

Şimdi sleep 10 komutu(10 saniye bekle) ile işlemimizi test edelim. Ve aşağıda göreceğiniz gibi kaç kere olursa olsun ctrl+c tuşuna basıp kesme sinyali gönderirsem göndereyim, sinyal işe yaramıyor.

> sleep 10

Oluşturduğunuz trap lerin listesine aşağıdaki komutla ulaşabilirsiniz.

> trap -p

Trap leri kaldırmak için yani eskisi gibi sinyallerin çalışması için yaptığını sinyallere karşın komutu aşağıdaki gibi çalıştırın.

> trap SIGINT yada trap 2