Ubuntu/Debian Sunucular için internet bağlantısı (INTRANET) olmadan, OFFLINE olarak APT/APT-GET kullanarak paket ya da servis kurma işlemleri

Bu işi yapabilmek için en temel olarak elinizde servise ait paketin ve o pakete ait bağımlı paketlerin(dependency) hepsinin olması gerekiyor. Tabi bu bir işlem. İkinci aşama olarak elinizde paketler mevcut ise dpkg komutu ile kurulum sağlayabilirsiniz ama herhangi bir sebepten ötürü apt paket yöneticisine kullanarak kurmanız gerekiyorsa buda mümkün.

Bunun için ilk olarak internetli bir makineye ihtiyacımız var. Bu aşamada kurulum yapacağımız ilgili servis için paketi ve paket bağımlılıklarını(dependency) bulup, ilgili paketleri toparlamamız gerekiyor. Beraberinde apt’yi kullanabilmek için bir iki işlem yapacağız.

Neler yapacağız:

İlk olarak internet’li makinede;

1- Eğer kuracağımız paket varsayılan(default) olarak ubuntu ya da debian repo’sunda yoksa paket repo’su “/etc/apt/source.list” ya da source.list.d dizini altına eklenmelidir.

2-apt update/apt-get update” komutu ile source list index’ini güncelleyeceğiz. İlgili dizin yolu(directory) /var/lib/apt/lists/ altında yer almaktadır. 

3- Eğer ilgili servise ait (örnek servis için nginx kullanacağız) tüm paketleri bağımlılıklarıyla beraber görmek isterseniz “apt depends nginx” komutunu kullanabilirsiniz.

4- Şimdi “apt-get -qq –print-uris install nginx > nginx-paket-list” komutu ile nginx servisine ait bağımlı paketlerle beraber tüm paketlerin listesini “nginx-paket-list” dosyasına yazdırdık.

            NoT: “apt-get -qq –print-uris upgrade > upgrade-paket-list” komutu ile offline olarak makineleri yükseltme işlemi bile yapabilirsiniz.

5- Şimdi yukarıdaki listeden de anlaşılacağı üzere listedeki paketleri ilgili linklerden otomatik olarak tek seferde indirebilmek için “awk ‘{print “wget ” $1}’ < nginx-paket-list > nginx-paket-list.sh” komutu çalıştırıyoruz.

6- Oluşturduğumuz dosyaya “chmod u+x nginx-paket-list.sh” komutla çalıştırma yetkisi verelim.

7- Son olarak sh dosyasının “./nginx-paket-list.sh” çalıştıralım. Ve tüm paketlerin indiğini görebilirsiniz.

İkinci olarak internetsiz (INTRANET) makinede, OFFLINE olarak apt ile kurulum yapabilmek için taşıma işlemleri yapacağız. İnternetli makineden, internetsiz makineye doğru herhangi bir şekilde(usb, kopyalama, cd vs);

1- İnternetli makinede güncellediğimiz source list index’ini, internetsiz makinede ki “/var/lib/apt/lists/” altına taşıyoruz.

2- İnternetli makinedeki “/etc/apt/source.list” ve eklediyeseniz source.list.d dizini aynen internetsiz makineye taşıyorsunuz.

3- İnternetli makinede indirdiğiniz tüm *.deb paketlerini, internetsiz makinede ki “/var/cache/apt/archives/” dizini altına gönderiyorsunuz.

Daha sonra internet olamayan makinede yapmanız gereken tek şey “apt install nginx” işlem tamam. Böylelikle offline olarak apt’yi kullanarak paket yükleyip, servisleri aktif edebilirsiniz. Hatta makineleri yükseltebilirsiniz.

DPKG ile kurulum;

Hazır paketleri indirmişim, ne gerek var apt’ye bu kadar çileye derseniz, sadece paketleri taşıyıp “dpkg -i * ya da tüm_paket_isimleri” demeniz yeterli. =)

Referans: debian.org.tr

25-26 Ocak 2020 – Ücretsiz Open Source ve Linux Administrator Eğitim Etkinliği Hakkında

Sosyal sorumluluk çerçevesinde üstlendiğim projem ve aynı zamanda Opensource dünyası ile beraber Linux sistemlerin öneminin, gerekliliğinin, farkındalığının oluşturulması, sektörde çalışan ya da öğrenci genç arkadaşlara yön vermek, farkındalık oluşturmanın yanısıra bilgi ve becerileri arttırmak amacıyla ücretsiz olarak Linux Administrator eğitimini 25-26 Ocak 2020 tarihlerinde gerçekleştirdim.

Eğitimi RedHat ve LPI içeriklerinden derleyerek, RedHat/CentOS ve Ubuntu/Debian dağıtımlarını taban alarak, aralarındaki farkları belirterek, karşılaştırmalı olarak, çok kapsamlı, tüm yönleriyle ve aynı zamanda IT sektörünün genel olarak tüm alanlarına hitap eden, dolu dolu ve zengin bir içerikle iki günlük yoğun bir tempo ile uygulamalı olarak sunmaya çalıştım.

Başlangıç(temel) seviye ve orta seviye olan bu içerik, ileri seviye linux bilgilerine de göz kırpmaktadır.

Ücretsiz olan bu eğitime katılım formunu oluşturup, formu linkedin hesabımdan yayınlayarak, formu dolduran arkadaşlar arasından katılımcı listesini belirledim.

İki güne sığmayacak kadar kapsamlı ve benzersiz olarak, büyük emekle hazırladığım bu eğitimi bir şekilde sığdırmaya çalıştım. Verimli olabildiysem, farkındalığı oluşturabildiysem ne mutlu.

Son olarak iki günün sonunda ve özeti olarak, oyun tadında, eğlenceli bir uygulama gerçekleştirdik. Tüm puanları toplayıp ilk üçe giren arkadaşları tebrik ederim.

Docker Container’a erişim için Host’un Nic portu üzerinden erişim izni – Firewalld port açma / Docker Container’ın İnternete Yönlendirme işlemi

  • How to configure firewalld to allow docker containers free access to the host’s network ports.?

Burada dikkat etmeniz gereken container için host’ta match ettiğiniz portu güvenlik duvarı rule’sinde belirtmelisiniz. Ben 8080 portunu host’ta eşleştirdiğim için onu rule’de tanımlayacağım. Yani tarayıcıdan 8080 üzerinden contaniner’a erişeceğim.

Sırasıyla aşağıdaki komutları çalıştırmanız yeterlidir.

firewall-cmd –permanent –zone=trusted –change-interface=docker0
firewall-cmd –permanent –zone=trusted –add-port=8080/tcp
firewall-cmd –reload

  • Enable forwarding from docker containers to the outside world.?

Docker Container’ınızın internete çıkabilmesi için aşağıdaki işlemleri yapmanız yeterlidir.

systctl komutu ile net.ipv4.conf.all.forwarding değerini 1 yapmalısınız. Ardından iptables yada firewalld forward rule’sini tanımlamanız yeterli.

sysctl net.ipv4.conf.all.forwarding=1
sudo iptables -P FORWARD ACCEPT

ya da

firewall-cmd –direct –add-rule ipv4 filter FORWARD 0 -i docker0 -o ens3 -j ACCEPT
firewall-cmd –reload

Docker Compose Kurulum/Kaldırma ve Custom Bridge ile Çalıştırma İşlemleri

İlgili sunucuda Docker kurulumunun yapıldığını var sayarak konuya giriş yapalım. Docker Compose up edildiğinde kendisi için farklı bir bridge oluşturup network yapılandırmalarını o bridge üzerinden yapmaktadır. Fakat biz Docker kururken varsayılan olarak gelen ya da custom olarak bizim oluşturuduğumuz subnet‘teki network bridge‘yi kullanarak Docker Compose uygulamalarını up yapmak istiyoruz. Bunun için aşağıdaki yönergeleri takip etmeniz yeterlidir.

İlk önce aşağıdaki komut ile Docker Network çıktımıza bakalım(biz bridge sanal aygıtını kullanacağız).

  • sudo docker network ls

Docker Compose kurulum işlemi için aşağıdaki komutları sırasıyla çalıştırmanız yeterlidir;

  • sudo curl -L “https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
  • sudo chmod +x /usr/local/bin/docker-compose
  • sudo docker-compose –version

Custom bridge ile Docker Compese yml çalıştırma(örnek wordpress yml dosyası – docker-compose up -d);

version: ‘3.3’
services:
db:
image: mysql:5.7
restart: always
volumes:
– db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wordpress
network_mode: bridge

wordpress:
image: wordpress
restart: always
volumes:
– ./wp_data:/var/www/html
ports:
– “8080:80”
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: password
network_mode: bridge
depends_on:
– db

volumes:
db_data:
wp_data:

networks:
default:
external:
name: bridge

Docker Compose kaldırma işlemi;

  • sudo rm /usr/local/bin/docker-compose

21-22 Eylül 2019 – Ücretsiz Open Source ve Linux Administrator Eğitim Etkinliği Hakkında

Sosyal sorumluluk çerçevesinde üstlendiğim projem ve aynı zamanda Opensource dünyası ile beraber Linux sistemlerin öneminin, gerekliliğinin, farkındalığının oluşturulması, sektörde çalışan ya da öğrenci genç arkadaşlara yön vermek, farkındalık oluşturmanın yanısıra bilgi ve becerileri arttırmak amacıyla ücretsiz olarak Linux Administrator eğitimini 21-22 Eylül 2019 tarihlerinde gerçekleştirdim.

Eğitimi RedHat ve LPI içeriklerinden derleyerek, RedHat/CentOS ve Ubuntu/Debian dağıtımlarını taban alarak, aralarındaki farkları belirterek, karşılaştırmalı olarak, çok kapsamlı, tüm yönleriyle ve aynı zamanda IT sektörünün genel olarak tüm alanlarına hitap eden, dolu dolu ve zengin bir içerikle iki günlük yoğun bir tempo ile uygulamalı olarak sunmaya çalıştım.

Başlangıç(temel) seviye ve orta seviye olan bu içerik, ileri seviye linux bilgilerine de göz kırpmaktadır.

Ücretsiz olan bu eğitime katılım formunu oluşturup, formu linkedin hesabımdan yayınlayarak, formu dolduran arkadaşlar arasından katılımcı listesini belirledim.

İki güne sığmayacak kadar kapsamlı ve benzersiz olarak, büyük emekle hazırladığım bu eğitimi bir şekilde sığdırmaya çalıştım. Verimli olabildiysem, farkındalığı oluşturabildiysem ne mutlu.

Son olarak iki günün sonunda ve özeti olarak, oyun tadında, eğlenceli bir uygulama gerçekleştirdik. Tüm puanları toplayıp ilk üçe giren arkadaşları tebrik ederim.

OpenStack Ansible Network Configuration, Bonding, Mtu, Vlan, Br-vlan, Br-vxlan With NETPLAN On Ubuntu 18

İ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/netplan/50-cloud-init.yaml” 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.

#This file is generated from information provided by
#the datasource.  Changes to it will not persist across an instance.
#To disable cloud-init’s network configuration capabilities, write a file
#/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
#network: {config: disabled}
network:
    bonds:
        bond0:
            interfaces:
            – enp6s0f0
            – enp7s0f0
            mtu: 9000
            parameters:
                lacp-rate: fast
                mode: 802.3ad
                transmit-hash-policy: layer2
        bond1:
            interfaces:
            – enp6s0f1
            – enp7s0f1
            parameters:
                lacp-rate: fast
                mode: 802.3ad
                transmit-hash-policy: layer2
    ethernets:
        eno1: {}
        eno2: {}
        enp0s20f0u1u6: {}
        enp6s0f0:
            mtu: 9000
        enp6s0f1: {}
        enp7s0f0:
            mtu: 9000
        enp7s0f1: {}
    version: 2
    vlans:
        bond0.10:
            id: 10
            link: bond0
            mtu: 9000
        bond0.20:
            id: 20
            link: bond0
            mtu: 9000
        bond0.21:
            id: 21
            link: bond0
            mtu: 9000
        bond1.30:
            id: 30
            link: bond1
        bond0.32:
            id: 32
            link: bond0
            mtu: 9000
    bridges:
        br-ext:
            interfaces: [bond0.32]
            addresses:
                – 10.1.10.34/24
            gateway4: 10.1.10.1
            nameservers:
                addresses:
                    – 10.10.10.5
            parameters:
                stp: false
                forward-delay: 0
            mtu: 9000
        br-mgmt:
            interfaces: [bond0.10]
            addresses:
                – 172.29.236.180/22
            parameters:
                stp: false
                forward-delay: 0
            mtu: 9000
        br-iscsi:
            interfaces: [bond0.20]
            addresses:
                – 172.29.244.180/22
            parameters:
                stp: false
                forward-delay: 0
            mtu: 9000
        br-nfs:
            interfaces: [bond0.21]
            addresses:
                – 172.29.248.180/22
            parameters:
                stp: false
                forward-delay: 0
            mtu: 9000
        br-vxlan:
            interfaces: [bond1.30]
            addresses:
                – 172.29.240.180/24
            parameters:
                stp: false
                forward-delay: 0
        br-vlan:
            interfaces: [bond1]

Son olarak aşağıdaki komutu çalıştırın fakat mtu değerlerinin geçerli olması için “reboot” olmalıdır.

> netplan apply

oVirt Debian/Ubuntu Guest Agent Kurulumu ve Yapılandırması – Sorun Çözüldü

oVirt ortamına kurduğunuz Debian/Ubuntu makineler için aşağıdaki komutu çalıştırarak ovirt-guest-agent servisini kurabilirsiniz.

> sudo apt install ovirt-guest-agent -y

Fakat servis durumunu kontrol ettiğinizde aşağıdaki gibi hata aldığınızı göreceksiniz.

Aşağıdaki yönergeleri izleyerek hataları giderip, servisi sağlıklı bir şekilde çalıştırabilirsiniz.

İlk önce “ovirt-guest-agent.service” servis dosyasını edit edip, “User=root” olarak değiştirelim(servisin root haklarında çalışmasının, güvenlik tarafındaki oluşturabileceği sıkıntılara şimdilik değinmiyorum).

> sudo vi /lib/systemd/system/ovirt-guest-agent.service

User=root

Ardından aşağıdaki komutu çalıştırın.

> systemctl daemon-reload

Akabinde aşağıdaki komutla device’leri listeleyebilirsiniz. Çünkü “ovirt-guest.agent.0” aygıtını kullanacağız.

> ll /dev/virtio-ports/

Şimdi “ovirt-guest-agent.conf” dosyasını aşağıdaki gibi yapılandıralım.

> sudo vi /etc/ovirt-guest-agent.conf

[virtio]
# device = /dev/virtio-ports/com.redhat.rhevm.vdsm
device = /dev/virtio-ports/ovirt-guest-agent.0

Son olarak aşağıdaki komutları sırasıyla çalıştırın. İşlem bu kadar.

> sudo systemctl enable ovirt-guest-agent.service

> sudo systemctl start ovirt-guest-agent.service

> sudo systemctl status ovirt-guest-agent.service

Fiziksel HP Gen9 Sunucuda OS Boot Ekleme – Kaybolan OS GRUB Ekleme on Linux

HP sunucularda genelde fiziksel board değişiminden sonra işletim sistemi disk üzerinden açılmaz. Bunun nedeni sunucu başlangıç diski olarak MBR’ı görmemesidir. Bu işlemi göstereceğimi şekilde işletim sisteminin kurulu olduğu diski manuel olarak göstererek grub’ın boot olmasını sağlayacağız.

1. Sunucu başladıktan sonra F9’a basılarak System Utilities gidilir.

2. System Configuration seçilir.

3. BIOS/Platform Configuration seçilir.

 Boot Options seçilir.

5. Advanced UEFI Boot Maintenance seçilir.

6. Add Boot Option seçilir.

7. Bu kısında işletim sisteminin yüklü olduğu disk otomatik olarak gelecektir, seçip devam edelim.

8. EFI seçilir.

9. Bizde Linux Ubuntu yüklüydü geldi, seçilip devam edilir.

10. grub64.efi seçip devam ediyoruz.

11. Burda yüklü işletim sistminin adını yazmak mantıklı,

12. Enter ile menüye girilir.

13. Bizde ubuntu yüklü olduğu için ubuntu yazıp devam ediyoruz.

14. F10 ile işlem kaydedilir.

15. Boot Options seçeneğine tekrar gidilir ve en altta geldiği görülür.

16. Burda + ve – ile listenin en üstüne ubuntu sekmesi getirilir ki işletim sistemi direk açılsın.

17. F10’a basarak yapılandırmalar kaydedilir ve sunucu yeniden başlatılarak, sunucunun diskteki OS’den başlaması sağlanmış olur.

Linux Sistemlerde Açık Portların Kontrolü – netstat – lsof

İşletim sisteminde hizmet veren her servis bir port üzerinden hizmet verir. Bu nedenle sistem yöneticisinin sistem üzerinde bu portlara hakim olması gerekiyor. Farkında olunmadığı ya da gizli kalmış açık bir port bulunmamalıdır. Çünkü bu portlar aracılığı ile dış dünyaya yani internete servis sunulmaktadır. Bu nedenle internete açık bağlantıların belirlenmesi kritik bir görevdir ve öneme sahiptir. İşletim sisteminizde tcp ve udp olarak açık olan port ve servisler “netstat” ve “lsof” yardımıyla tespit edilebilir.

> netstat -plntua

> lsof -i -n | egrep -i listen

HAProxy ve Nginx x-forwarded-for (Client ip lerin loglanmasını sağlamak)

HAProxy için herbir backend yapılandırmanızda aşağıdaki satır bulunmalıdır.

option forwardfor

Nginx için “/etc/nginx/nginx.conf” yapılandırma dosyasını aşağıdaki gibi yapılandırmalısınız.

log_format main ‘$http_x_forwarded_for ($remote_addr) – $remote_user [$time_local] ‘
‘”$request” $status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent”‘ ;

access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;

Ardından servisi yeniden başlatın.

> systemctl restart nginx.service (service nginx restart ya da /etc/init.d/nginx restart)

Daha sonra aşağıdaki komut ile son durumu gözden geçirebilirsiniz.

> tail -f /var/log/nginx/access.log

UFW – Uncomplicated Firewall

UFW(Uncomplicated Firewall) Ubuntu Linux’lar için varsayılan olarak gelen güvenlik duvarı aracıdır.

Ufw (Uncomplicated Firewall)’nun iptables’a alternatif olmasında ki en büyük etken güvenlik duvarı olarak kullanıcıya kolay kullanım sağlamasıdır. Bu yüzden Linux topluluğu tarafından kısa zamanda desteklenip, popüler hale gelmiştir ve birçok dağıtımda gömülü bir şekilde gelmektedir.

Ufw sistemde inactive olarak gelmektedir. Çalışır vaziyete getirmek için active hale getirilmelidir. Bunun için aşağıdaki komutu kullanılabilir.

Ufw’yu active hale getirmek için,

> sudo ufw enable

Tekrar inactive mode’ye getirmek için,

> sudo ufw disable

Aslında her güvenlik duvarı yönetiminde işleri kolaylaştıracak ve güvenliği sağlayacak ilk hareket içerden dışarı çıkışları serbest hale getirmek, dışardan içeri girişleri ise engellemektir.

NoT : Hatta içerden dışarı ağ akışını daha sıkı hale getirebilirsiniz, yani lokaldeki kullanıcıları içerden dışarı çıkışta da sınırlandırılabilir. Yalnızca ve gerekmedikçe varsayılan olarak 80 ve 443 portlarını açık bırakıbilir. Bunun için “sudo ufw default deny outgoing” komutunu çalıştırdıktan sonra 80 ve 443’e izin vermek için kural girilmelidir (ilgili kuralları aşağıda gösterilecektir). Tabi bu durum beraberinde yönetim zorluğuyla beraber kural sıklığını da getirecektir.

Dışardan içeri gelen paketleri engellemek için,

> sudo ufw default deny incoming

İçerden dışarı çıkan paketlere izin vermek için,

> sudo ufw default allow outgoing

Servis bazında; ssh servisine izin vermek için,

> sudo ufw allow ssh

 

Servis bazında; ssh servisine engellemek için,

> sudo ufw deny ssh

 

Port bazında izin vermek için,

> sudo ufw alllow 22/tcp

> sudo ufw allow 53/udp

 

Port bazında engellemek için,

> sudo ufw deny 22/tcp

 

Port aralığına izin vermek için,

> sudo ufw allow 1500:2500/tcp

> sudo ufw allow 1500:2500/udp

 

Port aralığını engellemek için,

> sudo ufw deny 1500:2500/tcp

> sudo ufw deny 1500:2500/udp

 

İp’ye izin vermek için,

> sudo ufw allow from 192.168.0.25

 

İp’yi engellemek için,

> sudo ufw deny from 192.168.0.25

 

Var olan, izin verilmiş kuralı silmek için,

> sudo ufw delete allow ssh

> sudo ufw delete allow 80/tcp

> sudo ufw delete allow 1500:2500/tcp

 

Var olan, engellenmiş kuralı silmek için,

> sudo ufw delete deny ssh

> sudo ufw delete deny 80/tcp

> sudo ufw delete deny 1500:2500/tcp

 

Şimdi “sudo ufw status numbered” komutu ile yapılan kurallar listelenecektir.

Yukarıda numbered parametresi ile görüntülenen kurallar aşağıdaki gibi sıra numarasına göre de silinebilir.

> sudo ufw delete [number]

Tüm kuralları “sudo ufw status” ile beraber verbose parametresini ekleyerek de her ayrıntı görüntülenebilir.

> sudo ufw status verbose

Tüm kuralları sıfırlamak yani ufw’yu varsayılana, default(fabrika çıkışına)’a çekmek için aşağıdaki komutu kullanılabilir.

> sudo ufw reset

Ayrıca ufw güvenlik duvarı için log‘lamayı aktif/pasif etmek için aşağıdaki komutu kullanabilirsiniz. Log takibini ise “/var/log/syslog” dosyası üzerinden yapabilirsiniz.

> sudo ufw logging ON/OFF

IP Tables

IPTables netfilter takımı ve birçok destekleyici tarafından geliştirilen güvenlik duvarı yazılımıdır.

Komutlar için kullanılan kavramlar,

            ACCEPT : Gelen paketleri kabul eder.

            DROP : Gelen paketleri düşürür. Kullanıcıya bilgi vermez.

            REJECT : Gelen paketleri reddeder ve kullanıcıya bilgi verir.

            FORWARD : Gelen paketleri yönlendirir.

            INPUT : Gelen paketleri temsil eder.

            OUTPUT : Giden paketleri temsil eder.

Aşağıdaki komut ile iptables detaylarını görüntüleyebilirsiniz. Henüz yapılandırılmamış iptables görüntüsü aşağıdaki gibidir.

> iptables -L

Fakat komutu “iptables -L –line-numbers” olarak kullanmanız önerilir çünkü kurallar satır numarasıyla görülür. Bu komut kuralları silmek için gerekecektir.

Aşağıdaki komut ile yerel makineden 192.168.1.25 ip’sine çıkışı engelleyen kural girilebilir. “Iinput kural girmek manasına gelmektedir, “OUTPUT” dışarı çıkarken, “ddestination hedef, “jjump kurala uyan paketler manasındadır.

> iptables -I OUTPUT -d 192.168.1.25 -j DROP

Ya da domaine,

> iptables -I OUTPUT -d fatlan.com -j DROP

Ddelete, silme manasındadır ama öncesinde “iptables -L –line-numbers” komutunu çalıştırılır ki oluşturulan kurallarının satır numarası görüntülenir ve o satır numarasına göre silme işlemi yapılır. İp’li kural 2.satırda, domainli kural 1.satırda.

> iptables -D OUTPUT 1

Ya da

> iptables -D OUTPUT 2

Şimdi dışardan bize doğru gelen istekleri engelleyen bir kural yazılacaktır. Şöyle 192.168.1.25 ip’sinden gelen paketler engellenir.

> iptables -I INPUT -s 192.168.1.25 -j REJECT

Tüm istekleri değil de sadece 80 portundan çıkan istekler engellenir. “–dport” yerine “sport” da kullanabilirsiniz.

> iptables -I OUTPUT -p tcp –dport 80 -j DROP

Sadece dışardan gelen isteklerde 80 portu açılacaktır.

> iptables -I INPUT -p tcp –dport 80 -j ACCEPT

Şimdi bize doğru gelen ping paketleri engellenecektir.

> iptables -I INPUT -p icmp –icmp-type echo-reply -j DROP

Local makinenin ping atmasını engellenecektir.

> iptables -I OUTPUT -p icmp –icmp-type echo-request -j DROP

Şimdi bütün kurallar girildikten sonra tekrar listelenecektir.

> iptables -L –line-numbers

INPUT ya da OUTPUT girdilerini komple temizlemek için aşağıdaki komut.

> iptables -F INPUT ya da OUTPUT

Tüm kuralları temizlemek için de aşağıdaki komut kullanılır ve komutu çalıştırdıktan sonraki görüntü aşağıdaki gibidir.

> iptables -F

HAProxy(LoadBalancer) ve Keepalived(Cluster) Kurulum ve Yapılandırması

HAProxy, yüksek erişilebilirliğe(high availability) sahip yük dengeleyici(load balancing) ile TCP ve HTTP tabanlı uygulamalar için proxy sunucusu hizmeti veren açık kaynak kodlu bir yazılımdır.

Keepalived, IP failover(yük devretme) yeteneğini ikiden daha fazla sunucu için sağlayacak yeteneğe sahip açık kaynak kodlu bir yazılımdır. Keepalived kendi arasında Multicast haberleşme tekniğini kullanmaktadır.

Biz yapımızda HAProxy’i load balancer için, Keepalived’i de IP devretmek yani HAProxy yapımızı Cluster hale getirmek için kullanacağız.

Senaryomuzda 3 adet sunucu bulunmaktadır. Bu 3 sunucuya HAProxy kurarak load balancer hale getireceğiz. Ardından Keepalived servisini kurarak sunuculardan biri kapandığında IP failover yaparak kesinti olmadan diğer sunucuya geçerek load balancer servisimizin çalışmasını sağlıyacağız.

Bunun için 4 adet IP kullanacağız(ip ler tamamen atmasyon).

1. Sunucu : 10.10.5.13

2. Sunucu : 10.10.5.14

3. Sunucu : 10.10.5.15

4. Keepalived Virtual Ip : 10.10.5.5

Şimdi her 3 sunucuya HAProxy ve Keepalived servisini aşağıdaki gibi kuralım.

> sudo apt install haproxy -y

> sudo apt install keepalived -y

NoT1 : Sunucularda “net.ipv4.ip_nonlocal_bind=1” olması gerekiyor. Yoksa HAProxy için kullanılacak yapılandırma üzerinde aynı anda aynı ip yi barındıramayacağı için bind hatası verecek ve servis çalışmayacaktır. Bunun için aşağıdaki yolu izlemeniz gerekiyor.

İlk olarak “vi /etc/sysctl.conf” dosyasının için edit edin ve aşağıdaki parametreyi yapıştırıp kaydedip çıkın.

net.ipv4.ip_nonlocal_bind=1

Daha sonra aşağıdaki komutu çalıştırın.

> sysctl -p

Not2: 443 SSL kulanacaksanız “/etc/ssl/private/” dizini içinde “haproxy.pem” adından SSL’lerinizin Bundle(*.crt,*.ca,*.key) hali bulunması gerekiyor.

Şimdi Örnek olarak aşağıda HAPoxy yapılandırmasına bakalım. Yapınızda her HAProxy için aynı yapılandırmayı kullanacaksınız.

Bunun için “/etc/haproxy/haproxy.cfg” dosyasını edit edeceksiniz.

> vi /etc/haproxy/haproxy.cfg

 

#Aşağıda default değerlerin haricinde değerlerde mevcuttur.

global

log /dev/log local0

log /dev/log local1 notice

chroot /var/lib/haproxy

stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners

stats timeout 30s

user haproxy

group haproxy

daemon

maxconn 1000000

# Default SSL material locations

ca-base /etc/ssl/certs

crt-base /etc/ssl/private

# Default ciphers to use on SSL-enabled listening sockets.

# For more information, see ciphers(1SSL). This list is from:

# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/

# An alternative list with additional directives can be obtained from

# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy

ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS

ssl-default-bind-options no-sslv3

nbproc 1

nbthread 8

tune.maxrewrite 16384
tune.bufsize 32768

 

defaults

log global

mode http

option httplog

option httpclose

option dontlognull

maxconn 1000000

timeout connect 3000000

timeout client 6600000

timeout server 6600000

errorfile 400 /etc/haproxy/errors/400.http

errorfile 403 /etc/haproxy/errors/403.http

errorfile 408 /etc/haproxy/errors/408.http

errorfile 500 /etc/haproxy/errors/500.http

errorfile 502 /etc/haproxy/errors/502.http

 

#HAProxy için Dashboard yapılandırma kısmı

listen stats

bind panel.fatlan.com:8989

mode http

stats enable

stats uri /stats

# stats hide-version

stats realm HAProxy\ Statistics

stats auth admin:admin

 

Aşağıdaki yapılandırmada iki blog’ta ACL kullanıldı. İlk blog, link’in içinde herhangi bir yerde “rest” kelimesi geçerse keypanelfatlan-backend443 bloğu çalışacak, ikincisinde farklı bir domain isteğinde(forum.fatlan.com) backend fatlanforum-backend çalışacak, haricinde tüm istekler panelfatlan-backend bloğunda çalışacak. Diğer port yönlendirmeleri hariç.

 

#80 portunu 443 portuna yönlendirme kısmı

frontend SafirFrontend80

bind panel.fatlan.com:80

mode http

redirect scheme https if !{ ssl_fc }

#443 portu ayar kısmı, SSL offloading burda yapılandırılıyor

frontend PanelFatlan443

bind panel.fatlan.com:443 ssl crt /etc/ssl/private/haproxy.pem ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

option httplog

option http-keep-alive

option forwardfor except 127.0.0.0/8

#option http-server-close

reqadd X-Forwarded-Proto:\ https

mode http

#ACL örnek yapilandirilmasi(proxypass) linkte herhangi biryerde rest kelimesi geçerse yönlendir

acl keypanelfatlan443 path_beg /rest

use_backend keypanelfatlan-backend443 if keypanelfatlan443

default_backend panelfatlan-backend

 

#ACL farklı host yönlendir

acl host_fatlanforum hdr(host) -i forum.fatlan.com
use_backend fatlanforum-backend if host_fatlanforum

 

#Yönlendirilen kısım, içerde sunucular 80 haberleştirildiği için 80 port yapılandırıldı

backend panelfatlan-backend

mode http

balance roundrobin

stick store-request src

stick-table type ip size 256k expire 30m

option forwardfor

option httplog

option httpchk HEAD /

server frontend_01 10.10.37.12:80 check port 80 inter 1000 rise 2 fall 3

server frontend_02 10.10.37.13:80 check port 80 inter 1000 rise 2 fall 3

 

#ACL gelen, rest yönlendirilen kısım

backend keypanelfatlan-backend443

mode http

balance roundrobin

stick store-request src

stick-table type ip size 256k expire 30m

option forwardfor

option httplog

option httpchk OPTIONS /login HTTP/1.0

http-check expect status 200

reqrep ^([^\ :]*)\ /rest[/]?(.*) \1\ //\2

server restci_01 10.10.37.34:80 check inter 12000 rise 3 fall 3

server restci_02 10.10.37.35:80 check inter 12000 rise 3 fall 3

 

#ACL gelen, rest yönlendirilen kısım

backend fatlanforum-backend
mode http
option forwardfor
option httplog
option httpchk HEAD /

server fatlanforum_01 10.10.37.45:80 check port 80 inter 3000 rise 2 fall 3

 

Harici örnekler aşağıdaki gibi de yapılandırılabilir.

#5000 portuna örnek

frontend PanelStone5000

bind panel.fatlan.com:5000

option httplog

option forwardfor except 127.0.0.0/8

#option http-server-close

reqadd X-Forwarded-Proto:\ https

mode http

default_backend panelstone-backend5000

 

#Yönlendirilen kısım

backend panelstone-backend5000

mode http

balance roundrobin

stick store-request src

stick-table type ip size 256k expire 30m

option forwardfor

option httplog

option httpchk HEAD /

server ftstone_01 10.10.37.43:5000 check port 5000 inter 12000 rise 3 fall 3

server ftstone_02 10.10.37.44:5000 check port 5000 inter 12000 rise 3 fall 3

 

#3306 mysql örnek

frontend FatlanMysql

bind panel.fatlan.com:3306

mode tcp

default_backend fatlanmysql-backend3306

 

#Yönlendirilen kısım

backend fatlanmysql-backend3306

mode tcp

server mysql_01 10.10.37.60:3306 check

server mysql_02 10.10.37.61:3306 check backup

server mysql_03 10.10.37.62:3306 check backup

 

Yukarıda örnek HAProxy yapılandırmalarından bahsettim, ben kendi yapılandırmamı yaptım ve 3 sunucuda aynı yapılandırmaları yapıştırdım.

Şimdi Keepalived yapılandrımasını yapalım. Keepalived için 3 sunucuda da kısmi olarak farklı parametrik ayarlar mecvut olacak. Bunun için “/etc/keepalived/keepalived.conf” dosyasını oluşturup, yapılandıracağız. Bu arada “priority” yüksek olan önceliklidir.

1. Sunucu(HAProxy+Keepalived)

vrrp_sync_group haproxy {

group {

VI_01

}

}

vrrp_script haproxy_check_script {

script “kill -0 `cat /var/run/haproxy.pid`”

interval 5 # checking every 5 seconds (default: 5 seconds)

fall 3 # require 3 failures for KO (default: 3)

rise 6 # require 6 successes for OK (default: 6)

}

#Virtual interface

vrrp_instance VI_01 {

state MASTER

interface ens3

virtual_router_id 61

priority 103

authentication {

auth_type PASS

auth_pass 123456

}

# Virtual ip address – floating ip

virtual_ipaddress {

10.10.5.5

}

track_script {

haproxy_check_script

}

}

 

2. Sunucu(HAProxy+Keepalived) #Sadece farkları yazıyorum.

state BACKUP

priority 102

 

3. Sunucu(HAProxy+Keepalived) #Sadece farkları yazıyorum.

state BACKUP

priority 101

 

Yapılandırmalar bu kadar, tüm suncularda HAProxy sorunsuz çalışır vaziyette olmalı aynı zaman keepalived servisi de. Sunucularda yada servislerde herhangi bir kesintide çalışan diğer sunucudan loadbalancer hizmet vermeye devam edecektir.

ÖNEMLİ

HAProxy ve Linux kernel yüksek yükler için ayarlama

1. sudo vi /etc/security/limits.conf

         * soft nofile 1000000

         * hard nofile 1000000

         root soft nofile 1000000

         root hard nofile 1000000

2. sudo vi /etc/default/haproxy

         ulimit 1000000

3. sudo vi /lib/systemd/system/haproxy.service

         LimitNOFILE=1000000

4. sudo vi /etc/sysctl.conf

        net.ipv4.ip_local_port_range=1024 65535

        net.ipv4.tcp_max_syn_backlog = 100000

        net.core.somaxconn = 100000

        net.core.netdev_max_backlog = 100000

5. sudo vi /etc/haproxy/haproxy.cfg

        global

         nbproc 1

         nbthread 8

         tune.maxrewrite 16384

         tune.bufsize 32768

         maxconn 1000000

         tune.ssl.cachesize 1000000

      defaults

        maxconn 1000000

 

Ardından reboot, eğer reboot hemen mümkün değilse

sudo systemctl daemon-reload

sudo systemctl restart haproxy.service

Kaynak : https://medium.com/@pawilon/tuning-your-linux-kernel-and-haproxy-instance-for-high-loads-1a2105ea553e

Linux Sunucular Üzerinde ISCSI Yapılandırması

iscsi(Internet Small Computer Systems Interface), ağ(network) üzerinden veri depolama(storage) ünitelerine tcp/ip protokolünü kullanarak blok düzeyinde erişim sağlayan yöntemdir.

Storage tarafında ilgili SVMs, LUNs, Volumes ve network ayarlarını yapıptan sonra iscsi’nin sunuculara erişimi için “Initiators” ve “Initiator Group” erişimlerini vermelisiniz. Storage tarafına girmiyorum konu genişleyip, dağılmaya başlar.

Not : Sunucunun “InitiatorName” elde etmek için aşağıdaki komutu kullanabilirsiniz.

> cat /etc/iscsi/initiatorname.iscsi

İscsi’leri Keşfedelim;

Sunucu üzerinde İscsi hedef tespiti için aşağıdaki komut ile discover işlemini yapalım. İlgili ip’lere bağlı erişimi olan tüm hedefleri listeleyecektir.

> iscsiadm -m discovery -t st -p 10.10.30.5

Çıktı: 10.10.30.5:3260,1030 iqn.1992-08.com.netapp:sn.2626a89cce1111e66c5200a098d9e8ba:vs.18

İscsi’lere login olalım;

Şimdi var olan tüm iscsi hedeflerine login olmak için aşağıdaki komutu çalıştırın.

> iscsiadm -m node -l

Ya da tek tek login olmak için aşağıdaki komutu da kullanabilirsiniz.

> iscsiadm -m node -T -l iqn.1992-08.com.netapp:sn.2626a89cce1111e66c5200a098d9e8ba:vs.18 -p 10.10.30.5:3260

İscsi’lere logout olmak için;

İscsi den tümüyle birden logout olmak için,

> iscsiadm -m node -u

Ya da tek tek logout olmak için,

> iscsiadm -m node -T -u iqn.1992-08.com.netapp:sn.2626a89cce1111e66c5200a098d9e8ba:vs.18 -p 10.10.30.5:3260

İscsi diskleri genişletme;

İscsi ile çalışan stroge’de alan genişlettikten sonra aşağıdaki komut ile de sunucuya yansımasını sağlayabilirsiniz.

> iscsiadm -m session –rescan

İscsi genişletmesinden sonra eğer hedefleri multipath olarak kullanıyorsanız aşağıdaki komutu da çalıştırmanız gerekebilir.

> multipathd resize map “multipath alias ya da wwid_numarası”

Ardından “fdisk -l” ve “multipath -l” komutları ile işlemin doğruluğunu kontrol edebilirsiniz.

Güvenli Yerel Docker Registry Kurulumu

Docker registry docker images’larının depolandığı sistemdir. Docker images’larını pull ile çekip, push ile de gönderip paylaştığımız sistemdir. Hali hazırda docker resmi olarak https://hub.docker.com/ dan binlerce özel yada genel, kullanıma açtığı images’lar bulunmaktadır. Bizlerde bu sistemi kullanmaktayız.

Docker hub gibi sadece yerel ağınızda kullanıma açmak isteyebileceğiniz bu sistemi aşağıdaki yöntem ile kurup kullanabilirsiniz.

Registry için biz ubuntu kullanacağız ve docker kurulumun yapılmış olduğunu farz ederek registry kurulumuna geçiyoruz.

Örnek domain olarak “fatlan.com” kullanılmıştır.

Kuruluma geçmeden önce güvenli kurulum olduğu için ssl sertifikalarınız(domain.crt, domain.key) mevcut olmalıdır. Bu sertifika authority confirmed olabilir yada self sign olabilir. Burada önemli olan kısım domain.crt dosyasının içinde ilk olarak domain sertifika key’i akabinde kök sertifika key’i olmalıdır. Yoksa registry’e images push ettiğinizde “x509: certificate signed by unknown authority” hatası alırsınız.

Sertifikalarınızı “/certs” klasörünün altına taşıyın.

> sudo mkdir /certs

Ardından “mkdir” komutu ile “/mnt/registry-repo” klasörünü oluşturun. Biz registry için images store olarak bu directory kullanacağız. Sizler bu kısımda “/mnt/registry-repo” dizini farklı bir disk yada partition olarak seçip, mount edip daha geniş bir alana olarak kullanabilirsiniz.

> sudo mkdir /mnt/registry-repo

Ardından aşağıdaki komutla docker registry’i kuralım.

> sudo docker run -d –restart=always –name registry -v /certs:/certs -v /mnt/registry-repo:/var/lib/registry -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -p 443:443 registry:2

Registry container’ımızın çalıştığını “sudo docker ps -a” komutu ile kontrol edelim.

Şimdi kurulumu doğrulamak için pull ve push yöntemlerini de dahil ederek test edelim. Ayrıca https://docker.fatlan.com/v2/_catalog adresinden de kontrol edebilirsiniz, tabi siz kendi belirlediğiniz domain name‘i girmelisiniz.

İlk önce hello-world images’ını docker hub’tan pull edelim.

> sudo docker pull hello-world

Ardından bize özel olması için tag atayalım.

> sudo docker tag hello-world docker.fatlan.com/my-hello-world

Şimdi yerel registry’ımıza push ile gönderelim.

> sudo docker push docker.fatlan.com/my-hello-world

Son olarak bu images’ımızı yani kendi yerel registry’ımızdan pull edelim ve bitirelim.

> sudo docker pull docker.fatlan.com:443/my-hello-world

Linux Sistemlerde TAB Tuşu ile Otomatik Komut yada Dizin Tamamlama – Bash Completion

Bash (Bourne Again Shell) şüphesiz en popüler Linux Shell olma özelliği ile beraber şuan için varsayılan shell olarak Linux yönetiminde top level seviyesindedir.

Her Linux sistem yöneticinin ihtiyaç duyabileceği Shell ile sistem yönetirken tab tuşu ile komut tamamlama Redhat/CentOS gibi Linux sistemlerin minimal kurulumlarında aktif bir şekilde gelmemektedir. Bu yüzden aşağıdaki komut ile auto-completion’u destekleyen bash için bash-completion paketini kurmalısınız.

> yum install bash-completion

Ardından konsol ekranında logout/login olarak paketi aktif edebilirsiniz.

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

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