15 Adımda Linux Sunucu Güvenliği

Sunucum zaten güvenilir demek çok kolay! Böyle bir önyargıya düşmeyin ve masraflı olabilecek güvenlik ihlallerine yol açmayın. 15 Adımda Linux Sunucumuz daha güvenilir hale getirilebilir. Daha önce NetworkWorld’de yayınlanmış olan bu makaleden daha fazla bilgi elde edebilirsiniz.

1.Host Bilgisini Not Edin

Yeni bir Linux Sunucu Güvenliğini Arttırma işlemi yapacağınız zaman yeni bir belge açın ve aşağıda listelenen maddeleri yapılacak listesine ekleyin. Ardından sisteme uyguladığınız her maddeyi işaretleyin.

  • Makine Adı
  • IP Adresi
  • MAC Adresi
  • Sunucu güvenliğini yapan kişinin Adı
  • Tarih
  • Varlık Numarası(Bir şirket için çalışıyorsanız, şirketinizin host sahiplerini etiketlemek için kullandığı varlık numarası)

2. BIOS Koruması

Son kullanıcının BIOS’taki güvenlik ayarlarını değiştirmemesi için host’un BIOS’u bir şifre ile korunmalıdır, bu alanın küçük değişikliklerden korunması için gereklidir.

Bir sonraki adımda (USB/CD/DVD) gibi cihazların dışarıdan boot edilmesini kapatmalıyız. Eğer bu ayarı değiştirmezseniz herhangi bir kişi boot edilebilen İşletim sistemi içeren bir USB Bellek ile verilerinize erişebilir.

En son çıkan sunucuların anakartlarında uzaktan erişebilmemiz için dahili web sunucusuna sahiptir. Eğer böyle bir özellikle şu an için mümkünse admin sayfasının varsayılan şifresini değiştirdiğinizden veya bu özelliği devredışı bıraktığınızdan emin olunuz.

3. Hard Disk Şifrelemesi (Gizlilik)

GNU/Linux Dağıtımlarının birçoğu kurulumdan önce disklerinizi şifreleme imkanı sunar. Disk şifrelemesi hırsızlık durumunda çok önemlidir. Çünkü Sabit diski kendi makinesine bağladığında bilgisayarınızı çalan kişi verilerinizi okuyamayacaktır.

Aşağıdaki resimde gördüğünüz üzere listeden 3.seçeneği seçtiğinizde: “Guided use entire disk and set up encrypted LVM(Logical Volume Manager)”. Türkçesiyle Mantıksal Cilt Yöneticisi.

Resim 1:

Eğer Linux dağıtımınız şifrelemeyi desteklemiyorsa, TrueCrypt gibi yazılımlar kullanabilirsiniz.

Resim 2:

4. Disk Koruması

Sistemin hasar görmesi durumunda yedeklemelerin birsürü avantajı vardır. Önemli sunucular için, yedeklemelerin saha dışına taşınması gerekir. Yedeklemelerin yönetiminin çok iyi olması gerekiyor. Örneğin eski yedeklemeleri ne kadar süre boyunca tutuyorsunuz? Sisteminizi ne zaman yedeklemeniz gerekir? (Her gün, Her hafta?)

Kritik sistemler farklı bölümlere ayrılmış olmalıdır.

  •  /
  • /boot
  • /usr
  • /home
  • /tmp
  • /var
  • /opt

Diskleri bu şekilde porsiyonlara ayırmak sistem hatalarının oluşması durumunda güvenlik ve performans şansı tanıyacaktır. Aşağıdaki resimde gördüğünüz gibi

Kurulum esnasında Kali Linux’ta bölümleri nasıl ayırabileceğinize dair seçenekler görmektesiniz.

Resim 3:

5. Boot Dizinini Kilitleyin

Boot dizini, linux çekirdeğiyle alakalı önemli dosyalar içeren bir dizindir. Bu yüzden aşağıdaki basit adımlarla bu dizinin salt-okunur izinlere kilitlendiğinden emin olalım.

Öncelikle “Fstab” dosyasını açalım.

Resim 4:

En alttaki satırı ekleyelim.

Resim 5:

Aşağıdaki komutu çalıştırarak düzeltmiş olduğumuz bu dosyanın sahibini ayarlayalım.

# chown root:root /etc/fstab

Şimdi boot ayarlarındaki güvenlik için birkaç izin ayarlayalım.

/etc/grub.conf sahip olduğu grubu ve kullanıcıyı root olarak ayarlayalım.

# chown root:root /etc/grub.conf

Tek kullanıcı modu için yetkilendirme yapmalıyız.

# sed -i "/SINGLE/s/sushell/sulogin/" /etc/sysconfig/init
# sed -i "/PROMPT/s/yes/no/" /etc/sysconfig/init

6. USB Kullanımını Kapatın

Nasıl kritik bir sistem üzerinde olduğunuza dayanarak, Linux host üzerinde USB belleklerin kullanımını kapatmak çok önemlidir. USB Bellek kullanımını kapatmanın birden çok yolu vardır. Ancak en popüler olanı üzerinden gidersek;

Kullandığınız metin editörü ile “blacklist.conf” dosyasını açınız.

# nano /etc/modprobe.d/blacklist.conf

Dosya açıldığında en alt satıra aşağıdaki satırı ekleyelim ve kaydedip çıkalım.

blacklist usb_storage

Ardından rc.local dosyasını açalım.

# nano /etc/rc.local

Son olarak aşağıdaki 2 satırı ekleyelim.

modprobe -r usb_storage

exit 0

7. Sistem Güncellemesi

Sistemimizi boot ettikten sonra ilk düşüncemiz sistemi güncellemek olmaktadır. Genellikle Uçbirim’i açarız ve gereken komutları çalıştırırız. Kali Linux’ta aşağıdaki resimdeki gibi komutları girebilirsiniz.

Resim 6:
Resim 7:

8. Yüklü Paketleri Kontrol Etme

GNU/Linux dağıtımlarınızda yüklü olan paketleri listeleyelim ve gereksiz olanları silelim. Güvenliğini arttırmaya çalıştığınız bir sunucu ise çok sıkı olmamız gerekiyor. Kali Linux’ta yüklü olan paketlerin nasıl listelendiğine dair bir örneği aşağıda gösterelim.

Resim 8:

Önemli olmayan servislerin kapatılmasının saldırı yüzeyini indirgeyeceğini unutmayalım. Bu yüzden eğer linux sunucunuzda yüklü olarak bulduysanız, aşağıdaki legacy servislerini silmeniz çok önemlidir.

  • Telnet server
  • RSH server
  • NIS server
  • TFTP server
  • TALK server

9. Açık Olan Portları Kontrol Edin.

İnternete açık olan bağlantıların tanımlanması çok kritik bir adımdır. Kali Linux’ta aşağıdaki komutu kullanarak herhangi gizlenmiş olan açık portları tespit edebilirsiniz.

Resim 9:

10. Güvenli SSH

Evet, gerçekten de SSH güvenli, fakat bu servisin çok iyi bir şekilde güvenliğini arttırmalıyız. Hepsinden önce SSH’ i kapatarak problemi çözebiliriz. :) Bununla birlikte bu aracı hala kullanmak istiyorsanız SSH’in öntanımlı yapılandırma dosyasını değiştirmelisiniz. Bunu yapmak için /etc/ssh dizinini açalım ve sshd_config dosyasını kullanmış olduğunuz metin editörü ile düzenleyelim.

Resim 10:
  • Öntanımlı olarak gelen portu (22) 99 gibi bir numarayla değiştirelim.
  • root’un SSH ile uzaktan giriş yapmadığından emin olalım.
  • PermitRootLogin n
  • Bazı özel kullanıcılara izin verelim.
  • AllowUsers[username]

Başlangıç için yukarıdaki liste yeterlidir. Örnek vermek gerekirsek, bazı şirketler saldırganları caydırmak ve daha da ilerlemelerini engellemek için bazı afişler eklerler. Bu yazıdaki tüm yapılandırmaları anlayabilmeniz için SSH’in kullanım kılavuzunu yada aşağıdaki adresi ziyaret etmenizi öneriyorum.

https://www.ssh.com/ssh/sshd_config/

sshd_config dosyasının olduğundan emin olduktan sonra bazı ekstra seçenekleri aşağıda bulabilirsiniz.

  • Protocol2
  • IgnoreRhosts to yes
  • HostbasedAuthentication no
  • PermitEmptyPasswords no
  • X11Forwarding no
  • MaxAuthTries 5
  • Ciphers aes128-ctr,aes192-ctr,aes256-ctr
  • ClientAliveInterval 900
  • ClientAliveCountMax 0
  • UsePAM yes

Son olarak sadece root kullanıcılarının içerikte değişiklikler yapabilmesi için sshd_config dosyasının izinlerini ayarlayalım.

#chown root:root /etc/ssh/sshd_config

#chmod 600 /etc/ssh/sshd_config

11. SELinux Etkinleştirin

Güvenli Geliştirilmiş Linux, erişim kontrolü güvenlik politikasını desteklemek için çekirdek güvenliği mekanizmasıdır. SELinux’un 3 tane yapılandırma modu vardır.

  • Disabled: Turned-off
  • Permissive: Prints warnings
  • Enforcing: Policy is enforced

Herhangi bir metin editörü kullanarak yapılandırma dosyamızı açalım.

#nano /etc/selinux/config

“Policy is enforced” olduğundan emin olalım.

SELINUX=enforcing
Resim 11:

12. Ağ Parametreleri

Linux host ağ etkinliklerinin güvenliğini sağlamak temel bir görevdir. Güvenlik duvarınızın herşeyle ilgileneceğini düşünmemek gerekiyor. Bu yanlış bir varsayım! Burada host ağınızın güvenliği için bazı önemli özellikleri sağlamalıyız.

IP Yönlendirmeyi Kapatın. “/etc/sysctl.conf” dosyasında net.ipv4.ip_forward parametresini 0’a ayarlayarak kapatabiliriz.

Paket Yönlendirmelerini Göndermeyi Kapatın. “/etc/sysctl.conf” dosyasında net.ipv4.conf.all.send_redirects ve net.ipv4.conf.default.send_redirects parametrelerini 0’a ayarlayarak kapatabiliriz.

ICMP Yönlendirme Kabulünü Kapatın. “/etc/sysctl.conf” dosyasında net.ipv4.conf.all.accept_redirects ve net.ipv4.conf.default.accept_redirects parametrelerini 0’a ayarlayarak kapatabiliriz.

Hata İletisi Korumasını Aktifleştirin. “/etc/sysctl.conf” dosyasında net.ipv4.icmp_ignore_bogus_error_responses parametresini 1’e ayarlayarak aktifleştirebiliriz.

İptable kurallarının uygulanmasıyla ve gelen,giden ve yönlendirilen tüm paketlerin filtrelenmesiyle Linux Güvenlik Duvarının kullanılmasını şiddetle tavsiye ediyoruz. İptable kurallarını yapılandırmak biraz vaktinizi alabilir, ama bu verdiğiniz vakit herşeye değer. :)

13. Şifre Politikaları

İnsanlar genellikle şifreleri yeniden kullanırlar. Bu ise çok kötü bir alışkanlıktır. Eski şifrelerimiz “/etc/security/opasswd” dosyasında tutulur. Linux host’un güvenlik politikalarını yönetmek için PAM modülünü kullanacağız. Debian dağıtımı altında kullandığınız metin editörünü kullanarak “/etc/pam.d/common-password” dosyasını açın ve aşağıdaki iki satırı ekleyin.

auth sufficient pam_unix.so likeauth nullok
password sufficient pam_unix.so remember=4

(Kullanıcıların son 4 şifresini tekrar kullanmasına izin vermeyecektir!)

Başka bir şifre politikası güçlü şifreler oluşturmaktır. PAM modülü dizin ve brute-force saldırılarından sunucularınızı korumak için pam_cracklib önerir. Bunu yapmak için metin editörü kullanarak “/etc/pam.d/system-auth” dosyasına aşağıdaki satırı ekleyin.

/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1

Linux, şifrelerin açık metin olarak kaydedilmesini önlemek için SHA512 güvenli şifre hashing algoritması tanımladığınızdan emin olun!

Başka bir ilginç fonksiyon olarak 5 tane hatalı girişten sonra hesabın kilitlenmesidir. Bunu yapmak için “/etc/pam.d/password-auth” dosyasını açın ve aşağıdaki satırları ekleyin.

auth required pam_env.so
auth required pam_faillock.so preauth audit silent deny=5 unlock_time=604800
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=604800
auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=604800
auth required pam_deny.so

Henüz bitmedi. Son olarak “/etc/pam.d/system-auth” dosyasını açın ve aşağıdaki satırları ekleyiniz.

auth required pam_env.so
auth required pam_faillock.so preauth audit silent deny=5 unlock_time=604800
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=604800
auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=604800
auth required pam_deny.so

Sistem yöneticisi hesabın kilidini açmak için aşağıdaki komutu kullanabilir.

# /usr/sbin/faillock --user <userlocked> --reset

Başka bir ipucu verecek olursak, şifrelerin 90 güne kadar tanımlanmasıdır.

“/etc/login.defs” dosyasında PASS_MAX_DAYS parametresini 90 olarak ayarlayalım.

Aktif kullanıcıyı aşağıdaki kullanıcı ile değiştiriniz.

#chage --maxdays 90 <user>

Şifre politikalarını geliştirmek için bir sonraki ipucu “/etc/pam.d/su” dosyasında pam_wheel.so parametrelerini ayarlayarak su komutuna erişimi kısıtlamaktır.

auth required pam_wheel.so use_uid

Şifre politikaları için son ipucumuz aşağıdaki bash script’i kullanarak root olmayan kullanıcılar için sistem hesaplarını kapatmaktır.

#!/bin/bash
for user in `awk -F: '($3 < 500) {print $1 }' /etc/passwd`; do
if [ $user != "root" ]
then
/usr/sbin/usermod -L $user
if [ $user != "sync" ] && [ $user != "shutdown" ] && [ $user != "halt" ]
then /usr/sbin/usermod -s /sbin/nologin $user
fi
fi
done

14. İzinler ve Doğrulamalar

Bir Linux sunucusunda güvenlik açısından daha iyi bir durumda olmak için izinler en önemli ve kritik görevlerden biridir.

“/etc/anacrontab”, “/etc/crontab” ve “/etc/cron.*” dosyaları için aşağıdaki komutları çalıştırarak izinleri ve kullanıcı/grup sahiplerini ayarlayalım.

#chown root:root /etc/anacrontab

#chmod og-rwx /etc/anacrontab

#chown root:root /etc/crontab

#chmod og-rwx /etc/crontab

#chown root:root /etc/cron.hourly

#chmod og-rwx /etc/cron.hourly

#chown root:root /etc/cron.daily

#chmod og-rwx /etc/cron.daily

#chown root:root /etc/cron.weekly

#chmod og-rwx /etc/cron.weekly

#chown root:root /etc/cron.monthly

#chmod og-rwx /etc/cron.monthly

#chown root:root /etc/cron.d

#chmod og-rwx /etc/cron.d

“root crontab” için “/var/spool/cron”da izinleri ayarlayalım.

#chown root:root <crontabfile>

#chmod og-rwx <crontabfile>

“passwd” dosyasında kullanıcı/grup sahibini ayarlayalım.

#chmod 644 /etc/passwd

#chown root:root /etc/passwd

“group” dosyasında kullanıcı/grup sahibini ayarlayalım.

#chmod 644 /etc/group

#chown root:root /etc/group

“shadow” dosyasında kullanıcı/grup sahibini ayarlayalım.

#chmod 600 /etc/shadow

#chown root:root /etc/shadow

“gshadow” dosyasında kullanıcı/grup sahibini ayarlayalım.

#chmod 600 /etc/gshadow

#chown root:root /etc/gshadow

15. Ek İşlemler

İlk olarak çekirdek dökümlerini sınırlayalım.

“/etc/security/limits.conf” dosyasına hard core 0 olarak ayarlayalım.

“/etc/sysctl.conf” dosyasına fs.suid_dumpable = 0 ekleyelim.

İkinci olarak exec korumasını yapılandıralım.

“/etc/sysctl.conf” dosyasına kernel.exec-shield = 1 ekleyelim.

Son olarak Rastgele Sanal Bellek Bölgesi Yerleşimini sağlayalım.

“/etc/sysctl.conf” dosyasına kernel.randomize_va_space = 2 ekleyelim.

Yararlandığım kaynak: https://www.pluralsight.com/blog/it-ops/linux-hardening-secure-server-checklist