Makale Başlıkları
Kısaca
Bir Linux sunucuyu yayına almadan önce iki şey yapılır: RAM dolunca uygulamaların çökmesini önleyen bir swap dosyası oluşturmak ve uzaktan erişimi SSH sertleştirme ile kapatmak. Swap dosyası fallocate + mkswap + swapon ile birkaç komutta kurulur; SSH tarafında ise asıl koruma anahtarla giriş, root engelleme ve parola girişini kapatmaktır.
- 4 GB swap:
fallocate -l 4G /swapfile→chmod 600→mkswap→swapon→/etc/fstab‘a ekle. - Sunuculardan önerilen
vm.swappinessdeğeri 60 değil, 10 (veritabanında 1-10). - SSH için kritik dörtlü:
PermitRootLogin no,PasswordAuthentication no,MaxAuthTries 3veAllowUsersbeyaz listesi.
Bir Linux sunucusunu üretime almadan önce yapılması gereken iki temel iş vardır: bellek darboğazlarına karşı swap alanı oluşturmak ve uzaktan erişimi SSH güvenliği (hardening) ile sağlamlaştırmak. Bu iki adım, sunucunuzun hem kararlılığını hem de güvenliğini ciddi biçimde artırır. Aşağıda ikisini de adım adım, birebir komutlarla anlatıyoruz; sonda da pratikte en çok takılınan noktaların yanıtlarını bulacaksınız.
Bu ayarlar, kök (root) erişiminiz olan bir VPS/sunucuda uygulanır. Paylaşımlı hosting hesaplarında swap ve SSH yapılandırması sizin yetkinizde değildir; bu rehber kendi kaynaklarını yöneten kullanıcılar içindir.
Swap Alanı Nedir, Neden Gerekir?
Swap, fiziksel RAM dolduğunda diskte kullanılan sanal bellektir. RAM tükendiğinde swap devreye girerek süreçlerin ani çökmesini (OOM – Out Of Memory) önler. Özellikle düşük RAM’li sunucularda küçük bir swap, kararlılık için önemli bir güvenlik ağıdır. Modern sistemlerde swap bölümü yerine esnek bir swap dosyası tercih edilir; çünkü dosyayı dilediğiniz an büyütüp küçültebilir, yeniden boyutlandırma için diski yeniden bölmek zorunda kalmazsınız.
Burada yaygın bir yanlış anlamayı netleştirelim: swap, RAM’in yedeği değildir, RAM’in yerini tutmaz. Disk, RAM’den onlarca kat yavaştır. Swap’in işi, anlık bellek tepelerini absorbe edip OOM Killer’in rastgele bir süreci (örneğin veritabanınızı) öldürmesini engellemektir. Sürekli swap’a başvuran bir sunucu zaten RAM yetersizliği yaşıyor demektir; çözüm daha fazla RAM’dir, daha büyük swap değil.
Ne Kadar Swap Gerekir?
Eski “RAM’in 2 katı” kuralı, hibernate (hazırda bekletme) gerektiren masaüstü sistemlerden kalmadır ve sunucularda artık geçerli değildir. Sunucular için pratik bir başlangıç tablosu:
| Fiziksel RAM | Önerilen Swap (sunucu) | Not |
|---|---|---|
| 1 GB | 1–2 GB | Küçük VPS’lerde OOM’a karşı şart |
| 2–4 GB | 2–4 GB | RAM kadar yeterli |
| 8–16 GB | 2–4 GB | Sabit küçük swap yeterli |
| 32 GB ve üzeri | 1–4 GB | Sadece güvenlik ağı olarak |
Yani RAM arttıkça swap oranı düşür. 64 GB RAM’li bir sunucuya 128 GB swap koymak ne mantıklı ne de gereklidir; 2–4 GB fazlasıyla yeterlidir.
Swap Dosyası Oluşturma
# 1. 4 GB swap dosyasi olustur sudo fallocate -l 4G /swapfile # 2. Izinleri kisitla (sadece root) sudo chmod 600 /swapfile # 3. Swap olarak isaretle ve aktif et sudo mkswap /swapfile sudo swapon /swapfile # 4. Dogrula sudo swapon --show free -h # 5. Kalici yap (yeniden baslatmada otomatik) echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
/etc/fstab satırı eklenmezse swap yeniden başlatmada kaybolur. Btrfs/XFS dosya sistemlerinde fallocate sorun çıkarırsa — özellikle Btrfs’te swap dosyası için Copy-on-Write devre dışı gerektiği için — klasik yöntemle, sıfırlarla doldurarak oluşturun:
# fallocate calismazsa: 4 GB'lik dosyayi dd ile olustur sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
Swappiness: Asıl Ayar Burada
Swap dosyasını oluşturmak kadar önemli bir adım, çekirdeğin ne zaman swap’a başvuracağını belirleyen vm.swappiness değeridir. Çoğu dağıtımda varsayılan 60‘tır; bu değer masaüstü için uygundur ama sunucularda gereğinden erken swap’a kaymaya yol açar. Sunuculardan, özellikle veritabanı barındıran sistemlerden 10 (ve hatta veritabanı ağırlıklı iş yüklerinde 1–10 aralığı) önerilir.
# Mevcut degeri gor cat /proc/sys/vm/vm.swappiness # Kalici olarak ayarla echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf sudo sysctl --system
Önemli bir uyarı: Çekirdek 3.5 sonrasında vm.swappiness=0 yapmak swap’i tamamen kapatmaz, aksine çekirdeği swap kullanmaktan aşırı kaçınmaya zorlar ve bellek baskısı altında OOM Killer’in devreye girme riskini artırır. Bu yüzden 0 yerine 1 veya 10 tercih edin. Değişikliği her zaman küçük adımlarla yapıp kendi iş yükünüz altında test edin.
SSH Güvenliği: Önüç Anahtar
Parola yerine SSH anahtarı kullanmak, brute-force (kaba kuvvet) saldırılarına karşı en etkili korumadır. İnternete açık her sunucu, kurulduktan dakikalar sonra otomatik botların root/parola denemelerine maruz kalır. Anahtar tabanlı giriş bu tehdidi pratikte sıfırlar. İstemci makinenizde modern bir ed25519 anahtarı üretip sunucuya kopyalayın:
# Istemci makinede anahtar uret (modern: ed25519, guclu KDF) ssh-keygen -t ed25519 -a 100 -C "ben@ornek.com" # Genel anahtari sunucuya kopyala ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici@SUNUCU_IP
Ed25519, RSA’ya göre hem daha hızlı hem de daha güçlü sayılır ve günümüzde önerilen varsayılandır. -a 100 parametresi, özel anahtarınızın şifrelemesini (KDF tur sayısını) artırarak anahtar dosyası ele geçirilse bile parolasıyla korunmasını sağlar. Anahtarınızı mutlaka bir passphrase ile koruyun.
SSH Yapılandırmasını Sertleştirme
Anahtarla giriş yapabildiğinizi doğruladıktan sonra — bu sıra hayatidir — /etc/ssh/sshd_config dosyasında aşağıdaki ayarları yapın. Buradaki dörtlü, brute-force vektörünü, doğrudan root ele geçirmeyi ve protokol düşürme (downgrade) saldırılarını aynı anda kapatır:
PermitRootLogin no # root ile dogrudan giris kapali PasswordAuthentication no # parola ile giris kapali (sadece anahtar) PubkeyAuthentication yes # anahtar ile giris acik PermitEmptyPasswords no # bos parolaya kesinlikle izin yok MaxAuthTries 3 # baglanti basina en fazla 3 deneme AllowUsers kullanici # SADECE bu kullanici(lar) SSH yapabilir Port 2849 # 22 yerine standart disi port
AllowUsers (veya AllowGroups) en az ayrıcalık ilkesinin somut halidir: sistemdeki onlarca hesaptan yalnızca SSH’e ihtiyacı olanlara izin verir, gerisini kapatır. MaxAuthTries 3 ise her oturumdaki deneme sayısını sınırlayarak otomatik tarama gürültüsünü azaltır.
Şifreleme Algoritmalarını Modernleştirme (İsteğe Bağlı)
Daha ileri bir sertleştirme için zayıf şifreleri devre dışı bırakıp yalnızca modern algoritmalara izin verebilirsiniz. 3DES, SHA1 ve diffie-hellman-group1 gibi eskimiş algoritmalar dışarıda bırakılır:
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
Yeni Portu Açmak ve Servisi Yeniden Başlatmak
# Yeni portu firewallda ac, eskisini kaldir sudo ufw allow 2849/tcp sudo ufw delete allow OpenSSH # Yapilandirma sozdizimini test et (cok onemli!) sudo sshd -t # Yeniden baslat sudo systemctl restart ssh
sudo sshd -t komutunu atlamayın: yapılandırmada bir yazım hatası varsa servis yeniden başlatılamaz ve kendinizi dışarıda bırakabilirsiniz.
Dikkat: Modern Ubuntu’da Port Değişikliği (Socket Aktivasyonu)
Ubuntu 22.10 ve sonrasında (24.04 dahil) SSH artık systemd socket aktivasyonu ile çalışıyor. Bu, dilencilerin sık takıldığı önemli bir farktır: bu sistemlerde sshd_config içindeki Port satırı tek başına dinlenen portu değiştirmeyebilir; dinleme işlemini ssh.socket birimi yapar. Portu değiştirmek için bir override dosyası oluşturmanız gerekir:
# Ubuntu 22.10+/24.04 icin: override dosyasi olustur sudo mkdir -p /etc/systemd/system/ssh.socket.d sudo tee /etc/systemd/system/ssh.socket.d/listen.conf <<'EOF' [Socket] ListenStream= ListenStream=2849 EOF # Degisikligi uygula sudo systemctl daemon-reload sudo systemctl restart ssh.socket
Boş ListenStream= satırı önceki (22 numaralı) dinlemeyi temizler; ikinci satır yeni portu ekler. AlmaLinux, Rocky Linux ve CentOS türevlerinde ise klasik servis modeli geçerlidir; orada sshd_config'teki Port satırı yeterli olup systemctl restart sshd ile uygulanır. SELinux'un aktif olduğu bu sistemlerde yeni portu ayrıca tanıtmanız gerekebilir: sudo semanage port -a -t ssh_port_t -p tcp 2849.
Fail2ban ile Otomatik Engelleme
Anahtar tabanlı giriş saldırıların ezici çoğunluğunu durdurur; yine de log dosyalarınız başarısız denemelerle dolacaktır. Fail2ban, belirli sayıda başarısız denemeden sonra ilgili IP'yi geçici olarak firewallda engelleyerek bu gürültüyü temizler:
# Debian/Ubuntu sudo apt install fail2ban # Yerel yapilandirma (varsayilani ezme) sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # jail.local icinde [sshd] bolumune: port = 2849, maxretry = 3, bantime = 1h sudo systemctl enable --now fail2ban sudo fail2ban-client status sshd
Port değiştirdiyseniz Fail2ban'in [sshd] bölümünde port değerini de güncellemeyi unutmayın; aksi halde doğru portu izlemez.
Hızlı Kontrol Listesi
| Adım | Komut / Ayar | Amaç |
|---|---|---|
| Swap oluştur | fallocate + mkswap + swapon |
OOM çökmesini önle |
| Swap'i kalıcı yap | /etc/fstab satırı |
Yeniden başlatmada kaybolmasın |
| Swappiness ayarla | vm.swappiness=10 |
Erken swap kullanımını azalt |
| Anahtar üret | ssh-keygen -t ed25519 -a 100 |
Paroladan vazgeç |
| Root'u kapat | PermitRootLogin no |
Saldırı yüzeyini daralt |
| Parolayı kapat | PasswordAuthentication no |
Brute-force'u bitir |
| Kullanıcı beyaz listesi | AllowUsers |
En az ayrıcalık |
| Otomatik engel | Fail2ban | Log gürültüsünü temizle |
Dikkat Edilmesi Gereken Tuzaklar
PasswordAuthentication noyapmadan önce anahtarla giriş yapabildiğinizi ikinci bir oturumda mutlaka test edin; aksi halde kendinizi dışarıda bırakırsınız. Açık olan mevcut oturumunuzu kapatmayın.- SSH portunu değiştirdiğinizde yeni portu güvenlik duvarında açmayı, modern Ubuntu'da ise
ssh.socketoverride'ini ayarlamayı unutmayın. chmod 600 /swapfileşarttır; aksi haldemkswapgüvenlik uyarısı verir ve dosyayı okuyabilen kullanıcılar bellek içeriğine erişebilir.vm.swappiness=0kullanmayın; OOM riskini artırır. 1 veya 10 tercih edin.- Değişiklik sonrası her zaman
sudo sshd -tile yapılandırmayı doğrulayın.
Profesyonel Altyapıda Bunların Önemi
Bu rehberdeki adımlar tek bir sunucuyu sertleştirir; ancak gerçek dayanıklılık, sunucunun üstünde çalıştığı altyapıdan da gelir. Alastyr'in VPS ve bulut sunucu hizmetleri, İzmir'deki kendi veri merkezimizde, N+1 yedekli ve Tier III standartlarında barındırılır. Altyapıda ağ katmanında Voxility 1 Tbps+ L3-L4 anti-DDoS koruması devrededir; siz sunucu içinde Fail2ban ile uygulama katmanını sertleştirirken, hacimsel saldırılar daha siz duymadan filtrelenir. Anahtarınızı kaybetmeniz halinde ise 7/24 destek ve kurtarma konsolu üzerinden erişiminizi yeniden sağlayabilirsiniz.
Sıkça Sorulan Sorular
Ne kadar swap gerekir?
Genel kural artık "RAM'in 2 katı" değildir; bu eski kural hibernate gereken masaüstü sistemlerden kalmadır. Sunucularda 2-4 GB RAM'e RAM kadar, 8 GB ve üzeri sistemlere ise sabit 2-4 GB swap genellikle yeterlidir. RAM arttıkça swap oranını düşürün.
vm.swappiness kaç olmalı?
Çoğu dağıtımın varsayılanı 60'tır ve sunucular için yüksektir. Genel sunucularda 10, veritabanı ağırlıklı sistemlerde 1-10 önerilir. Değeri 0 yapmayın; çekirdek 3.5 sonrasında bu, OOM riskini artırır.
Swap performansı düşürür mü?
Sürekli swap kullanımı sunucuyu yavaşlatır çünkü disk RAM'den çok yavaştır. Swap bir güvenlik ağıdır, RAM'in yerine geçmez. Sunucunuz sürekli swap'a başvuruyorsa çözüm daha fazla RAM eklemektir.
SSH portunu değiştirmek şart mı?
Şart değil; gerçek koruma anahtar tabanlı giriş ve root'u kapatmaktır. Ancak standart dışı bir port, otomatik tarama gürültüsünü ve log kalabalığını azaltır. Bunu tek başına bir güvenlik önlemi olarak görmeyin, ek bir gürültü filtresi olarak düşünün.
Ubuntu 24.04'te SSH portunu değiştirdim ama çalışmadı, neden?
Ubuntu 22.10 ve sonrasında SSH systemd socket aktivasyonu kullanır; bu sistemlerde sadece sshd_config içindeki Port satırı yetmeyebilir. /etc/systemd/system/ssh.socket.d/listen.conf dosyasında önce boş bir ListenStream= ile eski dinlemeyi temizleyip yeni portu ekleyin, ardından systemctl restart ssh.socket çalıştırın.
Anahtarımı kaybedersem ne olur?
Sağlayıcının kurtarma konsolu (VNC/rescue) ile sunucuya erişip yeni bir anahtar ekleyebilir veya geçici olarak parola girişini tekrar açabilirsiniz. Bu yüzden parola girişini kapatmadan önce sağlayıcınızın konsol erişimi sunduğundan emin olun.
Root girişini neden kapatmalıyım?
root, her sistemde var olan ve saldırganların en çok denediği hesaptır. Doğrudan root girişini kapatıp normal bir kullanıcıyla bağlandıktan sonra sudo kullanmak, hem saldırı yüzeyini daraltır hem de yetki yükseltmelerini denetim altına alır.
Fail2ban yerine başka bir şey kullanmalı mıyım?
Fail2ban çoğu senaryo için yeterli ve kanıtlanmıştır. Daha modern bir alternatif arayanlar sshguard veya crowdsec değerlendirebilir; CrowdSec ayrıca toplu tehdit istihbaratı paylaşımı sunar. Hangisini seçersek seçelim, asıl koruma yine anahtar tabanlı giriş + root kapatma + parola engellemedir.
Swap yerine zram kullanabilir miyim?
Evet; zram, RAM içinde sıkıştırılmış bir swap alanı oluşturarak diske göre çok daha hızlı çalışır ve düşük RAM'li sunucularda popülerdir. Ancak fiziksel diske dayanan bir swap dosyasının sunduğu "son çare" tamponunu tam karşılamaz; ikisini birlikte de kullanabilirsiniz.
Tam Kontrollü Sunucu, Güçlü Altyapı
Root erişimli, ayrılmış kaynaklı VPS ve bulut sunucuları kendi yapılandırın; ağ katmanında 1 Tbps+ anti-DDoS ve İzmir'deki kendi veri merkezimizin güvenliği sizinle olsun.





