Sunucu Güvenliği İçin 10 Temel Adım
Linux sunucu güvenliğini sağlamak için 10 temel adım: SSH anahtar doğrulama, güvenlik duvarı, Fail2ban, otomatik güncellemeler, DDoS koruması ve daha fazlası. Komutlarla açıklamalı rehber.
İçindekiler
Sunucu Güvenliği İçin 10 Temel Adım
Yeni bir Linux sunucu kurduğunuzda, varsayılan yapılandırma güvenlik açısından optimize edilmemiştir. İnternete açık her sunucu, dakikalar içinde otomatik tarama araçlarının hedefi haline gelir. Bu rehber, sunucunuzu güvence altına almak için uygulamanız gereken 10 temel adımı komutlarla birlikte açıklar.
Bu adımları uygulamadan önce sunucunuza erişiminizi kaybetmemek için dikkatli olun. Özellikle SSH yapılandırmasını değiştirirken mevcut oturumunuzu açık tutun ve yeni bir terminal penceresiyle test edin.
Adım 1: SSH Anahtar Doğrulama ve Parola Girişini Devre Dışı Bırakma
Parola tabanlı SSH girişi, brute-force saldırılarına karşı savunmasızdır. SSH anahtar çifti kullanmak çok daha güvenlidir.
SSH Anahtar Çifti Oluşturma (Yerel Makinede)
# RSA 4096-bit anahtar oluştur
ssh-keygen -t ed25519 -C "sunucu-adi@rexe"
# Veya RSA kullanmak istiyorsanız
ssh-keygen -t rsa -b 4096 -C "sunucu-adi@rexe"
Public Key'i Sunucuya Kopyalama
# Yerel makineden çalıştırın
ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici@sunucu-ip
# Manuel yöntem
cat ~/.ssh/id_ed25519.pub | ssh kullanici@sunucu-ip \
"mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Parola Girişini Devre Dışı Bırakma
# /etc/ssh/sshd_config dosyasını düzenleyin
sudo nano /etc/ssh/sshd_config
# Şu satırları değiştirin:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
X11Forwarding no
# SSH servisini yeniden başlatın
sudo systemctl restart sshd
SSH portunu varsayılan 22'den farklı bir porta (örn. 2222) değiştirmek, otomatik tarama araçlarının büyük çoğunluğunu engeller. Port 2222 satırını sshd_config'e ekleyin.
Adım 2: Güvenlik Duvarı Yapılandırması (UFW)
UFW (Uncomplicated Firewall), iptables'ın kullanımı kolay bir arayüzüdür.
# UFW'yi kur
sudo apt install ufw -y
# Varsayılan politikaları ayarla
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH'ye izin ver (portunu değiştirdiyseniz güncelleyin)
sudo ufw allow 22/tcp
# sudo ufw allow 2222/tcp # Özel port kullanıyorsanız
# Web sunucusu portları
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# UFW'yi etkinleştir
sudo ufw enable
# Durumu kontrol et
sudo ufw status verbose
iptables ile Gelişmiş Kural Örneği
# Belirli bir IP'den gelen bağlantılara izin ver
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
# SYN flood koruması
sudo iptables -A INPUT -p tcp --syn -m limit \
--limit 1/s --limit-burst 3 -j ACCEPT
# Kuralları kaydet
sudo iptables-save > /etc/iptables/rules.v4
Adım 3: Fail2ban Kurulumu ve Yapılandırması
Fail2ban, başarısız giriş denemelerini izler ve belirli bir eşiği aşan IP adreslerini otomatik olarak engeller.
# Fail2ban'ı kur
sudo apt install fail2ban -y
# Yapılandırma dosyası oluştur
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600 # 1 saat ban
findtime = 600 # 10 dakika içinde
maxretry = 5 # 5 başarısız deneme
ignoreip = 127.0.0.1/8 ::1 # Yerel IP'leri yoksay
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 3
bantime = 86400 # 24 saat ban
[nginx-http-auth]
enabled = true
[nginx-limit-req]
enabled = true
# Fail2ban'ı başlat
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Durumu kontrol et
sudo fail2ban-client status
sudo fail2ban-client status sshd
# Engellenen IP'leri listele
sudo fail2ban-client status sshd | grep "Banned IP"
Adım 4: Otomatik Güvenlik Güncellemeleri
Güncel olmayan yazılımlar, en yaygın güvenlik açığı kaynaklarından biridir.
# unattended-upgrades kur
sudo apt install unattended-upgrades apt-listchanges -y
# Yapılandır
sudo dpkg-reconfigure -plow unattended-upgrades
# Yapılandırma dosyasını düzenle
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
// Güvenlik güncellemelerini otomatik uygula
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
"${distro_id}ESMApps:${distro_codename}-apps-security";
};
// Otomatik yeniden başlatma (gerekirse)
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";
// E-posta bildirimi
Unattended-Upgrade::Mail "admin@example.com";
Adım 5: Kullanılmayan Servisleri Devre Dışı Bırakma
Her çalışan servis potansiyel bir saldırı yüzeyidir.
# Çalışan servisleri listele
sudo systemctl list-units --type=service --state=running
# Açık portları kontrol et
sudo ss -tlnp
sudo netstat -tlnp
# Gereksiz servisleri durdur ve devre dışı bırak
sudo systemctl stop bluetooth
sudo systemctl disable bluetooth
sudo systemctl stop cups
sudo systemctl disable cups
# Gereksiz paketleri kaldır
sudo apt remove --purge telnet rsh-client rsh-redone-client
Adım 6: Güçlü Parolalar ve İki Faktörlü Kimlik Doğrulama
# Parola politikasını güçlendir
sudo apt install libpam-pwquality -y
sudo nano /etc/security/pwquality.conf
# Minimum 12 karakter
minlen = 12
# En az 1 büyük harf
ucredit = -1
# En az 1 küçük harf
lcredit = -1
# En az 1 rakam
dcredit = -1
# En az 1 özel karakter
ocredit = -1
Google Authenticator ile 2FA
# Google Authenticator PAM modülünü kur
sudo apt install libpam-google-authenticator -y
# Kullanıcı için yapılandır
google-authenticator
# PAM yapılandırmasını güncelle
sudo nano /etc/pam.d/sshd
# Şu satırı ekle:
# auth required pam_google_authenticator.so
# sshd_config'de ChallengeResponseAuthentication'ı etkinleştir
sudo nano /etc/ssh/sshd_config
# ChallengeResponseAuthentication yes
# AuthenticationMethods publickey,keyboard-interactive
sudo systemctl restart sshd
Adım 7: Düzenli Yedekleme
# rsync ile yerel yedekleme
rsync -avz --delete /var/www/ /backup/www/
# Uzak sunucuya yedekleme
rsync -avz -e ssh /var/www/ kullanici@yedek-sunucu:/backup/www/
# Otomatik yedekleme için cron job
crontab -e
# Her gece 02:00'de yedekle
0 2 * * * rsync -avz /var/www/ /backup/www/ >> /var/log/backup.log 2>&1
# Veritabanı yedekleme
mysqldump -u root -p --all-databases | gzip > /backup/db_$(date +%Y%m%d).sql.gz
3-2-1 yedekleme kuralını uygulayın: 3 kopya, 2 farklı medya, 1 farklı lokasyon.
Adım 8: Log İzleme
# Önemli log dosyaları
tail -f /var/log/auth.log # Kimlik doğrulama logları
tail -f /var/log/syslog # Sistem logları
tail -f /var/log/nginx/access.log # Nginx erişim logları
tail -f /var/log/nginx/error.log # Nginx hata logları
# Başarısız SSH girişlerini izle
grep "Failed password" /var/log/auth.log | tail -20
# logwatch ile günlük rapor
sudo apt install logwatch -y
sudo logwatch --output mail --mailto admin@example.com --detail high
# Logrotate yapılandırması
sudo nano /etc/logrotate.d/custom
/var/log/myapp/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
}
Adım 9: DDoS Koruması
# iptables ile temel DDoS koruması
# SYN flood koruması
sudo iptables -A INPUT -p tcp --syn -m limit \
--limit 1/s --limit-burst 3 -j ACCEPT
sudo iptables -A INPUT -p tcp --syn -j DROP
# ICMP flood koruması
sudo iptables -A INPUT -p icmp -m limit \
--limit 1/s --limit-burst 5 -j ACCEPT
sudo iptables -A INPUT -p icmp -j DROP
# Bağlantı sayısı sınırı (IP başına)
sudo iptables -A INPUT -p tcp --dport 80 -m connlimit \
--connlimit-above 50 -j REJECT
# Nginx rate limiting
# /etc/nginx/nginx.conf
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
# Location bloğunda:
limit_req zone=api burst=20 nodelay;
Yazılım tabanlı DDoS koruması, büyük ölçekli saldırılara karşı yetersiz kalabilir. REXE'nin Path.net altyapısı, ağ seviyesinde DDoS filtrelemesi sağlayarak sunucunuza ulaşmadan önce saldırı trafiğini temizler.
Adım 10: SSL/TLS Yapılandırması
# Let's Encrypt ile ücretsiz SSL sertifikası
sudo apt install certbot python3-certbot-nginx -y
# Sertifika al
sudo certbot --nginx -d example.com -d www.example.com
# Otomatik yenileme
sudo certbot renew --dry-run
# Cron ile otomatik yenileme
0 12 * * * /usr/bin/certbot renew --quiet
Nginx SSL Yapılandırması
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# Güvenli SSL ayarları
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
# HSTS
add_header Strict-Transport-Security "max-age=63072000" always;
# Güvenlik başlıkları
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
}
# HTTP'yi HTTPS'e yönlendir
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
Güvenlik Kontrol Listesi
- SSH anahtar doğrulama aktif, parola girişi kapalı
- Root SSH girişi devre dışı
- Güvenlik duvarı (UFW/iptables) yapılandırıldı
- Fail2ban kurulu ve çalışıyor
- Otomatik güvenlik güncellemeleri aktif
- Kullanılmayan servisler kapatıldı
- Güçlü parola politikası uygulandı
- 2FA etkinleştirildi
- Düzenli yedekleme planı oluşturuldu
- Log izleme yapılandırıldı
- DDoS koruması aktif
- SSL/TLS sertifikası kuruldu ve HTTPS zorunlu
- Güvenlik başlıkları yapılandırıldı
İlgili Makaleler
Malware ve Rootkit Tarama: rkhunter ve ClamAV Rehberi
Linux sunucunuzu malware ve rootkit'lere karşı koruyun. rkhunter ve ClamAV kurulumu, tarama yapılandırması, sonuç yorumlama ve zamanlanmış tarama rehberi.
Fail2Ban Yapılandırma: SSH Brute-Force Koruması Rehberi
Fail2Ban ile SSH brute-force saldırılarına karşı sunucunuzu koruyun. Kurulum, jail.local yapılandırması, Nginx/Apache jail'leri, IP beyaz listesi ve e-posta bildirimleri.
WireGuard VPN Sunucusu Kurulumu: Adım Adım Rehber
WireGuard VPN sunucusu kurun: anahtar üretimi, sunucu ve istemci yapılandırması, IP yönlendirme, firewall kuralları ve Windows/Linux/Android istemci kurulumu.