Merhabalar arkadaşlar. Bu yazımda sizlere dilim donduğunce daha guvenli bir Linux sunucu kurmanın yontemlerinden bahsedeceğim.

Herhangi bir işletim sistemini kurduktan sonra eğer hicbir şey yapmazsanız diğerlerine gore daha guvensiz 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 guvenliği sağlamak icin neler yapabileceğimizi anlatacağım.

Orneğimizi Debian tabanlı sunucular uzerinden yapacağız. Şimdi Debian veya Ubuntu sunucunuzu daha guvenli hale getirmeye başlayalım.

1) Guvenlik guncellemelerini otomatikleştirin

Hepimiz sunucularımıza bağlanıp gerekli guncellemeleri arada bir kontrol ederiz fakat bazı durumlarda bu gozumuzden kacabilir. Cok onemli bir guvenlik guncellemesi cıkmıştır ve bir an once yuklememiz gereklidir fakat bundan haberimiz olmayabilir. Bu sureci otomatikleştirmek icin

Kod:Panoya kopyala
sudo apt install unattended-upgrades


komutunu sisteme girelim. Y tuşuna basarak yuklemeyi onaylayalım ve surecin bitmesini bekleyelim. Ardından,

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


komutunu uyguluyoruz. Karşımıza bir ekran cıkacak. Bu ekranda kararlı guncellemeleri otomatik olarak yuklemek isteyip istemediğinzi soracak. Bu ekranda Yes diyoruz ve bunları otomatik yuklemek 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 cok 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 onlem olarak root'a alternatif bir kullanıcı oluşturalım.

Kod:Panoya kopyala
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ş gecebilirsiniz. Şimdi bu oluşturduğumuz kullanıcıya sudo komutunu kullanabilmesi icin yetki tanımlayacağız.

Kod:Panoya kopyala
sudo usermod -aG sudo KullaniciAdi


İşlem tamam


3) Sunucuya parola ile bağlanmaya son!

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

Kod:Panoya kopyala
ssh [email protected]


yazarak sunucumuza bağlanalım.

Kullanıcı adı ve şifreyle sisteme bağlanmanın bazı dezavantajları vardır. Sisteme saldırı duzenlemek isteyen bir hacker bruteforce yontemi ile surekli kullanıcı adı ve şifre kombinasyonlarını deneyerek sisteminize erişmek isteyecektir. Biz bunun onune gecmek icin ilk hamlemizi yapalım. Linux sunucumuza bağlıysak

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


komutunu uygulayarak yeni bir gizli klasor oluşturup dosya izinlerini duzenleyelim. Ardından logout komutu ile sunucumuzla olan bağlantımızı keselim. Windows'a geri donduysek sunucuya bağlanmak icin gerekli olan keyleri oluşturmaya başlayalım.

Kod:Panoya kopyala
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 yuklememiz gerekiyor. Private ve Public keyleri oluşturduğumuz klasore gidiyoruz.

Kod:Panoya kopyala
cd .ssh


Bu klasorde id_rsa bizim Private Key'imiz, id_rsa.pub ise bizim Public Key'imiz. Public Key'imizi sunucuya yukluyoruz.

Kod:Panoya kopyala
scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/authorized_keys


Evet bu işlem de tamamsa daha guzel ayarlar yapmaya başlayabiliriz

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

Linux işletim sistemlerine konsoldan bağlanmak icin gerekli olan port standartta 22'dir. Bu tum Linux sunucularda boyleyse neden bizim sunucumuz diğer saldırganlar tarafından hedef alınsın? Kendimizi ne kadar gizleyebilirsek hacklenmeme şansımız bir o kadar yuksek olur.

Kod:Panoya kopyala
sudo nano /etc/ssh/sshd_config


Acı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. Orneğ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 şoyle gozukuyor olmalı

Kod:Panoya kopyala
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 cıkmak istediğinizi belirtin. Değiiklikleri kaydetmek istediğinizi belirtmek icin Y tuşuna basıp Enter'a basın ve cıkın.

Boylece 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

Tum bu guvenlik ayarlarını yaptıktan sonra sunucumuza dışarıdan erişilmesini zorlaştırmak icin gerekli guvenlik ayarlarını yapmalıyız. Bildiğiniz uzere her sisteme bağlanmak icin veya sistemin bir işlemi gercekleştirebilmesi icin belli portlar kullanması gerekir. Portları evinizin kapı ve pencereleri gibi duşunun. Gunluk hayatımızda ne yaparız? Kapı ve pencerelerimizi kapatırız. Eğer erişilmesi kolay ise ekstra guvenlik onlemleri alırız. Aynısının sanal olanını yapacağız.

Kod:Panoya kopyala
sudo apt install ufw


komutu ile Debian tabanlı sunucularda kullanması cok basit olan UFW (Uncomplicated Firewall) isimli guvenlik yazılımını yuklyoruz. Firewall yuklendi yuklenmesine ama eğer firewall'un durumunu sorgularsanız henuz calışmadığını goreceksiniz.

Kod:Panoya kopyala
sudo ufw status


Gorduğunuz gibi firewall inaktif. Neden? Cunku henuz hangi portu acıp acmayacağınızı sisteme soylemediniz ve firewall direkt olarak aktifleşirse sistemle olan tum bağlantınız gidebilir. Hackerları engelleyeceğinize kendizi bile engelleyebilirsiniz. İlk once sunucuya bağlanmamızı sağlayan ve standartta 22 olan ama bizim 888 olarak değiştirdiğimiz portu acık bırakmak istediğimizi sisteme tanıtalım.

Kod:Panoya kopyala
sudo ufw allow 888


Rules updated olarak bir sonuc donecektir. Şimdi firewall'u aktifleştirmek ve sistem her yeniden başladığında otomatik olarak devreye girmesi icin

Kod:Panoya kopyala
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:Panoya kopyala
ssh [email protected] -p 888


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

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

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


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

Kod:Panoya kopyala
# 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 gozukmeli:

Kod:Panoya kopyala
# 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 soylyoruz. y tuşuna basarak değişiklikleri kaydediyoruz ve CTRL+X ile nano ekranından cıkmak istediğimizi belirtiyoruz. Bu işlemden sonra sunucumuzu yeniden başlatmamız gerekli.

Kod:Panoya kopyala
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 calışıyor olacak

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

Herkese saygılar, sevgiler.