6-7 Temmuz 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 6-7 Temmuz 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.

Ücretsiz Open Source ve Linux Administrator Eğitim Etkinliği Hakkında – 15-16 Haziran 2019

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 15-16 Haziran 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 başarılı olan arkadaşları tebrik ederim.

WordPress wp-admin Güvenliği – WP Login Page Security on Apache

WordPress blog’larınızın admin sayfasına yapılan bruteforce ataklarından oldukça sıkılmış olabilirsiniz ki varsayılan olarak wp-admin eki ile bağlandığınız admin panel sayfasının herkes için açılmasını yasaklamanız güvenlik adına yapmanız gereken en mantıklı hareketlerden biri olacaktır.

Bunu aşağıdaki yapılandırmaları yaparak plugin kurmadan, basitçe sağlayabilirsiniz.

İlk olarak “nano /etc/httpd/conf/httpd.conf” dosyasını nano ile edit ediyoruz. Siz farklı bir editörde seçebilirsiniz.

Ardından aşağıdaki gibi sayfayı açabilme yetkisine sahip olacak(allow) ip adreslerini ekleyin. Yazacağınız ip adreslerinin dışındaki ip adresleri wp-admin sayfasını açamayacaktır. Yetkin yok uyarısı verecektir.

<Directory “/var/www/html/fatlan.com/wp-admin”>
    Order allow,deny
    Allow from 19.17.77.0/24
    Allow from 10.1.11.0/24
    Allow from 10.1.90.0
</Directory>

Son olarak ise apache(httpd) servisini restart edin

> systemctl restart httpd.service

ya da

> /etc/init.d/httpd restart

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