Linux Sunucu Güvenliğinde Sıkılaştırma (Hardening): Uçtan Uca Pratik Rehber
Yeni kurulan bir Linux sunucusunu dış dünyadaki tehditlere karşı korumak için uygulamanız gereken temel sıkılaştırma (hardening) adımları, SSH güvenliği, çekirdek parametreleri ve yetki yönetimi.
Caner Serbest
Sistem ve Altyapı
4 min read
Linux Sunucu Güvenliğinde Sıkılaştırma (Hardening): Uçtan Uca Pratik Rehber
Yazar: Caner Serbest
Bir Linux sunucusunu bulut ortamına, fiziksel veri merkezine veya kendi homelab ortamınıza kurduğunuz andan itibaren, dış dünyadaki otomatik tarama araçlarının ve kötü niyetli botların hedefi haline gelirsiniz. Varsayılan ayarlarla gelen bir işletim sistemi, genellikle performans ve kolaylık odaklı yapılandırılmıştır; güvenlik ise ikinci plandadır.
Bu yazıda, sıfırdan kurulmuş bir Linux sunucusunu üretim (production) ortamına hazırlarken uygulamanız gereken pratik sıkılaştırma (hardening) adımlarını ele alacağız. Teorik güvenlik kavramlarından ziyade, sahada doğrudan uygulayabileceğiniz komutlara ve yapılandırmalara odaklanacağız.
1. Kullanıcı Yönetimi ve Yetki Sınırlandırma (Privilege Management)
İlk kural: Hiçbir zaman doğrudan root hesabı ile günlük işleri yürütmeyin ve uzaktan bağlantı kurmayın.
Yeni Kullanıcı Oluşturma ve Sudo Yetkisi
Sunucuya ilk eriştiğinizde kendinize standart bir kullanıcı oluşturun ve bu kullanıcıya sudo yetkisi verin:
# Yeni kullanıcı oluşturma
adduser caner
# Kullanıcıyı sudo grubuna ekleme (Ubuntu/Debian için)
usermod -aG sudo caner
# RedHat tabanlı sistemler için wheel grubu
# usermod -aG wheel caner
Root Girişini Kapatma
SSH daemon yapılandırma dosyasını (/etc/ssh/sshd_config) düzenleyerek root kullanıcısının doğrudan ağ üzerinden sisteme girmesini tamamen engelleyin.
PermitRootLogin no
Bu değişikliği yaptıktan sonra servisi yeniden başlatmayı unutmayın (systemctl restart ssh). Artık sisteme sadece kendi kullanıcınızla bağlanıp, gerektiğinde sudo komutuyla yetki yükselteceksiniz.
2. SSH Güvenliğinde İleri Düzey Sıkılaştırma
Şifre tabanlı kimlik doğrulama, kaba kuvvet (brute-force) saldırılarına karşı her zaman zayıf bir halkadır. SSH anahtarları (SSH Keys) kullanarak bu zafiyeti ortadan kaldırın.
Anahtar Tabanlı Kimlik Doğrulama
Yerel makinenizde oluşturduğunuz SSH public key dosyasını sunucuya kopyalayın:
ssh-copy-id caner@sunucu_ip_adresi
Bağlantının çalıştığını doğruladıktan sonra /etc/ssh/sshd_config dosyasında şu ayarları güncelleyin:
PasswordAuthentication no
PubkeyAuthentication yes
X11Forwarding no
MaxAuthTries 3
Şifrelemede eski ve zayıf algoritmaları devre dışı bırakmak da önemli bir adımdır. Dosyanın en altına şu satırları ekleyerek modern ve güvenli kriptografik algoritmaları zorunlu kılabilirsiniz:
Ciphers [email protected],[email protected]
KexAlgorithms curve25519-sha256,[email protected],diffie-hellman-group-exchange-sha256
MACs [email protected],[email protected]
Yapılandırma dosyasındaki hataları kontrol etmek ve servisi yeniden başlatmak için:
sdhd -t
systemctl restart sshd
3. Ağ Güvenliği ve Güvenlik Duvarı (Firewall) Yapılandırması
Sunucunuzda yalnızca dış dünyaya hizmet vermesi gereken portlar açık olmalıdır. Ubuntu ve türevlerinde UFW (Uncomplicated Firewall), RHEL tabanlı sistemlerde ise firewalld standart araçlardır.
UFW kullanarak temel politikaları belirleyelim:
# Varsayılan olarak gelen her şeyi engelle, gidenlere izin ver
ufw default deny incoming
ufw default allow outgoing
# SSH bağlantısına izin ver (Özel bir port kullanıyorsanız onu belirtin)
ufw allow 22/tcp
# Web sunucusu için gerekli portlar
ufw allow 80/tcp
ufw allow 443/tcp
# Güvenlik duvarını etkinleştir
ufw enable
Durumu kontrol etmek için ufw status verbose komutunu çalıştırabilirsiniz. Gereksiz hiçbir portun (3306, 5432 vb. veritabanı portları dahil) dış dünyaya doğrudan açık olmadığından emin olun.
4. Çekirdek (Kernel) Sıkılaştırma: sysctl Parametreleri
Linux çekirdeği, ağ yığını ve bellek yönetimi açısından varsayılan olarak esnek ayarlarla gelir. Bu ayarları saldırılara karşı daha dirençli hale getirmek için /etc/sysctl.conf dosyasını veya /etc/sysctl.d/ altında özel bir konfigürasyon dosyasını (99-security.conf) düzenleyebiliriz.
Örnek bir güvenlik yapılandırması:
# IP Spoofing koruması için Reverse Path Filtering aktif etme
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# ICMP Redirect paketlerini reddetme (Man-in-the-middle saldırılarına karşı)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
# SYN Flood saldırılarına karşı SYN Cookies etkinleştirme
net.ipv4.tcp_syncookies = 1
# Çekirdek dökümlerini (core dump) devre dışı bırakma (hassas veri sızıntısını önlemek için)
fs.suid_dumpable = 0
Bu ayarları sisteme anında uygulamak için şu komutu çalıştırın:
sysctl -p /etc/sysctl.d/99-security.conf
5. Paket Yönetimi ve Otomatik Güncellemeler
Güvenlik açıkları sürekli keşfedilir ve yazılım geliştiriciler tarafından yamalanır. Sunucunuzdaki paketlerin güncel kalması hayati önem taşır.
Ubuntu tabanlı sistemlerde güvenlik güncellemelerini otomatik hale getirmek için unattended-upgrades paketini kurabilirsiniz:
apt update
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
Yapılandırma dosyasını (/etc/apt/apt.conf.d/50unattended-upgrades) kontrol ederek sadece güvenlik güncellemelerinin (security) otomatik olarak kurulduğundan emin olabilirsiniz.
6. Audit (Denetim) ve Loglama Mekanizmaları
Sistemde gerçekleşen olayları izlemek, olası bir sızma girişimini erken fark etmek için kritik basamaktır. auditd servisi, Linux çekirdek seviyesinde dosya erişimlerini, sistem çağrılarını ve kullanıcı aktivitelerini kaydeder.
# Audit paketini kurma (RHEL için audit, Ubuntu için auditd)
apt install auditd audispd-plugins -y
systemctl enable auditd
systemctl start auditd
Kritik dosyalarda (örneğin /etc/passwd veya /etc/shadow) yapılan değişiklikleri izlemek için audit kuralları eklenebilir:
# /etc/passwd dosyasındaki değişiklikleri izleme kuralı
auditctl -w /etc/passwd -p wa -k passwd_changes
Logların merkezi bir sunucuya aktarılması veya yerel diskte güvenle saklanması (Logrotate yapılandırması) da bu sürecin tamamlayıcı parçasıdır.
Sonuç
Linux sunucu güvenliği tek seferlik bir kurulum süreci değil, sürekli devam eden bir yaşam döngüsüdür. Yukarıda özetlediğimiz adımlar —güçlü kimlik doğrulama, minimal port politikası, çekirdek sıkılaştırma ve düzenli güncellemeler— sunucunuzun yüzey alanını (attack surface) ciddi ölçüde daraltacaktır.
Unutmayın ki en güvenli sistem, fişi çekilmiş ve hiçbir ağa bağlı olmayan sistemdir; ancak pratik dünyada amacımız, potansiyel saldırganların maliyetini maksimuma çıkararak sistemimizi güvenli birer çalışma ortamına dönüştürmektir.
Bu yazı Gemini ile otomatik oluşturulmuştur.