sunucu.com.tr
Linux Sunucular

Linux sunucu ilk kurulum betiği: Ubuntu 24.04'te sudo kullanıcısı, SSH anahtarı, UFW, fail2ban ve otomatik güncelleme tek seferde

Yeni teslim aldığınız Linux sunucu için tekrar çalıştırılabilir tek bir bash betiği: sudo kullanıcısı, SSH anahtarı, root ve parola girişini kapatma, UFW, fail2ban ve unattended-upgrades. Kendinizi kilitlemeden uygulama sırası, doğrulama komutları ve geri alma adımları dahil.

13 dk okuma

Yeni bir linux sunucu teslim aldığınızda genellikle root parolası ya da root için bir SSH anahtarı, internete açık 22. port ve varsayılan ayarlarla gelir. Sunucu IP adresi yayına girdiği andan itibaren otomatik tarayıcılar SSH portunu denemeye başlar. Bu yazı Ubuntu 24.04 üzerinde ilk kurulum adımlarını tek bir bash betiğinde toplar: sudo kullanıcısı, SSH anahtarı, sshd sertleştirme, UFW, fail2ban ve otomatik güvenlik güncellemeleri. VPS ya da bulut sunucu kiralamış sistem yöneticileri ve KOBİ teknik sorumluları için hazırlandı.

Linux sunucu teslim alındığında ilk 30 dakikada yapılması gerekenler

Sıralama önemlidir, çünkü yanlış sırayla yapılan doğru ayarlar sizi sunucunun dışında bırakabilir. Önerilen sıra şudur:

  1. Paket listesini güncelleyip gerekli paketleri kurmak.
  2. Root dışında, sudo yetkili bir kullanıcı açmak.
  3. Bu kullanıcıya SSH açık anahtarınızı eklemek.
  4. Güvenlik duvarını (UFW) SSH portuna izin vererek etkinleştirmek.
  5. fail2ban ile tekrarlanan başarısız girişleri engellemek.
  6. Güvenlik güncellemelerini otomatiğe bağlamak.
  7. En son SSH ayarlarını sıkılaştırmak: root girişi ve parola girişi kapalı.

SSH ayarının en sona bırakılmasının nedeni basit: bu adım hatalıysa ya da anahtar düzgün eklenmemişse yeni oturum açamazsınız. Önceki adımların hepsi mevcut oturumu bozmadan yapılabilir.

Betiğin yaptığı işler ve çalıştırmadan önce kontrol listesi

Aşağıdaki betik yukarıdaki yedi adımı uygular ve her adımda önce mevcut durumu kontrol eder. Böylece ikinci, üçüncü kez çalıştırdığınızda aynı satırları çoğaltmaz, kullanıcıyı yeniden oluşturmaya çalışmaz ve sonuç değişmez.

Çalıştırmadan önce şu maddeleri kontrol edin:

  • Konsol erişimi: Sağlayıcınızın panelinde VNC ya da web konsolu olduğundan ve nasıl açıldığından emin olun. SSH kapanırsa tek kurtarma yolu budur. Konsoldan giriş için root ya da kullanıcı parolası gerekir; parolayı bilmiyorsanız konsoldan root şifresi sıfırlama adımlarını önceden okuyun.
  • SSH anahtarınız hazır mı: Kendi bilgisayarınızda ssh-keygen -t ed25519 ile bir anahtar çifti oluşturun. Betiğe yalnız .pub uzantılı açık anahtarın içeriği girer, özel anahtar asla sunucuya gitmez.
  • İkinci oturum: Betiği çalıştırırken mevcut SSH oturumunu kapatmayın. Doğrulama bitene kadar açık kalsın.
  • Sağlayıcı güvenlik grubu: Bazı bulut panellerinde sunucu dışında ayrı bir ağ güvenlik duvarı ya da güvenlik grubu bulunur. SSH portunu değiştirecekseniz yeni portu orada da açın.
  • Docker kullanacak mısınız: Docker, UFW kurallarını atlayan kendi iptables kurallarını yazar. Docker kurulacaksa Docker UFW sorunu ve DOCKER-USER zinciri yazısındaki ek adımları da uygulayın.

Kendini kilitleme uyarısı: Betik UFW'yi etkinleştirir ve SSH ayarlarını değiştirir. SSH portuna izin verilmeden güvenlik duvarı açılırsa ya da yönetim ağı yanlış girilirse sunucuya SSH ile erişimi kaybedersiniz. Betik, UFW'yi açmadan önce SSH portuna izin verecek biçimde yazıldı; yine de değişkenleri dikkatle doldurun ve panel konsolunun çalıştığını önceden test edin.

İlk kurulum betiği

Betik Ubuntu 24.04 için hazırlandı. Debian 12'de de çalışacak biçimde yazıldı (servis adı ve paket adları aynıdır), ancak birincil hedef Ubuntu 24.04'tür. Root olarak çalıştırılır. Değiştirmeniz gereken değerler en üstteki blokta toplandı: ORNEK_KULLANICI yerine kendi kullanıcı adınızı yazın, açık anahtarınızı SSH_ACIK_ANAHTAR içine yapıştırın ya da boş bırakın. Boş bırakırsanız betik /root/.ssh/authorized_keys içindeki anahtarları yeni kullanıcıya kopyalar; birçok bulut sağlayıcı teslimde anahtarı buraya koyar.

Geri alma adımları betikten sonraki bölümde ayrıca verildi.

bash
#!/usr/bin/env bash
# ilk-kurulum.sh: yeni Linux sunucu için ilk sertleştirme
# Ubuntu 24.04 için hazırlandı; Debian 12'de de çalışacak biçimde yazıldı.
# Tekrar çalıştırılabilir: her adım önce mevcut durumu kontrol eder.
set -euo pipefail

# ---------- DEĞİŞTİRİLECEK DEĞERLER ----------
YENI_KULLANICI="ORNEK_KULLANICI"
# Boşsa /root/.ssh/authorized_keys içindeki anahtarlar kopyalanır.
SSH_ACIK_ANAHTAR=""             # ör. "ssh-ed25519 AAAA... ornek@example.com"
SSH_PORT="22"                   # değiştirirseniz sağlayıcı güvenlik grubunda da açın
EK_PORTLAR="80/tcp 443/tcp"     # gerekmiyorsa "" bırakın
YONETIM_AGI=""                  # ör. "198.51.100.0/24"; boşsa SSH her yerden (limit ile)
# ---------------------------------------------

log()  { printf '\n[+] %s\n' "$*"; }
uyar() { printf '\n[!] %s\n' "$*" >&2; }

if [[ $EUID -ne 0 ]]; then
  echo "Root olarak çalıştırın: sudo bash ilk-kurulum.sh" >&2; exit 1
fi
if [[ "$YENI_KULLANICI" == "ORNEK_KULLANICI" ]]; then
  echo "Önce YENI_KULLANICI değerini değiştirin." >&2; exit 1
fi

# 1) Paketler
log "Paketler kuruluyor"
export DEBIAN_FRONTEND=noninteractive
apt-get update -q
apt-get install -y -q ufw fail2ban python3-systemd unattended-upgrades

# 2) Sudo kullanıcısı (varsa yeniden oluşturulmaz)
log "Kullanıcı: $YENI_KULLANICI"
if ! id "$YENI_KULLANICI" &>/dev/null; then
  useradd -m -s /bin/bash "$YENI_KULLANICI"
fi
usermod -aG sudo "$YENI_KULLANICI"   # zaten üyeyse değişiklik olmaz

# 3) SSH anahtarı (aynı satır ikinci kez eklenmez)
EV=$(getent passwd "$YENI_KULLANICI" | cut -d: -f6)
AK="$EV/.ssh/authorized_keys"
install -d -m 700 -o "$YENI_KULLANICI" -g "$YENI_KULLANICI" "$EV/.ssh"
touch "$AK"
if [[ -n "$SSH_ACIK_ANAHTAR" ]]; then
  grep -qxF "$SSH_ACIK_ANAHTAR" "$AK" || echo "$SSH_ACIK_ANAHTAR" >> "$AK"
elif [[ -s /root/.ssh/authorized_keys ]]; then
  while IFS= read -r satir; do
    [[ -z "$satir" || "$satir" == \#* ]] && continue
    # "command=" kısıtlı satırlar (ör. "root yerine X ile girin") kopyalanmaz
    if [[ "$satir" == *command=* ]]; then
      uyar "command= içeren satır atlandı, anahtarı elle ekleyin"; continue
    fi
    grep -qxF "$satir" "$AK" || echo "$satir" >> "$AK"
  done < /root/.ssh/authorized_keys
fi
chown "$YENI_KULLANICI:$YENI_KULLANICI" "$AK"
chmod 600 "$AK"
ANAHTAR_SAYISI=$(grep -cE '^(ssh-|ecdsa-|sk-)' "$AK" || true)

# sudo için parola gerekir; kullanıcının parolası yoksa sor
if passwd -S "$YENI_KULLANICI" | awk '{print $2}' | grep -qE '^(L|NP)$'; then
  if [[ -t 0 ]]; then
    echo "sudo için $YENI_KULLANICI parolasını belirleyin:"
    passwd "$YENI_KULLANICI"
  else
    uyar "Parola yok. Betikten sonra çalıştırın: passwd $YENI_KULLANICI"
  fi
fi

# 4) UFW: önce izin, sonra etkinleştirme
log "UFW yapılandırılıyor"
ufw default deny incoming  >/dev/null
ufw default allow outgoing >/dev/null
if [[ -n "$YONETIM_AGI" ]]; then
  ufw allow from "$YONETIM_AGI" to any port "$SSH_PORT" proto tcp
else
  ufw limit "$SSH_PORT/tcp"
fi
# Port değişiyorsa mevcut oturum ve geçiş için 22 geçici olarak açık kalır
if [[ "$SSH_PORT" != "22" ]]; then
  ufw limit 22/tcp
fi
for p in $EK_PORTLAR; do ufw allow "$p"; done
ufw --force enable
ufw status verbose

# 5) fail2ban: yalnız sshd hapsi, systemd günlüğünden okur
log "fail2ban yapılandırılıyor"
cat > /etc/fail2ban/jail.d/sshd-yerel.local <<EOF
[sshd]
enabled  = true
port     = $SSH_PORT
backend  = systemd
maxretry = 5
findtime = 10m
bantime  = 1h
ignoreip = 127.0.0.1/8 ::1 $YONETIM_AGI
EOF
systemctl enable fail2ban >/dev/null
systemctl restart fail2ban

# 6) Otomatik güvenlik güncellemeleri
log "unattended-upgrades yapılandırılıyor"
cat > /etc/apt/apt.conf.d/20auto-upgrades <<'EOF'
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
EOF
cat > /etc/apt/apt.conf.d/52yerel-unattended <<'EOF'
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Automatic-Reboot "false";
EOF
systemctl enable --now unattended-upgrades >/dev/null

# 7) SSH sertleştirme: en son, yalnız anahtar varsa
SSHD_EK=/etc/ssh/sshd_config.d/00-sertlestirme.conf
if [[ "$ANAHTAR_SAYISI" -eq 0 ]]; then
  uyar "$AK içinde anahtar yok. SSH ayarlarına DOKUNULMADI."
  uyar "Anahtar ekleyip betiği yeniden çalıştırın."
  exit 0
fi
log "SSH sertleştiriliyor ($ANAHTAR_SAYISI anahtar bulundu)"
[[ -f "$SSHD_EK" ]] && cp -p "$SSHD_EK" "$SSHD_EK.onceki"
cat > "$SSHD_EK" <<EOF
# ilk-kurulum.sh tarafından yazıldı. 00- öneki, 50-cloud-init.conf'tan önce okunmasını sağlar.
Port $SSH_PORT
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
X11Forwarding no
EOF
chmod 644 "$SSHD_EK"
install -d -m 755 /run/sshd    # 24.04'te sshd -t bu dizini ister

if sshd -t; then
  systemctl daemon-reload
  # 24.04 socket etkinleştirme kullanır; port değişikliği soket üzerinden uygulanır
  if systemctl is-enabled --quiet ssh.socket 2>/dev/null; then
    systemctl restart ssh.socket
  fi
  systemctl reload ssh 2>/dev/null || systemctl restart ssh
  log "Tamam. MEVCUT OTURUMU KAPATMADAN yeni bir terminalden giriş deneyin:"
  echo "    ssh -p $SSH_PORT $YENI_KULLANICI@192.0.2.10"
else
  uyar "sshd -t hata verdi, değişiklik geri alınıyor"
  if [[ -f "$SSHD_EK.onceki" ]]; then mv "$SSHD_EK.onceki" "$SSHD_EK"; else rm -f "$SSHD_EK"; fi
  exit 1
fi

Betiği sunucuya kopyalayıp çalıştırmak için kendi bilgisayarınızdan şu komutları kullanın. 192.0.2.10 yerine sunucunuzun adresini yazın:

bash
# Betiği sunucuya gönder ve root olarak çalıştır
scp ilk-kurulum.sh root@192.0.2.10:/root/
ssh root@192.0.2.10 'bash /root/ilk-kurulum.sh'
# Parola sorulması için etkileşimli terminal gerekir; gerekirse -t ekleyin:
ssh -t root@192.0.2.10 'bash /root/ilk-kurulum.sh'

Sudo kullanıcısı ve SSH anahtarı adımı

Betik adduser yerine useradd -m -s /bin/bash kullanır, çünkü etkileşimsiz çalışır ve Ubuntu ile Debian'da aynı davranır. Kullanıcı zaten varsa yeniden oluşturulmaz, yalnız sudo grubuna üyeliği garanti edilir.

Yeni kullanıcının parolası kilitli başlar. Bu SSH için sorun değildir, çünkü giriş anahtarla yapılacak. Ancak sudo komutu varsayılan olarak kullanıcının kendi parolasını sorar. Bu yüzden betik, terminal etkileşimliyse parola belirlemenizi ister. Parolasız sudo (NOPASSWD) kolay görünür ama anahtarınız ele geçirilirse saldırgana doğrudan root verir; önerilmez.

Anahtar ekleme grep -qxF ile yapılır: satır birebir mevcutsa tekrar yazılmaz. Bazı imajlarda root'un authorized_keys dosyası command="echo Please login as..." gibi bir kısıtlamayla başlar. Bu satırı olduğu gibi kopyalamak yeni kullanıcının girişini de bozar; betik bu satırları atlar ve uyarı verir.

sshd_config sertleştirme: root girişi, parola girişi ve port

Ana /etc/ssh/sshd_config dosyasına dokunmak yerine sshd_config.d altına ayrı bir dosya yazılır. Bunun iki faydası var: paket güncellemelerinde çakışma sorusu çıkmaz ve geri almak tek dosyayı kaldırmak kadar kolaydır.

Dosya adındaki 00- öneki bilinçli seçildi. OpenSSH bir ayar için ilk okuduğu değeri kullanır. Ubuntu bulut imajlarında sıkça bulunan 50-cloud-init.conf dosyası PasswordAuthentication yes içerebilir. Sizin dosyanız alfabetik olarak önce okunduğu için sizin değeriniz geçerli olur.

Ayarların anlamı kısaca:

  • PermitRootLogin no: root ile doğrudan SSH girişi kapanır. Yönetim, kendi kullanıcınız ve sudo ile yapılır; günlüklerde kimin ne yaptığı görünür.
  • PasswordAuthentication no ve KbdInteractiveAuthentication no: parola denemesiyle giriş tamamen kapanır. Kaba kuvvet saldırılarının hedefi ortadan kalkar.
  • MaxAuthTries 3, LoginGraceTime 30: bağlantı başına deneme sayısını ve kimlik doğrulama süresini kısaltır.
  • Port: portu değiştirmek güvenlik sağlamaz ama günlüklerdeki otomatik tarama gürültüsünü azaltır. Değiştirmeye karar verirseniz sağlayıcı panelindeki güvenlik grubunu unutmayın.

Ubuntu 24.04'te SSH, systemd soket etkinleştirmesiyle çalışır. Port değişikliği yalnız systemctl reload ssh ile uygulanmaz; systemctl daemon-reload ardından systemctl restart ssh.socket gerekir. Betik bunu otomatik yapar. Ayrıntı için OpenSSH sunucu belgesine bakabilirsiniz.

Betiğin en önemli güvenlik kilidi şudur: kullanıcının authorized_keys dosyasında en az bir geçerli anahtar yoksa SSH ayarlarına hiç dokunulmaz. Böylece root ve parola girişi, yerine çalışan bir giriş yolu konmadan kapanmaz. Ayrıca sshd -t yapılandırmayı doğrulamadan servis yeniden yüklenmez; hata varsa değişiklik geri alınır.

UFW ile varsayılan reddet ve yalnız gerekli portlar

Model basit: gelen her şey reddedilir, giden her şey serbesttir, yalnız açıkça izin verilen portlar açılır. Betikteki sıra, kuralları yazıp en son ufw --force enable çalıştırmaktır. UFW etkinleştirildiğinde SSH izni zaten tanımlı olduğu için mevcut oturum kopmaz.

İki seçenek sunulur:

  • YONETIM_AGI boşsa SSH her yerden açıktır ama ufw limit ile korunur. Bu kural aynı IP'den 30 saniyede 6 ya da daha fazla bağlantı denemesini engeller.
  • Sabit bir ofis IP'niz ya da VPN ağınız varsa YONETIM_AGI değişkenine girin. Bu durumda SSH yalnız o ağa açılır. Dikkat: betiği çalıştırdığınız bağlantı bu ağın dışından geliyorsa, mevcut oturum açık kalsa bile yeni oturum açamazsınız.

SSH portunu değiştirdiyseniz betik 22'yi de geçici olarak açık bırakır. Yeni porttan girişi doğruladıktan sonra eski kuralı silin:

bash
# Yeni porttan giriş doğrulandıktan sonra eski 22 kuralını kaldır
sudo ufw delete limit 22/tcp
sudo ufw status numbered

Web sunucusu kurmayacaksanız EK_PORTLAR değişkenini boş bırakın. Açık her port, izlemeniz gereken bir servis demektir.

fail2ban ve unattended-upgrades ile otomatik koruma

UFW hangi portun açık olduğunu belirler; fail2ban ise açık porta gelen kötü niyetli denemeleri günlüklerden yakalayıp IP'yi geçici olarak engeller. Parola girişi kapalı olsa bile fail2ban, aynı IP'den tekrarlanan başarısız anahtar denemelerini keserek günlükleri temiz tutar.

Betik ayarı /etc/fail2ban/jail.d/sshd-yerel.local dosyasına yazar. .local uzantılı dosyalar paketle gelen .conf dosyalarının üzerine yazar ve güncellemelerde ezilmez. backend = systemd ile fail2ban günlükleri doğrudan journal'dan okur; bunun için python3-systemd paketi kurulur. Değerler: 10 dakika içinde 5 başarısız denemede 1 saat engel. Yönetim ağınız ignoreip listesine eklenir, böylece kendinizi yanlışlıkla engellemezsiniz.

Otomatik güncellemeler için Ubuntu'nun standart aracı unattended-upgrades kullanılır. 20auto-upgrades dosyası paket listesinin her gün yenilenmesini ve güvenlik güncellemelerinin uygulanmasını açar. Varsayılan yapılandırma yalnız güvenlik deposundaki paketleri kurar; bu, uygulama sürümlerinin beklenmedik biçimde değişmesini önler. Ayrıntılar Ubuntu otomatik güncelleme belgesinde yer alır.

Otomatik yeniden başlatma kapalı bırakıldı (Automatic-Reboot "false"). Çekirdek güncellemesinden sonra /var/run/reboot-required dosyası oluşur ve sizin planladığınız bir bakım saatinde yeniden başlatmanız gerekir. Tek sunuculu ve kesinti tolere edebilen bir yapıdaysanız 52yerel-unattended dosyasında Automatic-Reboot "true" ve Automatic-Reboot-Time "03:30" satırlarını kullanabilirsiniz.

Doğrulama: her adımı tek tek kontrol edin

Mevcut oturumu kapatmadan, yeni bir terminalden aşağıdaki kontrolleri yapın.

bash
# 1) Yeni kullanıcıyla anahtar girişi (kendi bilgisayarınızdan)
ssh -p 22 ORNEK_KULLANICI@192.0.2.10

# 2) Root ve parola girişinin reddedildiğini görün (kendi bilgisayarınızdan)
ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password root@192.0.2.10
# beklenen: Permission denied (publickey).

# 3) Sunucuda etkin SSH ayarları
sudo sshd -T | grep -E '^(port|permitrootlogin|passwordauthentication|kbdinteractiveauthentication) '
# beklenen:
# port 22
# permitrootlogin no
# passwordauthentication no
# kbdinteractiveauthentication no

# 4) sudo çalışıyor mu
sudo -v && echo "sudo tamam"

# 5) UFW durumu
sudo ufw status verbose
# beklenen satırlar: "Status: active" ve
# "Default: deny (incoming), allow (outgoing), deny (routed)"

# 6) fail2ban sshd hapsi
sudo fail2ban-client status sshd
# beklenen: "Status for the jail: sshd" ve "Currently banned:" satırları

# 7) Otomatik güncelleme ayarı ve deneme çalıştırması
apt-config dump APT::Periodic::Unattended-Upgrade
# beklenen: APT::Periodic::Unattended-Upgrade "1";
sudo unattended-upgrade --dry-run --debug 2>&1 | tail -n 5

Birinci adım başarılıysa ve sudo -v parolanızı kabul ediyorsa ilk oturumu kapatabilirsiniz. İkinci adımda parola sorusu geliyorsa sshd -T çıktısını kontrol edin; büyük olasılıkla başka bir dosya önce okunuyordur.

Geri alma

Bir adımı geri almanız gerekirse aşağıdaki komutlar yalnız betiğin oluşturduğu dosyaları kaldırır. Ubuntu 24.04 ve Debian 12 için hazırlandı. SSH ayarını geri almadan önce konsol erişiminizin hazır olduğundan emin olun.

bash
# SSH ayarını geri al (paket varsayılanlarına döner)
sudo rm -f /etc/ssh/sshd_config.d/00-sertlestirme.conf
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket 2>/dev/null || true
sudo systemctl reload ssh

# UFW'yi kapat (kurallar silinmez, yeniden açılabilir)
sudo ufw disable

# fail2ban yerel hapsini kaldır
sudo rm -f /etc/fail2ban/jail.d/sshd-yerel.local
sudo systemctl restart fail2ban

# Otomatik güncellemeyi kapat
sudo sed -i 's/"1"/"0"/' /etc/apt/apt.conf.d/20auto-upgrades

Betiği tekrar çalıştırılabilir yazmak ve kendini kilitlememek

Idempotent betik, kaç kez çalışırsa çalışsın aynı son durumu üreten betiktir. Bu betikte bunu sağlayan teknikler şunlar:

  • Önce kontrol, sonra eylem: id ile kullanıcı varlığı, grep -qxF ile anahtar satırı kontrol edilir.
  • Dosyayı baştan yazmak: Ayar dosyaları >> ile eklenmez, > ile bütün olarak yazılır. İkinci çalıştırmada içerik aynı kalır.
  • Kendiliğinden idempotent komutlar: usermod -aG, ufw allow ve ufw default aynı kuralı ikinci kez eklemez; UFW bu durumda "Skipping adding existing rule" der.
  • Doğrulamadan uygulamamak: sshd -t başarısızsa önceki dosya geri konur.
  • Güvenli varsayılan: Anahtar yoksa SSH sertleştirmesi atlanır ve betik uyarıyla çıkar.

Bu yapı sayesinde yeni bir anahtar eklemek ya da portu değiştirmek için değişkeni güncelleyip betiği yeniden çalıştırmanız yeterlidir. Aynı betiği birden fazla sunucuda kullanabilir, sürüm kontrolünde saklayabilirsiniz.

Sık yapılan hatalar

Oturumu doğrulamadan kapatmak. En yaygın kilitlenme nedeni budur. Yeni terminalden giriş ve sudo -v başarılı olmadan ilk oturumu kapatmayın.

Sağlayıcı güvenlik grubunu unutmak. UFW'de yeni portu açtınız ama panelde ağ düzeyindeki güvenlik duvarı yalnız 22'ye izin veriyorsa bağlantı zaman aşımına düşer. Belirti: "Connection refused" değil, cevapsız bekleme. İki katmanı birlikte düşünün.

Yanlış anahtarı eklemek. id_ed25519 (özel) yerine id_ed25519.pub (açık) içeriği eklenmelidir. Açık anahtar ssh-ed25519 AAAA ile başlar ve tek satırdır.

Dosya izinleri. ~/.ssh 700, authorized_keys 600 ve sahibi kullanıcının kendisi olmalıdır. Aksi halde sshd anahtarı sessizce reddeder; nedeni sudo journalctl -u ssh -n 50 çıktısında görünür.

Docker sonrası UFW'ye güvenmek. Docker ile yayınlanan portlar UFW kurallarına takılmadan dışarı açılabilir. ufw status temiz görünse bile portu dışarıdan nc -zv 192.0.2.10 3306 gibi bir komutla test edin.

Yedeği sona bırakmak. Sertleştirme saldırı yüzeyini daraltır ama veri kaybına karşı koruma sağlamaz. Sunucu ayağa kalktıktan sonra restic ile şifreli S3 yedeği kurmak bir sonraki mantıklı adımdır.

Sık sorulan sorular

Betiği root yerine sudo yetkili bir kullanıcıyla çalıştırabilir miyim?

Evet, sudo bash ilk-kurulum.sh şeklinde çalıştırabilirsiniz; betik yalnız etkin kullanıcı kimliğinin root olmasını kontrol eder. Teslimde size zaten ubuntu gibi bir kullanıcı verildiyse YENI_KULLANICI olarak o adı da yazabilirsiniz; kullanıcı yeniden oluşturulmaz, yalnız ayarlar uygulanır.

SSH portunu değiştirmek gerekli mi?

Zorunlu değil. Asıl korumayı parola girişini kapatmak ve anahtar kullanmak sağlar. Port değişikliği otomatik taramaların günlüklerde yarattığı gürültüyü azaltır. Değiştirirseniz hem UFW'de hem sağlayıcı panelinde yeni portu açın ve doğruladıktan sonra 22 kuralını silin.

fail2ban ile ufw limit aynı işi yapmıyor mu?

Kısmen örtüşürler. ufw limit yalnız bağlantı sıklığına bakar ve kısa süreli engel uygular. fail2ban günlükteki başarısız kimlik doğrulama denemelerini sayar ve IP'yi daha uzun süre engeller. Birlikte kullanmak çakışma yaratmaz.

Konsol erişimi de kapanırsa ne yaparım?

Panel konsolu SSH'tan bağımsızdır; UFW veya sshd ayarları onu etkilemez. Konsoldan kullanıcı parolanızla girip geri alma bölümündeki komutları uygulayabilirsiniz. Parolayı da bilmiyorsanız kurtarma modundan root parolası sıfırlamak gerekir.

Otomatik güncellemeler servisi bozar mı?

Varsayılan ayar yalnız güvenlik deposundaki paketleri kurar, büyük sürüm geçişi yapmaz. Yine de kritik bir uygulama çalıştırıyorsanız /var/log/unattended-upgrades/ altındaki günlükleri düzenli kontrol edin ve sorun çıkaran paketi Unattended-Upgrade::Package-Blacklist ile hariç tutun.

Sonuç

Yeni bir linux sunucu için ilk kurulum, ezberlenecek bir liste değil, tekrar çalıştırılabilir bir betik olmalı. Bu betik sudo kullanıcısını açar, anahtarı ekler, UFW ve fail2ban ile dış yüzeyi daraltır, güvenlik güncellemelerini otomatiğe bağlar ve SSH'ı en son, yalnız çalışan bir anahtar varsa sıkılaştırır. Kendi sunucunuz yoksa aynı adımları İstanbul ya da Strasbourg lokasyonlu bir bulut sunucu üzerinde, panel konsolunu yedek erişim olarak kullanarak uygulayabilirsiniz. Doğrulama komutlarını her çalıştırmadan sonra yineleyin ve yedekleme kurulumunu bir sonraki adım olarak planlayın.

  • #linux sunucu
  • #ubuntu 24.04
  • #ssh
  • #ufw
  • #fail2ban
  • #unattended-upgrades
  • #bash betiği
  • #sunucu sertleştirme

Yazar

Kurucu, sunucu.com.tr · Bulut altyapısı ve yapay zeka otomasyonları

sunucu.com.tr ve Sunucu UK'in kurucusu. Bulut altyapısı, sanallaştırma ve sunucu yönetimi üzerine çalışıyor; şirketlerin iş yazılımlarını, web sitelerini ve yapay zeka iş yüklerini güvenli sunuculara taşıyor. Blogdaki rehberler sahada karşılaşılan kurulum, güvenlik ve taşıma işlerinden derlenir; yazılar yapay zeka desteğiyle hazırlanır ve kaynaklarla doğrulanır.

Tüm yazılarıProfil