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:Panoya kopyala sudo apt install unattended-upgrades komutunu sisteme girelim. Y tuşuna basarak yüklemeyi onaylayalım ve sürecin bitmesini bekleyelim. Ardından, Kod:Panoya kopyala 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: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ş geçebilirsiniz. Şimdi bu oluşturduğumuz kullanıcıya sudo komutunu kullanabilmesi için 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 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:Panoya kopyala 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:Panoya kopyala 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: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 yüklememiz gerekiyor. Private ve Public keyleri oluşturduğumuz klasöre gidiyoruz. Kod:Panoya kopyala 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:Panoya kopyala 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:Panoya kopyala 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: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 çı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:Panoya kopyala sudo apt install ufw komutu ile Debian tabanlı sunucularda kullanması çok basit olan UFW 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:Panoya kopyala 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:Panoya kopyala 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: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 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: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 gözükmeli: 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 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: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 ç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: 16 Şubat 2023