Sunucu Yönetimi

VPS Güvenlik Ayarları: İlk Kurulumda Sunucuyu Sertleştirme

Yeni açılan bir VPS, internete bağlandığı ilk dakikalardan itibaren otomatik giriş denemeleriyle karşılaşır. Bu rehberde sunucuyu teslim aldıktan sonra uygulamanız gereken temel sertleştirme adımlarını, Debian/Ubuntu ve RHEL tabanlı dağıtımlar için örnek komutlarla sırayla anlatıyoruz.

Rehber 5 dk okuma Güncelleme:

Başlamadan önce: hangi sistemdesiniz?

Komutlar dağıtıma göre değişir. Bu rehberde iki aileyi ayrı ayrı belirtiyoruz: Debian/Ubuntu (paket yöneticisi apt, güvenlik duvarı için genellikle UFW) ve RHEL tabanlı sistemler (AlmaLinux, Rocky Linux gibi; paket yöneticisi dnf, güvenlik duvarı firewalld). Hangi sistemde olduğunuzu cat /etc/os-release komutuyla görebilirsiniz.

Komutların çoğu root yetkisi ister. Root olarak bağlıysanız doğrudan çalıştırabilirsiniz; sudo yetkili bir kullanıcıyla bağlıysanız komutların başına sudo ekleyin. Rehberdeki "deploy" kullanıcı adı ve "sunucu-ip" ifadesi yalnızca yer tutucudur, kendi değerlerinizle değiştirin.

Hangi tehditlere karşı korunuyoruz?

Küçük bir web sunucusuna yönelen saldırıların büyük kısmı hedefli değildir. İnternetin tamamını tarayan botlar, varsayılan parolaları, eski yazılım sürümlerini ve açıkta unutulmuş yönetim arayüzlerini arar. Bu rehberdeki adımlar tam olarak bu kolay kapıları kapatmaya yöneliktir: tahmin edilebilir girişleri ortadan kaldırmak, gereksiz açık portları kapatmak ve bilinen açıkları hızla yamamak. Uygulama katmanındaki güvenlik, yani site yazılımınızın kendisi, ayrı bir konudur; sunucu ne kadar sağlam olursa olsun güncellenmemiş bir eklenti yine de içeri girilmesine yol açabilir.

Bir uyarı: sunucuya bir hosting paneli kuracaksanız, panelin kendi güvenlik duvarı ve SSH ayarları olabilir. Panel kurulumundan önce elle yaptığınız bazı ayarlar panelle çakışabilir. Bu durumda önce panel belgelerini okuyun; panel seçimi için cPanel, Plesk ve DirectAdmin karşılaştırması rehberimize bakabilirsiniz.

Ayrıca her adımdan önce sağlayıcınızın web tabanlı konsolunun (VNC veya seri konsol) çalıştığından emin olun. SSH erişiminizi yanlışlıkla kaybederseniz sunucuya oradan girip ayarı geri alabilirsiniz.

1. Sistemi güncelleyin ve sudo kullanıcı oluşturun

Sağlayıcının hazır imajı birkaç hafta, hatta birkaç ay önce hazırlanmış olabilir. İlk iş güncellemeleri uygulayın:

  • Debian/Ubuntu: apt update && apt upgrade
  • RHEL tabanlı: dnf upgrade

Çekirdek güncellendiyse sunucuyu yeniden başlatın. Ardından günlük işler için root yerine ayrı bir kullanıcı açın. Debian/Ubuntu'da adduser deploy ve usermod -aG sudo deploy, RHEL tabanlı sistemlerde useradd -m deploy, passwd deploy ve usermod -aG wheel deploy komutları bu işi görür. Buradaki "deploy" yalnızca örnek bir kullanıcı adıdır; tahmin edilmesi zor bir ad seçebilirsiniz.

2. SSH anahtarıyla giriş kurun

Parolalar tahmin edilebilir, sızdırılabilir ya da kaba kuvvetle denenebilir. SSH anahtar çifti ise özel anahtar sizin bilgisayarınızda kaldığı sürece çok daha güçlü bir koruma sağlar.

  1. Kendi bilgisayarınızda bir anahtar çifti oluşturun: ssh-keygen -t ed25519. Sorulduğunda anahtar için bir parola (passphrase) belirleyin; bilgisayarınız çalınsa bile anahtar tek başına işe yaramaz.
  2. Açık anahtarı sunucuya kopyalayın: ssh-copy-id deploy@sunucu-ip. Bu araç yoksa açık anahtarın içeriğini sunucudaki kullanıcının ~/.ssh/authorized_keys dosyasına elle ekleyebilirsiniz.
  3. Yeni bir terminal penceresinde anahtarla giriş yapmayı deneyin. Mevcut oturumu kapatmayın.

Windows kullanıyorsanız güncel Windows sürümlerinde OpenSSH istemcisi yerleşik olarak gelir; aynı komutları PowerShell'de kullanabilirsiniz.

3. SSH sunucu ayarlarını sıkılaştırın

Anahtarla giriş çalıştıktan sonra /etc/ssh/sshd_config dosyasında (veya bazı dağıtımlarda /etc/ssh/sshd_config.d/ klasöründeki ek dosyalarda) şu ayarları yapın:

AyarÖnerilen değerNe işe yarar?
PasswordAuthenticationnoParolayla girişi kapatır, yalnızca anahtar kabul edilir.
PermitRootLoginnoRoot kullanıcısıyla doğrudan girişi engeller.
PubkeyAuthenticationyesAnahtarla girişin açık olduğundan emin olur.
AllowUsersdeployYalnızca listelenen kullanıcıların girişine izin verir.

Ek klasördeki dosyalar ana dosyadaki değerleri geçersiz kılabildiği için her iki yeri de kontrol edin. Değişiklikten sonra sshd -t ile yapılandırmayı test edin, hata yoksa servisi yeniden başlatın: Debian/Ubuntu'da systemctl restart ssh, RHEL tabanlı sistemlerde systemctl restart sshd. Yine eski oturumu kapatmadan yeni bir pencereden giriş yapabildiğinizi doğrulayın.

SSH portunu 22'den farklı bir numaraya taşımak otomatik taramalardan gelen log gürültüsünü azaltır, ama tek başına güvenlik önlemi değildir. Port değiştirirseniz önce yeni portu güvenlik duvarında açın; RHEL tabanlı sistemlerde SELinux için de portu tanımlamanız gerekir.

4. Güvenlik duvarını yapılandırın

Varsayılan politika "gelen her şeyi reddet, yalnızca izin verdiklerimi aç" olmalıdır. Bir web sunucusu için genellikle SSH, HTTP (80) ve HTTPS (443) yeterlidir.

  • Ubuntu (UFW): ufw allow OpenSSH, ufw allow 80/tcp, ufw allow 443/tcp, ardından ufw enable ve ufw status verbose.
  • RHEL tabanlı (firewalld): firewall-cmd --permanent --add-service=ssh, --add-service=http, --add-service=https, ardından firewall-cmd --reload ve firewall-cmd --list-all.

SSH iznini vermeden güvenlik duvarını etkinleştirmek, kendinizi sunucunun dışında bırakmanın en kısa yoludur; sıralamaya dikkat edin. Veritabanı (3306), Redis veya yönetim arayüzleri gibi servisleri internete açmayın; uzaktan erişim gerekiyorsa yalnızca kendi IP adresinize ya da SSH tüneline izin verin. Sağlayıcınız ayrıca bulut tarafında bir güvenlik duvarı sunuyorsa iki katmanı birlikte kullanabilirsiniz.

5. Kaba kuvvet denemelerini engelleyin ve güncellemeleri otomatikleştirin

Fail2ban, log dosyalarındaki başarısız giriş denemelerini izleyip belirli sayıyı aşan IP adreslerini geçici olarak engelleyen yaygın bir araçtır. Debian/Ubuntu depolarında doğrudan bulunur; RHEL tabanlı sistemlerde genellikle EPEL deposundan kurulur. Ayarları ana dosyayı değiştirmek yerine jail.local dosyasında yapın ki paket güncellemesinde kaybolmasın. SSH için engelleme süresini ve deneme sayısını kendi kullanımınıza göre belirleyin; kendi sabit IP adresinizi ignoreip satırına eklemek yanlışlıkla engellenmenizi önler.

Güvenlik güncellemelerini elle takip etmek zamanla aksar. Debian/Ubuntu'da unattended-upgrades paketi, RHEL tabanlı sistemlerde dnf-automatic paketi güvenlik yamalarını otomatik uygular. Çekirdek güncellemeleri çoğu zaman yeniden başlatma gerektirir; Debian/Ubuntu'da /var/run/reboot-required dosyasının varlığı, RHEL tabanlı sistemlerde dnf needs-restarting -r komutu bunu gösterir.

6. Gereksiz servisleri kapatın ve son kontrolü yapın

Dışarıya hangi portların açık olduğunu ss -tulpn komutuyla listeleyin. Tanımadığınız ya da kullanmadığınız her servis için iki soru sorun: buna ihtiyacım var mı, varsa yalnızca yerel ağdan (127.0.0.1) dinleyebilir mi? Kullanmadığınız servisleri systemctl disable --now servis-adi ile kapatın.

Sertleştirmeyi bitirdiğinizde şu kontrol listesinden geçin:

  • Root ile ve parolayla SSH girişi reddediliyor mu?
  • Güvenlik duvarı açık ve yalnızca gerekli portlara izin veriyor mu?
  • Otomatik güvenlik güncellemeleri çalışıyor mu, logunda hata var mı?
  • Özel SSH anahtarınızın güvenli bir yedeği var mı? Anahtarı kaybederseniz giriş için sağlayıcı konsoluna muhtaç kalırsınız.
  • Sunucu ilk yedeğini aldı mı? Sertleştirilmiş bir sunucu da bozulabilir; düzeni sunucu yedekleme rehberine göre kurun.

Ekipte çalışıyorsanız: erişim yönetimi

Sunucuya birden fazla kişi erişiyorsa herkesin kendi kullanıcısı ve kendi SSH anahtarı olmalıdır. Tek bir ortak hesap ve ortak anahtar, kimin ne yaptığını izlemeyi imkânsız kılar ve ekipten ayrılan birinin erişimini kapatmayı zorlaştırır. Bir geliştirici ya da ajansla çalışmanız bittiğinde onun anahtarını authorized_keys dosyasından silin ve kullanıcısını kapatın. Geçici erişim gerekiyorsa bunu bir takvim hatırlatmasıyla birlikte verin; "sonra kapatırım" denilen hesaplar genellikle yıllarca açık kalır.

Güvenlik bir kerelik iş değildir. Logları ve kaynak kullanımını düzenli izlemek, beklenmedik bir süreç ya da ani trafik artışı gibi işaretleri erkenden görmenizi sağlar; bunun için sunucu kaynak izleme rehberine geçebilirsiniz. Web sunucusu kurulumuna geçmeden önce Apache, Nginx ve LiteSpeed farkları yazımız seçiminizi kolaylaştırır. Tüm sunucu konularının özeti için sunucu yönetimi sayfasına dönebilirsiniz.

Bir yapılandırma hatasında takılırsanız ilgili log satırlarını ve dağıtım bilgisini Linux Sunucular bölümünde paylaşabilirsiniz. Sunucunuzda şüpheli bir etkinlik fark ettiyseniz Site Güvenliği ve Saldırılar bölümü daha uygun bir adrestir.

Forumdaki ilgili bölümler

Sık sorulan sorular

SSH portunu değiştirmek sunucuyu güvenli yapar mı?

Port değiştirmek otomatik taramaların bir kısmını azaltır ve logları sadeleştirir, ama gerçek koruma anahtarla giriş, kapalı parola girişi ve güvenlik duvarından gelir. Port değişikliğini ek bir önlem olarak görün.

Parolayla girişi kapattım, anahtarımı kaybedersem ne olur?

Sağlayıcınızın web konsolu üzerinden sunucuya girip yeni bir açık anahtar ekleyebilirsiniz. Bu yüzden konsol erişimini önceden test edin ve özel anahtarınızın şifreli bir yedeğini güvenli bir yerde saklayın.

UFW ve firewalld birlikte kullanılabilir mi?

Aynı sunucuda ikisini birlikte çalıştırmayın; kurallar çakışabilir. Dağıtımınızla gelen aracı ya da kurduğunuz panelin önerdiği güvenlik duvarını tek başına kullanın.

Fail2ban yerine başka bir araç kullanabilir miyim?

Evet, benzer işi yapan başka araçlar ve bazı panellerin yerleşik koruma modülleri vardır. Önemli olan, tekrarlanan başarısız denemeleri otomatik engelleyen bir mekanizmanın çalışmasıdır.

Otomatik güncellemeler siteyi bozar mı?

Yalnızca güvenlik yamalarıyla sınırlandırılmış otomatik güncellemeler nadiren sorun çıkarır. Büyük sürüm değişikliklerini otomatiğe bırakmayın, önce yedek alıp kontrollü uygulayın.

Sunucu ve domain sorularınızı toplulukla çözün

Webmaster Forum'da 10.300+ üye ve 13.400+ konu var. Hosting, VPS ve DNS bölümlerinde sorunuzu açın; üyelik ücretsiz.