VPS satın aldıktan sonra ilk 10 adım: güvenlik
Yeni bir sunucunun parolaları, genel bir IP adresi aldıktan birkaç dakika sonra tahmin edilmeye başlanır. Aşağıda en yaygın açıkları yaklaşık bir saatte kapatan on adım var: Ubuntu ve Debian komutları, AlmaLinux ve Rocky Linux farkları ve kendi sunucunuza erişimi kaybetmemek için atlanmaması gereken kontroller.
Az önce ödemesini yaptığınız sunucu şimdiden tüm internete görünür durumda. Botlar adresleri sırayla tarar ve popüler parolalarla root olarak SSH üzerinden girmeyi dener; bu yüzden yabancıların ilk denemeleri aynı saat içinde loglarda görünür. İyi haber şu ki toplu saldırılara karşı basit şeyler korur: yalnızca anahtarla giriş, gereksiz portların kapatılması ve güncellemeler. Aşağıdakilerin hepsi bir kez, yaklaşık bir saatte yapılır; en iyisi site ve veriler sunucuya taşınmadan önce.
Komutlar Ubuntu ve Debian içindir, AlmaLinux ve Rocky Linux farkları ayrıca belirtilmiştir. Komutları root olarak veya sudo ile çalıştırın.
Başlamadan önce: yedek bir giriş yolu
Sağlayıcınızın kontrol panelinde sunucu konsolunu bulun: VNC, KVM konsolu veya acil durum konsolu olarak adlandırılır ve sunucunun ekranını doğrudan tarayıcıda açar. SSH artık içeri almasa bile bu konsoldan giriş yapabilirsiniz. Giriş ayarlarını değiştirirken mevcut SSH oturumunuzu açık tutun ve her değişikliği ikinci bir pencerede test edin. Böylece bir yapılandırma hatası size sistemin yeniden kurulmasına değil, birkaç dakikaya mal olur.
1. Sistemi güncelleyin
Sağlayıcılar işletim sistemi şablonlarını önceden hazırlar ve kurulum anına kadar bu şablonlarda çoğu zaman uygulanmamış bir düzine güvenlik düzeltmesi birikmiş olur.
apt update && apt full-upgrade -y # Ubuntu, Debian
dnf upgrade -y # AlmaLinux, Rocky Linux
Çekirdek güncellendiyse sunucuyu yeniden başlatın. Ubuntu ve Debian'da bunu /var/run/reboot-required dosyası söyler: dosya varsa yeniden başlatma gerekir.
2. Ayrı bir kullanıcı oluşturun
Sürekli root olarak çalışmak hem rahatsız edici hem tehlikelidir: her yazım hatası tam yetkiyle çalışır ve root adını bütün botlar bilir. Kendi kullanıcınızı oluşturun ve ona sudo yetkisi verin:
adduser deploy
usermod -aG sudo deploy # Ubuntu, Debian
usermod -aG wheel deploy # AlmaLinux, Rocky Linux
AlmaLinux ve Rocky Linux'ta adduser komutu hiçbir şey sormaz, parola ayrıca belirlenir: passwd deploy. Kullanıcı adı olarak admin ve user gibi bariz adlar dışında istediğinizi seçebilirsiniz.
3. SSH anahtarıyla giriş yapın
Parolanın aksine bir anahtar deneme yanılma yoluyla tahmin edilemez. Anahtar çiftini sunucuda değil kendi bilgisayarınızda oluşturun ve açık kısmını sunucuya kopyalayın:
ssh-keygen -t ed25519 -C "laptop"
ssh-copy-id deploy@SUNUCU_IP
Windows 10 ve 11'de OpenSSH istemcisi yerleşik olarak gelir, ancak ssh-copy-id yoktur. Bu durumda .pub dosyasını açın ve içindeki satırı sunucuda /home/deploy/.ssh/authorized_keys dosyasına yapıştırın; .ssh klasörünün izinleri 700, dosyanın izinleri 600 olmalı ve sahibi kullanıcının kendisi olmalıdır. Birçok sağlayıcı anahtarı daha sipariş sırasında eklemenize izin verir; o zaman anahtar root kullanıcısında zaten bulunur.
Yeni bir pencerede girişin parolasız çalıştığını ve sudo komutunun kullanılabildiğini kontrol edin: ssh deploy@SUNUCU_IP, ardından sudo -v. Ancak bundan sonra bir sonraki adıma geçin.
4. Parolayla ve root olarak girişi yasaklayın
En kolayı ana dosyayı düzenlemek değil, kendi ayarlarınızı /etc/ssh/sshd_config.d/ içine ayrı bir dosya olarak koymaktır. Önemli bir ayrıntı: sshd her parametre için bulduğu ilk değeri alır ve bu klasördeki dosyaları alfabetik sırayla okur. Ubuntu'nun bulut imajlarında orada PasswordAuthentication yes satırı içeren bir 50-cloud-init.conf dosyası bulunabilir; bu yüzden kendi dosyanıza 50'den küçük bir numara verin, örneğin /etc/ssh/sshd_config.d/10-hardening.conf:
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
Sözdizimini ve sunucunun gerçekte hangi değerleri uygulayacağını kontrol edin, ardından ayarları yeniden yükleyin:
sshd -t && sshd -T | grep -Ei 'permitrootlogin|passwordauthentication'
systemctl reload ssh # Ubuntu, Debian
systemctl reload sshd # AlmaLinux, Rocky Linux
İkinci pencerede kendi kullanıcınızla anahtar kullanarak giriş yapana kadar eski oturumu kapatmayın. Root olarak giriş denemesi reddedilmelidir.
SSH portunu 22'den başka bir porta taşımak zorunlu değildir. Bu, otomatik giriş denemelerinin neredeyse tamamını loglardan temizler, ancak korumayı port numarası değil anahtar sağlar. Yine de değiştirecekseniz önce yeni portu güvenlik duvarında açın. Ubuntu 22.10 ve sonrasında SSH bir systemd soketi üzerinden başlatılır ve Port değiştirildikten sonra systemctl daemon-reload ve systemctl restart ssh.socket komutlarını çalıştırmanız gerekir; aksi takdirde sunucu 22'yi dinlemeye devam eder.
5. Güvenlik duvarını etkinleştirin
Kural basit: dışarıdan görünmesi gereken hizmetlere gelenler dışında tüm gelen bağlantılar yasaktır. Bir site için bunlar SSH, 80 ve 443'tür. Ubuntu'da ufw kullanışlıdır, Debian'da ise apt install ufw komutuyla kurulması gerekir:
ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw allow 80,443/tcp
ufw enable
ufw status verbose
Sıra önemlidir: önce SSH'ye izin verin, sonra etkinleştirin. AlmaLinux ve Rocky Linux'ta firewalld zaten çalışır ve SSH'ye varsayılan olarak izin verir; web portları şöyle açılır:
firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload
firewall-cmd --list-all
Sunucuda Docker olacaksa bir özelliğini hesaba katın: kendi iptables kurallarını kendisi yazar ve bir konteynerin yayımlanan portu, örneğin -p 3306:3306, ufw'de izin verilmemiş olsa bile internetten erişilebilir hâle gelir. Servis portlarını yalnızca yerel adrese yayımlayın: -p 127.0.0.1:3306:3306. Konteynerler için paketler Docker için VPS seçkisinde toplandı.
Birçok sağlayıcının panelinde sunucunun önünde ayrıca bir ağ güvenlik duvarı bulunur. Sistem güvenlik duvarının yerini tutmaz, ancak ikinci bir katman olarak faydalıdır. DDoS koruması, sağlayıcının ağ düzeyinde sunulan ayrı bir hizmettir; bu korumaya sahip paketler DDoS korumalı VPS seçkisinde.
6. fail2ban kurun
fail2ban logları okur ve girişte tekrar tekrar hata yapan adreslerin erişimini bir süreliğine engeller. Yalnızca anahtarla giriş yapılırken çoğunlukla logların yükünü hafifletir, ancak diğer hizmetler için de işe yarar: kontrol paneli, e-posta, sitenin giriş sayfası.
apt install fail2ban python3-systemd
Kendi ayarlarınızı güncellemede üzerine yazılacak olan jail.conf dosyasına değil, /etc/fail2ban/jail.local dosyasına yazın:
[sshd]
enabled = true
backend = systemd
maxretry = 5
bantime = 1h
backend = systemd satırı Debian 12 ve sonrasında gereklidir: orada varsayılan olarak /var/log/auth.log dosyası yoktur, giriş kayıtları journald'de tutulur ve bu satır olmadan fail2ban okuyacak bir şey bulamaz. Kendi ayarlarınız olmadan, 10 dakika içinde 5 başarısız denemeden sonra adresi 10 dakikalığına engeller. Düzenlemeden sonra systemctl restart fail2ban komutunu çalıştırın ve kontrol edin: fail2ban-client status sshd. AlmaLinux ve Rocky Linux'ta paket EPEL deposundan gelir: dnf install epel-release, ardından dnf install fail2ban ve systemctl enable --now fail2ban.
7. Otomatik güvenlik güncellemelerini etkinleştirin
Sunucu ele geçirmelerinin çoğu, düzeltmesi zaten yayımlanmış ama kurulmamış açıkları kullanır. Ubuntu'da unattended-upgrades paketi varsayılan olarak kurulu ve etkindir; bunu systemctl status unattended-upgrades komutuyla kontrol edin. Debian'da şöyle kurulur ve etkinleştirilir:
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
Varsayılan olarak yalnızca güvenlik güncellemelerini kurar. Çekirdek yeniden başlatma olmadan güncellenmez: ya 1. adımdaki işarete bakarak sunucuyu kendiniz yeniden başlatın ya da /etc/apt/apt.conf.d/50unattended-upgrades dosyasındaki Unattended-Upgrade::Automatic-Reboot ve Automatic-Reboot-Time parametreleriyle gece saatlerinde otomatik yeniden başlatmayı etkinleştirin.
AlmaLinux ve Rocky Linux'ta aynı işi dnf-automatic yapar. dnf install dnf-automatic ile paketi kurun, /etc/dnf/automatic.conf dosyasında upgrade_type = security ve apply_updates = yes değerlerini ayarlayın (bu olmadan güncellemeler yalnızca indirilir) ve zamanlayıcıyı etkinleştirin: systemctl enable --now dnf-automatic.timer.
8. Sunucunun neyi dinlediğini kontrol edin
Sağlayıcı şablonları ve kontrol panelleri bazen sizin istemediğiniz hizmetleri başlatır. Tüm açık portlara bakın:
ss -tulpn
0.0.0.0 veya [::] üzerinde dinleyen her şey, güvenlik duvarı izin veriyorsa dışarıdan erişilebilirdir. SSH ve web sunucusu dışında böyle hizmet olmamalıdır. MySQL, MariaDB, PostgreSQL ve Redis veritabanları yalnızca 127.0.0.1 adresini dinlemelidir: Debian ve Ubuntu paketlerinde varsayılan ayar budur, ancak Docker veya üçüncü taraf bir betikle kurulumdan sonra bunu kontrol etmekte fayda var. Gereksiz hizmetleri durdurun ve otomatik başlatmadan kaldırın: systemctl disable --now hizmet_adi. Sunucuya bir yabancının gözüyle başka bir bilgisayardan bakabilirsiniz: nmap -Pn SUNUCU_IP.
9. Saat, loglar ve izleme
timedatectl komutuyla saatin senkronize olduğunu kontrol edin (System clock synchronized: yes satırı). Yanlış saat, sertifika doğrulamasını, tek kullanımlık kodları ve log analizini bozar. Sunucuya kimin ne zaman girdiğini last -a | head ve journalctl -u ssh --since today gösterir (AlmaLinux'ta hizmetin adı sshd'dir).
Harici bir erişilebilirlik izleme hizmeti bağlayın: siteyi dakikada bir açan ve hata olduğunda size yazan çok sayıda ücretsiz hizmet var. Ayrıca diskin dolmasına karşı bir uyarı ayarlayın: dolan bir disk, sitenin ve veritabanının gece çalışmayı bırakmasının sık rastlanan bir nedenidir.
10. Bir geri dönüş noktası oluşturun ve sağlayıcı panelini koruyun
Sunucu ayarlandığında, böyle bir işlev varsa sağlayıcı panelinde diskin anlık görüntüsünü (snapshot) alın: temiz ve ayarlanmış sisteme dakikalar içinde geri dönebilirsiniz. Anlık görüntü yedeklerin yerini tutmaz, çünkü aynı sağlayıcıda saklanır. Sunucu dışında gerçek yedeklerin nasıl kurulacağı VPS yedekleri: stratejiler ve araçlar yazısında anlatılıyor.
Sağlayıcının müşteri paneline iki faktörlü girişi etkinleştirin. Panel üzerinden sunucu yeniden kurulabilir, root parolası sıfırlanabilir veya konsol açılabilir; panel çalınmış bir parolayla açılırsa korunan SSH hiçbir işe yaramaz. Özel SSH anahtarını yalnızca kendi cihazlarınızda saklayın ve bir parola ifadesiyle koruyun.
Yapılmaması gerekenler
- SELinux'u kapatmayın: AlmaLinux ve Rocky Linux'ta ilk erişim hatasında buna başvurmayın. Neredeyse her zaman site klasöründeki doğru etiket veya
setseboolile verilen tek bir izin yeterlidir. - Site klasörlerine 777 izni vermeyin. Dosyaların sahibi web sunucusunun kullanıcısı veya sitenin ayrı kullanıcısı olmalı, klasör izinleri 755, dosya izinleri 644 olmalıdır.
- Uygulamaları root olarak çalıştırmayın. Bir bota, siteye ve iş kuyruğuna
sudoyetkisi olmayan kendi kullanıcısı yeter. - Kontrol panelini ve phpMyAdmin'i standart adreslerde herkese açık bırakmayın. Bunlara yalnızca kendi IP'nizden veya bir SSH tüneli üzerinden girişe izin verin.
Yeni sunucu için işletim sistemini Ubuntu VPS, Debian VPS ve AlmaLinux VPS seçkileriyle seçmek kolaydır. Sunucu paylaşımlı hostingdeki bir site için alınıyorsa bir sonraki adım Bir site paylaşımlı hostingden VPS'e nasıl taşınır yazısında, paketin kendisini seçerken nelere bakılacağı ise VPS nasıl seçilir: gerçekten önemli olan 7 özellik yazısında anlatılıyor.