Linux Sunucu Güvenliği Neden İlk Günden Önemlidir?
Yeni bir Linux sunucusunu ayağa kaldırdığınızda, genellikle otomatik saldırılara karşı korumak için yalnızca birkaç dakikanız vardır. İnternet tarayıcıları, 22. port açılır açılmaz root ve admin gibi yaygın kullanıcı adlarıyla giriş denemelerine başlar. Bu adımları ertelerseniz, muhtemelen ilk saatlerde auth.log günlüklerinde yüzlerce başarısız deneme görürsünüz.
Bu makalede, yeni bir Linux sunucusunun güvenliği için pratik ve adım adım bir kontrol listesi sunuyoruz. Ubuntu 22.04 veya 24.04 ile çalıştığınızı varsayıyoruz, ancak neredeyse tüm komutlar Debian ve onu temel alan diğer dağıtımlarda da çalışır. Amaç, 30 dakikadan kısa sürede sunucunun saldırı yüzeyini en aza indirmektir.
1. Root Olmayan Kullanıcı Oluşturma ve SSH ile Güvenli Giriş
İlk ve en önemli adım, root kullanıcısıyla doğrudan girişi kesmektir. Linux'ta root tam yetkiye sahiptir ve parolası ele geçirilirse, saldırgan tüm sistemi ele geçirir. Bunun yerine, sudo erişimi olan normal bir kullanıcı oluşturun ve günlük yönetim için onu kullanın.
Yeni Kullanıcı Oluşturma
Sunucuya root kullanıcısıyla giriş yapın ve aşağıdaki komutları çalıştırın:
adduser myuser
usermod -aG sudo myuser
İlk komut, myuser kullanıcısını bir ev diziniyle oluşturur ve sizden parola ister. İkinci komut, onu yönetim komutlarını çalıştırabilmesi için sudo grubuna ekler. Şimdi sistemden çıkış yapın ve her şeyin doğru çalıştığından emin olmak için yeni kullanıcıyla giriş yapın.
Parola Yerine SSH Anahtarı Yapılandırma
Parolalar brute-force saldırılarıyla tahmin edilebilir, ancak SSH genel anahtarı matematiksel olarak kırılması neredeyse imkansızdır. Kendi sisteminizde (sunucuda değil) bir anahtar çifti oluşturun:
ssh-keygen -t ed25519 -a 100
ed25519 algoritması RSA'dan daha hızlı ve daha güvenlidir ve daha kısa bir anahtar üretir. Sunucunuzda eski bir OpenSSH sürümü varsa, ssh-keygen -t rsa -b 4096 kullanabilirsiniz. Ardından genel anahtarı sunucuya aktarın:
ssh-copy-id myuser@your-server-ip
Bu komut, genel anahtarınızı myuser kullanıcısının ~/.ssh/authorized_keys dosyasına ekler. Şimdi ssh myuser@your-server-ip ile giriş yapın ve parola olmadan giriş yaptığınızdan emin olun.
Parola ve Root Girişini Kapatma
SSH yapılandırma dosyasını düzenleyin:
sudo nano /etc/ssh/sshd_config
Bu satırları değiştirin veya ekleyin:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers myuser
AllowUsers satırı yalnızca belirtilen kullanıcının giriş yapmasına izin verir ve ek bir güvenlik katmanıdır. Değişiklikleri uyguladıktan sonra SSH servisini yeniden başlatın:
sudo systemctl restart sshd
2. UFW ile Güvenlik Duvarı Yapılandırma
Güvenlik duvarı, açık portlara yetkisiz erişime karşı ilk savunma hattıdır. Ubuntu'da varsayılan araç, iptables yönetimini basitleştiren UFW (Uncomplicated Firewall) olarak adlandırılır.
Etkinleştirme ve Temel Kuralları Ayarlama
Güvenlik duvarını etkinleştirmeden önce, bağlantınızın kesilmemesi için SSH portunu açtığınızdan emin olun:
sudo ufw allow OpenSSH
sudo ufw enable
İlk komut otomatik olarak 22. portu açar. SSH'niz farklı bir porttaysa, sudo ufw allow 2222/tcp kullanın. Şimdi bir web sunucunuz veya başka bir hizmetiniz varsa, ilgili portları açın:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Güvenlik duvarı durumunu sudo ufw status verbose ile kontrol edin. Çıktı şuna benzer olmalıdır:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
MySQL gibi yalnızca ağ içinden erişilmesi gereken belirli bir hizmetiniz varsa, portu herkese açmak yerine sudo ufw allow from 192.168.1.0/24 to any port 3306 kullanın.
SSH Portuna Erişimi Sınırlama
Linux sunucu güvenliğini artırmak için 22. porta erişimi yalnızca kendi IP'nizle sınırlayabilirsiniz:
sudo ufw allow from YOUR_IP to any port 22 proto tcp
IP'niz sabit değilse bunu yapmayın; bunun yerine bir sonraki bölümde açıklayacağımız fail2ban'a geçin.
3. Otomatik Güvenlik Güncellemelerini Etkinleştirme
Başarılı saldırıların çoğu, aylar önce yamalanmış güvenlik açıklarından yararlanır. Otomatik güvenlik paketi güncellemeleri, her gün günlükleri kontrol etmek zorunda kalmadan bu boşluğu kapatır.
unattended-upgrades Kurulumu ve Yapılandırması
Ubuntu'da bu araç genellikle önceden kuruludur. Değilse, kurun:
sudo apt update
sudo apt install unattended-upgrades
Ardından yapılandırma dosyasını düzenleyin:
sudo dpkg-reconfigure --priority=low unattended-upgrades
Açılan pencerede Yes seçeneğini seçin. Daha ayrıntılı ayarlar için /etc/apt/apt.conf.d/50unattended-upgrades dosyasını açın ve aşağıdaki satırın etkin olduğundan emin olun:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Bu ayar yalnızca güvenlik güncellemelerini yükler ve sistemi bozabilecek yeni paketlerin otomatik kurulumunu engeller. Hizmetin doğru çalıştığını kontrol etmek için günlüğünü görüntüleyin:
sudo tail -f /var/log/unattended-upgrades/unattended-upgrades.log
4. Brute-force Saldırılarına Karşı fail2ban Kurulumu ve Yapılandırması
Parola girişini devre dışı bırakmış olsanız bile, SSH ve web sunucusu gibi hizmetler hâlâ saldırılara maruz kalabilir. fail2ban, günlükleri izleyen ve şüpheli davranış sergileyen IP'leri geçici olarak engelleyen açık kaynaklı bir araçtır.
Temel Kurulum ve Başlatma
sudo apt install fail2ban
Ana yapılandırma dosyasını düzenlemek yerine, daha yüksek önceliğe sahip yerel bir dosya oluşturun:
sudo nano /etc/fail2ban/jail.local
İçine aşağıdaki içeriği ekleyin:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
Bu ayarlar, 10 dakika (findtime) içinde üç kez (maxretry) başarısız giriş yaparsanız, IP'nizin bir saat (bantime) boyunca engelleneceği anlamına gelir. Dosyayı kaydettikten sonra servisi yeniden başlatın:
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
Durumu Kontrol Etme ve Gelişmiş Ayarlar
Engellenen IP'lerin listesini görmek için:
sudo fail2ban-client status sshd
Çıktı, engellenen IP sayısını ve listesini içerir. nginx web sunucunuz varsa, onun için benzer bir jail oluşturabilirsiniz:
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 1800
Hazır filtreler /etc/fail2ban/filter.d/ klasöründe bulunur ve Postfix veya ProFTPD gibi farklı hizmetler için de jail oluşturabilirsiniz.
5. Son Kontrol ve Ek İpuçları
Bu adımları tamamladıktan sonra, her şeyin doğru çalıştığından emin olmak için birkaç son kontrol yapın.
Linux Sunucu Güvenliğini Dışarıdan Test Etme
Kendi sisteminizde nmap gibi bir port tarama aracı kullanın:
nmap -sS -p- your-server-ip
Bu komut açık olan tüm portları gösterir. Açık olmaması gereken bir port varsa, güvenlik duvarını kontrol edin. Ayrıca SSH yapılandırmanızın güvenliğini kontrol etmek için ssh-audit.com gibi çevrimiçi hizmetleri kullanabilirsiniz.
Otomatik Güncellemeleri ve İzlemeyi Etkinleştirme
Sunucunuzun durumundan haberdar olmak için, başarılı bir giriş durumunda e-posta gönderen basit bir betik oluşturun. /etc/ssh/sshrc dosyasını oluşturun:
#!/bin/sh
echo "SSH login on $(hostname) at $(date)" | mail -s "SSH Login Alert" your@email.com
Ve onu çalıştırılabilir yapın:
sudo chmod +x /etc/ssh/sshrc
Bu basit yöntem, beklenmeyen her girişten haberdar olmanıza yardımcı olur.
Özet
Bu kontrol listesi, yeni bir Linux sunucusunun güvenliği için temeldir, ancak güvenlik sürekli bir süreçtir. Her ay günlükleri kontrol edin, güncellemeleri yükleyin ve güvenlik denetimi için lynis gibi araçlar kullanın. Bu ayarları uygulamak için güvenilir bir platform arıyorsanız, ServerNet bulut sunucuları tam SSH erişimi ve Linux çekirdeği ile bu adımları tam olarak uygulamanıza olanak tanır. Ancak en önemli nokta, bu ayarları asla ertelememenizdir — kurulumdan sonraki ilk saatler, sunucunuzun güvenliği için en kritik zamandır.
Yorumlar 0
Henüz yorum yok — ilk siz olun!