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
komutunu sisteme girelim. Y tuşuna basarak yüklemeyi onaylayalım ve sürecin bitmesini bekleyelim. Ardından,
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.
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.
İş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
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
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.
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.
Bu klasörde id_rsa bizim Private Key'imiz, id_rsa.pub ise bizim Public Key'imiz. Public Key'imizi sunucuya yüklüyoruz.
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.
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ı
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.
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.
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.
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
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.
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.
yazıp Enter'a basıyoruz. Alt satırlara inip
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:
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.
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.
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: