Yeni bir sunucu satın almak heyecan vericidir, ancak ilk andan itibaren sunucu güvenliğini düşünmezseniz, muhtemelen birkaç saat içinde günlüklerde başarısız giriş denemeleri ve saldırı girişimleri göreceksiniz. Otomatik internet tarayıcıları sürekli olarak açık 22. portu ve zayıf şifreleri arar. Bu makalede, sunucunuzun teslim edilmesinden sonraki ilk 60 dakika için (Debian/Ubuntu tabanlı dağıtımlar) pratik ve zamanlanmış bir kontrol listesi hazırladık. Amaç: sunucunuzun şifreyle ele geçirilememesi, gereksiz portların kapalı olması ve temel saldırı tespit araçlarının etkinleştirilmiş olması.
Adım 1: Sistemi Tamamen Güncelleyin (5 dakika)
Her şeyden önce, yazılım depolarını güncelleyin ve kurulu paketleri yükseltin. Yeni teslim edilen bir sunucu, son güvenlik güncellemelerinden birkaç hafta geride olabilir.
sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y
Yeni bir çekirdek kurulduysa, kontrol listesinin tamamını bitirdikten sonra sunucuyu bir kez yeniden başlatın. Düzenli güncellemeleri (örneğin haftada bir) takviminize ekleyin; bu, en basit ve en düşük maliyetli savunma katmanıdır.
Adım 2: Root Olmayan Kullanıcı Oluşturun ve sudo'yu Etkinleştirin (10 dakika)
Root hesabıyla çalışmak büyük bir risktir: herhangi bir yazım hatası veya kötü amaçlı bir komut dosyası, sisteme tam erişim sağlar. Bunun yerine, normal bir kullanıcı oluşturun ve ona sudo erişimi verin.
- Root kullanıcısıyla giriş yapın ve yeni bir kullanıcı oluşturun:
adduser deploy
usermod -aG sudo deploy
- Yeni kullanıcıyla çıkış yapıp tekrar giriş yapmayı test edin:
exit
ssh deploy@your_server_ip
- Bundan sonra her zaman
deployile giriş yapın ve yalnızca yönetim komutları içinsudokullanın.
Yaygın hata: Root erişimini kapatmadan önce yeni kullanıcıyla giriş yapmayı test etmeyi unutmak. Daha sonra SSH'yi root'u reddedecek şekilde yapılandırırsanız ve yeni kullanıcının da doğru bir şifresi yoksa, sunucudan kilitlenmiş olursunuz. Root erişimini kesmeden önce her zaman ikinci bir terminal açık tutun.
Adım 3: SSH'yi Genel Anahtarla Yapılandırın (15 dakika)
Şifreler, güçlü olsalar bile, brute-force saldırılarına karşı savunmasızdır. SSH anahtarı (genel/özel anahtar çifti) çok daha yüksek güvenlik sağlar ve şifresiz girişe olanak tanır.
Yerel Sistemde Anahtar Oluşturma
Kendi dizüstü bilgisayarınızda veya bilgisayarınızda (sunucuda değil) şu komutu çalıştırın:
ssh-keygen -t ed25519 -C "deploy@my-server"
ed25519 anahtarı RSA'dan daha güvenli ve daha hızlıdır. ed25519'u desteklemeyen eski bir işletim sisteminiz varsa, ssh-keygen -t rsa -b 4096 kullanın.
Anahtarı Sunucuya Kopyalama
ssh-copy-id deploy@your_server_ip
Bu komut, genel anahtarı deploy kullanıcısının ~/.ssh/authorized_keys dosyasına ekler. ssh-copy-id yoksa, manuel olarak:
cat ~/.ssh/id_ed25519.pub | ssh deploy@your_server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
sshd_config Dosyasında Sıkılaştırma
/etc/ssh/sshd_config dosyasını düzenleyin:
sudo nano /etc/ssh/sshd_config
Bu değerleri ayarlayın ve ardından servisi yeniden başlatın:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers deploy
sudo systemctl restart sshd
Önemli not: Yeniden başlatmadan önce ikinci bir SSH bağlantısı açın ve anahtarla girişin çalıştığından emin olun. Bir hata oluşursa, dosyayı düzeltebilmeniz için ilk bağlantıyı kapatmayın.
Adım 4: UFW Güvenlik Duvarını Yapılandırın (10 dakika)
Güvenlik duvarını etkinleştirin ve yalnızca gerekli portları açık bırakın. UFW (Uncomplicated Firewall), iptables üzerinde basit bir arayüzdür ve bu iş için mükemmeldir.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
Bir web sunucusu kuruyorsanız, HTTP ve HTTPS portlarını da açın:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Güvenlik duvarının durumunu kontrol edin:
sudo ufw status verbose
Çıktı şuna benzer olmalıdır:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
Yaygın hata: "Daha sonra gerekli olabilir" diye gereksiz portları açmak. Açık olan her port, saldırı yüzeyini büyütür. Yalnızca şu anda ihtiyacınız olan portları açın.
Adım 5: fail2ban Kurun ve Yapılandırın (15 dakika)
fail2ban, sistem günlüklerini izler ve birkaç kez giriş yapamayan IP'leri geçici olarak engeller. Bu araç brute-force saldırılarını durdurur.
sudo apt install fail2ban -y
Yerel yapılandırma dosyası oluşturun:
sudo nano /etc/fail2ban/jail.local
Önerilen içerik:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
Servisi etkinleştirin ve yeniden başlatın:
sudo systemctl enable fail2ban
sudo systemctl restart fail2ban
Engellenen IP'leri görmek için:
sudo fail2ban-client status sshd
Örnek çıktı:
Status for the jail: sshd
|- Filter
| |- Currently failed: 2
| |- Total failed: 47
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 3
|- Total banned: 12
`- Banned IP list: 185.220.101.34 91.240.118.87 45.155.205.233
bantime değerini 24h veya daha fazlasına yükseltebilirsiniz. Hassas sunucular için maxretry = 3 daha mantıklıdır.
Adım 6: Son Kontrol ve Test (5 dakika)
Son olarak, her şeyin doğru çalıştığından emin olmak için genel bir kontrol yapın:
- Başka bir terminalden şifreyle giriş yapmayı test edin — reddedilmelidir.
- SSH anahtarıyla girişi test edin — şifresiz çalışmalıdır.
- Açık portları tarayın:
sudo netstat -tulpn | grep LISTEN
Yalnızca 22, 80 ve 443 portları (ve aynı sunucudaysa MySQL gibi gerekli servislerin portları) dinlemede olmalıdır.
- Çekirdek güncellendiyse, sunucuyu yeniden başlatın ve anahtarla girişi tekrar test edin.
Adım 7: Daha Fazla Güvenlik için Ek Önlemler
Bunları daha sonra ekleyebilirsiniz, ancak vaktiniz varsa şimdi yapın:
- unattended-upgrades'ı etkinleştirin: Güvenlik güncellemelerinin otomatik kurulumu:
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades
- SSH portunu değiştirin: Gerçek bir güvenlik sağlamasa da, otomatik saldırı sayısını önemli ölçüde azaltır. 22. portu örneğin 2222 olarak değiştirin ve güvenlik duvarında da uygulayın.
- İzleme araçları kurun ve yapılandırın: E-posta ile günlük günlük özetleri için
logwatchgibi. - Güvenlik duvarında IPv6'yı devre dışı bırakın: IPv6 kullanmıyorsanız,
/etc/default/ufwiçindeIPV6=nodeğerini ayarlayın, böylece güvenlik duvarı kuralları IPv6'da da uygulanır.
Özet
Bu 60 dakikalık kontrol listesi, herhangi bir Linux sunucusunun güvenliğinin temelidir. Root girişini kaldırarak, SSH anahtarını etkinleştirerek, gereksiz portları kapatarak ve fail2ban kurarak saldırı yüzeyini önemli ölçüde azaltırsınız. Unutmayın ki sunucu güvenliği sürekli bir süreçtir: düzenli güncellemeler, günlük kontrolleri ve ayarların periyodik olarak gözden geçirilmesi ihmal edilmemelidir. Bu temel ayarları daha kolay yönetebileceğiniz bir altyapı arıyorsanız, ServerNet'in bulut sunucu hizmetleri iyi bir başlangıç noktası olabilir — ancak bu makaledeki ilkeleri her ortamda uygulamanız gerekir.
Son olarak önemli bir tavsiye: Bu ayarları önce bir test sunucusunda uygulayın, böylece iş akışına aşina olursunuz. Test ortamında yapılan hatalar, production ortamında yapılan hatalardan daha az maliyetlidir.