Bir sunucu çöktüğünde log dosyasına bakıp sorunun kaynağını birkaç dakikada bulmakla saatlerce rastgele komut deneyerek uğraşmak arasındaki fark, temel sunucu yönetimi bilgisidir. İnternetteki sunucuların büyük bölümü Linux çalıştırır; bu yüzden Linux sunucu yönetimini öğrenmek hem hobi projeleri hem de kariyer için doğrudan karşılığı olan bir yatırımdır. Bu yazıda bir Linux sunucusunu kurmaktan güvenliğini sağlamaya, uzaktan yönetmekten yedekleme ve izlemeyi otomatikleştirmeye kadar somut adımları ele alıyorum.
İlk Sunucunuzu Nasıl Kurarsınız?
Pratik yapmak için pahalı donanım gerekmez. DigitalOcean, Hetzner veya Linode gibi sağlayıcılarda aylık birkaç dolara başlayan ucuz bir bulut sunucu, ya da elinizdeki eski bir masaüstü bilgisayar, öğrenmeye başlamak için yeterlidir. Ubuntu Server veya Debian, iyi belgelenmiş olmaları nedeniyle yeni başlayanlar için mantıklı seçeneklerdir.
Sunucuyu ilk kurduğunuzda karşınıza grafik arayüz değil, doğrudan komut satırı çıkar. Bu bilinçli bir tasarım tercihidir: sunucu kaynakları hizmetlere ayrılır ve uzaktan yönetim kolaylaşır. Grafik arayüz boşta bile bellek ve işlemci tüketir; bir sunucuda bu kaynaklar web sunucusu, veritabanı gibi gerçek hizmetlere ayrılmalıdır.
İlk girişten sonra atmanız gereken ilk adım paket listelerini güncellemektir:
sudo apt update && sudo apt upgrade -y
Ardından sunucunun saat dilimini doğru ayarlamak, log zaman damgalarının tutarlı kalmasını sağlar; sudo timedatectl set-timezone Europe/Istanbul komutu bunu tek satırda halleder.
Sunucunun adını (hostname) anlamlı bir isimle değiştirmek de işe yarar: birden fazla sunucu yönettiğinizde hangisine bağlandığınızı karıştırmazsınız. sudo hostnamectl set-hostname web-sunucu-1 komutu bunu yapar. Komutun tüm seçeneklerini hostnamectl kılavuz sayfasında bulabilirsiniz. Küçük bir ayrıntı gibi görünse de, gece yarısı acil bir müdahalede yanlış sunucuya komut yazmanızı önleyen ucuz bir güvenlik önlemidir.
SSH ile Uzaktan Bağlantı Nasıl Kurulur?
SSH (Secure Shell), sunucuya şifreli bir kanal üzerinden komut satırı erişimi sağlayan protokoldür ve sunucu yönetiminin temel aracıdır. Bağlanmak için:

ssh kullanici_adi@sunucu_ip_adresi
Parola ile giriş yapmak işlevseldir ama kaba kuvvet saldırılarına açıktır. Bunun yerine bir SSH anahtar çifti oluşturup genel anahtarı sunucuya kaydetmek çok daha güvenlidir:
ssh-keygen -t ed25519 -C "sunucu-erisimi"
ssh-copy-id kullanici_adi@sunucu_ip_adresi
ssh-keygen bilgisayarınızda bir özel/genel anahtar çifti üretir, ssh-copy-id ise genel anahtarı sunucudaki yetkili anahtarlar listesine ekler. Bu ayarlandıktan sonra parola sormadan, anahtarınızla otomatik giriş yaparsınız. İsterseniz parola ile girişi tamamen kapatıp yalnızca anahtarla erişime izin verebilirsiniz.
Parola girişini kapatmak için /etc/ssh/sshd_config dosyasında PasswordAuthentication no satırını ayarlayıp sudo systemctl restart ssh ile servisi yeniden başlatmanız gerekir. Bu değişikliği yapmadan önce anahtarla girişin gerçekten çalıştığını ayrı bir terminal penceresinden test edin; aksi hâlde kendinizi sunucuya erişimsiz bırakma riski taşırsınız.
Varsayılan SSH portu (22), internete açık sunucularda sürekli otomatik tarama saldırılarına maruz kalır. Portu 2222 gibi standart olmayan bir numaraya taşımak saldırıları tamamen durdurmaz ama otomatik botların büyük kısmını eler. Bunun için sshd_config dosyasındaki Port 22 satırını değiştirip servisi yeniden başlatmanız yeterlidir.
Güvenlik Duvarını Nasıl Yapılandırırsınız?
Bir sunucuda varsayılan olarak her port kapalı gelmez; hangi hizmetleri çalıştırıyorsanız o portlar açık kalabilir. Ubuntu'da UFW (Uncomplicated Firewall), güvenlik duvarı kurallarını basit komutlarla yönetmenizi sağlar:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Bu dört satır sırasıyla SSH bağlantısına, HTTP ve HTTPS trafiğine izin verir, sonra güvenlik duvarını etkinleştirir. Kritik nokta şu: enable komutunu çalıştırmadan önce SSH portuna izin verdiğinizden emin olun. Aksi hâlde kendinizi sunucudan dışarıda bırakabilirsiniz; özellikle uzak bir bulut sunucusunda bu can sıkıcı bir hatadır.
Hangi kuralların aktif olduğunu görmek için sudo ufw status verbose komutu yeterlidir. Gereksiz bir portu kapatmak isterseniz sudo ufw delete allow 8080/tcp gibi bir komutla ilgili kuralı kaldırabilirsiniz.
Tekrarlayan başarısız giriş denemelerine karşı fail2ban kurmak da ek bir katman ekler. Bu araç, belirli bir süre içinde çok sayıda hatalı parola denemesi yapan IP adresini otomatik olarak geçici süreyle engeller. sudo apt install fail2ban komutuyla kurulur ve varsayılan ayarlarıyla bile SSH'a yönelik kaba kuvvet denemelerinin büyük kısmını durdurur.
Kullanıcı ve Yetki Yönetimini Nasıl Yaparsınız?
Sunucuda root hesabıyla doğrudan çalışmak riskli bir alışkanlıktır; yanlış bir komut tüm sistemi tek seferde bozabilir. Bunun yerine normal bir kullanıcı hesabı oluşturup, gerektiğinde sudo ile yetki yükseltmek standart yaklaşımdır:

sudo adduser yeni_kullanici
sudo usermod -aG sudo yeni_kullanici
İlk komut yeni bir kullanıcı hesabı açar, ikincisi bu kullanıcıyı sudo grubuna ekleyerek yönetici komutlarını çalıştırma yetkisi verir. Birden fazla kişi aynı sunucuyu yönetiyorsa, herkese ayrı hesap açmak kimin ne zaman ne yaptığını log üzerinden takip edebilmenizi sağlar. Paylaşılan tek bir root parolası bu izlenebilirliği tamamen ortadan kaldırır.
En az ayrıcalık ilkesi, sunucu güvenliğinin temel prensiplerinden biridir: bir kullanıcıya veya servise, işini yapması için gereken minimum yetkiyi verin, fazlasını değil. Örneğin bir web uygulamasını çalıştıran servis hesabının sudo yetkisine ihtiyacı yoktur; o hesap ele geçirilse bile saldırgan sudo yetkisi olmadığı için tüm sistemi ele geçiremez.
| Görev | Komut |
|---|---|
| Yeni kullanıcı ekleme | sudo adduser kullanici_adi |
| Sudo yetkisi verme | sudo usermod -aG sudo kullanici_adi |
| Kullanıcı silme | sudo deluser kullanici_adi |
| Aktif kullanıcıları listeleme | who |
| Kullanıcı geçmişini görme | last kullanici_adi |
Hizmetleri (Servisleri) Nasıl Yönetirsiniz?
Modern Linux dağıtımlarının çoğu arka plan servislerini systemd ile yönetir. Bir web sunucusu, veritabanı veya başka bir servisin durumunu kontrol etmek için:

sudo systemctl status nginx
sudo systemctl restart nginx
sudo systemctl enable nginx
status mevcut durumu gösterir, restart servisi yeniden başlatır, enable ise sunucu her açıldığında servisin otomatik başlamasını sağlar. Bir servis beklenmedik biçimde çöktüğünde önce status çıktısındaki hata satırlarına, sonra journalctl -u nginx -n 50 komutuyla son 50 log satırına bakmak, sorunun kaynağını bulmanın en hızlı yoludur.
Gereksiz servisleri kapatmak da güvenliğin bir parçasıdır; çalışmayan bir servis, saldırı yüzeyinde gereksiz bir kapı demektir. systemctl list-units --type=service komutu sunucuda o an çalışan tüm servisleri listeler, kullanmadıklarınızı systemctl disable ile kapatabilirsiniz.
Bir servisi sistem açılışında otomatik başlatmak istemiyorsanız ama elle çalıştırma seçeneğini korumak istiyorsanız disable yeterlidir; tamamen kaldırmak için paketi sudo apt remove ile silmeniz gerekir. Bu ayrımı bilmek, "denemek için kapattım ama gerekirse geri açarım" senaryosunda işinize yarar.
Yedekleme ve İzlemeyi Nasıl Otomatikleştirirsiniz?
Manuel yedekleme unutulmaya en açık görevlerden biridir; bu yüzden yedeklemeyi bir cron görevine bağlamak, güvenliğin ucuz ama kritik bir parçasıdır. Basit bir yedekleme betiği:
#!/bin/bash
tarih=$(date +%F)
tar -czf /yedekler/site_$tarih.tar.gz /var/www/site
find /yedekler -name "*.tar.gz" -mtime +30 -delete
Bu betik siteyi tarih damgalı bir arşive sıkıştırır ve 30 günden eski yedekleri otomatik siler; disk dolmadan geriye dönük makul bir geçmiş tutar. Betiği crontab -e ile açtığınız zamanlama dosyasına 0 2 * /home/kullanici/yedekle.sh satırıyla eklerseniz, her gece saat 02:00'de otomatik çalışır.
Yedekleri yalnızca aynı sunucuda tutmak yetmez; disk arızası veya sunucu kaybı durumunda o yedekler de sizinle birlikte gider. Yedekleri düzenli olarak başka bir sunucuya, harici depolamaya veya bir bulut depolama hizmetine (rsync veya bulut sağlayıcısının komut satırı aracıyla) kopyalamak, gerçek bir felaket kurtarma planının parçasıdır.
Sunucu kaynaklarını izlemek için htop günlük hızlı kontrol için yeterlidir, ama uzun vadeli trend takibi istiyorsanız Netdata veya Grafana gibi izleme araçları CPU, bellek ve disk kullanımını zaman içinde grafikleyerek gösterir.
Sunucu Sorunlarını Nasıl Teşhis Edersiniz?
Bir sorun bildirimi geldiğinde sistematik ilerlemek, rastgele komut denemekten çok daha hızlı sonuç verir. Önce disk dolu mu diye bakın:
df -h
Disk doluysa birçok servis sessizce yazma hatası vermeye başlar. Ardından belleği kontrol edin (free -h), CPU yükünü kontrol edin (uptime komutunun sonundaki "load average" değerleri), son olarak ilgili servisin loglarına bakın. Bu dört adım, sunucu sorunlarının büyük kısmını birkaç dakika içinde teşhis etmenizi sağlar.
Load average değerlerini okumak ilk bakışta kafa karıştırıcı gelebilir: üç sayı sırasıyla son 1, 5 ve 15 dakikalık ortalama yükü gösterir. Tek çekirdekli bir sunucuda 1.0 değeri işlemcinin tam kapasitede çalıştığı anlamına gelir; çok çekirdekli sunucularda bu eşik çekirdek sayısıyla orantılı olarak yükselir.
Linux terminal komutlarına hâkim olmak bu teşhis sürecini büyük ölçüde hızlandırır; log dosyalarında arama yapmaktan süreçleri filtrelemeye kadar her adım komut satırı becerisine dayanır. Sorunu bulduktan sonra kalıcı çözüm uygulayıp, benzer bir arızanın tekrarını önleyecek bir izleme veya uyarı kuralı eklemek sunucu yönetiminin olgunlaşmış hâlidir.
Her sorunu çözdükten sonra ne olduğunu, neden olduğunu ve nasıl çözüldüğünü birkaç satırla not almak uzun vadede en değerli alışkanlıklardan biridir. Altı ay sonra aynı hata tekrar çıktığında o notlar sizi baştan araştırma yapmaktan kurtarır ve sorunu dakikalar içinde kapatmanızı sağlar.
Henüz yorum yok.
Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.