Linux Sunucularda Temel Güvenlik Önlemleri

Bu yazıda, yeni kurulmuş Ubuntu 14.04 sunucusu üzerinde, temel güvenlik ayarlarını nasıl yapabileceğinizi anlatacağım. Aslında yapacağım şey bir nevi Bryan Kennedy'nin makalesini Türkçe'ye biraz daha detaylı çevirerek anlatmak olacak, açıkçası ben de birçok temel şeyi bu makaleyle öğrenmiştim, dolayısıyla bu makaleyi Sunucu Güvenliğine Giriş - 101 dersi gibi görebilirsiniz.

Sunucuya root olarak ilk seferinde bağlandığınızda, sizden yeni bir şifre isteyecektir. Herhangi bir şifrede yapmanız gerektiği gibi, yeni şifrenizi karmaşık şekilde ayarlayın, ileride herhangi bir şifreye ihtiyacımız olmamalı, tabii yine de not almayı unutmayın, gerekeceği durumlar (SSH ile bağlanamama ya da super user olmak istediğinizde gerekebilir) olabilir. Ancak bu kısmın sonundaki amacımız şifre ile sunucuya bağlanmamak üzerine kurulu olacak, sebebi de her şeyi SSH keyler ile yapacak olmamız.

Öncelikli olarak sunucuyu güncellemeyi ve locale hatası varsa düzeltmeyi unutmayın.
$ apt-get update
$ apt-get upgrade
$ locale-gen tr_TR.UTF-8 # locale hatanız yoksa bunu kaldırabilirsiniz
$ dpkg-reconfigure locales
Sonrasında, ilk yapacağımız şey Fail2ban paketini yüklemek olacak. Bu paket ile ilgili herhangi bir ayarlama yapmanıza gerek, Fail2ban sunucunuza gelen oturum açma isteklerini gözetleyip, kuşkulu gördüğü anda engelliyor.
$ apt-get install fail2ban
Daha sonrasında sunucuya bağlanırken kullanmanız gereken, root kullanıcısından ayrı, bir hesap oluşturun. Örneğin deployment için ortak kullanılacak olan bu hesabın adı, deployer olsun. Eğer deployment için, sunucuya bağlantıda root hesabını kullanıyorsanız, bu satırları okuduktan sonra bundan tamamen vazgeçin.
$ useradd deployer
$ mkdir /home/deployer/.ssh -p
$ chmod 700 /home/deployer/.ssh
Eğer kullanıcın kullandığı shell'i de bash olarak düzenlemek isterseniz alttaki komutu çalıştırmayı unutmayın.
$ chsh -s /bin/bash deployer
En başta da belirttiğim gibi, sunucuya bağlanırken şifre ile oturum açmak yerine, public key doğrulaması yapacağımız için deployer kullanıcısı için kendi public key'imizi ekleyeceğiz, ya da hangi kullanıcılar bu hesabı kullanacaksa, her birinin public key'ini eklemeniz lazım.

Daha önceden bir public key oluşturup, oluşturmadığınızı bilmiyorsanız, kendi bilgisayarınızın terminalinde bunu kontrol edin.
$ ls -al ~/.ssh
Eğer karşınıza çıktı geldiyse, daha önceden bir SSH key oluşturmuşsunuz demektir. Passphrase'inizi de biliyorsanız, alttaki paragrafı atlayabilirsiniz.

Eğer karşınıza hiçbir şey gelmediyse, kendi bilgisayarınızın terminalinde alttaki komutu yazın:
$ ssh-keygen -t rsa -b 4096 -C "[email protected]"
İlk çıkan soruda Enter'a basın, ikinci soruda, bir parola(passphrase) yazın, yalnız bu parolanın daha güvenli bir şey olmasına dikkat edin ve son olarak bu parolayı not etmeyi unutmayın, bu nedir diye merak ederseniz, birazdan açıklayacağım. Daha sonrasında sizden bu parolanın tekrarını isteyecek, parolanın tekrarını girdikten sonra başarıyla identification(kimliğiniz) ve public key'inizin oluştuğunu belirtip, size bir fingerprint(parmakizi) çıktısı verecek. Oluşan çıktılardan, id_rsa dosyası private key'iniz, sadece sizin bilgisayarınızda olan, size ait, bağlandığınız sunucunun görmeyeceği kısım olurken, id_rsa.pub uzantılı dosya ise public key olup, sunucuya aktarmanız gereken kısımdır. Sunucuya bağlandığınızda, sunucu, sizin private key'inizin passphrase ile şifrelenmesi sonucunda yüklenmiş olan public key'in eksik kısmına sahip olduğunuzu görünce size erişim izni verir, dolayısıyla herhangi bir kişi sizin private key'inizi elde etse de, passphrase'i bilmediği sürece sunucuda oturum açamaz.

Sunucuya her bağlandığınızda size passphrase'inizi tekrar tekrar sormaması için, sadece bir kere olmak üzere, passphrase'inizi ssh-agent'ınıza yükleyebilirsiniz.
$ eval `ssh-agent -s` # ssh-agent başlat
$ ssh-add ~/.ssh/id_rsa
Daha sonrasında kendi bilgisayarınızın terminalinde, public key'inizi kopyalayın.
$ sudo apt-get install xclip
$ xclip -sel clip < ~/.ssh/id_rsa.pub
Kopyaladığınız bu public key'i sunucunuzda, biraz önce oluşturduğumuz deployer kullanıcısı için eklememiz lazım. Sunucuda,
$ nano /home/deployer/.ssh/authorized_keys
Sağ click ile karşınıza gelen ekranda yapıştıra basıp CTRL + X'e basıp çıkın, gelen soruya Y yazıp enter'a basın. Daha sonra:
$ chmod 400 /home/deployer/.ssh/authorized_keys
$ chown deployer:deployer /home/deployer -R
Son olarak da bu kullanıcı ile sudo işlemleri yapabilmek için, deployer kullanıcısına bir şifre ekleyebilirsiniz, şifrenin kompleks olması tekrar önemli.
$ passwd deployer
Yeni kullanıcı için sudo ayarlarını düzenlemek için de sunucuzun terminalinde,
$ visudo
Karşınıza gelen ekranda, sudo, admin gibi grupları yoruma alıp, işimize yaramayacak izinleri kaldırabilirsiniz, alttaki iki satır bizim için yeterli olacaktır.
root    ALL=(ALL) ALL
deployer  ALL=(ALL) ALL
Daha sonrasında, şifre ile sunucuya erişimi kapatmak için,
$ nano /etc/ssh/sshd_config
Karşınıza gelen kısmı alttaki gibi düzenleyin, IP adresi kısmına dikkat edin, eğer ISP'niz(internet servisi sağlayıcınız), statik IP değil de dinamik IP sağlıyorsa, AllowUsers ile başlayan satırı atlayabilirsiniz. ISP'nizin statik ya da dinamik IP adreslerinden hangisini sağladığını öğrenmek için, modemi resetlemeden önce ve modemi resetledikten sonraki IP adresinizi kontrol edin, eğer aynıysa IP adresiniz statiktir, bir problem yok, ancak değiştiyse, IP adresiniz dinamik demektir, AllowUsers satırını eklememeniz lazım, yoksa en ufak bir elektrik kesintisinde dahi sunucunuza bağlanamayabilirsiniz.
PermitRootLogin no
PasswordAuthentication no
AllowUsers [email protected](IP_ADRESINIZ) [email protected](IZIN_VERILEN_BASKA_IP_ADRESI)
Bu dosyayı da yine CTRL + X ve ardından Y yazıp, entera bastıktan sonra, SSH'ı yeniden başlatın.
$ service ssh restart
Bu kısımdan sonra Ubuntu'nun sağladığı firewall'ı aktifleştirerek güvenliği arttırabiliriz. IP adresi ile ilgili üstte belirttiğim kısım burada da geçerli.
$ ufw allow from {IP_ADRESINIZ} to any port 22 # dinamik IP adresi durumunda -> ufw allow 22
$ ufw allow 80
$ ufw allow 443
$ ufw enable
Bu firewall ayarıyla, sunucu sadece 22 numaralı SSH portu(IP adresi belirtirseniz sadece IP adresinizden gelen istekler) ile 80(http) ve 443(https) numaralı portlardan gelen istekleri kabul edecek.

Son olarak da sunucu loglarını daha iyi takip edebilmek için logwatch paketini kuracağız, böylece sunucu logları email adresinize düzenli olarak gelecek.
$ apt-get install logwatch # karşınıza gelen ekranda en üstteki seçeneği seçip entera basın
$ nano /etc/cron.daily/00logwatch
Daha sonra da alttaki satırı ekleyin.
/usr/sbin/logwatch --output mail --mailto [email protected] --detail high
Sunucunuzun tüm bu işlemlerden sonra artık daha güvenli hale geldi.