Özet
Aşağıda okuyacağınız bilgileri herhangi bir kitapta bulamazsınız, herhangi bir yerde doğru veya yanlış olduğuna dair teyit edecek net bir kaynakla karşılaşamazsınız. Bunlar yıllar içinde edindiğim tecrübelerin basit bir şekilde yazıya dökülmüş ham halleridir. Burada yazılanları uygulayıp/uygulamamak tamamen sizin inisiyatifinizdedir.
Bir sunucudan yüksek performans sağlamasını istemek sıradan bir beklentidir. Ancak bu beklentimizi sağlaması için sunucuyu yeterince optimize ediyor muyuz? Benzer şekilde “Linux nasılsa güvenli” diye düşünerek sunucuyu savunmasız bırakmanın yüksek ihtimalle karşılacağımız felaketlere davetiye çıkartmak olduğunun bilincinde miyiz?.
Bu yazımda da komutlardan ziyade mantıksal konular üzerinde durup performans arttırımı ve güvenlik için bir bilinç oluşturmaya çalışacağım. Sunucudan verebileceği tam performansı veya ona yakın olasılıkları almak için neler yapmalıyız kısaca bunlara değineceğim.
Donanım
“Balık baştan kokar.”
Öncelikle sahip olduğumuz donanımların kapasiteleri hakkında yeterli bilgiye sahip olmak durumundayız. Disklerimiz, işlemcimiz, network kartımız ve ram bu konuda en önemlileridir. Disklerin maks Iops bilgileri, network kartımızın çıkabildiği stabil maksimum rakamları bilmeliyiz ki donanımdan en iyi performansı alabilelim. Bu bilgilere üreticilerin sitelerinden kolaylıkla ulaşılabilir, bunun yanında bir de internette arama yapıp aynı donanımlarla “kimler neler yapmış”a bakmanın faydalı olacağı kanaatindeyim. Tüm bunların yanı sıra Bios ayarlarını mutlaka yapmak, önemsiz gibi görünen Boot Order seçeneklerini düzenlemek, ağdan boot seçenekleri veya genel olarak ihtiyaç duymayacağımız cd’den boot, USB’den boot gibi seçenekleri pasif duruma getirmek gibi hiç bir zararı olmayan basit ayarlar boot sırasında ufak hız kazanımları elde etmemizi sağlayacaklardır. Bunun gibi küçük ve önemsiz görünen bir çok özelliği kapatmak uptime’in önemli olduğu sistemlerde bizlere zaman kazandıracaklardır.
IPMI’ı olan bir sunucumuz varsa IPMI servislerini minumuma indirmek faydalı olacaktır, hem ssh, hem telnet, hem http, hem https, hem snmp çalıştırmanın hiç bir anlamı yoktur. Tüm servisleri kapatıp sadece HTTPS’i açmak, mümkünse portunu da değiştirmek hem performans hem de güvenlik için artı puan getirecek basit işlemlerdir. IPMI loglarının tamamını temizlemek geleceğe dönük herhangi bir problemde bu logların arasında aradığımızı bulmak konusunda faydalı olacak bir diğer işlemdir. Access-List oluşturup IPMI erişimini mutlaka belirli ip adreslerine atamak ve varsa IPMI versiyon/firmware güncellemelerini yapmak önemli adımlardır. Bunlar henüz sistem canlıya geçmeden, hatta işletim sistemi dahi kurulmadan yapılırsa herhangi bir aksaklıkta kayıp minumuma inecektir.
İşletim Sistemi
“Eşeğini sağlam kazığa bağla.”
İşletim sistemi kurulurken mümkün mertebe en az paketle kurulmalıdır, örneğin sadece SSH paketinin seçilmesi yeterlidir. Kurulum işlemleri internet üzerinden yapılmıyorsa kurulum tamamlanır tamamlanmaz güncellemelerin kontrolü önemlidir. Varsa tüm güncellemeleri öncelikle yapmalı, gerekirse reboot işlemi gerçekleştirilmeli ve sonra diğer işlemlere geçilmelidir.
Öncelikle sunucuya erişimin kontrollü hale getirilmesi önemlidir. Linux için erişimlerin SSH üzerinden sağlandığını bildiğimize ve minumum seviyede kurulum yaptığımıza göre öncelikle SSH sistemimizi daha güvenli hale getirmeliyiz. SSH için yapılabilecek başlıca işler, port değişikliği, root ile login seçeneğinin no olarak işaretlenmesi (burada dikkat edilmesi gereken bir konu var, ansible vb. bir sistem kullanıyorsanız ssh key ile login seçeneği aktif kalması gerekebilir – gerekir değil!.), SSH ile login olabilecek kullanıcılarının sınırlandırılması önemlidir. Tüm bu işlemlerden sonra bir de SSH’ı kullanabilecek ip adreslerini sınırlandırmak (firewall, hosts.deny vb.) SSH konusundaki korkularımızı bir kenara bırakmamızı sağlayabilir. Ancak yine de bol bol auth.log kontrol edilmeli, lastlog, last gibi komutların çıktıları da günlük takip edilmelidir. Bu konuda paranoyak olmak bize bir iyi birçok kötü sonuç doğurur; iyi olan sonuç; hacklenme olasılığımızı düşürürüz (sıfıra indiremeyiz – düşürürüz!), kötü olan olasılıklar ise başlıca; zaman içerisinde uykularınızı kaçırmamak için her kurulumda standart adımlar izlemeye başlarsınız ve bu kendi zamanınızdan çalmak olur, aynı zamanda standartlaşmanın bazen özgüven getiren bir yanılgı durumu söz konusu olur ki bu da sistem konusunda ölümcül hatalar yapılmasına sebep olur. Çok fazla dağılmadan, çok detaya girmeden konumuza devam edecek olursak, şu haliyle sistemimizin kapısı SSH’tır ve Çelik kapı hırsızların işini zorlaştıracaktır.
Bu adımlardan sonra sysctl ve limits ayarlarını yapmalı akabinde sunucuyu ne için kullanacaksak o servisleri kurmalıyız, kurulum işlemlerimiz bittikten sonra dışarıya açılması gerekmeyen tüm servisleri yine bir ACL ile sınırlandırmak çok mantıklı olacaktır. Tam işimiz bitti derken, son olarak ACL’lerde yer almayan bir sunucu üzerinden sunucunun tüm portlarını tarayıp herhangi bir aksaklık olmadığına emin olmak basit anlamda yapabileceğimiz son işlemdir. Güvenlik ve Performans konusunda bundan sonrası sağladığınız servisler ve üzerlerinde çalışan programlar ile ilgilidir.
Yukarıda anlatılan işlemleri her sunucu için kurulum düsturu haline getirmenin artılarını kısa sürede farkedebilirsiniz. İşin anafikri “Neye sahip olduğunu bil, kullanmadığın ve ihtiyaç duymadığın herşeyi kapat, mecburen çalışması gereken servisleri mümkün mertebe farklı portlardan çalıştır ve erişimleri kısıtla”
28 Ocak 2016,
Fikri DAL
No responses yet