VPS Başlangıç İpuçları – Güvenlik

Günlüğün ilk yazılarından birisinde web sitem için barındırma çözümü olarak DigitalOcean‘dan aldığım VPS’leri kullandığımdan bahsetmiştim. Aynı yazıda yeni sunucuda ilk yapılacaklar ile ilgili kısa kısa ipuçları da vardı. Hem o ipuçlarını bir yazıda -biraz daha detaylı bir şekilde- toplamak, hem de aradan geçen zamanda sunucuyu kullanırken karşılaştığım sorunlar ile ilgili çözümleri yazmak için böyle bir yazı hazırladım.

SSH.

Sunucunuz oluşturulduktan sonra e-posta adresinize root (linux işletim sistemlerinde bütün haklara sahip olan kullanıcı) kullanıcınız, şifreniz ve sunucunuzun ip adresinin yazılı olduğu bir e-posta gelecek. Sunucuya bağlanmak için SSH (Secure Shell) ağ protokolünü kullanıyorsunuz.

Ubuntu veya herhangi bir Linux dağıtımı ya da OS X kullanıyorsanız terminalden (Ubuntu ve diğer Linux dağıtımlarını kullanırken Ctrl + Alt + T kısayolu ile terminali açabilirsiniz, OS X için kısayolu bulamadım.) direk olarak ssh root@sunucuIpAdresiniz komutu ile sunucunuza bağlanabilirsiniz. Windows kullanıyorsanız da Putty işinizi görecektir. Size gelen e-postadaki şifreyi terminal ya da putty ekranında klasik kopyala (Ctrl + C) – yapıştır (Ctrl + V) şeklinde kullanamıyorsunuz. Bu yüzden gelen e-postadan şifrenizi seçip kopyalayın, terminal ya da putty ekranında, size şifre sorulduğunda shift + insert tuşu ile şifrenizi yapıştırabilirsiniz.

küçük bir öneri: sunucunuza bağlanırken sürekli ip adresinizi girmek zorunda değilsiniz. eğer şimdilik bir alan adı tanımlamayı düşünmüyorsanız hosts dosyanızda yapacağınız küçük bir değişiklikle ip adresi yerine bir isim ya da adres (vps ya da vps.io gibi) kullanabilirsiniz. -bu arada terminale bir kez sunucunuzun ip adresini yazdıktan sonra terminal geçmişinden de hızlı bir şekilde sunucunuza bağlantı sağlayabilirsiniz.- terminal ekranınıza sudo nano /etc/hosts komutunu yazın. root hakları ile dosyayı açmanız gerektiği için kişisel bilgisayarınızın şifresini yazın. açılan ekranda boş bir satıra sunucunuzun ip adresini ve bir boşluk bırakarak kullanmak istediğiniz isim ya da adresi –örnek– yazın. Ctrl + X tuşuna basın, e tuşuyla (ingilizce kullanıyorsanız y tuşu) dosyada yapılan değişkikleri kaydedilmesi için onay verin.

Sunucuya bağlandığınızda yapacağınız ilk iş şifrenizi değiştirmek. Terminal ekranına sudo passwd root komutunu yazın. (Şifrenizi yazarken ekranda birşey görmemeniz normal, şifrenizi yazıp enter’a basın, şifrenizi tekrar yazıp tekrar enter’a basın.)

SSH Güvenliği.

SSH ağ protokolünü güvenlik açısından root kullanıcısı ile kullanmamanız daha mantıklı. Sizin oluşturacağınız kullanıcı, root kullanıcısına göre daha zor tahmin edilebilir olduğundan olası bir saldırı durumunda kullanıcı adınızın tahmin edilebilmesinin önüne geçmiş olursunuz.

Yeni bir kullanıcı oluşturmak için adduser kullanıcıAdınız komutunu kullanın. Daha sonra bu kullanıcıya root hakları vermelisiniz. Bunun için terminal ekranına visudo komutunu yazın. Açılan ekranda ‘# User privilege specification’ satırını bulun. Bu satırın altında root haklarına sahip olan kullanıcılar listelenir. Az önce oluşturduğunuz kullanıcı adınızı bu satırın altına eklediğinizde sizin kullanıcınız da root haklarına sahip olur. Kendi kullanıcınızı kullanıcıAdınız ALL=(ALL:ALL) ALL kodu ile root kullanıcısının alt satırına ekleyin ve dosyayı Ctrl + X komutu ile kaydedip kapatın.

terminal-root-login-portRoot haklarına sahip kullanıcı adınızı oluşturduğunuza göre artık root kullanıcısının ssh komutu ile sunucunuza bağlanmasını engelleyebilirsiniz. nano /etc/ssh/sshd_config komutu ile ssh bağlantı ayarlarının saklandığı dosyayı açın. 4. satırdaki port numarası varsayılan SSH portu olan 22’dir. Bu da tahmin edilebilir olduğundan varsayılan port numarasını değiştirmek size ekstra güvenlik sağlar. Örnek olarak ben 1905 olarak ayarladım, siz 1025 ile 65536 arasından istediğiniz bir port numarasını kullanabilirsiniz.

ipucu: terminalden kullanıcıAdınız@sunucuIpAdresiniz komutuyla sunucunuza bağlanırken port bilgisi olarak varsayılan port numarası olan 22 kullanılır. yukarıdaki gibi port numarasında değişiklik yaptığınız zaman sunucunuza bağlanırken kullandığınız komutta port bilgisi de vermeniz gerekiyor. komutu ssh -p portNumaranız kullanıcıAdınız@sunucuIpAdresiniz şeklinde yazmalısınız.

Teminal ekranındaki ‘# Authentication’  başlığında sizin ekleyeceğiniz PermitRootLogin no kodu root kullanıcısının sunucunuza bağlantısını kapatır, AllowUsers burak1 kodu ise sadece orada adı yazan kullanıcıların -örnek burak1 kullanıcısı- bağlanabilmesine izin verir. Bütün işlemlerden sonra Ctrl + X komutu ile dosyayı kaydedip kapatın. Daha sonra terminale reload ssh komutu vererek yeni ayarlarınız ile ssh’i yeniden yükleyin.

Fail2Ban.

Fail2Ban, sunucunuzun hatalı giriş kayıtlarını tarayarak fazlaca hatalı giriş denemesi yapan ip adreslerini, sunucunuzun güvenlik duvarında otomatik olarak oluşturduğu kurallar ile engeleyen oldukça faydalı bir yazılım. Bu şekilde sunucunuza yapılacak olası ‘brute force’ denilen, rastgele ya da bir listede tutulan şifreler denenerek sunucunuza bağlanmaya çalışan saldırganların önüne geçmiş olursunuz.

yukarıdaki ayarları kullanarak yeni kullanıcı oluşturduğunuz zaman, daha önce root kullanıcınız ile yazdığınız komutları yeni kullanıcınız ile yazarken ufak bir değişiklik gerekiyor. yönetici hakları gerektiren komutlar için yazacağınız komutlara sudo komutunu eklemelisiniz. bu şekilde hem istemeden sisteme zarar verecek bir işlem yapmanın önüne geçmiş olursunuz, hem de sudo komutu ile yazılan bütün komutlar loglandığı için daha sonra ‘ne yazmıştım ben?’ sorunuza kolaylıkla cevap bulabilirsiniz.

sudo apt-get install fail2ban komutu ile fail2ban’ı sunucunuza indirip kurun. Fail2Ban sunucunuza kurulduktan sonra cd /etc/fail2ban/ komutu ile programın ayarların saklandığı klasöre girin. Programın bütün ayarları jail.conf dosyasında saklanır ancak sunucunuzda yapacağınız güncellemeler sırasında bu dosya da güncelleneceği ve yapılan değişikliklerin kaybolmaması için jail.conf dosyası yerine jail.local dosyası kullanılır. jail.local dosyasını sudo copy jail.conf jail.local oluşturun. Yazdığımız komut jail.conf dosyasının kopyasını jail.local olarak oluşturur ve bütün ayarlamalar bu dosya üzerinden yapılır. sudo nano jail.local komutu ile dosyanızı açın.

ignoreip = 127.0.0.1/8 satırı yoksayılacak ip adreslerini ayarlamanızı sağlar, bu şekilde -eğer sabit ip kullanıyorsanız- ip adresinizi bir boşluk bırakarak satırın sonune eklerseniz kendinizi banlama gibi bir durumdan kurtulursunuz.

bantime = 600 satırı engellenecek süreyi belirlemenize yardımcı olur, varsayılan süre 600 saniye olarak ayarlı, siz istediğiniz şekilde değiştirin.

findtime = 600 ve maxretry = 3 satırları ise kaç dakika içerisinde kaç deneme yapıldığında kullanıcının engelleneceğini ayarlamak için kullanılır. Varsayılan ayarlarda 10 dakika içerisinde 3 başarısız deneme yapıldığında kullanıcı engellenir.

action = $(action_)s satırı kullanıcı engellendiği zaman ne yapılacağını ayarlamak için kullanılır. Varsayılan ayarda sadece /var/log/fail2ban.log dosyasına engellenen ip adresleri yazılır. Kullanılabilecek aksiyonlar ise bu satırın üstünde ayarlanmıştır.

destemail = root@localhost, sendername = Fail2Ban ve mta = sendmail satırları kullanıcı engellendiği zaman e-posta gönderilecek şekilde ayarlanmışsa kime nasıl e-posta gönderileceğini ayarlamak için kullanılır. Bu ayarlarda sadece destemail = e-posta@adresiniz.com şeklinde kendi e-posta adresiniz ile değiştirmeniz yeterli.

e-posta gönderme işlemi sunucunuzda MTA (Mail Transfer Agent) kurulu ise çalışır. kurulum hakkında bilgilere buradan ve şuradan ulaşabilirsiniz.

Son olarak, fail2ban tarafından hangi servislerin çalışacağının ayarlandığı bölüm var. Bizim amacımız ssh tarafından gelenleri engellemek olduğu için [ssh] başlığının altındaki ayarları (diğer servislerin yapılandırmaları ve ayarlamaları için fail2ban dökümantasyonuna bakabilirsiniz) değiştireceğiz. Varsayılan ayarlardan sadece değiştirmeniz gereken, üstteki ayarlar sırasında değiştirdiğiniz ssh port numarası ve eğer enabled = true değilse enabled değeri. Kaç deneme sonrası kullanıcının engelleneceğini yukarıda ayarlamıştık ancak ssh servisine özel bir deneme sayısı ayarlamak istiyorsanız maxretry = 3 değerini değiştirin.

burada bahsedildiği üzere sistem loglamaları sırasında benzer hata mesajların “last message repeated n times” şeklinde log dosyalarına yazılmasından dolayı fail2ban hata satırlarını düzgün şekilde sayamayabiliyor. bunun önüne geçmek için sudo nano /etc/rsyslog.conf komutu ile rsyslog.conf dosyasını açın. $RepeatedMsgReduction On değerini $RepeatedMsgReduction Off şeklinde değiştirin. sudo service rsyslog restart komutu ile rsyslog hizmetini yeniden başlatın.

Son.

Şimdilik başlangıç için yapabilecekleriniz bunlar ancak daha fazla kaynak için DigitalOcean‘da muazzam makaleler (tabii ingilizce ve özellikle güvenlik ile ilgili makaleler için security etiketini takip edebilirsiniz) var.

Rush!

Rush, kesinlikle harikulade, muazzam bir film. Akıl Oyunları‘ndan bu yana hiç bir film beni bu kadar etkilememişti. Rekabet etmenin yanında hala dost da kalabilmeyi göstermesinin yanısıra hayatımızdaki dostukları, ahbaplıkları sorgulatmıyor değil. Ölesiye rekabet eden iki yarışçının, aslında ne kadar -çoğumuzun sahip olamadığı kadar- iyi bir dostluğa sahip olabildiğini en çarpıcı şekliyle görebiliyorsunuz filmi izlerken. Neyse, daha fazlası filmde. Özetle, izleyin!

İnsanlar!

Uzun zamandır yazmayı planlayıp da bir türlü elimi klavyeye götüremeyişimi bu filmden sonra -zaten çoğunlukla filmlerin etkisindeyken gelir böyle yazıların ilhamları- nihayet kırdım. Başlıyoruz.

Lisede bir arkadaşım bana, çıkar ilişkisi konusunda fikrini söylemişti. ‘Çıkarı kalmadığı zaman bir anda başkalaşıyor insanlar.’ minvaline bir şeydi söylediği. Zamanla bunun ne kadar doğru olduğunu öğrendim ancak tespiti ne kadar doğruysa da eksikti. Sadece çıkarı olmadığı zaman değil, aynı zamanda yeni bir çıkar ilişkisinde insanlar değişiyordu. Kendimce bu duruma bir çözüm aramaya başladığımda aslında oldukça kolay bir yolu olduğunu öğrenmem fazla uzun sürmedi.

Beklentiler, Hayal Kırıklıkları.

İnsanlar ile ilgili beklentilerinizi ne kadar azaltırsanız hayalkırıklıklarınız da o kadar azalıyor. Aynı şekilde kimse için özel bir durumunuz olmadığını da kabul etmelisiniz mesela. Yapmak zorunda olmadığı bir konuda ‘bunu ben söylersem yapar / eder’ diye kendinizi şartladığınız zaman aksi durumda beklentinizin gerçekleşmemesinden dolayı hayal kırıklığı ve o kişiye olmadık kırgınlık besliyorsunuz, besliyoruz. ‘benim için bunu nasıl yapmaz?’ demek yerine ‘benim için bunu yapmak zorunda mı?’ diye sorup kendinize verdiğiniz cevaba göre beklentinizi belirlerseniz, sorunlarınız daha sorun olamadan yok olup gitmesin mi?