VPS güvenliğine sıfırdan başlama: SSH anahtarları, güvenlik duvarı ve Fail2ban
Ubuntu kurulduktan hemen sonra yeni bir VPS güvenli kabul edilmemelidir. Erişim yapılandırılmadan önce sunucu tarayıcılara görünür durumdadır: SSH parolalarını dener, açık kontrol panellerini arar ve yaygın güvenlik açıklarını kontrol ederler. Bu rehberde VPS'i sıfırdan güvenli hâle getirmenin temel adımlarını ele alacağız: ayrı bir kullanıcı oluşturmak, SSH anahtarıyla kimlik doğrulamayı yapılandırmak, UFW ile ağ portlarını sınırlamak ve Fail2ban eklemek. Komutlar sudo yetkisine sahip bir kullanıcı tarafından çalıştırıldığında tüm adımlar Ubuntu 22.04 ve 24.04 ile uyumludur.
Başlamadan önce: portların listesini çıkarın
“Her ihtimale karşı” port açmayın. Tipik bir web sunucusunun ihtiyaç duyduğu portlar şunlardır:
22/tcp— SSH; ideal olarak IP ile sınırlayın veya yalnızca ek önlem olarak başka bir porta taşıyın;80/tcp— HTTP; genellikle HTTPS'e yönlendirme ve sertifika doğrulaması için gerekir;443/tcp— HTTPS.
Nginx veya Caddy önde çalışıyorsa 3000, 8080 veya 9000 gibi bir uygulama portu internetten erişilebilir olmamalıdır. Uygulamayı 127.0.0.1 adresine bağlayın veya portuna yalnızca dahili ağdan izin verin. Önce sunucuda hangi hizmetlerin dinlediğini öğrenin:
sudo ss -tulpnDocker'ı kurduktan sonra iptables kurallarını ayrıca kontrol edin: -p 3000:3000 yayımlama işlemi bir portu beklenen yapılandırmanın dışında açabilir. Herkese açık bir hizmet için HTTPS proxy kullanmak ve dahili portu gizli tutmak daha güvenlidir.
1. adım. Sistemi güncelleyin ve yönetici oluşturun
Size verilen kimlik bilgileriyle VPS'e bağlanın ve güncellemeleri kurun:
sudo apt update
sudo apt full-upgrade -y
sudo apt install -y ufw fail2ban unattended-upgradesKişisel bir kullanıcı oluşturun. alex yerine kendi adınızı yazın:
sudo adduser alex
sudo usermod -aG sudo alexYeni hesabı ayrı bir terminal penceresinde test edene kadar ilk erişimi kaldırmayın. Bu önemli bir kuraldır: mevcut oturum hâlâ açıkken SSH hatasını düzeltmek daha kolaydır.
2. adım. SSH anahtarı oluşturun ve sunucuya yükleyin
Linux, macOS veya Windows PowerShell kullanan bilgisayarınızda şunu çalıştırın:
ssh-keygen -t ed25519 -C "alex@my-computer"Anahtarı varsayılan dosyaya kaydetmek için Enter'a basın, ardından bir parola belirleyin. Özel anahtarı asla sohbette göndermeyin, bir depoya koymayın veya VPS'e kopyalamayın. Sunucuya yalnızca .pub uzantılı dosya aktarılmalıdır:
ssh-copy-id alex@SERVER_IPssh-copy-id kullanılabilir değilse PowerShell'de Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub ile genel anahtarı görüntüleyin, ardından sunucuya ekleyin:
sudo install -d -m 700 -o alex -g alex /home/alex/.ssh
sudo nano /home/alex/.ssh/authorized_keys
sudo chown alex:alex /home/alex/.ssh/authorized_keys
sudo chmod 600 /home/alex/.ssh/authorized_keysAnahtarı tek satır hâlinde yapıştırın ve parolaları devre dışı bırakmadan önce oturum açmayı test edin:
ssh alex@SERVER_IP
sudo whoamiSon komutun beklenen sonucu root değeridir. SSH istemcisi anahtarı bulamazsa açıkça belirtin: ssh -i ~/.ssh/id_ed25519 alex@SERVER_IP.
3. adım. Root ile oturum açmayı ve parola kimlik doğrulamasını devre dışı bırakın
SSH yapılandırmasını yedekleyin:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_configDosyanın şu parametreleri içerdiğinden emin olun:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
MaxAuthTries 3Ubuntu'da ayarlar /etc/ssh/sshd_config.d/*.conf içinde bulunabilir; bu nedenle etkin yapılandırmayı kontrol edin:
sudo sshd -t
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries'sshd -t hata bildirirse söz dizimini düzeltmeden hizmeti yeniden başlatmayın. Kontrol başarılı olduktan sonra ayarları uygulayın:
sudo systemctl reload sshEski SSH bağlantısını açık tutun ve yeni bir pencerede anahtar tabanlı oturumu test edin. Doğrulanmış bir anahtar olmadan parolaları devre dışı bırakmak, sunucuya erişimi kaybetmenin en yaygın yoludur.
4. adım. SSH'yi engellemeden UFW'yi yapılandırın
UFW, Linux ağ kurallarının kullanışlı bir sarmalayıcısıdır. Önce güvenli varsayılanları belirleyin, ardından SSH ve web portlarına izin verin:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enableEtkinleştirmeyi yalnızca SSH kuralı eklendikten sonra onaylayın. Sonucu gözden geçirin:
sudo ufw status verbose
sudo ufw status numberedKalıcı bir ofis IP'si için SSH'yi bu adresle sınırlayabilirsiniz:
sudo ufw delete allow 22/tcp
sudo ufw allow from YOUR.PUBLIC.IP to any port 22 proto tcp comment 'SSH office'Bu seçeneği yalnızca sabit bir IP'niz ve sağlayıcının konsoluna erişiminiz varsa kullanın: adres değişirse kendinizi dışarıda bırakabilirsiniz.
Uygulama portu geçici olarak nasıl açılır?
Bir hizmeti doğrudan kontrol etmeniz gerekiyorsa, kaynak adresi sınırlı bir kural oluşturun:
sudo ufw allow from YOUR.PUBLIC.IP to any port 8080 proto tcpTestten sonra ufw status numbered komutunda gösterilen numarayı kullanarak kuralı silin:
sudo ufw delete RULE_NUMBERsudo ufw allow 1:65535/tcp kullanmayın: böyle bir kural güvenlik duvarını yalnızca formaliteye dönüştürür.
5. adım. SSH için Fail2ban'ı etkinleştirin
Fail2ban günlükleri analiz eder ve birkaç başarısız oturum açma denemesinden sonra geçici bir engelleme kuralı ekler. SSH anahtarlarının veya güvenlik duvarının yerini tutmaz, ancak otomatik kaba kuvvet denemelerinden kaynaklanan gürültüyü azaltır.
Paket güncellemelerinin ayarlarınızı ezmemesi için yerel bir yapılandırma oluşturun:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local[DEFAULT] bölümünde makul değerler belirleyin:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
banaction = ufw
[sshd]
enabled = true
port = 22Hizmeti başlatın ve jail'i kontrol edin:
sudo systemctl enable --now fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshdsshd çıktısında başarısız denemelerin ve engellenen adreslerin sayısını kontrol edin. Kendi IP'nizi ban listesine eklemeyin. Kalıcı bir istisna için [DEFAULT] içinde ignoreip = 127.0.0.1/8 YOUR.PUBLIC.IP kullanın.
6. adım. Otomatik güncellemeleri etkinleştirin
Otomatik güncellemeler güvenlik paketleri için yararlıdır, ancak kernel yeniden başlatmaları yine de yönetilmelidir:
sudo dpkg-reconfigure -plow unattended-upgrades
sudo systemctl status unattended-upgradesHaftada bir yeniden başlatma gerekip gerekmediğini kontrol edin:
test -f /var/run/reboot-required && echo 'Требуется перезапуск'Manuel olarak yeniden başlatmadan önce çalışan bir anahtarınız ve VPS konsoluna erişiminiz olduğundan emin olun. Yeniden başlatmadan sonra uygulama hizmetlerini, Nginx'i, UFW'yi ve Fail2ban'ı kontrol edin.
7. adım. Sonucu dışarıdan kontrol edin
Koruma durumunu yalnızca yapılandırmayı okuyarak değil, başka bir bilgisayardan da kontrol edin:
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no alex@SERVER_IPKomut bir erişim reddiyle sonuçlanmalıdır. Çalışan anahtar tabanlı oturumu ayrıca test edin:
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 alex@SERVER_IPVPS üzerinde dinleme adreslerini ve kuralları kontrol edin:
sudo ss -lntup
sudo ufw status numbered
sudo fail2ban-client status sshdDoğrudan erişim için tasarlanmamışsa uygulama portu 127.0.0.1 adresini dinlemelidir. Harici bir makineden nmap SERVER_IP kullanabilirsiniz, ancak yalnızca kendi sunucunuzu tarayın: başkasının altyapısını izinsiz kontrol etmek yasalara ve sağlayıcı kurallarına aykırı olabilir.
Yedekler ve kurtarma
SSH koruması silinen verilere, yöneticinin hatasına veya güvenliği ele geçirilmiş bir uygulamaya karşı koruma sağlamaz. Veritabanı, yapılandırma ve kullanıcı dosyalarının kopyalarını VPS'ten ayrı yerde saklayın. Minimum kurulum günlük yedek, önceki günlerden birkaç sürüm ve periyodik kurtarma testlerinden oluşur.
Parolaları veya token'ları düz metin betiklere yazmayın. Bir sır açığa çıkarsa hemen iptal edin ve yenisini oluşturun.
Güvenli bir proje için VPS nasıl seçilir?
Güvenlik, altyapı üzerindeki kontrolle başlar. VPS'te işletim sistemini, güvenlik duvarı kurallarını, erişim yöntemini, yedekleri ve hizmetlerin yerleşimini kendiniz seçebilirsiniz. Küçük bir web sitesi veya API için sanal çekirdek fazlasından çok kararlı ağ, SSD depolama ve kurtarma konsolu önemlidir.
tropic.host üzerinde bir VPS'te proje başlatırken herkese açık giriş noktalarını önceden belirleyin: çoğu durumda SSH, HTTP ve HTTPS yeterlidir. Veritabanını ve kontrol panellerini dahili ağda tutun. Proje büyüdükçe uygulama, veritabanı ve izleme için ayrı VPS örnekleri kullanmak hata alanlarını izole etmeye yardımcı olur.
Yaygın hatalar
- Anahtar tabanlı oturumu test etmeden parolaları devre dışı bırakmak. Mevcut oturumu açık tutun ve yeni bir girişi ayrı olarak test edin.
- Güvenilir adreslerle sınırlandırılabileceği hâlde
22/tcpportunu tüm dünyaya açık bırakmak. - Docker portlarını doğrudan yayınlamak. Önce Docker ve UFW kurallarını kontrol edin.
- Fail2ban'ı kurup günlükleri bir daha hiç kontrol etmemek. Değişikliklerden sonra
journalctl -u sshve jail durumunu gözden geçirin.
Sonuç
Temel VPS koruması, adımlar doğru sırayla uygulandığında fazla zaman almaz: ayrı bir kullanıcı oluşturun, SSH anahtarı kurun, erişimi doğrulayın, root oturumunu ve parolaları devre dışı bırakın, UFW'yi etkinleştirin, Fail2ban'ı yapılandırın ve otomatik güncellemeleri ayarlayın. Ardından yedekler, günlük kaydı ve harici izleme ekleyin.
Bu adımlar sunucuyu dokunulmaz yapmaz, ancak en yaygın ilk yapılandırma hatalarını ortadan kaldırır. Sonraki adım güvenlik profilini uygulamaya göre uyarlamaktır: bağımlılıkları güncelleyin, hizmet izinlerini kısıtlayın, yönetim panellerini koruyun ve açık portları düzenli olarak kontrol edin.
SSS
Varsayılan SSH portunu değiştirmem gerekir mi?
Gerekmez. Portu taşımak otomatik taramalardan gelen gürültüyü azaltır, ancak anahtarların, devre dışı parolaların, UFW'nin veya Fail2ban'ın yerini tutmaz. Portu değiştirirseniz güvenlik duvarı kuralını ve Fail2ban jail'indeki port parametresini güncelleyin.
UFW'yi yapılandırdıktan sonra erişimi kaybedersem ne yapmalıyım?
Sağlayıcının web veya kurtarma konsolunu kullanın, ardından SSH kuralını ve sshd yapılandırmasını kontrol edin. Yeni giriş doğrulanana kadar eski çalışan oturumu kapatmayın.
Fail2ban SSH'yi korumak için yeterli mi?
Hayır. Fail2ban daha önce gerçekleşmiş başarısız girişlere tepki verir. Temel koruma SSH anahtarları, devre dışı parola kimlik doğrulaması, en az kullanıcı izinleri ve sınırlı bir güvenlik duvarı olmalıdır.
SSH'ye yalnızca tek bir IP adresinden izin verebilir miyim?
Evet, adres sabitse bu mümkündür: o IP için UFW'de allow from kuralı ekleyin. IP değiştikten sonra bağlantı engelleneceği için sağlayıcı konsoluna veya başka bir yedek erişime önceden sahip olun.
VPS güvenliğini ne sıklıkta kontrol etmeliyim?
SSH, güvenlik duvarı veya Docker port yayınında yapılan her değişiklikten sonra port kontrolü çalıştırın ve oturum açmayı test edin. Rutin bakım olarak güncellemeleri ve günlükleri en az haftada bir gözden geçirin; yedek kurtarmayı da düzenli olarak test edin.
