Linux Sistemlerde ICMP Paketini Gizleme

Hemen hemen tüm saldırılar ağda ip’lerin kullanımı keşfedildikten ve öncesinde çeşitli taramalardan geçirildikten sonra zafiyetler tespit edilip, saldırılar başlatılabilir. IP Flooding(ip seli) ya da DDOS gibi saldırılardan korunmalıdır ki aslında DDOS, saldırı türlerinden en berbat olanı ve hala dünya üzerinden önlemeyle alakalı tam bir çözümü olmayan bir yöntemdir. Bu durumda network üzerinde sunucular dış dünyaya gizlemelidir. ICMP paketlerini gizlemeniz bunun için bir başlangıç olacaktır ki zaten bu paketin mesajları kritik sunucular için gizlenmelidir.

Bu yapılandırma yukarıda güvenlik duvarları aracılığı ile yapılabilir fakat burada bahsedeceğimiz yöntemde bu işlemi Linux kernel modülünde de yapılabilir olduğunu göstermektir ki Linux’un kernel modüllerinde bunun gibi bir sürü parametre bulunmaktadır ve her işlem için kritik durum arz eden kısımlarda bu parametreler ayrı ayrı incelenip, tek tek yapılandırılmalıdır. Bu değişiklik için kullanacağımız çekirdek parametresi “net.ipv4.icmp_echo_ignore_all” modülüdür. Şimdi bu işlemleri nasıl yapılacağına göz atılmalıdır ama öncesinde bu değişkenin varsayılan parametresi ne imiş ona bir göz atıp ve 0 olduğunu görelim.

> sysctl -a | egrep -ie “net.ipv4.icmp_echo_ignore_all”

Ardından aşağıdaki “sysctl” komutu ile değeri 1’e çekilmelidir fakat bu işlem anlık geçerli olacaktır yani sistem yeniden başladığı zaman varsayılan değerine geri dönecektir.

> sysctl net.ipv4.icmp_echo_ignore_all=1

Ya da

> echo “1” > /proc/sys/net/ipv4/icmp_echo_ignore_all

Bu işlemi kalıcı hale getirmek için “/etc/sysctl.conf” dosyasına bu değişken ve parametreyi yazmak gerekmektedir.

Herhangi bir editör yardımıyla “/etc/sysctl.conf” dosyasını edit edip “net.ipv4.icmp_echo_ignore_all = 1” ekleyebilir

ya da aşağıdaki komut aracılığı ile bunu sağlayabiliriz.

> echo “net.ipv4.icmp_echo_ignore_all = 1” >> /etc/sysctl.conf

Arından sysctl.conf dosyasını aşağıdaki komutla yeniden yükleyip, yapılandırmayı aktif hale getirmelisiniz.

> sysctl -p

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

Ovirt Internal Admin Şifresini değiştirme – Changing the Password for admin@internal(ovirt admin@internal password change)

Aşağıdaki komut ile internal admin kullanıcısının detaylarını görebilirsiniz. Yukarıdaki ss’de de durumu gözlemleyebilirsiniz.

> ovirt-aaa-jdbc-tool user show admin

Şifreyi reset’lemek için ise aşağıdaki komutu kullanabilirsiniz. Sorun olması durumunda (–force) parametresini kullanabilirsiniz.

> ovirt-aaa-jdbc-tool user password-reset admin

Ardından Engine servisini yeniden başlatmalısınız.

> systemctl restart ovirt-engine.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.

SSH Oturumu Zaman Aşımı – SSH timeout

SSH kısa tabir ile istemci sunucu arasında bir bağlantı açmaktan ibarettir. Bu bağlantı sayesinde uzaktan sunucularımıza, ssh’in yapısı gereği güvenli haberleşme sağlanır. Fakat ssh’in güvenli bağlantısının dışında açılan oturumun zaman aşımı durumundan bahsetmek gerekir. Çünkü bu durum başlı başına bir güvenlik zafiyetini beraberinde getirebilir. Şöyle ki kullanıcı makinenizden birden fazla sunucuya ssh bağlantısı sağlamış olduğunuz varsayıldığında ve herhangi bir acil durumda ya da insani bir zafiyet olan unutkanlık yüzünden makinenizi kilitlemeden başından ayrıldığınızı farz ederseniz bu durum kötü niyetli kişiler için bulunmaz bir fırsat olabilir ya da bu kişiler kötü niyetli olamayan çocuklarınızda olabilir. Bu durumda fiziksel olarak ele geçirilen makinenizle beraber sürekli açık olarak kalan ssh oturumlarınız, dolayısıyla sunucularınız da ele geçirilmiş olur. İşte bu zafiyetin bir nebze de olsa önüne geçebilmek için ssh bağlantılarına oturum zaman aşımı yapılandırarak sağlanabilir. Bu durumda sizin belirlediğiniz süre boyunca kullanılmayan ve açık kalan ssh oturumları otomatik olarak kendiliğinden sonlanarak istemci sunucu iletişimini kesecektir. Böylelikle uzun süre kullanılmayan bağlantıların güvenliğini de sağlamış olacaktır.

Bu yapılandırma ilgili sunucularımızın “sshd_config” dosyasında, iki parametre eklenerek gerçekleştirilebilir. Yapılandırmaya geçmeden önce bu parametrelerden bahsetmek gerekir. İlk parametre “ClientAliveInterval”, bu parametre ile kaç saniyede sonra null(boş) paketi göndereceğine karar verir. İkinci parametre “ClientAliveCountMax”, bu parametre saniyesi ile de birinci parametrede belirtilen saniyenin, kaç saniye aralıkla kontrol edilmesini sağlar. Şöyle ki ClientAliveInterval*ClientAliveCountMax’dır. Yani ClientAliveInterval saniye bir null(boş) paketi göndermesini, ClientAliveCountMax kadar aralıkla oturumun test eder ve o süre zarfı boyunca kullanılmadığını tespitle beraber oturumu korur fakat çarpımdan elde edilen süre dolduğu an oturum kapanır. Şimdi aşağıdaki yapılandırma ile konu daha da anlaşılıp, basit olduğu kavranacaktır.

İlk önce ilgili sunucuda “/etc/ssh/sshd_config” dosyası herhangi bir editör aracılığı ile açılır. Ardından aşağıdaki parametreler eklenir.

ClientAliveInterval 600

ClientAliveCountMax 0

Ardından sshd servisi restart edilmelidir.

Yapılandırmayı açıklayacak olursam eğer 600 saniye belirleyerek ve aralık belirtmeden, 600saniye / 60saniye = 10 dakika yani oturum hiçbir şey yapmadan 10 dakika boyunca açık kalacak fakat 10 dakikayı geçtikten hemen sonra oturumu otomatik olarak sonlandıracaktır.

MySQL Change – Reset User Password

Yetkili bir kullanıcı ile Mysql‘e login olunur.

> mysql -u root -p

Birden fazla veritabanı varsa aşağdaki komut ile listelenebilir.

> show databeses;

Ardından kullanıcının bulunduğu veritabanı seçilir.

> use “database_name”;

Aşağıdaki komut ile de veritabanındaki tablolar listelenebilir.

> show tables;

Tablodaki alanları ise aşağıdaki komut ile listeleyebilirsiniz.

> describe “tables_name”;

Tablodaki tüm verileri görmek için aşağıdaki komutu kullanabilirsiniz.

> select * from “tables_name”\G;

Ya da aşağıdaki gibi özelleştirerek verileri çağırabilirsiniz.

> select * from wp_users where ID=1;

Şimdi son olarak ilgili kullanıcının şifresini resetleyelim.

> UPDATE wp_users SET user_pass=MD5(‘123456’) where ID = 1;

NoT: Clear text giden şifre “vim ~/.mysql_history” dosyasından silinmelidir.

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

Firewalld

Firewalld’nin IPTables’a göre fark olarak en belirgin özelliği bölgeler(zone) kullanmasıdır. Zone yapılan kurallar geçerlidir. Her bir zone(bölge)’de farklı yapılanmalar kullanabilir. Bu zone(bölge)’leri değiştirerek uyguladığınız tüm kuralları değiştirebilirsiniz.

Firewall-cmd bu iş kullanacağımız en temel komuttur.

Aşağıdaki komutla tüm yapılandırmalara ait detaylar görüntülünebilir. Aktif olup olmadığı, izin verilen port ya da servisler gibi birçok detay mevcuttur.

> firewall-cmd –list-all

Aşağıdaki komut ile de mevcuttaki tüm zone(bölge)’leri listeleyebilirsiniz.

> firewall-cmd –get-zones

Aşağıdaki komutlar ile de default(fabrika ayarı)’ta kullanılan zone(bölge)’yi görüntüleyebilirsiniz.

> firewall-cmd –get-default-zone

ya da

> firewall-cmd –get-active-zones

Aşağıdaki komut ise default zone(fabrika çıkışı bölge)’yi değiştirebilirsiniz.

NoT1 : Firewalld’de kurallar oluşturduktan sonra makineyi yeniden başlatmadan geçerli olması için “firewall-cmd –reload” komutu çalıştırmalısınız.

> firewall-cmd –set-default-zone=home

> firewall-cmd –reload

Alttaki komut ile servise dışarıdan erişim için izin verilebilir.

NoT2 : Permanent(kalıcı) parametresi burada kuralın kalıcı olmasını sağlamaktadır.

> firewall-cmd –zone=public –add-service=http –permanent

> firewall-cmd –reload

Ya da var olan kurallar silinebilir.

> firewall-cmd –zone=public –remove-service=http –permanent

> firewall-cmd –reload

Aşağıdaki komut ile de servis değil de port bazlı erişim izini verilebilir.

> firewall-cmd –zone=public –add-port=443/tcp –permanent

> firewall-cmd –zone=public –add-port=53/udp –permanent

> firewall-cmd –reload

Ya da var olan kurallar silinebilir.

> firewall-cmd –zone=public –remove-port=443/tcp –permanent

> firewall-cmd –zone=public –remove-port=53/udp –permanent

> firewall-cmd –reload

Birde zengin(rich) kurallar vardır. Adında da anlaşılacağı gibi özel, ip bazlı oluşturulabilen kurallar vardır. Bu konuya da değinmek gerekmektedir.

Sadece 192.168.1.25 ip’sinden gelen tüm istekleri kabul eden kural oluşturulur.

> firewall-cmd –zone=public –add-rich-rule=’rule family=”ipv4″ source address=192.168.1.25 accept’

> firewall-cmd –reload

Aşağıda ise 192.168.1.25 ip’sinden gelen 22 isteklerini reddetmektedir.

> firewall-cmd –zone=public –add-rich-rule=‘rule family=”ipv4” source address=”192.168.1.25” port port=22 protocol=tcp reject’

> firewall-cmd –reload

Rich rule(zengin kurallar)’leri aşağıdaki komut ile de görüntülenebilir.

> firewall-cmd –list-rich-rules

Şimdi şu ana kadar yapılan tüm kurallar “firewall-cmd –list-all” komutu ile görüntülenebilir.

Ovirt/RHEV 4.2 Engine SSL Yapılandırma – Bölüm 8

Selfsign ssl kullanan oVirt, aşağıdaki görselden de anlaşılacağı üzere trusted değil.

Bunun yerine doğrulanmış, satın alınmış ssl’inizle değiştirebilirsiniz. Bunun için aşağıdaki adımları takip etmeniz yeterli. Trusted ssl’lerimizi “/tmp/ssl/” (ca, crt, key)dizini altına attık.

Satın alınmış ssl ca yı “/etc/pki/ca-trust/source/anchors/” dizine kopyalayalım ve update certificate edelim.

> cp /tmp/ssl/certificate.ca certificate.pem

> update-ca-trust

Aşağıdaki pem dosyasını silebiliriz.

> rm /etc/pki/ovirt-engine/apache-ca.pem

Satın alınmış ssl ca yı “/etc/pki/ovirt-engine/” dizinine de kopyalayalım.

> cp /tmp/ssl/certificate.ca /etc/pki/ovirt-engine/apache-ca.pem

Eski selfsign sertifikalarının yedeğini alalım.

> cp /etc/pki/ovirt-engine/keys/apache.key.nopass /etc/pki/ovirt-engine/keys/apache.key.nopass.bak

> cp /etc/pki/ovirt-engine/certs/apache.cer /etc/pki/ovirt-engine/certs/apache.cer.bak

Satın alınmış ssl key sertifikasını “/etc/pki/ovirt-engine/keys/” dizinine atalım.

> cp /tmp/ssl/certificate.key /etc/pki/ovirt-engine/keys/apache.key.nopass

Aynı şekilde satın alınmış ssl crt dosyamızıda “/etc/pki/ovirt-engine/certs/” dizinine atalım.

> cp /tmp/ssl/certificate.crt /etc/pki/ovirt-engine/certs/apache.cer

Apache servisini yeniden başlatalım.

> systemctl restart httpd.service

Şimdi aşağıdaki dosyaların içeriğine ilgili satırları ekleyin.

vi /etc/ovirt-engine/engine.conf.d/99-custom-truststore.confedit‘leyin ve aşağıdaki satırları ekleyin.

– ENGINE_HTTPS_PKI_TRUST_STORE=”/etc/pki/java/cacerts”

– ENGINE_HTTPS_PKI_TRUST_STORE_PASSWORD=””

vi /etc/ovirt-engine/ovirt-websocket-proxy.conf.d/10-setup.conf” dosyasını da edit‘leyin ve aşağıdaki satırları ekleyin.

– PROXY_PORT=6100

– SSL_CERTIFICATE=/etc/pki/ovirt-engine/certs/apache.cer

– SSL_KEY=/etc/pki/ovirt-engine/keys/apache.key.nopass

– #SSL_CERTIFICATE=/etc/pki/ovirt-engine/certs/websocket-proxy.cer

– #SSL_KEY=/etc/pki/ovirt-engine/keys/websocket-proxy.key.nopass

– CERT_FOR_DATA_VERIFICATION=/etc/pki/ovirt-engine/certs/engine.cer

– SSL_ONLY=True

Son olarak aşağıdaki servisleri yeniden başlatın.

> systemctl restart ovirt-provider-ovn.service

> systemctl restart ovirt-engine.service

Ve görünüm aşağıdaki gibidir.

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

Ovirt/RHEV 4.2 Engine LDAP Yapılandırma – Bölüm 7

Engine login olduktan sonra, aşağıdaki komutla ilgili yapılandırma paketin varlığını kontrol edelim.

> rpm -qa | egrep -i ovirt-engine-extension-aaa-ldap-setup

Eğer paket yoksa aşağıdaki komut ile kurulumu gerçekleştirelim.

> yum install ovirt-engine-extension-aaa-ldap-setup

Şimdi aşağıdaki komut ile yapılandırmaya başlayaşlım.

> ovirt-engine-extension-aaa-ldap-setup

Komutu girdikten sonra aşağıdaki gibi sizden belirtilen çeşitlerdeki LDAP‘lardan bağlantı sağlayacağınız LDAP‘ın ilgili numarasını girmenizi beklemektedir. Ben FreeIPA kullandığım için 6 numarayı seçip devam ediyorum.

Ardından DNS sunucu kullanacakmısınız diye soruyor, single server(1) seçip devam ediyorum. Eğer sizin ortamınızda birden fazla varsa diğer DNS sunucularınızı da belirtebilirsiniz.

startTLS ve Insecure seçip devam ediyorum.

LDAP bağlantısı için belirlediğim kullanıcı ile beraber search user DN bilgilerini EKSİKSİZ ve DOĞRU bir şekilde girip, base DN(fatlan.com gibi)’ide girdikten sonra, yes diyerek tekrar devam ediyorum.

Ardından GUI de görünecek name‘yi (fatlan.com gibi) girip devam ediyorum.

İsterseniz burda test için belirlediğiniz user ile test edebilirsiniz.

Daha sonra Done diyerek işlemleri sonlandırıyorum.

En son olarak Engine servisini restart etmeniz gerekiyor.

> systemctl restart ovirt-engine.service

Ardında Engine GUI de giriş yapabiliriz. Aşağıdaki gibi kullanıcı yetkili değil diye uyarı veriyor, aslında login olabildiniz fakat daha önceden kullanıcıya herhangi bir role atanmadığı için bu uyarıyı veriyor. Local admin ile ilglil kullanıcıya role tanımladığınızda GUI ona göre açılacaktır.

Bölüm 8: http://www.fatlan.com/ovirt-rhev-4-2-engine-ssl-yapilandirma-bolum-8/

Selinux (Security Enhanced Linux) nedir.?

Selinux C dilinde, 1999 yılında NSA tarafından ordu için geliştirilmiş ve daha sonrasında Linux çekirdeğine eklenmiş ek bir güvenlik protokolü modülüdür. Selinux başta RedHat olmak üzere, özellikle türevi Linux dağıtımlarında entegre olarak gelmektedir fakat buna rağmen hepsi bu modülü entegre olarak içinde barındırmamaktadır. Ubuntu buna örnek olarak verilebilir ancak sonradan kurulum gerçekleştirilebilir.

Selinux kullanıcı programlarına, sistem servislerine, dosyalarına ve ağ kaynaklarına erişimi kısıtlayan zorunlu erişim kontrolü protokolüdür desek yanlış olmaz. Temel olarak iki modelde çalışır. DAC (Discretionary Access Control-İsteğe Bağlı Erişim Kontrolü) ve MAC (Mandatory Access Control-Zorunlu Erişim Kontrolü) mekanizmalarıdır. Temel çalışma prensibi kullanıcı ve sistem servislerinde yapılması gereken işlemleri en az yetki ile sınırlandırmayı amaçlar. DAC, kullanıcının ya da sürecin kaynaklara erişimini kullanıcı sahipliğine veya izinlerine bakarak belirler. MAC, kullanıcıların oluşturdukları nesnelerin üzerindeki denetim düzeyini, tüm dosya sistemi nesneleri için ek etiket ekleyerek kısıtlar. Dolayısıyla kullanıcı ya da süreçlerin bu dosyalara erişebilmesi için etiketlere uygun erişim haklarının olması gerekiyor. Bu arada MAC DAC’a müdahele etmemektedir yani onu ezmemektedir.

Konunun daha iyi anlaşılması için etiketler incelenerek detaylandırılacaktır. ls’in Z parametresini kullanarak kullanıcı, servislerin ya da portların etiketlerini görüntülenebilir.

/etc/passwd dosyası incelendiğinde,

> ls -Z /etc/passwd

Çıktı aşağıdaki gibidir.

-rw-r–r–. root root system_u:object_r:passwd_file_t:s0 /etc/passwd

Selinux şartların takibini “user:role:type:level” göre yapar, yani yukarıdaki örneği baz alırsak “system_u:object_r:passwd_file_t:s0” olarak yetki politikası belirler.

Şimdi “touch” komutu ile kök dizine (/) (dosya istenilen dizinde de oluşturabilir) bir dosya oluşturup onun etiketlerini kontrol edildiğinde,

> touch fatihaslan

Şimdi etiketleri “ls -Z” ile kontrol edildiğinde,

> ls -Z /fatihaslan

Çıktı aşağıdaki gibidir.

-rw-r–r–. root root unconfined_u:object_r:etc_runtime_t:s0 /fatihaslan

Http servisi için etiketi görüntülendiğinde.

> ls -Zd /etc/httpd/

Alt klasörlerle beraber listelemek,

> ls -Z /etc/httpd/

NoT : Her dosyanın etiketi, üstündeki klasörün etiketi neyse onu çekmektedir.

Şimdi “/var/www/html/” dizinin içine index.html dosyası oluşturulup, içine de Fatih ASLAN yazılacaktır ve alacağı etiket “httpd_sys_content_t” olacaktır çünkü “/var/www/html/” dizininin etiketi “httpd_sys_content_t”dir.

> ls -Zd /var/www/html/index.html

NoT : “cp” komutu ile kopyalanan dosyanın etiketi hedef dizininin etiketi olacaktır fakat “mv” komutu ile dosya taşınırsa kaynak dizinin etiketi kalmaya devam edecektir. Aşağıdaki görüntüden de anlaşılabilir.

Bu bilgiler ışığında sistem de anormal sorunlar çıktığında ve kullanıcı, dosya izinlerinde de sorun yoksa Selinux kısmını da bakılmalıdır ki etiket kısmında sorun olabileceğinden Selinux erişim sorunu çıkaracaktır.

Hazır yeri gelmişken bir konudan daha bahsetmek gerekmektedir. Yukarıdan da anlaşılacağı üzere herhangi sebepten ya da dosyanın taşınmasından ötürü etiketi bozulmuş olan dosyaları bulunduğu dizindeki etikete taşımamak için “restorecon” komutunu kullanılabilir. Aşağıda örnek gösterilmiştir.

> restorecon -Rv /var/www/html/

Ayrıca “semanage” komutu ile kullanıcı tarafında ki etiketler de görüntülenebilir.

> semanage user -l

Çıktı aşağıdaki gibidir.

Hatta tüm portlara atanan Selinux etiketlerini de “semanage” komutu ile görüntülenebilir. Fakat aşağıdaki örnekte sadece httpd servisi için atanan portlardaki etiketler görüntülenecektir.

> semanage port -l | egrep ^http_port_t

Süreçlere(process) ait etiketleri aşağıdaki komut ile elde edilebilir.

> ps -eZ

Özel olarak kullanıcıya ait etiketi görmek için aşağıdaki komutu kullanılabilir.

> id -Z

Bu aşamadan sonra Selinux’un çalışma mod’larına bakıp, yukarıdaki teknik bilgiler ışığında hangi çalışma durumunda kalmasını da aktardıktan sonra Selinux kısmı noktalanacaktır. Öncesinde “/etc/selinux/configcat ile okutalım, ardından SELINUX ve SELINUXTYPE parametlerinden rahatlıkla bahsedebilelim.

SELINUX=enforcing, Selinux ilkelerine dayalı kurallarının geçerli olduğu yani aktif çalıştığı mod’dur.

SELINUX=permissive, Selinux politikası uygulanmaz fakat log tuttuğu mod’dur.

SELINUX=disabled, Selinux’un devredışı olduğu mod’dur. Sadece DAC kuralları geçerlidir.

SELINUXTYPE=targeted, hedeflenen ilkelerde uygulanan varsayılan politikadır.

SELINUXTYPE=mls, çok seviyeli güvenlik politikasıdır.

Şimdi hangi mod’da çalıştığı görüntülenecektir.

> getenforce

Daha ayrıntılı görmek için aşağıdaki komut kullanılabilir.

> sestatus

Mod’lar arsında geçişi direk “/etc/selinux/config” dosyasından düzenleyerek yapabilir ya da “setenforce” komutu kullanabilir. Aşağıdaki görselde durum daha net anlaşılacaktır.

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

Ovirt/RHEV 4.2 Engine Network(NIC) Infrastructure Ekleme ve Yapılandırma – Bölüm 6

İlk bölümdeki görselde, ağ alt yapısını tasarlamıştık ve bu tasarımda network alt yapısını da belirtmiştik. O bölümü hatırlatarak işlemlere devam edelim.

Tasarımda 4 ayrı NIC kullandık;

1. Network interface “management

2. Network interface “storage

3. Network interface “hostnet

4. Network interface “migration

managemetinterface’sini sunucuları kurarken, yönetmek için atamıştık zaten. Ardından sunucuların storage erişmesi, iscsi ve nfs kullanacağımız için nic’in birini de host’ta “storageinterface’sini tanımlayıp erişimlerini yaptık ve storage diskleri ekledik. Yapımızda iscsi ve nfs vlan ağında olduğundan fiziksel interface’ye “storage_iscsi” ve “storage_nfs” adından iki mantıksal vlan interface’yi oluşturduk. Aslında nfs’i vlan olarak Engine tarafında da yapabilirdik fakat iscsi kısmı yapmak zorundayız ki storage’deki lun‘ları host’lara disk olarak ekleyebilelim ve Engine’yi kurabilelim. Engine host üzerinde yapılandırılan networkler üzerinden de erişim sağlayabilir. Bu arada host tarafında nic’leri bonding, vlan ve bridge olarak’ta tanımlayıp kullanabilirsiniz. Aynı şekilde Hosted Engine’de de bonding, vlan yapabiliriz.

hostnet” ve “migrationnic‘lerini Hosted Engine tarafında şimdi beraber yapılandıracağız. “hostnetVM’lerin internete çıkışı ve birbiriyle iletişimi için, “migration”da Vm makineleri hostlar arasında taşıma/göç ettirme için kullanacağız.

Önemli NOT : Bonding hakkında. Bonding yapılandırması host/sunucu tarafında ayrı, Hosted Engine tarafında ayrı fiziksel NIC’ler için yapılandırmalıdır. Çünkü host tarafında yapılandırılan bonding’i Engine görebiliyor ve gösterebiliyor fakat eklediğiniz mantıksal interface’leri atama yaptığınızda kullanmanıza izin vermeyip, eklerken hata veriyor. Kısaca ilgili NIC’ler için host tarafında yapılandırma olduğu için kullanmanıza izin vermiyor. Bu yüzden Engine’de bonding kullanacaksanız ki Engine’de sağ klik ile çok basit bir şekilde eklenebiliyor, ilgili fiziksel nic’lere host tarafında herhangi bir yapılandırma yapılmamış olması gerekiyor. Ben başka bir yapılandırma için iki fiziksel nic’i Engine tarafında XOR protokolü kullanarak çok basit bir şekilde yapılandırarak, esnek bir yapı elde ettim.

Şimdi “hostnet” ve “migrationnic‘lerini Hosted Engine tarafında tek tek yapılandırıp kullanıma hazırlayalım.

Önce mantıksal nic’lerimizi ekleyelim. Biz ilk önce “hostnet”i ekleyip, aktif edeceğiz. Sonra “migration” interfacesini ekleyip, aktif edeceğiz. Bunun için Engine login olduktan sonra “Network/Networks/New” diyerek ekleme işlemine başlıyoruz.

Ardından ilgili Data Center’ı seçip “Name” kısmına interface ismini verin. Network Parameters kısmında yer alan bilgilerde size uygun olan bilgileri de girmeniz gerekiyor. Biz “hostnet”i VM’lerin çıkış interface’si olarak kullanacağımızdan “VM network” parametresini enable ettik. Belirlediğimiz subnet herhangi bir Vlan’a dahil olmadığı için Vlan tag’ini enable işaretlemedik. Sizin belirlediğiniz subnet switch’leriniz de vlan dahilinde ise bu kısımda vlan numarasını belirlemelisiniz. Son olarak OK tıklayıp, ekleme işlemini bitirin.

Ve oluşturduğunu aşağıdaki gibi görelim. Henüz var olan tüm host‘larımıza tanıtmadığımız için aktif değil ve bu yüzden kırmızı görünüyor.

Şimdi sırasıyla “hostnet”i var olan host’larımıza tanıtalım ve aktif etmiş olalım.

Compute/Hosts” sekmesine geldikten sonra ilk host’umuzun üzerine tıklayıp ayrıntılar kısmına girelim. Oradan “Network Interfaces” sekmesine gelip “Setup Host Networks” butonuna tıklayın.

Ardından aşağıdaki ss’den de anlaşılacağı üzere sağdaki Logical Networks’te görünen “hostnetnic’ini sürükleyip, belirlediğiniz ilgili fiziksel nic’e bağlayın.

Yukarıdaki siyah kutucukta görünen kalem işaretini tıkayın ve aşağıdaki gibi ip yapılandırma penceresine gelin, ip yapılandırdıktan sonra,

DNS Configuration sekmesine gelin ve dns ip’sini verdikten sonra OK tıklayın.

Şimdi aynı işlemi ikinci host’umuza yapalım, bizde toplamda iki host vardı siz bütün hostlarınızda yapmalısınız. Şimdi ikinci host’umuzda da “Setup Host Networks” butonuna tıklayın.

Aynı şekilde fiziksel nic’e, logical nic’i bağlayın.

Kalem işaretini tıklayıp ikinci host için ip yapılandırmasını yapalım.

DNS yapılandırmasını yapıp, OK tıklayalım.

Ve “Compute/Cluster/Default/Logical Network” bölümünden mantıksal nic’lerimizi listelediğimizde “hostnet”in yeşil yandığını yani aktif olduğunu görebiliyoruz.

Şimdi sıra geldi ikinci mantıksal interface’miz olan “migrationnic’ine. Aynı şekilde “Network/Networks/New” diyerek aşağıdaki gibi nic’i oluşturalım. Bu kısımda “VM networkenable sekmesini tıklamıyorum çünkü bu interface’yi VM’ler çıkış için kullanmayacak. Tabanda Engine VM’leri migration yapmak için bu nic’i kullancağı için “Name” belirleyip OK tıklıyorum.

Tekrar “Compute/Cluster/Default/Logical Network” listelediğimizde “migrationnic’inin geldiğini fakat kırmızı yani aktif olmadığını görelim.

Yukarıdaki ss’lerde gösterdiğimiz gibi yapınızdaki tüm host’ların tek tek “Setup Host Networks” bölümünden, “migrationinterface’sini fiziksel interface’ye bağladıktan sonra aşağıdaki gibi aktif olacaktır.

NoT2 :migrationinterface’si için ip yapılandırması YAPMIYORUZ yani ip vermiyoruz.

Aslında şu anda nic ekleme işleminiz tamamlandı fakat bu nic’ler için roller atayacağız. Bu roller ilgili logical nic’lere belirli özel iş yükleri atayacak. Şöyle ki “Compute/Cluster/Default” bölümünden “Logical Networks” sekmesine gelin ve aşağıdaki görselden de anlaşılacağı üzere ”Manage Networks” tıklayın.

Ardından aşağıdaki ss’den de anlaşılacağı üzere logical nic’lerimize spesifik roller atayalım. Migration Network rolünü “migrationinterface’sine, Default Route olarak ben “hostnet” kullanmak istediğimden ona atıyorum, diğer iki rol management interface‘sinde kalabilir. OK deyip işlemleri bitiriyorum.

Son olarak nic’leri “Compute/Cluster/Default/Logical Network” listelediğimde nic’lere atanmış rolleri de görebiliyorum. İşlem bu kadar.

NoT3 : Evet işlemlerimiz bitti fakat nic’lerimizin tüm host’larda sağlıklı bir şekilde çalıştığından emin olmak yani sync olduğunu görmek için “Network/Networks/hostnet” bölümü Hosts sekmesi ve “Network/Networks/migration” bölümü Hosts sekmesinden aşağıdaki ss’lerde işaretlediğim kırmızı alanda “Out-of-sync” kısmının aşağıdaki gibi tertemiz olması lazım, aksi halde zaten orada kırmızı bir işaretçi çıkıp size bir sorun olduğunu söylecektir. Böyle bir durumda network yapılandırmalarınızı gözden geçirin, eğer bir sorun yoksa “Sync All Networks” butonunu kullanın.

Bölüm 7: http://www.fatlan.com/ovirt-rhev-4-2-engine-ldap-yapilandirma-bolum-7/

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

FreeIPA Komut Satırı Üzerinden DNS A kaydı Oluşturma

Şimdi DNS’e A kaydı gireceğiz. Bu işlemi GUI’de basit bir şekilde de yapabilirsiniz ki ilerde bir makale ile bu konuya da değinebiliriz, şimdi ise aşağıdaki komut yardımıyla bu işlemi komut satırıcı üzerinden gerçekleştirebiliriz.

İlk önce kinit admine login olun(GUI ekranında login olduğunuz admin ve şifresi).

> kinit admin

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

# ipa dnsrecord-add [domain name] [record name] [record type] [ip adress]

> ipa dnsrecord-add fatlan.local dc02 –a-rec 192.168.2.160