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.
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 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.
Root 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, 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 desudo
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 = [email protected] ş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.
Ş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.