Yeni Bir VPS'te İlk Bir Saat: Sunucu Güvenliği Kontrol Listem
Reklam
Yeni bir VPS ayağa kalktığında, bu kontrol listesinden geçene kadar üzerine hiçbir şey kurulmaz. Tüm işlemler bir saatten kısa sürer ve yeni bir IP adresi internette görünür görünmez saldıran otomatik tarayıcıların ve botların önünü anında keser. Bunların hiçbiri çok gizli veya egzotik yöntemler değil; asıl farkı yaratan o sıkıcı, temel güvenlik adımlarıdır.
1. Parola ile girişi hemen kapatın
İlk root girişinden sonra yaptığım ilk şey, sudo yetkisine sahip root olmayan bir kullanıcı oluşturmak, SSH açık anahtarımı kopyalamak ve anahtar tabanlı girişin çalıştığını test etmektir. Bunu başka hiçbir şeye dokunmadan önce, ikinci bir terminal ekranında yaparım.
adduser deploy
usermod -aG sudo deploy
rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy
Giriş yapabildiğimi doğruladıktan sonra, /etc/ssh/sshd_config dosyasında şu üç değişikliği yaparım:
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
systemctl restart sshd komutunu çalıştırın. Bu noktadan itibaren sunucuya girmenin tek yolu sizin makinenizde bulunan özel anahtardır (private key). Kaba kuvvet (brute-force) veya oltalama (phishing) ile ele geçirilebilecek bir parola kalmamıştır.
2. "Varsayılan olarak reddet" kuralıyla Firewall
Sıradaki adım UFW (veya duruma göre CSF). Güvenlik duvarını, gelen tüm trafiği varsayılan olarak reddedecek şekilde ayarlarım ve yalnızca sunucunun gerçekten ihtiyaç duyduğu portları açarım:
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
Veritabanı portları, kontrol panelleri veya admin arayüzleri yalnızca gerçekten ihtiyaç duyulduğunda açılır. Açıldıklarında ise tüm dünyaya açık bırakılmazlar, belirli bir IP adresine veya VPN aralığına sınırlandırılırlar. Böyle basit bir güvenlik duvarı kuralı bile, daha önce hakkında yazdığım CyberPanel solucanını anında durdurabilirdi. Orada güvenlik açığı barındıran admin portu her yerden erişilebiliyordu.
3. Gürültüyü kesmek için Fail2ban
SSH girişini sadece anahtara indirgeseniz bile, IP bloklarını tarayan botların başarısız giriş denemeleri yüzünden loglarınız dolup taşar. Fail2ban sizi hedefe yönelik, sofistike bir saldırıdan kurtarmaz ancak arka arkaya birkaç başarısız deneme yapan IP'leri engelleyerek o gereksiz "gürültüyü" inanılmaz derecede azaltır:
apt install fail2ban
systemctl enable --now fail2ban
Başlangıç için varsayılan sshd kuralı (jail) yeterlidir. Eğer sunucu Nginx veya WordPress giriş formu gibi dışarıya açık bir servis çalıştırıyorsa, onlar için de kurallar eklerim. Aynı IP'den gelen üst üste /wp-login.php istekleri de SSH taramaları kadar hızlı bir şekilde engellenir.
4. Otomatik güvenlik güncellemeleri
Kendi kendini yamamayan bir sunucu eninde sonunda bilinen bir açığı barındıran bir kernel veya OpenSSL sürümüyle çalışmaya mahkumdur. unattended-upgrades paketi güvenlik yamalarını otomatik olarak halleder.
apt install unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades
Gerçekten çalışıp çalışmadığını, sadece kurulu halde yatmadığını teyit etmek için arada sırada /var/log/unattended-upgrades/ dizinini kontrol ederim.
Çekilmesi gereken temel çizgi
Bunların hiçbiri ileri seviye değil. Olay da tam olarak bu. Sunucuya uygulama kodunun zerresi bile bulaşmadan önce her sunucunun oturması gereken temel çizgi budur. Bugüne kadar hacklendiğini gördüğüm sunucular neredeyse hiçbir zaman zero-day açıkları yüzünden düşmedi; varsayılan parolalar, dışarıya açık bırakılmış admin portları veya aylardır yama yüzü görmemiş kernel'lar yüzünden ele geçirildiler. Burada harcayacağınız bir saat, ileride yaşayacağınız felaket gibi bir günü engeller.
Reklam