Yeni bir sunucu kuruyorsun, ekran sana bakıyor ve ne yapacağını bilmiyorsun. Ya da belki biliyorsun ama her seferinde “acaba doğru mu yapıyorum?” diye düşünüyorsun. Bu yazıda Debian tabanlı bir sunucuyu sıfırdan kurmanın ve production ortamına hazır hale getirmenin pratik yolunu anlatacağım. Hem VPS hem de bare metal senaryolarını göz önünde bulundurarak yazdım.
Neden Debian?
Ubuntu Server’ı tercih eden çok insan var, bu tamamen anlaşılır bir tercih. Ama Debian’ın sunucu ortamında sevilmesinin birkaç somut nedeni var. Kararlılık kelimesini herkes kullanıyor ama Debian’da bu kelime gerçekten anlam ifade ediyor. Stable branch, test edilmiş ve doğrulanmış paketlerden oluşuyor. Evet, paketler biraz eski olabiliyor ama bir production sunucusunda “en yeni” olmak değil, “sorunsuz çalışmak” önemli.
Debian ayrıca son derece hafif. Minimal kurulumda 128MB RAM ile bile çalışabilir. Lisans konusunda da tamamen özgür bir dağıtım. Ubuntu’nun arka planında Canonical var, Debian’ın arkasında gönüllüler topluluğu. Her ikisinin de yeri var ama minimal server workload için Debian benim birinci tercihim.
Kurulum Öncesi Hazırlık
Kuruluma başlamadan önce birkaç kararı netleştirmen gerekiyor.
Disk bölümleme stratejin ne olacak? Küçük bir VPS için tek partition yeterli olabilir ama production sunucularda /var, /tmp ve /home dizinlerini ayrı partition’lara almak iyi bir pratik. Özellikle log dosyalarının patladığı bir durumda tüm sistemi çökertmemek için /var ayrımı kritik.
Hangi Debian sürümünü kullanacaksın? Bu yazıyı yazarken Debian 12 (Bookworm) en güncel stable sürüm. Ona göre ilerleyeceğiz.
Network ayarları hazır mı? IP adresi, subnet mask, gateway ve DNS bilgilerini önceden not al. Datacenter ortamında genellikle DHCP çalışıyor ama static IP ataman gerekebilir.
Temel Kurulum Adımları
ISO’yu boot ettikten sonra seni bir installer karşılıyor. “Graphical Install” yerine düz “Install” seçeneğini kullan. Gereksiz paket yüklemekten kaçın. Dil ve klavye ayarlarını geçtikten sonra network konfigürasyonuna geliyorsun.
Hostname belirlerken sunucu01.domain.com gibi FQDN formatını kullan. Bu sonradan mail server kuruyorsan veya sertifika yönetimi yapıyorsan işini kolaylaştırır.
Disk bölümleme ekranında “Manual” seçeneğini seç. Otomatik bölümleme genellikle makul sonuçlar verse de kontrol senin elinde olsun.
Paket seçimi ekranına geldiğinde dikkat et. Tasksel ekranında sadece “SSH server” ve “standard system utilities” seçili bırak. “Debian desktop environment” kutusunun işaretini kaldır. Sunucuda masaüstü ortamına ihtiyacın yok, sadece RAM ve disk israfı.
İlk Boot Sonrası Yapılacaklar
Sistem açıldı, SSH ile bağlandın veya console karşında. İlk iş root olarak değil, kurulum sırasında oluşturduğun kullanıcıyla giriş yap. Sonra:
su -
apt update && apt upgrade -y
Bu komut sistemi güncelliyor. apt update paket listelerini yeniliyor, apt upgrade ise mevcut paketleri güncelliyor. -y flag’ı onay sorularını otomatik geçiyor.
Sudo Kurulumu ve Kullanıcı Yetkilendirmesi
Debian minimal kurulumda sudo gelmiyor, eklemen gerekiyor:
apt install sudo -y
usermod -aG sudo kullaniciadi
usermod -aG sudo kullaniciadi: Kullanıcıyı sudo grubuna ekler. Değişikliğin aktif olması için kullanıcının yeniden login olması gerekir.
Şimdi root olarak değil, normal kullanıcınla tekrar bağlan ve test et:
sudo whoami
root çıktısı görüyorsan doğru çalışıyor.
SSH Güvenlik Yapılandırması
SSH server’ı çalışıyor ama varsayılan ayarlarla bırakmak hata olur. /etc/ssh/sshd_config dosyasını düzenlememiz gerekiyor.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
sudo nano /etc/ssh/sshd_config
Değiştirmeni gereken ayarlar:
- Port 22: Bırakabilirsin ya da değiştirebilirsin. Değiştirmek güvenlik sağlamaz ama brute force loglarını dramatik şekilde azaltır.
Port 2222gibi bir şey yaz. - PermitRootLogin no: Root ile direkt SSH bağlantısını kapat. Kesinlikle yapman gereken bir ayar.
- PasswordAuthentication no: Şifre ile girişi kapat, sadece key authentication kullan. Bunu yapmadan önce key’ini eklediğinden emin ol!
- MaxAuthTries 3: Başarısız deneme sayısını sınırla.
- LoginGraceTime 20: Login için verilen süreyi 20 saniyeye düşür.
Değişiklikleri kaydet ve SSH’ı yeniden başlat:
sudo systemctl restart sshd
Mevcut bağlantını kesme, yeni bir terminal aç ve test et. Eğer bağlanamazsan bir sorun var demektir, hala açık olan mevcut bağlantınla düzeltebilirsin.
SSH Key Authentication Kurulumu
Şifreyi kapatmadan önce key’ini sunucuya eklemelisin. Local makinende key yoksa oluştur:
ssh-keygen -t ed25519 -C "sunucu01-key"
-t ed25519: Modern ve güvenli algoritma kullan. RSA yerine bunu tercih et. -C “sunucu01-key”: Key için yorum etiketi, hangi key olduğunu hatırlamana yardımcı olur.
Public key’i sunucuya kopyala:
ssh-copy-id -i ~/.ssh/id_ed25519.pub kullaniciadi@sunucu_ip
Veya manuel olarak:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "buraya_public_key_icerigi" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Firewall Yapılandırması
UFW (Uncomplicated Firewall) Debian’ın varsayılanında gelmiyor ama en pratik çözüm bu:
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp # SSH portunu değiştirdiysen
sudo ufw allow 80/tcp # Web server kullanıyorsan
sudo ufw allow 443/tcp # HTTPS için
sudo ufw enable
ufw enable komutunu çalıştırmadan önce SSH portunu eklediğinden emin ol. Yoksa kendin kilitlersin kendini.
Durumu kontrol etmek için:
sudo ufw status verbose
Hostname ve Timezone Ayarları
sudo hostnamectl set-hostname sunucu01.domain.com
sudo timedatectl set-timezone Europe/Istanbul
/etc/hosts dosyasını da güncelle:
sudo nano /etc/hosts
127.0.1.1 satırına sunucunun tam hostname’ini ekle:
127.0.1.1 sunucu01.domain.com sunucu01
NTP ve Zaman Senkronizasyonu
Sunucunda sistem saatinin doğru olması kritik. Log korelasyonu, SSL sertifikaları, cron joblar hepsi doğru zamana bağlı. Debian’da systemd-timesyncd genellikle kurulu geliyor:
sudo timedatectl status
Eğer synchronized: yes görüyorsan iyisin. Görmüyorsan:
sudo systemctl enable systemd-timesyncd
sudo systemctl start systemd-timesyncd
Daha gelişmiş NTP ihtiyaçları için chrony tercih edebilirsin:
sudo apt install chrony -y
sudo systemctl enable chrony
sudo systemctl start chrony
Otomatik Güvenlik Güncellemeleri
Production sunucusunda güvenlik yamalarını manuel takip etmek zor. unattended-upgrades bu işi otomatize eder:
sudo apt install unattended-upgrades apt-listchanges -y
sudo dpkg-reconfigure -plow unattended-upgrades
Yapılandırma dosyasını düzenle:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Önemli ayarlar:
- Unattended-Upgrade::Mail: Mail adresin varsa güncelleme raporlarını alırsın.
- Unattended-Upgrade::Remove-Unused-Dependencies “true”: Kullanılmayan bağımlılıkları temizler.
- Unattended-Upgrade::Automatic-Reboot “false”: Bunu false bırak, otomatik reboot production’da istemezsin.
Fail2ban Kurulumu
SSH brute force saldırılarına karşı fail2ban şart:
sudo apt install fail2ban -y
Local konfigürasyon dosyası oluştur (orijinal dosyayı değiştirme, update’lerde ezilir):
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
[sshd] bölümünü bul ve şöyle yapılandır:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
maxretry = 3: 3 başarısız denemeden sonra ban. bantime = 3600: 1 saat ban süresi (saniye cinsinden). findtime = 600: 10 dakika içindeki denemeleri say.
Fail2ban’ı başlat:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status sshd
Gereksiz Servisleri Kapatmak
Minimal kurulum yaptıysan bu adım kısa sürecek ama kontrol etmekte fayda var:
sudo systemctl list-units --type=service --state=running
Çalışan servislere bak. İhtiyaç duymadığın servisler varsa:
sudo systemctl stop servis_adi
sudo systemctl disable servis_adi
Yaygın olarak kapatılan servisler:
- avahi-daemon: mDNS/DNS-SD servisi, server ortamında genellikle gereksiz.
- bluetooth: Server’da bluetooth yok.
- cups: Yazıcı servisi, server’da kesinlikle istemezsin.
Sistem İzleme için Temel Araçlar
Production sunucusunda neyin çalıştığını, kaynakların nasıl kullanıldığını görmek için birkaç araç şart:
sudo apt install htop iotop nethogs ncdu sysstat -y
- htop: top’un okunabilir versiyonu, CPU ve RAM kullanımını gösterir.
- iotop: Disk I/O’yu process bazında gösterir.
- nethogs: Network trafiğini process bazında gösterir.
- ncdu: Disk kullanımını interaktif olarak analiz eder.
- sysstat: sar, iostat gibi araçları içerir, tarihsel performans verisi toplar.
sysstat’ı aktifleştir:
sudo nano /etc/default/sysstat
ENABLED="false" satırını ENABLED="true" yap ve servisi başlat:
sudo systemctl enable sysstat
sudo systemctl start sysstat
Log Yönetimi
Logların nereye gittiğini ve ne kadar yer kapladığını kontrol altında tutman gerekiyor.
/etc/logrotate.d/ dizinindeki konfigürasyonları gözden geçir. Özellikle syslog için:
sudo nano /etc/logrotate.d/rsyslog
Logları merkezi bir yerde toplamak istiyorsan rsyslog zaten kurulu geliyor. Uzak log server’a yönlendirmek için /etc/rsyslog.conf dosyasını düzenle.
Günlük log boyutlarını kontrol etmek alışkanlık edin:
sudo du -sh /var/log/*
Swap Yapılandırması
RAM yetersiz kaldığında sistem çökmek yerine yavaşlasın istiyorsan swap olmalı. VPS’lerde genellikle swap gelmez. Swap dosyası oluşturmak için:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Swappiness değerini ayarla. Default 60’tır, server için daha düşük bir değer daha iyi:
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
vm.swappiness=10: Sistem RAM dolmadan swap’a başvurmaya direnir. Yüksek değer daha agresif swap kullanımı demek.
Kernel Parametreleri
/etc/sysctl.conf dosyası üzerinden bazı network güvenlik ayarları yapabilirsin:
sudo nano /etc/sysctl.conf
Ekleyebileceğin satırlar:
# IP spoofing koruması
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# ICMP redirect kabul etme
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# SYN flood koruması
net.ipv4.tcp_syncookies = 1
# IP forwarding (router değilsen kapat)
net.ipv4.ip_forward = 0
Değişiklikleri uygula:
sudo sysctl -p
Gerçek Dünya Senaryosu: Yeni VPS Aldın, Ne Yaparsın?
Bir müşteri için yeni VPS kuruyorsun. Sysadmin olarak ilk 30 dakikada yapman gerekenler:
- Root şifresiyle giriş yap, hemen yeni kullanıcı oluştur
- SSH key’ini ekle
apt update && apt upgrade -yçalıştırhostnamectlvetimedatectlayarla- UFW kur ve sadece gerekli portları aç
- Fail2ban kur ve yapılandır
PermitRootLogin novePasswordAuthentication noyap- Htop, ncdu gibi temel araçları kur
- Unattended-upgrades yapılandır
- İlk sistem snapshot’ını al (VPS panelinden)
Bu 10 adım seni çoğu yaygın saldırıya ve operasyonel hataya karşı korur. Her adımın sonunda sisteme hala erişebildiğini doğrula.
Konfigürasyonu Belgelemek
Her yaptığın değişikliği bir yere not et. Wiki, Confluence, Notion, text dosyası, ne kullanıyorsan. “Ben hatırlarım” dediğin şeyleri 6 ay sonra hatırlamayacaksın. Hangi port’u neden açtın, hangi servisi neden kapattın, bunları yaz.
En azından şu bilgileri kaydet:
- Sunucu hostname ve IP adresleri
- SSH port numarası
- Kurulu olan servisler ve amaçları
- Firewall kuralları ve gerekçeleri
- Backup stratejisi
Sonuç
Debian sunucu kurulumu göz korkutucu görünebilir ama adım adım gittiğinde son derece mantıklı bir süreç. Bu yazıda anlattıklarımı özetlemek gerekirse: minimal kurulum yap, gereksiz her şeyi kapat, SSH’ı sertleştir, firewall ve fail2ban’ı mutlaka çalıştır, sistemi güncel tut.
Bu “minimal yapılandırma” aslında bir başlangıç noktası. Üstüne ne kuracaksın? Web server mı, veritabanı mı, uygulama servisi mi? Her biri kendi güvenlik ve performans yapılandırmasını getiriyor. Ama temel sağlamsa üst yapı daha kolay oturuyor.
Bir şeyi atladıysan veya bir adımda sorun yaşıyorsan yorum bırak. Ayrıca bu yapılandırmayı Ansible playbook’a dökmek isteyenler için ayrı bir yazı yazabilirim, öneriniz varsa haberdar edin.