Rehber Güvenli Linux Server Nasıl Kurulur?

SPOF

Centipat
Katılım
13 Şubat 2023
Mesajlar
24
Çözümler
1
Merhabalar arkadaşlar. Bu yazımda sizlere dilim döndüğünce daha güvenli bir Linux sunucu kurmanın yöntemlerinden bahsedeceğim.

Herhangi bir işletim sistemini kurduktan sonra eğer hiçbir şey yapmazsanız diğerlerine göre daha güvensiz bir sisteme sahip olursunuz. Linux sunucular hacklenemez diye bir şey yoktur. Her sistem hacklenebilir fakat bazı sistemler daha zor hacklenir. Ben de bu yazıda basit yoldan güvenliği sağlamak için neler yapabileceğimizi anlatacağım.

Örneğimizi Debian tabanlı sunucular üzerinden yapacağız. Şimdi Debian veya Ubuntu sunucunuzu daha güvenli hale getirmeye başlayalım.

1) Güvenlik güncellemelerini otomatikleştirin

Hepimiz sunucularımıza bağlanıp gerekli güncellemeleri arada bir kontrol ederiz fakat bazı durumlarda bu gözümüzden kaçabilir. Çok önemli bir güvenlik güncellemesi çıkmıştır ve bir an önce yüklememiz gereklidir fakat bundan haberimiz olmayabilir. Bu süreci otomatikleştirmek için

Kod:
sudo apt install unattended-upgrades

komutunu sisteme girelim. Y tuşuna basarak yüklemeyi onaylayalım ve sürecin bitmesini bekleyelim. Ardından,

Kod:
sudo dpkg-reconfigure --priority=low unattended-upgrades

komutunu uyguluyoruz. Karşımıza bir ekran çıkacak. Bu ekranda kararlı güncellemeleri otomatik olarak yüklemek isteyip istemediğinzi soracak. Bu ekranda Yes diyoruz ve bunları otomatik yüklemek istediğimizi belirtiyoruz.

2) Root kullanıcısının yerine alternatif bir kullanıcı oluşturun

Linux işletim sistemlerini kurarken sistem sizden standart bir root kullanıcısı oluşturmanızı ister. Bu kullanıcı Linux sistemlerin en yetkili kullanıcısıdır. Root kullanıcısı ile sisteme bağlıyken vereceğiniz komutlara çok dikkat etmeniz gereklidir. Windows'ta Administrator kullanıcısıyla dosya silmek istediğinizde bile sistem size "emin misiniz?" diye sorar. Linux'un root kullanıcısına sistem bu soruyu sormaz ve komutu veren kişinin isteğini sorgusuz sualsiz yerine getirir. Ayrıca sunucunuzu hacklemek isteyen bir kişi muhtemelen root kullanıcısı ile sisteme girmeyi deneyecektir. Biz ilk önlem olarak root'a alternatif bir kullanıcı oluşturalım.

Kod:
sudo adduser KullaniciAdi

Ekranda sizden yeni oluşturduğunuz kullanıcının şifresini belirlemenizi isteyecek. Ardından şifreyi tekrar girmenizi isteyecek. Diğer istediği bilgileri ister girersiniz, ister Enter tuşuna basarak boş geçebilirsiniz. Şimdi bu oluşturduğumuz kullanıcıya sudo komutunu kullanabilmesi için yetki tanımlayacağız.

Kod:
sudo usermod -aG sudo KullaniciAdi

İşlem tamam 😉


3) Sunucuya parola ile bağlanmaya son!

Yeni bir kullanıcı oluşturduğumuza göre artık root kullanıcısı ile değil, yeni kullanıcımız ile giriş yapalım. Windows komut satır ekranını açıp

Kod:
ssh kullaniciadi@sunucuipsi

yazarak sunucumuza bağlanalım.

Kullanıcı adı ve şifreyle sisteme bağlanmanın bazı dezavantajları vardır. Sisteme saldırı düzenlemek isteyen bir hacker bruteforce yöntemi ile sürekli kullanıcı adı ve şifre kombinasyonlarını deneyerek sisteminize erişmek isteyecektir. Biz bunun önüne geçmek için ilk hamlemizi yapalım. Linux sunucumuza bağlıysak

Kod:
mkdir ~/.ssh && chmod 700 ~/.ssh

komutunu uygulayarak yeni bir gizli klasör oluşturup dosya izinlerini düzenleyelim. Ardından logout komutu ile sunucumuzla olan bağlantımızı keselim. Windows'a geri döndüysek sunucuya bağlanmak için gerekli olan keyleri oluşturmaya başlayalım.

Kod:
ssh-keygen -b 4096

Enter'a basıp oluşturacağımız anahtarı keydedelim. Bize anahtara şifre koymak isteyip istemediğimizi soracak. Unutmayacağımız bir şifre ile anahtarımızı şifreleyelim. Ardından şifreyi tekrar girelim ve anahtar oluşturma işlemini tamamlayalım.

Şimdi bu anahtarı sunucumuza yüklememiz gerekiyor. Private ve Public keyleri oluşturduğumuz klasöre gidiyoruz.

Kod:
cd .ssh

Bu klasörde id_rsa bizim Private Key'imiz, id_rsa.pub ise bizim Public Key'imiz. Public Key'imizi sunucuya yüklüyoruz.

Kod:
scp ~/.ssh/id_rsa.pub kullaniciadi@SunucuIPadresi:~/.ssh/authorized_keys

Evet bu işlem de tamamsa daha güzel ayarlar yapmaya başlayabiliriz 🤓

4) Standart SSH bağlantı portunu değiştirin

Linux işletim sistemlerine konsoldan bağlanmak için gerekli olan port standartta 22'dir. Bu tüm Linux sunucularda böyleyse neden bizim sunucumuz diğer saldırganlar tarafından hedef alınsın? Kendimizi ne kadar gizleyebilirsek hacklenmeme şansımız bir o kadar yüksek olur.

Kod:
sudo nano /etc/ssh/sshd_config

Açılan sayfada #Port 22 yazan satıra gidiyoruz ve başındaki # işaretini kaldırıyoruz. Standart olan 22 portu yerine başka bir port numarası belirliyoruz. Örneğin 888. 22'yi silip 888 yazıyoruz. Ardından bir alt satırdaki AddressFamily ile başlayan yerin de başındaki # işaretini kaldırıyoruz. AddressFamily'nin yanındaki any'i siliyoruz ve inet yazıyoruz. Şimdi config dosyamızdaki o kısım şöyle gözüküyor olmalı

Kod:
Port 888
AddressFamily inet
#ListenAddress 0.0.0.0
#ListenAddress ::

Bu aşamanın son hamlesi olarak root kullanıcısı ile giriş yapmayı yasaklayalım. Alt satırlara inip PermitRootLogin yes yazan yerdeki yes'i silip no yazalım. Daha sonra PasswordAuthentication yazan yerin başındaki # işaretini kaldıralım ve yanındaki yes'i no ile değiştirelim.

CTRL+X ile nano ekranından çıkmak istediğinizi belirtin. Değiiklikleri kaydetmek istediğinizi belirtmek için Y tuşuna basıp Enter'a basın ve çıkın.

Böylece hem root kullanıcısının girişini engellemiş olduk, hem de kullanıcı adı/şifre kombinasyonu ile girişi engellemiş olduk.

5) Firewall ile bağlantıları kısıtlayın

Tüm bu güvenlik ayarlarını yaptıktan sonra sunucumuza dışarıdan erişilmesini zorlaştırmak için gerekli güvenlik ayarlarını yapmalıyız. Bildiğiniz üzere her sisteme bağlanmak için veya sistemin bir işlemi gerçekleştirebilmesi için belli portlar kullanması gerekir. Portları evinizin kapı ve pencereleri gibi düşünün. Günlük hayatımızda ne yaparız? Kapı ve pencerelerimizi kapatırız. Eğer erişilmesi kolay ise ekstra güvenlik önlemleri alırız. Aynısının sanal olanını yapacağız.

Kod:
sudo apt install ufw

komutu ile Debian tabanlı sunucularda kullanması çok basit olan UFW (Uncomplicated Firewall) isimli güvenlik yazılımını yüklyoruz. Firewall yüklendi yüklenmesine ama eğer firewall'un durumunu sorgularsanız henüz çalışmadığını göreceksiniz.

Kod:
sudo ufw status

Gördüğünüz gibi firewall inaktif. Neden? Çünkü henüz hangi portu açıp açmayacağınızı sisteme söylemediniz ve firewall direkt olarak aktifleşirse sistemle olan tüm bağlantınız gidebilir. Hackerları engelleyeceğinize kendizi bile engelleyebilirsiniz. İlk önce sunucuya bağlanmamızı sağlayan ve standartta 22 olan ama bizim 888 olarak değiştirdiğimiz portu açık bırakmak istediğimizi sisteme tanıtalım.

Kod:
sudo ufw allow 888

Rules updated olarak bir sonuç dönecektir. Şimdi firewall'u aktifleştirmek ve sistem her yeniden başladığında otomatik olarak devreye girmesi için

Kod:
sudo ufw enable

komutunu verdikten sonra y tuşuna basarak onaylıyoruz ve logout komutu ile sistemden kopuyoruz.

Artık sisteme bağlanırken sunucunun IP adresinin yanına ek olarak başka bir porttan bağlanmak istediğimizi yazmamız gerekecek.

Kod:
ssh kullaniciadi@sunucuIPadresi -p 888

yazıp Enter'a bastığınızda sunucunuza bağlanabilirsiniz.

Son olarak şunu belirteyim. Bir sistemin ayakta olup olmadığını test etmek için sunucuya ping atarız. Sunucudan cevap geliyorsa bu sunucunun erişilebilir olduğunu anlarız. Hackerlar da bu şekilde çalışır. Genel bir tarama yaptıklarında kendilerine cevap veren sunuculara saldırı düzenlemek isterler. Peki biz ne yapacağız? Sunucumuzu sanki aktif değilmiş gibi gösterip atılan ping'lere geri dönüş olmamasını sağlayacağız.

Kod:
sudo nano /etc/ufw/before.rules

yazıp Enter'a basıyoruz. Alt satırlara inip

Kod:
# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

yazan yeri buluyoruz. En altta bulunan -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT satırını kopyalayıp #ok icmp codes for INPUT'un bir alt satırına yapıştırıyoruz ve sondaki ACCEPT'i DROP olarak değiştiriyoruz. Artık bu kısım şu şekilde gözükmeli:

Kod:
# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

CTRL+O ile değişiklikleri kaydetmek istediğimizi söylyoruz. y tuşuna basarak değişiklikleri kaydediyoruz ve CTRL+X ile nano ekranından çıkmak istediğimizi belirtiyoruz. Bu işlemden sonra sunucumuzu yeniden başlatmamız gerekli.

Kod:
sudo reboot now

komutu ile sunucumuzu yeniden başlatıyoruz. Artık bilgisayarınızdan sunucunuzun IP'sine ping attığınızda cevap alamayacaksınız ama sunucunuz çalışıyor olacak :)

Bu yazdıklarım ile ilgili herhangi bir fikriniz yoksa ve ne yaptığınızı bilmiyorsanız çalışan sistemi bozabilirsiniz ve/veya erişiminizi kesebilirsiniz. Linux konusunda acemiyseniz öncelikle bu işlemleri bilgisayarınızda sanal bir makine oluşturup denemeniz yönünde.

Herkese saygılar, sevgiler.
 
Son düzenleyen: Moderatör:

Yeni konular

Geri
Yukarı