İçeriğe Atla
MS Mehmet Sarı Çözüm mimarisi notları

Bir Sunucuyu İlk 45 Dakikada Güvene Almak: VPS Sıkılaştırma Kontrol

Yeni bir VPS kurduğumda ilk 45 dakikada uyguladığım temel güvenlik adımlarını ve sıkılaştırma kontrol listemi paylaşıyorum. SSH, firewall, sistem…

100%

Yeni bir VPS kurduğumda, sunucuyu dış dünyaya açmadan önce ilk 45 dakika içinde uyguladığım temel güvenlik adımları var. Bu süre zarfında yaptığım sıkılaştırma işlemleri, çoğu basit saldırı girişimini baştan savmak ve daha güvenli bir işletim ortamı oluşturmak için kritik öneme sahip. Amacım, sunucuyu hemen kullanılabilir hale getirirken aynı zamanda bilinen zafiyetlere karşı minimum savunmayı inşa etmek.

Bu kontrol listesi, ister bir web uygulaması, ister bir veritabanı sunucusu, isterse de kendi otomasyon platformum için bir arka uç olsun, her türlü Linux tabanlı VPS için geçerli. Temel güvenlik adımlarını atlamak, ileride çok daha büyük sorunlara yol açabilir. Bu yüzden, ilk kurulum anından itibaren proaktif olmak her zaman en iyi yaklaşımdır.

SSH Erişimi ve Kimlik Doğrulama: Kapıları Sağlamlaştırmak

VPS’e ilk erişim genellikle SSH üzerinden olur ve bu, saldırganların hedef aldığı en yaygın servislerden biridir. Varsayılan SSH portu (22), root kullanıcısıyla giriş izni ve şifre tabanlı kimlik doğrulama, sunucunuzu brute-force saldırılarına karşı savunmasız bırakır. Bu yüzden ilk işim, SSH erişimini mümkün olduğunca sıkılaştırmak oluyor.

Öncelikle, SSH portunu standart 22’den farklı, yüksek bir porta taşırım. Bu, otomatik botların ve basit taramaların büyük bir kısmını eleyerek gürültüyü azaltır. Ardından, root kullanıcısının doğrudan SSH ile giriş yapmasını yasaklarım ve yalnızca SSH key tabanlı kimlik doğrulamayı zorunlu kılarım. Şifre ile girişi tamamen kapatmak, olası şifre sızıntıları veya zayıf şifre tahminlerine karşı önemli bir koruma sağlar.

# İlk olarak yeni bir port seçin (örneğin 2222)
# Yeni bir yönetici kullanıcısı oluşturun ve SSH key'inizi ekleyin
# (Bu adımlar aşağıda daha detaylı anlatılacak)

# SSH yapılandırma dosyasını düzenleyin
sudo nano /etc/ssh/sshd_config

sshd_config dosyasında aşağıdaki değişiklikleri yaparım:

# Port 22'yi farklı bir porta değiştirin (örneğin 2222)
Port 2222 

# Root kullanıcısının doğrudan girişini yasaklayın
PermitRootLogin no

# Şifre ile kimlik doğrulamayı kapatın (sadece SSH key kullanın)
PasswordAuthentication no

# Boş şifre ile girişleri yasaklayın
PermitEmptyPasswords no

# AllowUsers veya AllowGroups ile sadece belirli kullanıcıların/grupların erişimine izin verin
# Örneğin: AllowUsers mehmet

Bu değişiklikleri yaptıktan sonra SSH servisini yeniden başlatırım. Ancak, bu adımı yapmadan önce yeni port ve kullanıcı ile erişimi test ettiğinizden emin olun. Aksi takdirde, sunucuya erişiminizi kaybedebilirsiniz.

sudo systemctl restart sshd

Güvenlik Duvarı Yapılandırması: Sadece İhtiyaç Duyulanı Açmak

Bir sunucuyu güvence altına almanın en temel adımlarından biri, bir güvenlik duvarı (firewall) yapılandırmaktır. Bir güvenlik duvarı olmadan, sunucunuzdaki tüm portlar dışarıdan erişime açık hale gelir. Bu da her türlü saldırı girişimine davetiye çıkarmak demektir. Benim ilk işim, UFW (Uncomplicated Firewall) veya firewalld gibi kolay yönetilebilir bir araçla sadece gerçekten ihtiyacım olan portları açmaktır.

Çoğu durumda, yeni bir VPS’te sadece SSH (yukarıda değiştirdiğimiz port), HTTP (80) ve HTTPS (443) portlarına ihtiyacım olur. Diğer tüm portları varsayılan olarak kapalı tutmak, saldırı yüzeyini önemli ölçüde azaltır. Örneğin, bir veritabanı sunucusu kuruyorsam ve bu veritabanına sadece aynı VPC içinden erişilecekse, veritabanı portunu (PostgreSQL için 5432 gibi) sadece iç ağa açarım, dışarıya kesinlikle açmam.

# Ubuntu tabanlı sistemlerde UFW kurulumu ve temel ayarlar
sudo apt update
sudo apt install ufw -y

# Varsayılan olarak tüm gelen bağlantıları reddet, gidenleri izin ver
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH portumuza izin verin (örneğin 2222)
sudo ufw allow 2222/tcp

# HTTP ve HTTPS portlarına izin verin
sudo ufw allow http
sudo ufw allow https

# UFW'yi etkinleştirin
sudo ufw enable

Bu adımları uyguladıktan sonra sudo ufw status verbose komutuyla kuralların doğru bir şekilde uygulandığını kontrol ederim. firewalld kullanan CentOS veya Red Hat tabanlı sistemlerde ise benzer bir mantıkla firewall-cmd komutlarını kullanırım. Örneğin, firewall-cmd --add-port=2222/tcp --permanent gibi komutlarla belirli portlara izin verilir. Bu yaklaşım, gereksiz servislerin veya yanlışlıkla açık kalan portların sömürülmesini engeller.

Sistem Güncellemeleri ve Temel Paket Yönetimi

Yeni bir sunucu kurduğumda, ilk işlerimden biri işletim sistemini ve tüm yüklü paketleri en son sürümlerine güncellemektir. Birçok güvenlik zafiyeti, yazılımların eski sürümlerindeki bilinen açıklardan kaynaklanır. Bu zafiyetler genellikle yama (patch) yayınlanarak kapatılır, ancak bu yamaları uygulamadığınız sürece sunucunuz savunmasız kalır. Bu durum, özellikle MSP operasyonlarında, yüzlerce sunucunun anlık olarak güncel tutulması gereken bir disiplin gerektirir.

Güncelleme işlemi sadece mevcut paketleri yenilemekle kalmaz, aynı zamanda sistem performansını ve kararlılığını da artırır. Güncelleme sonrası kullanılmayan veya bağımlılıkları ortadan kalkan paketleri temizlemek de iyi bir alışkanlıktır. Bu, disk alanından tasarruf etmenizi ve gereksiz potansiyel zafiyet kaynaklarını ortadan kaldırmanızı sağlar.

# Ubuntu/Debian tabanlı sistemler için:
sudo apt update          # Paket listelerini günceller
sudo apt upgrade -y      # Yüklü paketleri günceller
sudo apt dist-upgrade -y # Çekirdek ve sistem dağıtımını günceller
sudo apt autoremove -y   # Kullanılmayan bağımlılıkları ve paketleri kaldırır
sudo apt clean           # İndirilmiş paket dosyalarını temizler

# CentOS/Red Hat tabanlı sistemler için:
sudo dnf update -y       # Tüm paketleri günceller
sudo dnf autoremove -y   # Kullanılmayan bağımlılıkları kaldırır

Bu adımların hemen ardından otomatik güncellemeleri yapılandırmayı düşünürüm. Özellikle kritik güvenlik yamalarının otomatik olarak uygulanması, çoğu küçük ve orta ölçekli işletme (KOBİ) için büyük bir rahatlıktır. Ubuntu’da unattended-upgrades paketi bu iş için oldukça kullanışlıdır. Bu, yamalama pencerelerini yönetme ve alert triyajı yapma süreçlerimi kolaylaştıran bir yaklaşımdır.

# Otomatik güncellemeleri yapılandırma (Ubuntu örneği)
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

Kullanıcı Yönetimi ve Ayrıcalık Yükseltme Kontrolü

Yeni bir VPS kurduğumda, çoğu sağlayıcı bana doğrudan root kullanıcısı ile erişim imkanı tanır. Ancak, root kullanıcısının doğrudan ve sürekli kullanımı, güvenlik açısından büyük bir risktir. root kullanıcısı tüm sistem üzerinde sınırsız yetkiye sahiptir ve bu yetkinin kötüye kullanılması veya ele geçirilmesi durumunda tüm sunucu tehlikeye girer. Bu yüzden, ilk 45 dakika içinde atacağım kritik adımlardan biri, ayrıcalıklı kullanıcı yönetimini doğru bir şekilde yapılandırmaktır.

Yeni bir yönetici kullanıcısı oluşturup, bu kullanıcıya sudo yetkisi vererek root kullanıcısının doğrudan kullanımını kısıtlarım. Bu, “en az ayrıcalık” prensibine uygun hareket etmektir. Yani, bir görevi yerine getirmek için sadece o görevin gerektirdiği minimum yetkiyi kullanırım. sudo kullanarak bir komut çalıştırdığımda, bu işlem sudo loglarına kaydedilir ve bu da denetlenebilirlik açısından önemlidir.

# Yeni bir kullanıcı oluşturun (örneğin 'mehmet')
sudo adduser mehmet

# Yeni kullanıcıya sudo yetkisi verin (Ubuntu/Debian için 'sudo' grubuna ekleyin)
sudo usermod -aG sudo mehmet

# CentOS/Red Hat için 'wheel' grubuna ekleyin
# sudo usermod -aG wheel mehmet

Yeni kullanıcıyı oluşturduktan ve sudo yetkisi verdikten sonra, root kullanıcısının şifre ile girişini yukarıdaki SSH yapılandırmasında zaten kapattım. Eğer SSH key ile giriş yapıyorsam, root kullanıcısının SSH key ile girişini de kapatmayı tercih ederim. Bu, root hesabının sadece konsol erişimi veya sudo komutuyla kullanılabilir olmasını sağlar. Bu sayede, yetki sürünmesi (privilege creep) gibi sorunların önüne geçebilirim.

İzleme ve Loglama Temelleri: Ne Olduğunu Bilmek

Bir sunucuyu güvence altına almanın ilk adımları, onu izlenebilir kılmaktır. Bir sorun çıktığında veya bir saldırı girişimi olduğunda, ne olduğunu bilmek ve hızlıca tepki verebilmek için loglara ve sistem metriklerine ihtiyacım var. Yeni bir VPS’i kurarken, ilk 45 dakika içinde temel loglama ve basit bir saldırı önleme aracı olan fail2ban’i yapılandırırım. Bu adımlar, sunucunun “gözlerini ve kulaklarını” açmak gibidir.

Linux sistemlerde systemd ile birlikte gelen journald, sistem loglarını merkezi olarak toplar ve yönetir. Bu logları inceleyerek sistemdeki anormallikleri veya hata mesajlarını görebilirim. Özellikle SSH erişim logları, kimin ne zaman hangi IP’den giriş yapmaya çalıştığını gösterir ve olası brute-force saldırılarını tespit etmemi sağlar.

# Son 100 SSH denemesini görmek için (Ubuntu/Debian)
journalctl -u sshd -n 100

# Belirli bir zaman dilimindeki logları görmek için
journalctl --since "2 hours ago" --unit=sshd

fail2ban ise, log dosyalarını izleyerek belirli desenleri (örneğin, çok sayıda başarısız SSH giriş denemesi) algıladığında, bu saldırıları yapan IP adreslerini geçici olarak güvenlik duvarında engeller. Bu, basit ama etkili bir brute-force savunma mekanizmasıdır ve sunucuyu gereksiz yere meşgul eden bot trafiğini azaltır.

# fail2ban kurulumu ve temel yapılandırması
sudo apt install fail2ban -y

# Varsayılan yapılandırma dosyasını kopyalayın
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# jail.local dosyasını düzenleyerek SSH portunuza göre ayarlayın
# nano /etc/fail2ban/jail.local
# [sshd] bölümünde 'port' değerini özel SSH portunuza (örn. 2222) ayarlayın.
# enabled = true

# fail2ban servisini yeniden başlatın
sudo systemctl restart fail2ban

Bu temel izleme ve engelleme mekanizmaları, sunucunun ilk savunma hattını oluşturur. Daha sonraki aşamalarda InfluxDB, Grafana ve Loki gibi araçlarla daha kapsamlı bir gözlemlenebilirlik platformu kurabilirim. Ancak ilk 45 dakikada journald ve fail2ban ile başlamak, beni birçok sorundan kurtarır. Alert triyajı ve gürültü azaltma, MSP operasyonlarında sürekli üzerinde çalıştığım konular olduğu için, bu adımları baştan doğru atmak çok önemli.

Ek Güvenlik Katmanları ve İleri Seviye Düşünceler

İlk 45 dakikada uyguladığım temel güvenlik adımları, sunucuyu birçok yaygın tehdide karşı korur. Ancak, tam teşekküllü bir güvenlik duruşu için daha fazlasına ihtiyaç vardır. Bu ek katmanlar, genellikle uygulamanın veya hizmetin özel gereksinimlerine göre şekillenir ve ilk kurulum anında olmasa da kısa sürede devreye alınması gereken önlemlerdir. Bu bölümde, ilk 45 dakikayı aşan ancak akılda tutulması gereken bazı ileri seviye güvenlik düşüncelerini ele alıyorum.

Örneğin, SELinux (Security-Enhanced Linux) veya AppArmor gibi zorunlu erişim kontrol (Mandatory Access Control - MAC) sistemleri, belirli uygulamaların veya kullanıcıların sistem kaynaklarına erişimini kısıtlayarak ekstra bir güvenlik katmanı sağlar. Bu araçlar, yanlış yapılandırıldığında sistemde kesintilere yol açabileceği için deneyim gerektirir. Eğer bir Red Hat veya CentOS sistemi kuruyorsam SELinux’i etkinleştiririm; Ubuntu’da ise AppArmor tercih ederim.

# SELinux durumunu kontrol edin (CentOS/Red Hat)
sestatus

# SELinux'u zorlama moduna ayarlayın (eğer izinli moddaysa)
# sudo setenforce 1

Bellek zayıflıklarına karşı, sysctl ayarlarıyla çekirdek düzeyinde bazı korumalar etkinleştirilebilir. Örneğin, adres alanı düzenini rastgeleleştirmek (ASLR - Address Space Layout Randomization), buffer overflow gibi saldırıların etkinliğini azaltır.

# ASLR'yi etkinleştirmek için sysctl ayarı
sudo sysctl -w kernel.randomize_va_space=2

# Kalıcı hale getirmek için /etc/sysctl.conf dosyasına ekleyin
# echo "kernel.randomize_va_space=2" | sudo tee -a /etc/sysctl.conf

Eğer sunucuda Nginx gibi bir reverse proxy veya web sunucusu çalıştırıyorsam, onun da temel güvenlik ayarlarını yaparım. Rate limiting, HTTP header sıkılaştırmaları (X-Frame-Options, X-Content-Type-Options, Content-Security-Policy) ve gereksiz modülleri devre dışı bırakmak gibi adımlar, web uygulaması katmanındaki saldırı yüzeyini azaltır. Docker Compose ile bare-metal + container hibrit dağıtım yapıyorsam, konteyner güvenliği de çok önemli. Konteynerleri non-root kullanıcıyla çalıştırmak, kaynak limitleri belirlemek ve imajları düzenli olarak taramak bu kapsamda yer alır.

# Nginx için temel güvenlik başlıkları (örnek)
add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";

Sonuç: İlk Adımlar ve Sonrası

Bir sunucuyu ilk 45 dakikada güvence altına almak, uzun vadeli güvenlik stratejimin sadece başlangıcıdır. Bu kontrol listesi, bir VPS’i dış dünyaya açmadan önce almam gereken minimum ve kritik önlemleri kapsar. SSH erişimini sıkılaştırmak, güvenlik duvarını yapılandırmak, sistemi güncellemek, kullanıcı yetkilerini doğru ayarlamak ve temel izleme mekanizmalarını kurmak, sağlam bir temel oluşturur.

Ancak, güvenlik sürekli bir süreçtir. Bu ilk adımların ardından, uygulamanın kendi güvenliği, düzenli yedekleme ve felaket kurtarma (Acronis gibi çözümlerle 3-2-1 stratejisi), daha detaylı izleme ve log analizi (Grafana, Loki), fidye yazılımına karşı katmanlı savunma gibi konulara odaklanırım. Unutmayın, en iyi güvenlik, proaktif olmak ve tehditler gelişirken savunmanızı da sürekli güncel tutmaktır. Sonraki adımlarınızda bu temel üzerine inşa etmeye devam edin.

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

Bu yazı nasıldı?

MS

Mehmet Sarı

Çözüm Mimarı & IT Altyapı Uzmanı (MSP)

Çözüm mimarisi, network, sunucu altyapıları, yedekleme, storage, güvenlik ve MSP operasyonu ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Yorumlar

Sunucu Taraflı AI Moderasyon

Yorumlar sunucuda yapay zeka ile denetlenir ve kalıcı olarak saklanır.

?
0/2000

Sunucu taraflı AI denetim

✉️ Ücretsiz · Spam yok · İstediğin an çık

Haftalık özet — AI değil, bizzat ben seçiyorum

Haftada bir mail: o haftanın en önemli yazısı, perde arkası notları, ve "bu hafta gerçekten kullandığım araç" bölümü. Az gürültü, çok sinyal.

  • 📌
    Haftanın en iyisi Sadece okumaya değer tek yazı
  • 🔧
    Alet çantası Bu hafta kullandığım araçlar
  • 🧠
    Perde arkası Blog'a girmeyen notlar

Spam yapmıyoruz. İstediğiniz zaman ayrılabilirsiniz. · Sadece Umami (self-hosted, Google yok) ile takip.

Okuma İstatistikleriniz

0

Yazı Okundu

0dk

Okuma Süresi

0

Gün Serisi

-

Favori Kategori

İlgili Yazılar