Linux Sunucularda Temel Güvenlik Önlemleri

03 Ekim 2015

Bu yazıda, yeni kurulmuş Ubuntu 18.04 sunucusu üzerinde Firewall'ın aktifleştirilmesi ve fail2ban gibi paketler ile temel güvenlik ayarlarını nasıl yapabileceğinizi anlatacağım. Aslında yapacağım şey bir nevi Bryan Kennedy'nin makalesini Türkçeye 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.

Karmaşık Root Şifresi

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, burada LastPass vb. bir araç kullanabilirsiniz. Ancak, sunucuya bağlanırken şifre kullanmak iyi değildir ve biz de bu yazının sonunda sunucuya sadece SSH anahtarı aracılığı ile bağlanacağız. Öte yandan herkesin super user olamayacağı platformlarda, karmaşık bir super user şifresine sahip olmak, sistem güvenliği açısından faydalıdır.

Fail2ban Kurulumu

Yeni sunucularda yapılan ilk şeylerden birisi Fail2ban paketini yüklemektir. Bu paketi yüklediğinizde ilgili herhangi bir ayarlama yapmanıza gerek olmaz, Fail2ban sunucunuza gelen oturum açma isteklerini gözetleyip, kuşkulu gördüğü anda engeller; böylece çeşitli Brute Force yöntemleri ile sunucunuza bağlanmaya çalışan kötü niyetli kullanıcılar otomatik olarak engellenir.

$ apt update && apt upgrade && apt install fail2ban

Sunucuya SSH ile Bağlanmak

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, bu kısmı atlayabilirsiniz, ancak 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. Öte yandan 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 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.

PermitRootLogin no
PasswordAuthentication no

Bu dosyayı da yine CTRL + X ve ardından Y yazıp, entera bastıktan sonra, SSH'ı yeniden başlatın.

$ service ssh restart

UFW Ayarları

Bu kısımdan sonra Ubuntu'nun sağladığı firewall'ı aktifleştirerek güvenliği arttırabiliriz.

$ ufw allow 22
$ ufw allow 80
$ ufw allow 443
$ ufw enable

Bu firewall ayarıyla, sunucu sadece 22 numaralı SSH portu ile 80 (http) ve 443 (https) numaralı portlardan gelen istekleri kabul edecek. Ubuntu sunucunuz tüm bu aşamalardan sonra, en azından basit seviyede güvenliğe sahip olacak. Eğer hızlı bir şekilde daha da güvenli hale getirmek isterseniz, Cloudflare entegrasyonunu düşünebilirsiniz.